diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index 1e4ea6a4..dab0ab32 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -337,10 +337,6 @@ if ($action == 'reorder') { ]); } -usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) { - return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker)); -}); - $rawDefenderList = []; foreach($defenderList as $unit){ if(extractBattleOrder($unit, $attacker) <= 0){ @@ -413,6 +409,9 @@ function simulateBattle( $defenderList[] = $city; } + usort($defenderList, function (WarUnit $lhs, WarUnit $rhs) use ($attacker) { + return - (extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker)); + }); $iterDefender = new \ArrayIterator($defenderList); $iterDefender->rewind(); @@ -444,12 +443,14 @@ function simulateBattle( $defender = $iterDefender->current(); if (extractBattleOrder($defender, $attacker) <= 0) { + logError('noDefence', TVarDumper::dump($defender, 2), '', []); return null; } $defenderRice += $defender->getVar('rice'); $iterDefender->next(); + logError('nextDefender', TVarDumper::dump($defender, 2), '', []); return $defender; }; diff --git a/hwe/process_war.php b/hwe/process_war.php index 8453c92a..35ceb8a1 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -424,21 +424,28 @@ function processWar_NG( $attacker->logBattleResult(); $defender->logBattleResult(); - $attacker->addWin(); - $defender->addLose(); + if (!($defender instanceof WarUnitCity) || $defender->isSiege()){ + $attacker->addWin(); + $defender->addLose(); - $attacker->tryWound(); - $defender->tryWound(); + $attacker->tryWound(); + $defender->tryWound(); - if ($defender === $city) { - $attacker->addLevelExp(1000); - $conquerCity = true; - break; + if ($defender === $city) { + $attacker->addLevelExp(1000); + $conquerCity = true; + break; + } } + $josaYi = JosaUtil::pick($defender->getCrewTypeName(), '이'); - if ($noRice) { + if ($defender instanceof WarUnitCity && !$defender->isSiege()){ + //실제 공성을 위해 다시 초기화 + $defender->setOppose(null); + } + else if ($noRice) { $logger->pushGlobalActionLog("{$defender->getName()}의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다."); $attacker->getLogger()->pushGeneralActionLog("{$defender->getName()}의 {$defender->getCrewTypeName()}{$josaYi} 패퇴했습니다.", ActionLogger::PLAIN); $defender->getLogger()->pushGeneralActionLog("군량 부족으로 패퇴합니다.", ActionLogger::PLAIN); diff --git a/hwe/sammo/WarUnitCity.php b/hwe/sammo/WarUnitCity.php index 49369e14..0cdf6905 100644 --- a/hwe/sammo/WarUnitCity.php +++ b/hwe/sammo/WarUnitCity.php @@ -82,6 +82,10 @@ class WarUnitCity extends WarUnit{ $this->onSiege = true; } + function isSiege(): bool{ + return $this->onSiege; + } + function getDex(GameUnitDetail $crewType){ return ($this->cityTrainAtmos - 60) * 7200; } @@ -99,6 +103,12 @@ class WarUnitCity extends WarUnit{ function continueWar(&$noRice):bool{ //전투가 가능하면 true $noRice = false; + + //본 공성이 아닌 경우에는 한대만 맞아줌 + if(!$this->onSiege){ + return false; + } + if($this->getHP() <= 0){ return false; }