fix: 성벽선제 동작 개시

This commit is contained in:
2023-05-11 02:15:27 +09:00
parent fd6405ea97
commit 4cd273b89f
3 changed files with 31 additions and 13 deletions
+5 -4
View File
@@ -337,10 +337,6 @@ if ($action == 'reorder') {
]); ]);
} }
usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) {
return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker));
});
$rawDefenderList = []; $rawDefenderList = [];
foreach($defenderList as $unit){ foreach($defenderList as $unit){
if(extractBattleOrder($unit, $attacker) <= 0){ if(extractBattleOrder($unit, $attacker) <= 0){
@@ -413,6 +409,9 @@ function simulateBattle(
$defenderList[] = $city; $defenderList[] = $city;
} }
usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) {
return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker));
});
$iterDefender = new \ArrayIterator($defenderList); $iterDefender = new \ArrayIterator($defenderList);
$iterDefender->rewind(); $iterDefender->rewind();
@@ -444,12 +443,14 @@ function simulateBattle(
$defender = $iterDefender->current(); $defender = $iterDefender->current();
if (extractBattleOrder($defender, $attacker) <= 0) { if (extractBattleOrder($defender, $attacker) <= 0) {
logError('noDefence', TVarDumper::dump($defender, 2), '', []);
return null; return null;
} }
$defenderRice += $defender->getVar('rice'); $defenderRice += $defender->getVar('rice');
$iterDefender->next(); $iterDefender->next();
logError('nextDefender', TVarDumper::dump($defender, 2), '', []);
return $defender; return $defender;
}; };
+8 -1
View File
@@ -424,6 +424,7 @@ function processWar_NG(
$attacker->logBattleResult(); $attacker->logBattleResult();
$defender->logBattleResult(); $defender->logBattleResult();
if (!($defender instanceof WarUnitCity) || $defender->isSiege()){
$attacker->addWin(); $attacker->addWin();
$defender->addLose(); $defender->addLose();
@@ -435,10 +436,16 @@ function processWar_NG(
$conquerCity = true; $conquerCity = true;
break; break;
} }
}
$josaYi = JosaUtil::pick($defender->getCrewTypeName(), '이'); $josaYi = JosaUtil::pick($defender->getCrewTypeName(), '이');
if ($noRice) { if ($defender instanceof WarUnitCity && !$defender->isSiege()){
//실제 공성을 위해 다시 초기화
$defender->setOppose(null);
}
else if ($noRice) {
$logger->pushGlobalActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다."); $logger->pushGlobalActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.");
$attacker->getLogger()->pushGeneralActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.", ActionLogger::PLAIN); $attacker->getLogger()->pushGeneralActionLog("<Y>{$defender->getName()}</>의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.", ActionLogger::PLAIN);
$defender->getLogger()->pushGeneralActionLog("군량 부족으로 패퇴합니다.", ActionLogger::PLAIN); $defender->getLogger()->pushGeneralActionLog("군량 부족으로 패퇴합니다.", ActionLogger::PLAIN);
+10
View File
@@ -82,6 +82,10 @@ class WarUnitCity extends WarUnit{
$this->onSiege = true; $this->onSiege = true;
} }
function isSiege(): bool{
return $this->onSiege;
}
function getDex(GameUnitDetail $crewType){ function getDex(GameUnitDetail $crewType){
return ($this->cityTrainAtmos - 60) * 7200; return ($this->cityTrainAtmos - 60) * 7200;
} }
@@ -99,6 +103,12 @@ class WarUnitCity extends WarUnit{
function continueWar(&$noRice):bool{ function continueWar(&$noRice):bool{
//전투가 가능하면 true //전투가 가능하면 true
$noRice = false; $noRice = false;
//본 공성이 아닌 경우에는 한대만 맞아줌
if(!$this->onSiege){
return false;
}
if($this->getHP() <= 0){ if($this->getHP() <= 0){
return false; return false;
} }