From 35eadad96bee76c0494c30164f5f992312216efa Mon Sep 17 00:00:00 2001 From: hide_d Date: Wed, 25 Mar 2020 02:54:33 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=88=EC=95=A1=20=EB=8B=A8=EC=9C=84?= =?UTF-8?q?=EB=A5=BC=20GameConst=EB=A1=9C=20=EC=9D=B4=EB=8F=99,=20?= =?UTF-8?q?=EC=9B=90=EC=A1=B0=20=EC=B6=94=EA=B0=80=20arg=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=9C=BC=EB=A1=9C=20amountList=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func_command.php | 2 +- hwe/js/processing.js | 2 +- hwe/sammo/ActionLogger.php | 2 +- hwe/sammo/Command/General/che_군량매매.php | 27 +- hwe/sammo/Command/General/che_증여.php | 27 +- hwe/sammo/Command/General/che_헌납.php | 27 +- hwe/sammo/Command/Nation/che_몰수.php | 12 +- hwe/sammo/Command/Nation/che_선전포고.php | 1 + hwe/sammo/Command/Nation/che_원조.php | 272 +++++++++++++++++++++ hwe/sammo/Command/Nation/che_포상.php | 12 +- hwe/sammo/GameConstBase.php | 11 + hwe/sammo/GeneralAI.php | 8 +- 12 files changed, 309 insertions(+), 94 deletions(-) create mode 100644 hwe/sammo/Command/Nation/che_원조.php diff --git a/hwe/func_command.php b/hwe/func_command.php index 7b8013b1..35aed69c 100644 --- a/hwe/func_command.php +++ b/hwe/func_command.php @@ -225,7 +225,7 @@ function checkCommandArg(?array $arg):?string{ ['crewType', 0] ], 'integerArray'=>[ - 'destNationIDList', 'destGeneralIDList' + 'destNationIDList', 'destGeneralIDList', 'amountList' ], 'stringWidthBetween'=>[ ['nationName', 1, 18] diff --git a/hwe/js/processing.js b/hwe/js/processing.js index 8179d352..55884bd0 100644 --- a/hwe/js/processing.js +++ b/hwe/js/processing.js @@ -48,7 +48,7 @@ window.submitAction = function(){ 'isGold', 'buyRice', ], 'integerArray':[ - 'destNationIDList', 'destGeneralIDList' + 'destNationIDList', 'destGeneralIDList', 'amountList' ] } diff --git a/hwe/sammo/ActionLogger.php b/hwe/sammo/ActionLogger.php index 3b42c23b..ebba3c88 100644 --- a/hwe/sammo/ActionLogger.php +++ b/hwe/sammo/ActionLogger.php @@ -171,7 +171,7 @@ class ActionLogger{ $this->generalBattleDetailLog[] = $text; } - public function pushNationalHistoryLog($text, int $formatType = self::RAWTEXT){ + public function pushNationalHistoryLog($text, int $formatType = self::YEAR_MONTH){ if(!$text){ return; } diff --git a/hwe/sammo/Command/General/che_군량매매.php b/hwe/sammo/Command/General/che_군량매매.php index 9be9e791..8c9cb4db 100644 --- a/hwe/sammo/Command/General/che_군량매매.php +++ b/hwe/sammo/Command/General/che_군량매매.php @@ -38,7 +38,7 @@ class che_군량매매 extends Command\GeneralCommand{ if(!is_int($amount)){ return false; } - $amount = Util::valueFit($amount, 100, 10000); + $amount = Util::valueFit($amount, 100, GameConst::$maxIncentiveAmount); $this->arg = [ 'buyRice'=>$buyRice, @@ -184,28 +184,9 @@ class che_군량매매 extends Command\GeneralCommand{


$destGeneral['rice'] ]; } - - $amountList = [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 12, 15, 20, 25, - 30, 40, 50, 60, 70, 80, 90, 100 - ]; ob_start(); ?> 장수의 자금이나 군량을 몰수합니다.
@@ -235,8 +229,8 @@ class che_몰수 extends Command\NationCommand{

diff --git a/hwe/sammo/Command/Nation/che_선전포고.php b/hwe/sammo/Command/Nation/che_선전포고.php index 1fbf4bfd..2d9bbd2e 100644 --- a/hwe/sammo/Command/Nation/che_선전포고.php +++ b/hwe/sammo/Command/Nation/che_선전포고.php @@ -228,6 +228,7 @@ class che_선전포고 extends Command\NationCommand{ style='color:;' >【 + arg === null){ + return false; + } + + if(!key_exists('destNationID', $this->arg)){ + return false; + } + $destNationID = $this->arg['destNationID']; + if(!is_int($destNationID)){ + return false; + } + if($destNationID < 1){ + return false; + } + + if(!key_exists('amountList', $this->arg)){ + return false; + } + $amountList = $this->arg['amountList']; + if(!is_array($amountList)){ + return false; + } + + if(count($amountList) != 2){ + return false; + } + + [$goldAmount, $riceAmount] = $amountList; + + if(!is_int($goldAmount) || !is_int($riceAmount)){ + return false; + } + if($goldAmount < 0 || $riceAmount < 0){ + return false; + } + if($goldAmount == 0 && $riceAmount == 0){ + return false; + } + + $this->arg = [ + 'destNationID'=>$destNationID, + 'amountList'=>[$goldAmount, $riceAmount] + ]; + return true; + } + + protected function init(){ + $general = $this->generalObj; + + $this->setCity(); + $this->setNation(['gold', 'rice', 'surlimit']); + + $destNationID = $this->arg['destNationID']; + $this->setDestNation($destNationID, ['gold', 'rice', 'surlimit']); + + [$goldAmount, $riceAmount] = $this->arg['amountList']; + $limit = $this->nation['level'] * GameConst::$coefAidAmount; + + if($goldAmount > $limit || $riceAmount > $limit){ + $this->runnableConstraints[ + ConstraintHelper::AlwaysFail('작위 제한량 이상은 보낼 수 없습니다.') + ]; + return; + } + + $this->runnableConstraints=[ + ConstraintHelper::ExistsDestNation(), + ConstraintHelper::OccupiedCity(), + ConstraintHelper::BeChief(), + ConstraintHelper::SuppliedCity(), + ConstraintHelper::ReqNationGold(GameConst::$basegold+($goldAmount>0)?1:0), + ConstraintHelper::ReqNationRice(GameConst::$baserice+($riceAmount>0)?1:0), + ConstraintHelper::ReqNationValue('surlimit', '외교제한', '==', 0, '외교제한중입니다.'), + ConstraintHelper::ReqDestNationValue('surlimit', '외교제한', '==', 0, '상대국이 외교제한중입니다.'), + ]; + } + + public function getCost():array{ + return [0, 0]; + } + + public function getPreReqTurn():int{ + return 0; + } + + public function getPostReqTurn():int{ + return 12; + } + + public function getBrief():string{ + [$goldAmount, $riceAmount] = $this->arg['amountList']; + $goldAmountText = number_format($goldAmount); + $riceAmountText = number_format($riceAmount); + $destNationName = $this->destNation['name']; + $commandName = $this->getName(); + return "【{$destNationName}】에게 국고 {$goldAmountText} 병량 {$riceAmountText} {$commandName}"; + } + + + public function run():bool{ + if(!$this->isRunnable()){ + throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도'); + } + + $db = DB::db(); + + $general = $this->generalObj; + $generalID = $general->getID(); + $date = $general->getTurnTime($general::TURNTIME_HM); + + $nation = $this->nation; + $nationID = $nation['nation']; + $nationName = $nation['name']; + + $destNationID = $this->destNation['nation']; + $destNationName = $this->destNation['name']; + + + [$goldAmount, $riceAmount] = $this->arg['amountList']; + + + $goldAmount = Util::valueFit( + $goldAmount, + 0, + $nation['gold'] - GameConst::$basegold + ); + + $riceAmount = Util::valueFit( + $riceAmount, + 0, + $nation['rice'] - GameConst::$baserice + ); + + $goldAmountText = number_format($goldAmount); + $riceAmountText = number_format($riceAmount); + + + $logger = $general->getLogger(); + + $year = $this->env['year']; + $month = $this->env['month']; + + + + $josaRo = JosaUtil::pick($destNationName, '로'); + + + + $broadcastMessage = "{$destNationName}{$josaRo} 금{$goldAmountText} 쌀{$riceAmountText}을 지원했습니다."; + + $chiefList = $db->queryFirstColumn('SELECT no FROM general WHERE level >= 5 AND no != %i AND nation = %i', $generalID, $nationID); + foreach($chiefList as $chiefID){ + $chiefLogger = new ActionLogger($chiefID, $nationID, $year, $month); + $chiefLogger->pushGeneralActionLog($broadcastMessage, ActionLogger::PLAIN); + $chiefLogger->flush(); + } + + $logger->pushGeneralHistoryLog("{$destNationName}{$josaRo} 금{$goldAmountText} 쌀{$riceAmountText}을 지원"); + $logger->pushNationalHistoryLog("{$destNationName}{$josaRo} 금{$goldAmountText} 쌀{$riceAmountText}을 지원"); + $logger->pushGlobalHistoryLog("【원조】{$nationName}에서 {$destNationName}{$josaRo} 물자를 지원합니다"); + + $logger->pushGeneralActionLog($broadcastMessage); + $logger->pushGeneralActionLog("{$destNationName}{$josaRo} 물자를 지원합니다. <1>$date", ActionLogger::PLAIN); + + $destBroadcastMessage = $broadcastMessage = "{$nationName}에서 금{$goldAmountText} 쌀{$riceAmountText}을 원조했습니다."; + $destChiefList = $db->queryFirstColumn('SELECT no FROM general WHERE level >= 5 AND nation = %i', $destNationID); + foreach($destChiefList as $destChiefID){ + $destChiefLogger = new ActionLogger($destChiefID, $nationID, $year, $month); + $destChiefLogger->pushGeneralActionLog($destBroadcastMessage, ActionLogger::PLAIN); + $destChiefLogger->flush(); + } + + $josaRoSrc = JosaUtil::pick($nationName, '로'); + $destNationLogger = new ActionLogger(0, $destChiefID, $year, $month); + $destNationLogger->pushNationalHistoryLog("{$nationName}{$josaRoSrc}부터 금{$goldAmountText} 쌀{$riceAmountText}을 지원 받음"); + + + + $db->update('nation', [ + 'gold'=>$db->sqleval('gold - %i', $goldAmount), + 'rice'=>$db->sqleval('rice - %i', $riceAmount), + 'surlimit'=>$db->sqleval('surlimit + %i', 12) + ], 'nation = %i', $nationID); + + $db->update('nation', [ + 'gold'=>$db->sqleval('gold + %i', $goldAmount), + 'rice'=>$db->sqleval('rice + %i', $riceAmount), + ], 'nation = %i', $destNationID); + + $general->increaseVar('experience', $general->onCalcStat($general, 'experience', 5)); + $general->increaseVar('dedication', $general->onCalcStat($general, 'dedication', 5)); + + + $general->applyDB($db); + + return true; + } + + public function getJSFiles(): array + { + return [ + 'js/defaultSelectNationByMap.js' + ]; + } + + + public function getForm(): string + { + $currentNationLevel = getNationStaticInfo($this->generalObj->getNationID())['level']; + ob_start(); +?> +
+타국에게 원조합니다.
+작위별로 금액 제한이 있습니다.
+ [$levelText,,]): ?> +:
+ +원조할 국가를 목록에서 선택하세요.
+ +국고 +병량 +
+
+$destGeneral['rice'] ]; } - - $amountList = [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 12, 15, 20, 25, - 30, 40, 50, 60, 70, 80, 90, 100 - ]; ob_start(); ?> 국고로 장수에게 자금이나 군량을 지급합니다.
@@ -203,8 +197,8 @@ class che_포상 extends Command\NationCommand{

diff --git a/hwe/sammo/GameConstBase.php b/hwe/sammo/GameConstBase.php index ae3b2964..b7500e14 100644 --- a/hwe/sammo/GameConstBase.php +++ b/hwe/sammo/GameConstBase.php @@ -111,6 +111,17 @@ class GameConstBase /** @var int 시작시 쌀 */ public static $defaultRice = 1000; + /** @var int 원조 계수 */ + public static $coefAidAmount = 10000; + + /** @var int 최대 개별 자원 금액 */ + public static $maxResourceActionAmount = 10000; + /** @var int[] 포상/몰수 가이드 금액 */ + public static $resourceActionAmountGuide = [ + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1200, 1500, 2000, 2500, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000 + ]; + public static $generalMinimumGold = 0; public static $generalMinimumRice = 500; diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index e293ec9d..65e73ada 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -698,7 +698,7 @@ class GeneralAI{ if((($isWarUser || $resName == 'gold') && $compUser->$resName < 21000) || ($compUser->$resName < 5000)){ if($work){ //TODO: 새로 구현한 코드로 이전 - $amount = min(10000, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 3000)*1000 + 1000); + $amount = min(GameConst::$maxIncentiveAmount, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 3000)*1000 + 1000); $commandList[] = [['che_포상', [ 'destGeneralID'=>$userGenerals[0]->no, 'isGold'=>$resName=='gold', @@ -706,7 +706,7 @@ class GeneralAI{ ]], 10]; // 금,쌀 1000단위 포상 } else{ - $amount = min(10000, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 5000)*1000 + 1000); + $amount = min(GameConst::$maxIncentiveAmount, intdiv(($nation[$resName]-($resName=='rice'?(GameConst::$baserice):(GameConst::$basegold))), 5000)*1000 + 1000); $commandList[] = [['che_포상', [ 'destGeneralID'=>$userGenerals[0]->no, 'isGold'=>$resName=='gold', @@ -1130,10 +1130,10 @@ class GeneralAI{ } if($general->getVar('gold') >= $general->getVar('rice')){ - return ['che_헌납', ['isGold'=>true, 'amount'=>10000]]; + return ['che_헌납', ['isGold'=>true, 'amount'=>GameConst::$maxResourceActionAmount]]; } else{ - return ['che_헌납', ['isGold'=>false, 'amount'=>10000]]; + return ['che_헌납', ['isGold'=>false, 'amount'=>GameConst::$maxResourceActionAmount]]; } }