diff --git a/hwe/a_bestGeneral.php b/hwe/a_bestGeneral.php index e349de30..2e77b1a7 100644 --- a/hwe/a_bestGeneral.php +++ b/hwe/a_bestGeneral.php @@ -186,6 +186,9 @@ foreach($db->query( } foreach($db->queryAllLists('SELECT general_id, `type`, `value` FROM rank_data') as [$generalID, $typeKey, $value]){ + if(!key_exists($generalID, $generals)){ + continue; + } $generals[$generalID][$typeKey] = $value; } diff --git a/hwe/c_die_immediately.php b/hwe/c_die_immediately.php index 94980b83..f656a8c6 100644 --- a/hwe/c_die_immediately.php +++ b/hwe/c_die_immediately.php @@ -36,14 +36,14 @@ if(!$availableDieImmediately){ } -if(!$db->query('DELETE FROM general WHERE owner=%i AND npc=0', $userID)){ + +$generalObj = General::createGeneralObjFromDB($general['no']); +if($generalObj instanceof DummyGeneral){ trigger_error("올바르지 않은 삭제 프로세스 $userID", E_USER_WARNING); } -$generalName = $general['name']; +$generalName = $generalObj->getName(); $josaYi = JosaUtil::pick($generalName, '이'); -pushGeneralPublicRecord(["●{$gameStor->month}월:{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"], $gameStor->year, $gameStor->month); - - +$generalObj->kill($db, true, "{$generalName}{$josaYi} 이 홀연히 모습을 감추었습니다"); $session->logoutGame(); header('location:..'); \ No newline at end of file diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index 794cc64d..81224fb7 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -509,7 +509,7 @@ class General implements iAction{ /** * @param \MeekroDB $db */ - function kill($db){ + function kill($db, bool $sendDyingMessage=true, ?string $dyingMessage=null){ $generalID = $this->getID(); $logger = $this->getLogger(); @@ -533,11 +533,22 @@ class General implements iAction{ $db->delete('troop', 'troop_leader=%i', $troopLeaderID); } - $dyingMessage = new TextDecoration\DyingMessage($this); - $logger->pushGlobalActionLog($dyingMessage->getText()); + + if($sendDyingMessage){ + if($dyingMessage){ + $logger->pushGlobalActionLog($dyingMessage); + } + else{ + $dyingMessageObj = new TextDecoration\DyingMessage($this); + $logger->pushGlobalActionLog($dyingMessageObj->getText()); + } + $logger->flush(); + } + $db->delete('general', 'no=%i', $generalID); $db->delete('general_turn', 'general_id=%i', $generalID); + $db->delete('rank_data', 'general_id=%i', $generalID); $this->updatedVar = []; $db->update('nation', [ diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index e3537ce7..21391d34 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -2932,6 +2932,7 @@ class GeneralAI } if(!($reservedCommand instanceof Command\Nation\휴식) && $reservedCommand->isRunnable()){ + $reservedCommand->reason = 'reserved'; return $reservedCommand; } @@ -2945,10 +2946,13 @@ class GeneralAI /** @var ?NationCommand */ $result = $this->{'do'.$actionName}($lastTurn); if($result !== null){ + $reservedCommand->reason = 'do'.$actionName; return $result; } } - return buildNationCommandClass(null, $this->general, $this->env, $this->general->getLastTurn()); + $cmd = buildNationCommandClass(null, $this->general, $this->env, $this->general->getLastTurn()); + $cmd->reason = 'neutral'; + return $cmd; } public function chooseInstantNationTurn(NationCommand $reservedCommand): ?NationCommand{ @@ -3092,7 +3096,9 @@ class GeneralAI return $this->devRate; } - $devRate = []; + $devRate = [ + 'all'=>0, + ]; foreach($this->supplyCities as $city){ @@ -3100,6 +3106,9 @@ class GeneralAI if($develKey == 'trust'){ continue; } + if(!key_exists($develKey, $devRate)){ + $devRate[$develKey] = 0; + } $devRate[$develKey] += $devScore; $devRate['all'] += $devScore; } diff --git a/hwe/sammo/TurnExecutionHelper.php b/hwe/sammo/TurnExecutionHelper.php index d722c466..9e570074 100644 --- a/hwe/sammo/TurnExecutionHelper.php +++ b/hwe/sammo/TurnExecutionHelper.php @@ -266,6 +266,7 @@ WHERE turntime < %s ORDER BY turntime ASC, `no` ASC', $ai = new GeneralAI($turnObj->getGeneral()); if($hasNationTurn){ $nationCommandObj = $ai->chooseNationTurn($nationCommandObj); + LogText("NationTurn", "General, {$general->getName()}, {$general->getID()}, {$general->getStaticNation()['name']}, {$nationCommandObj->getBrief()}, {$nationCommandObj->reason}, "); } $generalCommandObj = $ai->chooseGeneralTurn($generalCommandObj); // npc AI 처리