From 483641bcd56248a0a99524267b530e5e2726e69c Mon Sep 17 00:00:00 2001 From: Hide_D Date: Wed, 10 May 2023 01:28:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20extractBattleOrder=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=EA=B0=80=20=EA=B3=B5=EA=B2=A9=EC=9E=90=EB=A5=BC=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=84=9C=20=EC=B2=98=EB=A6=AC=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/j_simulate_battle.php | 18 +++++++++++------- hwe/process_war.php | 10 +++++----- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index c66c0e6b..768eb47a 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -293,9 +293,12 @@ if(!$v->validate()){ ]); } +$attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month); + if($action == 'reorder'){ - usort($defenderList, function(General $lhs, General $rhs){ - return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); + + usort($defenderList, function(General $lhs, General $rhs) use ($attackerGeneral){ + return -(extractBattleOrder($lhs, $attackerGeneral) <=> extractBattleOrder($rhs, $attackerGeneral)); }); $order = []; @@ -310,8 +313,8 @@ if($action == 'reorder'){ ]); } -usort($defenderList, function(General $lhs, General $rhs){ - return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); +usort($defenderList, function(General $lhs, General $rhs) use ($attackerGeneral){ + return -(extractBattleOrder($lhs, $attackerGeneral) <=> extractBattleOrder($rhs, $attackerGeneral)); }); $rawDefenderList = array_map(function(General $general){ @@ -347,9 +350,10 @@ function simulateBattle( $warRng = new RandUtil(new LiteHashDRBG($warSeed)); + $attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month); $attacker = new WarUnitGeneral( $warRng, - new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month), + $attackerGeneral, $rawAttackerNation, true ); @@ -364,7 +368,7 @@ function simulateBattle( $defenderRice = 0; $getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) - use ($warRng, $iterDefender, $rawDefenderCity, $rawDefenderNation, $year, $month, &$battleResult, &$defenderRice) { + use ($warRng, $iterDefender, $rawDefenderCity, $rawDefenderNation, $year, $month, &$battleResult, &$defenderRice, $attackerGeneral) { if($prevDefender !== null){ $prevDefender->getLogger()->rollback(); $battleResult[] = $prevDefender; @@ -382,7 +386,7 @@ function simulateBattle( } $defenderObj = new General($iterDefender->current(), extractRankVar($iterDefender->current()), $rawDefenderCity, $rawDefenderNation, $year, $month); - if(extractBattleOrder($defenderObj) <= 0){ + if(extractBattleOrder($defenderObj, $attackerGeneral) <= 0){ return null; } diff --git a/hwe/process_war.php b/hwe/process_war.php index 51139d44..2203f97b 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -39,14 +39,14 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke $defenderIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city')); $defenderList = General::createGeneralObjListFromDB($defenderIDList, null, 2); - usort($defenderList, function (General $lhs, General $rhs) { - return - (extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); + usort($defenderList, function (General $lhs, General $rhs) use ($attackerGeneral) { + return - (extractBattleOrder($lhs, $attackerGeneral) <=> extractBattleOrder($rhs, $attackerGeneral)); }); $iterDefender = new \ArrayIterator($defenderList); $iterDefender->rewind(); - $getNextDefender = function (?WarUnit $prevDefender, bool $reqNext) use ($rng, $iterDefender, $rawDefenderNation, $rawDefenderCity, $db) { + $getNextDefender = function (?WarUnit $prevDefender, bool $reqNext) use ($rng, $iterDefender, $rawDefenderNation, $rawDefenderCity, $db, $attackerGeneral) { if ($prevDefender !== null) { $prevDefender->applyDB($db); } @@ -61,7 +61,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke $nextDefender = $iterDefender->current(); $nextDefender->setRawCity($rawDefenderCity); - if (extractBattleOrder($nextDefender) <= 0) { + if (extractBattleOrder($nextDefender, $attackerGeneral) <= 0) { return null; } @@ -180,7 +180,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke ], $attacker->getGeneral(), $city->getRaw()); } -function extractBattleOrder(General $general) +function extractBattleOrder(General $general, General $attackerGeneral) { if ($general->getVar('crew') == 0) { return 0;