feat: extractBattleOrder 함수가 공격자를 받아서 처리할 수 있도록 변경

This commit is contained in:
2023-05-10 01:28:00 +09:00
parent ffdacc2cfb
commit 483641bcd5
2 changed files with 16 additions and 12 deletions
+11 -7
View File
@@ -293,9 +293,12 @@ if(!$v->validate()){
]); ]);
} }
$attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month);
if($action == 'reorder'){ 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 = []; $order = [];
@@ -310,8 +313,8 @@ if($action == 'reorder'){
]); ]);
} }
usort($defenderList, function(General $lhs, General $rhs){ usort($defenderList, function(General $lhs, General $rhs) use ($attackerGeneral){
return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); return -(extractBattleOrder($lhs, $attackerGeneral) <=> extractBattleOrder($rhs, $attackerGeneral));
}); });
$rawDefenderList = array_map(function(General $general){ $rawDefenderList = array_map(function(General $general){
@@ -347,9 +350,10 @@ function simulateBattle(
$warRng = new RandUtil(new LiteHashDRBG($warSeed)); $warRng = new RandUtil(new LiteHashDRBG($warSeed));
$attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month);
$attacker = new WarUnitGeneral( $attacker = new WarUnitGeneral(
$warRng, $warRng,
new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month), $attackerGeneral,
$rawAttackerNation, $rawAttackerNation,
true true
); );
@@ -364,7 +368,7 @@ function simulateBattle(
$defenderRice = 0; $defenderRice = 0;
$getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) $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){ if($prevDefender !== null){
$prevDefender->getLogger()->rollback(); $prevDefender->getLogger()->rollback();
$battleResult[] = $prevDefender; $battleResult[] = $prevDefender;
@@ -382,7 +386,7 @@ function simulateBattle(
} }
$defenderObj = new General($iterDefender->current(), extractRankVar($iterDefender->current()), $rawDefenderCity, $rawDefenderNation, $year, $month); $defenderObj = new General($iterDefender->current(), extractRankVar($iterDefender->current()), $rawDefenderCity, $rawDefenderNation, $year, $month);
if(extractBattleOrder($defenderObj) <= 0){ if(extractBattleOrder($defenderObj, $attackerGeneral) <= 0){
return null; return null;
} }
+5 -5
View File
@@ -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')); $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); $defenderList = General::createGeneralObjListFromDB($defenderIDList, null, 2);
usort($defenderList, function (General $lhs, General $rhs) { usort($defenderList, function (General $lhs, General $rhs) use ($attackerGeneral) {
return - (extractBattleOrder($lhs) <=> extractBattleOrder($rhs)); return - (extractBattleOrder($lhs, $attackerGeneral) <=> extractBattleOrder($rhs, $attackerGeneral));
}); });
$iterDefender = new \ArrayIterator($defenderList); $iterDefender = new \ArrayIterator($defenderList);
$iterDefender->rewind(); $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) { if ($prevDefender !== null) {
$prevDefender->applyDB($db); $prevDefender->applyDB($db);
} }
@@ -61,7 +61,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
$nextDefender = $iterDefender->current(); $nextDefender = $iterDefender->current();
$nextDefender->setRawCity($rawDefenderCity); $nextDefender->setRawCity($rawDefenderCity);
if (extractBattleOrder($nextDefender) <= 0) { if (extractBattleOrder($nextDefender, $attackerGeneral) <= 0) {
return null; return null;
} }
@@ -180,7 +180,7 @@ function processWar(string $warSeed, General $attackerGeneral, array $rawAttacke
], $attacker->getGeneral(), $city->getRaw()); ], $attacker->getGeneral(), $city->getRaw());
} }
function extractBattleOrder(General $general) function extractBattleOrder(General $general, General $attackerGeneral)
{ {
if ($general->getVar('crew') == 0) { if ($general->getVar('crew') == 0) {
return 0; return 0;