feat: extractBattleOrder 함수가 공격자를 받아서 처리할 수 있도록 변경
This commit is contained in:
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user