getRaw(true); $inheritBuff = $general->getAuxVar('inheritBuff'); $fixture = [ 'no' => $general->getID(), 'name' => $general->getName(), 'nation' => $general->getNationID(), 'city' => $general->getCityID(), 'turntime' => $general->getTurnTime(General::TURNTIME_FULL_MS), 'turntick' => $general->getTurnTick(), 'personal' => $raw['personal'] ?? null, 'special' => $raw['special'] ?? null, 'special2' => $raw['special2'] ?? null, 'crew' => $raw['crew'], 'crewtype' => $raw['crewtype'], 'atmos' => $raw['atmos'], 'train' => $raw['train'], 'intel' => $raw['intel'], 'intel_exp' => $raw['intel_exp'], 'book' => $raw['book'] ?? 'None', 'strength' => $raw['strength'], 'strength_exp' => $raw['strength_exp'], 'weapon' => $raw['weapon'] ?? 'None', 'injury' => $raw['injury'], 'leadership' => $raw['leadership'], 'leadership_exp' => $raw['leadership_exp'], 'horse' => $raw['horse'] ?? 'None', 'item' => $raw['item'] ?? 'None', 'explevel' => $raw['explevel'], 'experience' => $raw['experience'], 'dedication' => $raw['dedication'], 'officer_level' => $raw['officer_level'], 'officer_city' => $raw['officer_city'], 'gold' => $raw['gold'], 'rice' => $raw['rice'], 'dex1' => $raw['dex1'], 'dex2' => $raw['dex2'], 'dex3' => $raw['dex3'], 'dex4' => $raw['dex4'], 'dex5' => $raw['dex5'], 'defence_train' => $raw['defence_train'], 'recent_war' => $raw['recent_war'] ?? null, 'warnum' => $general->getRankVar(RankColumn::warnum, 0), 'killnum' => $general->getRankVar(RankColumn::killnum, 0), 'killcrew' => $general->getRankVar(RankColumn::killcrew, 0), ]; if ($inheritBuff !== null) { $fixture['inheritBuff'] = $inheritBuff; } return $fixture; } function comparisonBuildBattleFixture( string $seed, int $year, int $month, int $startYear, General $attacker, array $attackerNation, array $defenders, array $defenderCity, array $defenderNation, ): array { return [ 'action' => 'battle', 'seed' => $seed, 'repeatCnt' => 1, 'year' => $year, 'month' => $month, 'startYear' => $startYear, 'scenarioEffect' => GameConst::$scenarioEffect, 'attackerGeneral' => comparisonBuildBattleGeneralFixture($attacker), 'attackerCity' => $attacker->getRawCity(), 'attackerNation' => $attackerNation, // General::getGeneralList() can retain IDs as array keys. JSON would // then encode the collection as an object, while both simulators use // an ordered list. Keep the legacy iteration order but discard keys. 'defenderGenerals' => array_values(array_map( static fn(General $general): array => comparisonBuildBattleGeneralFixture($general), $defenders, )), 'defenderCity' => $defenderCity, 'defenderNation' => $defenderNation, ]; }