getAll(true); $result = []; $includeNation = ($request['includeNation'] ?? false) === true; foreach ($generalIds as $generalId) { if (!is_int($generalId) || $generalId < 1) { throw new \InvalidArgumentException('generalIds must contain positive integers'); } $general = General::createObjFromDB($generalId); if ($general->getNPCType() < 2) { throw new \InvalidArgumentException("general {$generalId} is not an NPC"); } $ai = new GeneralAI($general); $nationDecision = null; if ($includeNation && $general->getNationID() !== 0 && $general->getVar('officer_level') >= 5) { $nationStorage = KVStorage::getStorage($db, $general->getNationID(), 'nation_env'); $lastNationTurn = LastTurn::fromRaw($nationStorage->getValue("turn_last_{$general->getVar('officer_level')}")); $reservedNation = buildNationCommandClass(null, $general, $env, $lastNationTurn); $selectedNation = $ai->chooseNationTurn($reservedNation); $nationDecision = [ 'action' => $selectedNation->getRawClassName(), 'args' => $selectedNation->getArg(), 'reason' => $selectedNation->reason, ]; } $reserved = $general->getReservedTurn(0, $env); $selected = $ai->chooseGeneralTurn($reserved); $result[] = [ 'generalId' => $generalId, 'name' => $general->getName(), 'action' => $selected->getRawClassName(), 'brief' => $selected->getBrief(), 'args' => $selected->getArg(), 'reason' => $selected->reason, 'nationDecision' => $nationDecision, ]; } echo json_encode([ 'year' => (int) $env['year'], 'month' => (int) $env['month'], 'decisions' => $result, ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR);