compare: trace scenario 911 troop join event
This commit is contained in:
@@ -517,8 +517,10 @@ function comparisonRunTurnCommand(array $request): array
|
|||||||
throw new \RuntimeException('TURN_DIFFERENTIAL_ENABLED=1 is required');
|
throw new \RuntimeException('TURN_DIFFERENTIAL_ENABLED=1 is required');
|
||||||
}
|
}
|
||||||
$kind = $request['kind'] ?? null;
|
$kind = $request['kind'] ?? null;
|
||||||
if (!in_array($kind, ['general', 'nation', 'instantNation'], true)) {
|
if (!in_array($kind, ['general', 'nation', 'instantNation', 'troopJoinStaticEvent'], true)) {
|
||||||
throw new \InvalidArgumentException('kind must be general, nation, or instantNation');
|
throw new \InvalidArgumentException(
|
||||||
|
'kind must be general, nation, instantNation, or troopJoinStaticEvent',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
$actorGeneralId = $request['actorGeneralId'] ?? null;
|
$actorGeneralId = $request['actorGeneralId'] ?? null;
|
||||||
$action = $request['action'] ?? null;
|
$action = $request['action'] ?? null;
|
||||||
@@ -557,6 +559,62 @@ function comparisonRunTurnCommand(array $request): array
|
|||||||
$gameStorage = KVStorage::getStorage($db, 'game_env');
|
$gameStorage = KVStorage::getStorage($db, 'game_env');
|
||||||
$gameStorage->resetCache();
|
$gameStorage->resetCache();
|
||||||
$environment = $gameStorage->getAll();
|
$environment = $gameStorage->getAll();
|
||||||
|
if ($kind === 'troopJoinStaticEvent') {
|
||||||
|
if ($action !== \sammo\API\Troop\JoinTroop::class) {
|
||||||
|
throw new \InvalidArgumentException('troopJoinStaticEvent requires the JoinTroop API action');
|
||||||
|
}
|
||||||
|
$troopId = is_array($args) ? ($args['troopID'] ?? null) : null;
|
||||||
|
if (!is_int($troopId) || $troopId < 1) {
|
||||||
|
throw new \InvalidArgumentException('troopJoinStaticEvent requires a positive integer troopID');
|
||||||
|
}
|
||||||
|
$general = GeneralLite::createObjFromDB(
|
||||||
|
$actorGeneralId,
|
||||||
|
['troop'],
|
||||||
|
Enums\GeneralLiteQueryMode::Lite,
|
||||||
|
);
|
||||||
|
if ($general === null) {
|
||||||
|
throw new \RuntimeException('장수 정보를 불러올 수 없습니다.');
|
||||||
|
}
|
||||||
|
if ($general->getVar('troop') != 0) {
|
||||||
|
throw new \RuntimeException('이미 부대에 소속되어 있습니다.');
|
||||||
|
}
|
||||||
|
$nationId = $general->getNationID();
|
||||||
|
if ($nationId == 0) {
|
||||||
|
throw new \RuntimeException('국가에 소속되어 있지 않습니다.');
|
||||||
|
}
|
||||||
|
$troopExists = $db->queryFirstField(
|
||||||
|
'SELECT `troop_leader` FROM `troop` WHERE `troop_leader` = %i AND `nation` = %i',
|
||||||
|
$troopId,
|
||||||
|
$nationId,
|
||||||
|
);
|
||||||
|
if (!$troopExists) {
|
||||||
|
throw new \RuntimeException('부대가 올바르지 않습니다.');
|
||||||
|
}
|
||||||
|
|
||||||
|
GameConst::$staticEventHandlers = [
|
||||||
|
\sammo\API\Troop\JoinTroop::class => ['event_부대탑승즉시이동'],
|
||||||
|
];
|
||||||
|
$general->setVar('troop', $troopId);
|
||||||
|
StaticEventHandler::handleEvent($general, null, \sammo\API\Troop\JoinTroop::class, [], $args);
|
||||||
|
$general->applyDB($db);
|
||||||
|
$after = comparisonTurnStateSnapshot($snapshotRequest);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'schemaVersion' => 1,
|
||||||
|
'engine' => 'ref',
|
||||||
|
'execution' => [
|
||||||
|
'kind' => $kind,
|
||||||
|
'actorGeneralId' => $actorGeneralId,
|
||||||
|
'action' => $action,
|
||||||
|
'args' => $args,
|
||||||
|
'seedDomain' => 'none',
|
||||||
|
'outcome' => ['completed' => true],
|
||||||
|
],
|
||||||
|
'before' => $before,
|
||||||
|
'after' => $after,
|
||||||
|
'rng' => [],
|
||||||
|
];
|
||||||
|
}
|
||||||
$general = General::createObjFromDB($actorGeneralId);
|
$general = General::createObjFromDB($actorGeneralId);
|
||||||
if ($kind === 'instantNation') {
|
if ($kind === 'instantNation') {
|
||||||
$command = buildNationCommandClass($action, $general, $environment, new LastTurn(), $args);
|
$command = buildNationCommandClass($action, $general, $environment, new LastTurn(), $args);
|
||||||
|
|||||||
Reference in New Issue
Block a user