From b106fa55d3c4a109b8cd657277039e54a76c2b6b Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 13 Sep 2018 01:43:44 +0900 Subject: [PATCH] =?UTF-8?q?=EC=83=81=EC=97=85=ED=88=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/Command/BaseCommand.php | 130 +++++++++++++++++++++++++++-- hwe/sammo/Command/che_상업투자.php | 29 ++++++- hwe/sammo/General.php | 15 ++++ hwe/sammo/LazyVarUpdater.php | 4 + 4 files changed, 169 insertions(+), 9 deletions(-) diff --git a/hwe/sammo/Command/BaseCommand.php b/hwe/sammo/Command/BaseCommand.php index 3e03432b..c479162c 100644 --- a/hwe/sammo/Command/BaseCommand.php +++ b/hwe/sammo/Command/BaseCommand.php @@ -2,21 +2,137 @@ namespace sammo\Command; use \sammo\{ - Util, JosaUtil, - General, + Util, JosaUtil, DB, + General, + ActionLogger }; -use \sammo\Constraint\{ - Constraint, NoNeutral, NoOpeningPart, NoWanderingNation, OccupiedCity, - RemainCityCapacity, ReqGeneralGold, SuppliedCity -}; +use \sammo\Constraint\Constraint; + abstract class BaseCommand{ + /** + * @var General|null $generalObj + * @var array|null $destGeneral + */ protected $id = 0; protected $name = 'CommandName'; - abstract public function __construct(General $general, ...$args); + protected $generalObj = null; + protected $city = null; + protected $nation = null; + protected $arg = null; + protected $env = null; + protected $destGeneral = null; + protected $destCity = null; + protected $destNation = null; + + protected $available = null; + protected $reason = null; + + protected $constraints = null; + + protected $logger; + + public function __construct(General $generalObj, array $env, $arg){ + $this->generalObj = $generalObj; + $this->logger = $generalObj->getLogger(); + $this->env = $env; + $this->arg = $arg; + $this->init(); + } + + protected function setCity(array $args=null){ + $db = DB::db(); + if($args == null){ + $this->city = $this->generalObj->getRawCity(); + if($this->city){ + return; + } + $this->city = $db->queryFirstRow('SELECT * FROM city WHERE city=%i', $this->generalObj->getVar('city')); + return; + } + $this->city = $db->queryFirstRow('SELECT %lb FROM city WHERE city=%i', $args, $this->generalObj->getVar('city')); + } + + protected function setNation(?array $args = null){ + if($args == null){ + $this->nation = $this->generalObj->getStaticNation(); + return; + } + + $db = DB::db(); + $this->nation = $db->queryFirstRow('SELECT %lb FROM nation WHERE nation=%i', $args, $this->generalObj->getVar('nation')); + } + + protected function setDestGeneralFromObj(General $destGeneral){ + $this->destGeneral = $destGeneral->getRaw(); + } + + protected function setDestGeneral(int $generalNo, array $args){ + $db = DB::db(); + $this->destGeneral = $db->queryFirstRow('SELECT %lb FROM general WHERE no=%i', $args, $generalNo); + } + + protected function setDestCity(int $cityNo, ?array $args){ + $db = DB::db(); + if($args == null){ + $this->destCity = $db->queryFirstRow('SELECT * FROM city WHERE city=%i', $cityNo); + return; + } + $this->destCity = $db->queryFirstRow('SELECT %lb FROM city WHERE city=%i', $args, $cityNo); + } + + protected function setDestNation(int $nationNo, ?array $args = null){ + if($args == null){ + $this->destNation = getNationStaticInfo($nationNo); + return; + } + + $db = DB::db(); + $this->destNation = $db->queryFirstRow('SELECT %lb FROM nation WHERE nation=%i', $args, $nationNo); + } + + abstract protected function init(); + public function getName():string { return static::$name; } + + public function getLogger():ActionLogger{ + return $this->logger; + } + + public function test():?string{ + if($this->constraints === null){ + throw new \InvalidArgumentException('인자가 제대로 설정되지 않았습니다'); + } + + $this->reason = Constraint::testAll($this->constraints, [ + 'general'=>$this->generalObj->getRaw(), + 'city'=>$this->city, + 'nation'=>$this->city, + 'arg'=>$this->arg, + + 'destGeneral'=>$this->destGeneral, + 'destCity'=>$this->destCity, + 'destNation'=>$this->destNation, + ]); + $this->available = $this->reason === null; + return $this->reason; + + } + public function isAvailable():bool { + if($this->available === null){ + $this->test(); + } + return $this->available; + + } + + abstract public function getCost():array; + + abstract public function run():bool; + + } \ No newline at end of file diff --git a/hwe/sammo/Command/che_상업투자.php b/hwe/sammo/Command/che_상업투자.php index 8efdafce..57765eef 100644 --- a/hwe/sammo/Command/che_상업투자.php +++ b/hwe/sammo/Command/che_상업투자.php @@ -1,9 +1,34 @@ generalObj; + + $this->setCity(); + $this->setNation(); + $develCost = $this->env['develcost']; + + $nationTypeObj = $general->getNationTypeObj(); + $generalLevelObj = $general->getGeneralLevelObj(); + + $this->constraints=[ + + ]; + } + + } \ No newline at end of file diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index ba6cc145..88def24f 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -5,6 +5,12 @@ namespace sammo; class General{ use LazyVarUpdater; + /** + * @var iActionTrigger $nationType + * @var iActionTrigger $levelObj + * @var iActionTrigger $specialDomesticObj + */ + protected $raw = []; protected $rawCity = null; @@ -14,6 +20,7 @@ class General{ protected $logActivatedSkill = []; protected $isFinished = false; + protected $nationType; protected $levelObj; protected $specialDomesticObj; @@ -79,6 +86,10 @@ class General{ return $this->raw['name']; } + function getRawCity():?array{ + return $this->rawCity; + } + function getCityID():int{ return $this->raw['city']; } @@ -103,6 +114,10 @@ class General{ return $this->levelObj; } + public function onCalcDomestic(string $turnType, string $varType, float $value){ + + } + //TODO: 장기적으로 General 클래스로 모두 옮겨와야함. function getLeadership($withInjury = true, $withItem = true, $withStatAdjust = true, $useFloor = true):float{ return getGeneralLeadership($this->raw, $withInjury, $withItem, $withStatAdjust, $useFloor); diff --git a/hwe/sammo/LazyVarUpdater.php b/hwe/sammo/LazyVarUpdater.php index a65243fd..0d1bfb4a 100644 --- a/hwe/sammo/LazyVarUpdater.php +++ b/hwe/sammo/LazyVarUpdater.php @@ -9,6 +9,10 @@ trait LazyVarUpdater{ return $this->raw; } + function getVar(string $key){ + return $this->raw[$key]; + } + function updateVar(string $key, $value){ if($this->raw[$key] === $value){ return;