fix: 수뇌가 소재 도시에 도시 관련 사령턴(백동 등) 실행시 발생하는 버그 수정

- 백동 + 성수 등등
This commit is contained in:
2021-09-11 19:35:30 +09:00
parent e816f7126d
commit d7a7751480
+39 -31
View File
@@ -1,7 +1,9 @@
<?php <?php
namespace sammo; namespace sammo;
use \Symfony\Component\Lock; use \Symfony\Component\Lock;
class TurnExecutionHelper class TurnExecutionHelper
{ {
/** @var General*/ /** @var General*/
@@ -17,16 +19,19 @@ class TurnExecutionHelper
$this->applyDB(); $this->applyDB();
} }
public function applyDB(){ public function applyDB()
{
$db = DB::db(); $db = DB::db();
$this->generalObj->applyDB($db); $this->generalObj->applyDB($db);
} }
public function getGeneral():General{ public function getGeneral(): General
{
return $this->generalObj; return $this->generalObj;
} }
public function preprocessCommand(array $env){ public function preprocessCommand(array $env)
{
$general = $this->getGeneral(); $general = $this->getGeneral();
$caller = $general->getPreTurnExecuteTriggerList($general); $caller = $general->getPreTurnExecuteTriggerList($general);
$caller->merge(new GeneralTriggerCaller( $caller->merge(new GeneralTriggerCaller(
@@ -37,7 +42,8 @@ class TurnExecutionHelper
$caller->fire($env); $caller->fire($env);
} }
public function processBlocked():bool{ public function processBlocked(): bool
{
$general = $this->getGeneral(); $general = $this->getGeneral();
$blocked = $general->getVar('block'); $blocked = $general->getVar('block');
@@ -50,12 +56,10 @@ class TurnExecutionHelper
if ($blocked == 2) { if ($blocked == 2) {
$general->increaseVarWithLimit('killturn', -1, 0); $general->increaseVarWithLimit('killturn', -1, 0);
$logger->pushGeneralActionLog("현재 멀티, 또는 비매너로 인한<R>블럭</> 대상자입니다. <1>$date</>"); $logger->pushGeneralActionLog("현재 멀티, 또는 비매너로 인한<R>블럭</> 대상자입니다. <1>$date</>");
} } else if ($blocked == 3) {
else if($blocked == 3){
$general->increaseVarWithLimit('killturn', -1, 0); $general->increaseVarWithLimit('killturn', -1, 0);
$logger->pushGeneralActionLog("현재 악성유저로 분류되어 <R>블럭</> 대상자입니다. <1>$date</>"); $logger->pushGeneralActionLog("현재 악성유저로 분류되어 <R>블럭</> 대상자입니다. <1>$date</>");
} } else {
else{
//Hmm? //Hmm?
return false; return false;
} }
@@ -63,7 +67,8 @@ class TurnExecutionHelper
return true; return true;
} }
public function processNationCommand(Command\NationCommand $commandObj):LastTurn{ public function processNationCommand(Command\NationCommand $commandObj): LastTurn
{
$general = $this->getGeneral(); $general = $this->getGeneral();
while (true) { while (true) {
@@ -101,7 +106,8 @@ class TurnExecutionHelper
return $commandObj->getResultTurn(); return $commandObj->getResultTurn();
} }
public function processCommand(Command\GeneralCommand $commandObj, bool $autorunMode){ public function processCommand(Command\GeneralCommand $commandObj, bool $autorunMode)
{
$general = $this->getGeneral(); $general = $this->getGeneral();
@@ -146,24 +152,21 @@ class TurnExecutionHelper
if ($general->getNPCType() >= 2) { if ($general->getNPCType() >= 2) {
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} } else if ($general->getVar('killturn') > $killTurn) {
else if($general->getVar('killturn') > $killTurn){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} } else if ($autorunMode) {
else if($autorunMode){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} } else if ($commandClassName == '휴식') {
else if($commandClassName == '휴식'){
$general->increaseVarWithLimit('killturn', -1); $general->increaseVarWithLimit('killturn', -1);
} } else {
else{
$general->setVar('killturn', $killTurn); $general->setVar('killturn', $killTurn);
} }
return $commandObj->getResultTurn(); return $commandObj->getResultTurn();
} }
function updateTurnTime(){ function updateTurnTime()
{
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
@@ -189,8 +192,7 @@ class TurnExecutionHelper
$general->setVar('owner', 0); $general->setVar('owner', 0);
$general->setVar('defence_train', 80); $general->setVar('defence_train', 80);
$general->setVar('owner_name', null); $general->setVar('owner_name', null);
} } else {
else{
$general->applyDB($db); $general->applyDB($db);
storeOldGeneral($generalID, $gameStor->year, $gameStor->month); storeOldGeneral($generalID, $gameStor->year, $gameStor->month);
$general->kill($db); $general->kill($db);
@@ -210,11 +212,11 @@ class TurnExecutionHelper
$turntime = addTurn($general->getTurnTime(), $gameStor->turnterm); $turntime = addTurn($general->getTurnTime(), $gameStor->turnterm);
$general->setVar('turntime', $turntime); $general->setVar('turntime', $turntime);
} }
static public function executeGeneralCommandUntil(string $date, \DateTimeInterface $limitActionTime, int $year, int $month){ static public function executeGeneralCommandUntil(string $date, \DateTimeInterface $limitActionTime, int $year, int $month)
{
$db = DB::db(); $db = DB::db();
$generalsTodo = $db->query( $generalsTodo = $db->query(
'SELECT no,name,turntime,killturn,block,npc,deadyear FROM general WHERE turntime < %s ORDER BY turntime ASC, `no` ASC', 'SELECT no,name,turntime,killturn,block,npc,deadyear FROM general WHERE turntime < %s ORDER BY turntime ASC, `no` ASC',
@@ -260,7 +262,6 @@ class TurnExecutionHelper
$general->increaseInheritancePoint('lived_month', 1); $general->increaseInheritancePoint('lived_month', 1);
$turnObj->preprocessCommand($env); $turnObj->preprocessCommand($env);
$generalCommandObj = $general->getReservedTurn(0, $env);
if ($general->getNPCType() >= 2 || ($autorun_user['limit_minutes'] ?? false)) { if ($general->getNPCType() >= 2 || ($autorun_user['limit_minutes'] ?? false)) {
$ai = new GeneralAI($turnObj->getGeneral()); $ai = new GeneralAI($turnObj->getGeneral());
@@ -278,8 +279,11 @@ class TurnExecutionHelper
$nationCommandObj $nationCommandObj
); );
$nationStor->setValue($lastNationTurnKey, $resultNationTurn->toRaw()); $nationStor->setValue($lastNationTurnKey, $resultNationTurn->toRaw());
$general->setRawCity(null);
} }
$generalCommandObj = $general->getReservedTurn(0, $env);
if ($ai) { if ($ai) {
$newGeneralCommandObj = $ai->chooseGeneralTurn($generalCommandObj); // npc AI 처리 $newGeneralCommandObj = $ai->chooseGeneralTurn($generalCommandObj); // npc AI 처리
if ($generalCommandObj !== $newGeneralCommandObj) { if ($generalCommandObj !== $newGeneralCommandObj) {
@@ -300,14 +304,13 @@ class TurnExecutionHelper
$turnObj->updateTurnTime(); $turnObj->updateTurnTime();
$turnObj->applyDB(); $turnObj->applyDB();
} }
return [false, $currentTurn]; return [false, $currentTurn];
} }
static public function executeAllCommand(){ static public function executeAllCommand()
{
//if(!timeover()) { return; } //if(!timeover()) { return; }
$db = DB::db(); $db = DB::db();
@@ -344,8 +347,7 @@ class TurnExecutionHelper
$maxActionTime = Util::toInt(ini_get('max_execution_time')); $maxActionTime = Util::toInt(ini_get('max_execution_time'));
if ($maxActionTime == 0) { if ($maxActionTime == 0) {
$maxActionTime = 60; $maxActionTime = 60;
} } else {
else {
$maxActionTime = max($maxActionTime * 2 / 3, $maxActionTime - 10); $maxActionTime = max($maxActionTime * 2 / 3, $maxActionTime - 10);
} }
@@ -356,7 +358,10 @@ class TurnExecutionHelper
while ($nextTurn <= $date) { while ($nextTurn <= $date) {
[$executionOver, $currentTurn] = static::executeGeneralCommandUntil( [$executionOver, $currentTurn] = static::executeGeneralCommandUntil(
$nextTurn, $limitActionTime, $gameStor->year, $gameStor->month $nextTurn,
$limitActionTime,
$gameStor->year,
$gameStor->month
); );
// 트래픽 업데이트 // 트래픽 업데이트
@@ -440,7 +445,10 @@ class TurnExecutionHelper
// 현재시간의 월턴시간 이후 분단위 장수 처리 // 현재시간의 월턴시간 이후 분단위 장수 처리
[$executionOver, $currentTurn] = static::executeGeneralCommandUntil( [$executionOver, $currentTurn] = static::executeGeneralCommandUntil(
$date, $limitActionTime, $gameStor->year, $gameStor->month $date,
$limitActionTime,
$gameStor->year,
$gameStor->month
); );
if ($currentTurn !== null) { if ($currentTurn !== null) {