diff --git a/hwe/sammo/BaseWarUnitTrigger.php b/hwe/sammo/BaseWarUnitTrigger.php index 31a53a0c..f9a49f73 100644 --- a/hwe/sammo/BaseWarUnitTrigger.php +++ b/hwe/sammo/BaseWarUnitTrigger.php @@ -1,104 +1,104 @@ -object = $unit; - $this->raiseType = $raiseType; - } - - public function getUniqueID():string{ - $priority = $this->priority; - $fqn = static::class; - if($this->object === null){ - $objID = ''; - } - else{ - $objID = spl_object_id($this->object); - } - return "{$priority}_{$fqn}_{$objID}_{$this->raiseType}"; - } - - public function action(?array $env=null, $arg=null):?array{ - if($env === null){ - $env = []; - } - if(!key_exists('e_attacker', $env)){ - $env['e_attacker'] = []; - } - if(!key_exists('e_defender', $env)){ - $env['e_defender'] = []; - } - - if($env['stopNextAction']??false){ - return $env; - } - - /** @var WarUnitGeneral $attacker */ - /** @var WarUnit $defender */ - [$attacker, $defender] = $arg; - - /** @var WarUnit $self */ - $self = $this->object; - $isAttacker = $self->isAttacker(); - $oppose = $isAttacker?$defender:$attacker; - - $selfEnv = $isAttacker?$env['e_attacker']:$env['e_defender']; - $opposeEnv = $isAttacker?$env['e_defender']:$env['e_attacker']; - - $callNextAction = $this->actionWar($self, $oppose, $selfEnv, $opposeEnv); - - $env['e_attacker'] = $isAttacker?$selfEnv:$opposeEnv; - $env['e_defender'] = $isAttacker?$opposeEnv:$selfEnv; - - if(!$callNextAction){ - $env['stopNextAction'] = true; - } - - return $env; - } - - abstract protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv):bool; - - public function processConsumableItem():bool{ - if(!($this->raiseType & static::TYPE_ITEM)){ - return false; - } - - /** @var WarUnit $self */ - $self = $this->object; - - if($self->hasActivatedSkill('아이템사용')){ - return false; - } - - $self->activateSkill('아이템사용'); - $item = $self->getGeneral()->getItem(); - $itemName = $item->getName(); - $itemRawName = $item->getRawName(); - $self->activateSkill($itemName); - - if (!($this->raiseType & static::TYPE_CONSUMABLE_ITEM)) { - return false; - } - - if($self->hasActivatedSkill('아이템소모')){ - return false; - } - - $self->activateSkill('아이템소모'); - $josaUl = JosaUtil::pick($itemRawName, '을'); - $self->getLogger()->pushGeneralActionLog("{$itemName}{$josaUl} 사용!", ActionLogger::PLAIN); - $self->getGeneral()->deleteItem(); - - return true; - } -} +object = $unit; + $this->raiseType = $raiseType; + } + + public function getUniqueID():string{ + $priority = $this->priority; + $fqn = static::class; + if($this->object === null){ + $objID = ''; + } + else{ + $objID = spl_object_id($this->object); + } + return "{$priority}_{$fqn}_{$objID}_{$this->raiseType}"; + } + + public function action(?array $env=null, $arg=null):?array{ + if($env === null){ + $env = []; + } + if(!key_exists('e_attacker', $env)){ + $env['e_attacker'] = []; + } + if(!key_exists('e_defender', $env)){ + $env['e_defender'] = []; + } + + if($env['stopNextAction']??false){ + return $env; + } + + /** @var WarUnitGeneral $attacker */ + /** @var WarUnit $defender */ + [$attacker, $defender] = $arg; + + /** @var WarUnit $self */ + $self = $this->object; + $isAttacker = $self->isAttacker(); + $oppose = $isAttacker?$defender:$attacker; + + $selfEnv = $isAttacker?$env['e_attacker']:$env['e_defender']; + $opposeEnv = $isAttacker?$env['e_defender']:$env['e_attacker']; + + $callNextAction = $this->actionWar($self, $oppose, $selfEnv, $opposeEnv); + + $env['e_attacker'] = $isAttacker?$selfEnv:$opposeEnv; + $env['e_defender'] = $isAttacker?$opposeEnv:$selfEnv; + + if(!$callNextAction){ + $env['stopNextAction'] = true; + } + + return $env; + } + + abstract protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv):bool; + + public function processConsumableItem():bool{ + if(!($this->raiseType & static::TYPE_ITEM)){ + return false; + } + + /** @var WarUnit $self */ + $self = $this->object; + + if($self->hasActivatedSkill('아이템사용')){ + return false; + } + + $self->activateSkill('아이템사용'); + $item = $self->getGeneral()->getItem(); + $itemName = $item->getName(); + $itemRawName = $item->getRawName(); + $self->activateSkill($itemName); + + if ($this->raiseType != static::TYPE_CONSUMABLE_ITEM) { + return false; + } + + if($self->hasActivatedSkill('아이템소모')){ + return false; + } + + $self->activateSkill('아이템소모'); + $josaUl = JosaUtil::pick($itemRawName, '을'); + $self->getLogger()->pushGeneralActionLog("{$itemName}{$josaUl} 사용!", ActionLogger::PLAIN); + $self->getGeneral()->deleteItem(); + + return true; + } +}