fix: 수뇌가 소재 도시에 도시 관련 사령턴(백동 등) 실행시 발생하는 버그 수정
- 백동 + 성수 등등
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user