91 lines
2.9 KiB
PHP
91 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use sammo\DB;
|
|
use sammo\Event\Action\OpenNationBetting;
|
|
use sammo\Json;
|
|
use sammo\KVStorage;
|
|
|
|
if (PHP_SAPI !== 'cli') {
|
|
http_response_code(404);
|
|
exit(1);
|
|
}
|
|
|
|
chdir(dirname(__DIR__));
|
|
require 'lib.php';
|
|
require 'func.php';
|
|
|
|
$db = DB::db();
|
|
$game = KVStorage::getStorage($db, 'game_env')->getAll();
|
|
$contract = [
|
|
'scenario' => (int)($game['scenario'] ?? 0),
|
|
'year' => (int)($game['year'] ?? 0),
|
|
'month' => (int)($game['month'] ?? 0),
|
|
'turnterm' => (int)($game['turnterm'] ?? 0),
|
|
'npcmode' => (int)($game['npcmode'] ?? 0),
|
|
];
|
|
if ($contract !== ['scenario' => 2601, 'year' => 186, 'month' => 1, 'turnterm' => 10, 'npcmode' => 2]) {
|
|
throw new RuntimeException('Ref GUI parity conditional fixture requires scenario2601 at 186-01.');
|
|
}
|
|
|
|
$nationBettingCount = (int)$db->queryFirstField(
|
|
"SELECT COUNT(*) FROM storage
|
|
WHERE namespace = 'betting'
|
|
AND JSON_UNQUOTE(JSON_EXTRACT(value, '$.type')) = 'bettingNation'"
|
|
);
|
|
if ($nationBettingCount === 0) {
|
|
(new OpenNationBetting(4, 5000))->run($game);
|
|
}
|
|
|
|
$uniqueCount = (int)$db->queryFirstField(
|
|
"SELECT COUNT(*) FROM ng_auction WHERE type = 'uniqueItem' AND finished = 0"
|
|
);
|
|
if ($uniqueCount === 0) {
|
|
$generalID = (int)$db->queryFirstField('SELECT no FROM general WHERE npc <= 2 ORDER BY no LIMIT 1');
|
|
if ($generalID <= 0) {
|
|
throw new RuntimeException('Ref GUI parity fixture requires at least one general.');
|
|
}
|
|
$openDate = new DateTimeImmutable('now');
|
|
$closeDate = $openDate->modify('+1 day');
|
|
$detail = [
|
|
'title' => '손자병법 경매',
|
|
'hostName' => '청룡',
|
|
'amount' => 1,
|
|
'isReverse' => false,
|
|
'startBidAmount' => 1000,
|
|
'finishBidAmount' => null,
|
|
'remainCloseDateExtensionCnt' => 1,
|
|
'availableLatestBidCloseDate' => $openDate->modify('+2 days')->format('Y-m-d H:i:s'),
|
|
];
|
|
$db->insert('ng_auction', [
|
|
'type' => 'uniqueItem',
|
|
'finished' => 0,
|
|
'target' => 'che_서적_15_손자병법',
|
|
'host_general_id' => $generalID,
|
|
'req_resource' => 'inheritPoint',
|
|
'open_date' => $openDate->format('Y-m-d H:i:s'),
|
|
'close_date' => $closeDate->format('Y-m-d H:i:s'),
|
|
'detail' => Json::encode($detail),
|
|
]);
|
|
$auctionID = (int)$db->insertId();
|
|
$db->insert('ng_auction_bid', [
|
|
'auction_id' => $auctionID,
|
|
'owner' => null,
|
|
'general_id' => $generalID,
|
|
'amount' => 1000,
|
|
'date' => $openDate->format('Y-m-d H:i:s'),
|
|
'aux' => Json::encode(['generalName' => '청룡']),
|
|
]);
|
|
}
|
|
|
|
printf(
|
|
"Ref conditional capture fixtures: nation_betting=%d unique_auction=%d\n",
|
|
(int)$db->queryFirstField(
|
|
"SELECT COUNT(*) FROM storage
|
|
WHERE namespace = 'betting'
|
|
AND JSON_UNQUOTE(JSON_EXTRACT(value, '$.type')) = 'bettingNation'"
|
|
),
|
|
(int)$db->queryFirstField("SELECT COUNT(*) FROM ng_auction WHERE type = 'uniqueItem'")
|
|
);
|