Trace general command cooldown state
This commit is contained in:
@@ -133,6 +133,24 @@ function comparisonApplyTurnFixtureSetup(mixed $setup): void
|
||||
throw new \InvalidArgumentException("setup.{$collection} must be an array");
|
||||
}
|
||||
}
|
||||
$generalCooldowns = comparisonGeneralCooldownSelectors(
|
||||
$setup['generalCooldowns'] ?? [],
|
||||
'setup.generalCooldowns',
|
||||
);
|
||||
if ($generalCooldowns !== []) {
|
||||
$nextExecuteStorage = KVStorage::getStorage($db, 'next_execute');
|
||||
foreach ($setup['generalCooldowns'] as $entry) {
|
||||
$nextAvailableTurn = $entry['nextAvailableTurn'] ?? null;
|
||||
if (!is_int($nextAvailableTurn) || $nextAvailableTurn < 0) {
|
||||
throw new \InvalidArgumentException(
|
||||
'setup.generalCooldowns entries require a non-negative nextAvailableTurn',
|
||||
);
|
||||
}
|
||||
$key = "next_execute_{$entry['generalId']}_{$entry['actionName']}";
|
||||
$nextExecuteStorage->setValue($key, $nextAvailableTurn);
|
||||
}
|
||||
$nextExecuteStorage->resetCache();
|
||||
}
|
||||
if (isset($setup['randomFoundingCandidateCityIds'])) {
|
||||
$candidateCityIds = comparisonIntegerList(
|
||||
$setup['randomFoundingCandidateCityIds'],
|
||||
@@ -476,6 +494,7 @@ function comparisonRunTurnCommand(array $request): array
|
||||
$previousLastTurn = $general->getLastTurn();
|
||||
$previousLastTurnRaw = $previousLastTurn->toRaw();
|
||||
$command = buildGeneralCommandClass($action, $general, $environment, $args);
|
||||
$commandFullConditionMet = $command->hasFullConditionMet();
|
||||
$resultTurn = $turn->processCommand($rng, $command, false);
|
||||
} else {
|
||||
$nationStor = KVStorage::getStorage($db, $general->getNationID(), 'nation_env');
|
||||
@@ -483,6 +502,7 @@ function comparisonRunTurnCommand(array $request): array
|
||||
$previousLastTurn = LastTurn::fromRaw($nationStor->getValue($lastNationTurnKey));
|
||||
$previousLastTurnRaw = $previousLastTurn->toRaw();
|
||||
$command = buildNationCommandClass($action, $general, $environment, $previousLastTurn, $args);
|
||||
$commandFullConditionMet = $command->hasFullConditionMet();
|
||||
$resultTurn = $turn->processNationCommand($rng, $command);
|
||||
$nationStor->setValue($lastNationTurnKey, $resultTurn->toRaw());
|
||||
}
|
||||
@@ -509,7 +529,7 @@ function comparisonRunTurnCommand(array $request): array
|
||||
$general->getNationID(),
|
||||
) === $args['nationName']
|
||||
);
|
||||
$completed = (
|
||||
$completedByState = (
|
||||
$action === 'che_접경귀환'
|
||||
&& $tracingRng->calls !== []
|
||||
) || $acceptScoutCompleted || $foundNationCompleted || (($resultTurnRaw['command'] ?? null) === $command->getName()
|
||||
@@ -521,6 +541,7 @@ function comparisonRunTurnCommand(array $request): array
|
||||
&& (int)($previousLastTurnRaw['term'] ?? 0) === $preReqTurn
|
||||
)
|
||||
));
|
||||
$completed = $commandFullConditionMet && $completedByState;
|
||||
|
||||
return [
|
||||
'schemaVersion' => 1,
|
||||
|
||||
Reference in New Issue
Block a user