diff --git a/hwe/_admin5.php b/hwe/_admin5.php index fc788921..c39ff436 100644 --- a/hwe/_admin5.php +++ b/hwe/_admin5.php @@ -121,7 +121,6 @@ for($i=1; $i <= $count; $i++) { 접률 단접 국력 - 단합 장수 속령 기술 @@ -213,6 +212,7 @@ for($i=0; $i < $nationCount; $i++) { $query = "select COUNT(*) as cnt, SUM(pop) as pop, SUM(pop2) as pop2, ROUND(SUM(pop)/SUM(pop2)*100, 2) as rate, + trust, ROUND(SUM(agri)/SUM(agri2)*100, 2) as agri, ROUND(SUM(comm)/SUM(comm2)*100, 2) as comm, ROUND(SUM(secu)/SUM(secu2)*100, 2) as secu, @@ -227,7 +227,7 @@ for($i=0; $i < $nationCount; $i++) { {$nation['name']}  {$nation['connect']}   {$nation['con']}  -  {$nation['strength']}  +  {$nation['power']}   {$gen['cnt']}   {$city['cnt']}   {$nation['tech']}  @@ -247,7 +247,7 @@ for($i=0; $i < $nationCount; $i++) {  {$nation['dex40']}   {$gen['crew']}/{$gen['leadership']}00   {$city['pop']}/{$city['pop2']}  -  ".round($city['trust'],1)."%  +  ".round($city['pop']/$city['pop2']*100,1)."%   {$city['agri']}%   {$city['comm']}%   {$city['secu']}%  diff --git a/hwe/process_war.php b/hwe/process_war.php index 70eda1db..2e5f3ad5 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -17,7 +17,7 @@ function processWar(General $attackerGeneral, array $rawAttackerNation, array $r 'level'=>0, 'gold'=>0, 'rice'=>2000, - 'type'=>0, + 'type'=>GameConst::$neutralNationType, 'tech'=>0, 'gennum'=>1 ]; @@ -108,7 +108,7 @@ function processWar(General $attackerGeneral, array $rawAttackerNation, array $r 'dead' => $db->sqleval('dead + %i', $totalDead * 0.6) ], 'city=%i', $rawDefenderCity['city']); - $attackerIncTech = buildNationTypeClass($rawAttackerNation['type'])->onCalacDomestic('기술', 'score', $attacker->getDead() * 0.01); + $attackerIncTech = buildNationTypeClass($rawAttackerNation['type'])->onCalcDomestic('기술', 'score', $attacker->getDead() * 0.01); $defenderIncTech = buildNationTypeClass($rawDefenderNation['type'])->onCalcDomestic('기술', 'score', $attacker->getKilled() * 0.01); $attackerGenCnt = $rawAttackerNation['gennum']; diff --git a/hwe/sammo/ActionSpecialWar/che_돌격.php b/hwe/sammo/ActionSpecialWar/che_돌격.php index f05dc539..9995956c 100644 --- a/hwe/sammo/ActionSpecialWar/che_돌격.php +++ b/hwe/sammo/ActionSpecialWar/che_돌격.php @@ -6,6 +6,7 @@ use \sammo\SpecialityConst; use \sammo\WarUnit; use \sammo\BaseWarUnitTrigger; use \sammo\WarUnitTriggerCaller; +use sammo\WarUnitTrigger\WarActivateSkills; class che_돌격 implements iAction{ use \sammo\DefaultAction; diff --git a/hwe/sammo/BaseWarUnitTrigger.php b/hwe/sammo/BaseWarUnitTrigger.php index 4544b01d..1803118b 100644 --- a/hwe/sammo/BaseWarUnitTrigger.php +++ b/hwe/sammo/BaseWarUnitTrigger.php @@ -60,7 +60,7 @@ abstract class BaseWarUnitTrigger extends ObjectTrigger{ return $env; } - abstract protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv):void; + abstract protected function actionWar(WarUnit $self, WarUnit $oppose, array &$selfEnv, array &$opposeEnv):bool; public function processConsumableItem():bool{ if(!($this->raiseType & static::TYPE_ITEM)){ diff --git a/hwe/sammo/Command/General/che_증여.php b/hwe/sammo/Command/General/che_증여.php index 959049f2..b8810321 100644 --- a/hwe/sammo/Command/General/che_증여.php +++ b/hwe/sammo/Command/General/che_증여.php @@ -85,10 +85,10 @@ class che_증여 extends Command\GeneralCommand{ ConstraintHelper::FriendlyDestGeneral() ]; if($this->arg['isGold']){ - $this->runnableConstraints[] = ConstraintHelper::ReqGeneralGold(1); + $this->runnableConstraints[] = ConstraintHelper::ReqGeneralGold(GameConst::$generalMinimumGold); } else{ - $this->runnableConstraints[] = ConstraintHelper::ReqGeneralRice(1); + $this->runnableConstraints[] = ConstraintHelper::ReqGeneralRice(GameConst::$generalMinimumRice); } } @@ -121,7 +121,7 @@ class che_증여 extends Command\GeneralCommand{ $resName = $isGold?'금':'쌀'; $destGeneral = $this->destGeneralObj; - $amount = Util::valueFit($amount, 0, $general->getVar($resKey)); + $amount = Util::valueFit($amount, 0, $general->getVar($resKey) - ($isGold?GameConst::$generalMinimumGold:GameConst::$generalMinimumRice)); $amountText = number_format($amount, 0); $logger = $general->getLogger(); diff --git a/hwe/sammo/Command/General/che_출병.php b/hwe/sammo/Command/General/che_출병.php index 4cd700ab..deb59c45 100644 --- a/hwe/sammo/Command/General/che_출병.php +++ b/hwe/sammo/Command/General/che_출병.php @@ -128,7 +128,8 @@ class che_출병 extends Command\GeneralCommand{ $general->applyDB($db); //TODO: 장기적으로 통합해야함 - processWar($general, $general->getStaticNation(), $this->destCity); + $attackerNation = $db->queryFirstRow('SELECT nation, name, color, type, level, capital, tech from nation WHERE nation = %i', $attackerNationID); + processWar($general, $attackerNation, $this->destCity); tryUniqueItemLottery($general); $general->applyDB($db); diff --git a/hwe/sammo/Command/General/che_헌납.php b/hwe/sammo/Command/General/che_헌납.php index 2aec1245..76081093 100644 --- a/hwe/sammo/Command/General/che_헌납.php +++ b/hwe/sammo/Command/General/che_헌납.php @@ -65,10 +65,10 @@ class che_헌납 extends Command\GeneralCommand{ ConstraintHelper::SuppliedCity(), ]; if($this->arg['isGold']){ - $this->runnableConstraints[] = ConstraintHelper::ReqGeneralGold(1); + $this->runnableConstraints[] = ConstraintHelper::ReqGeneralGold(GameConst::$generalMinimumGold); } else{ - $this->runnableConstraints[] = ConstraintHelper::ReqGeneralRice(1); + $this->runnableConstraints[] = ConstraintHelper::ReqGeneralRice(GameConst::$generalMinimumRice); } } diff --git a/hwe/sammo/Command/Nation/che_몰수.php b/hwe/sammo/Command/Nation/che_몰수.php index 572b4f4b..7350b9b6 100644 --- a/hwe/sammo/Command/Nation/che_몰수.php +++ b/hwe/sammo/Command/Nation/che_몰수.php @@ -118,7 +118,7 @@ class che_몰수 extends Command\NationCommand{ $resName = $isGold?'금':'쌀'; $destGeneral = $this->destGeneralObj; - $amount = Util::valueFit($amount, 0, $general->getVar[$resKey]); + $amount = Util::valueFit($amount, 0, ($general->getVar[$resKey]- $isGold?GameConst::$generalMinimumGold:GameConst::$generalMinimumRice)); $amountText = number_format($amount, 0); if($destGeneral->getVar('npc') >= 2 && Util::randBool(0.01)){ diff --git a/hwe/sammo/Command/Nation/che_포상.php b/hwe/sammo/Command/Nation/che_포상.php index d6a2004c..1f79b87c 100644 --- a/hwe/sammo/Command/Nation/che_포상.php +++ b/hwe/sammo/Command/Nation/che_포상.php @@ -83,7 +83,7 @@ class che_포상 extends Command\NationCommand{ $this->runnableConstraints[] = ConstraintHelper::ReqNationGold(1); } else{ - $this->runnableConstraints[] = ConstraintHelper::ReqGeneralRice(1+GameConst::$baserice); + $this->runnableConstraints[] = ConstraintHelper::ReqNationRice(1+GameConst::$baserice); } } @@ -119,7 +119,7 @@ class che_포상 extends Command\NationCommand{ $resName = $isGold?'금':'쌀'; $destGeneral = $this->destGeneralObj; - $amount = Util::valueFit($amount, 0, $nation[$resKey]); + $amount = Util::valueFit($amount, 0, $nation[$resKey] - ($isGold?GameConst::$basegold:GameConst::$baserice)); $amountText = number_format($amount, 0); $logger = $general->getLogger(); diff --git a/hwe/sammo/DummyGeneral.php b/hwe/sammo/DummyGeneral.php index 7bc64b2f..c51b61b7 100644 --- a/hwe/sammo/DummyGeneral.php +++ b/hwe/sammo/DummyGeneral.php @@ -9,6 +9,7 @@ class DummyGeneral extends General{ 'city'=>0, 'nation'=>0, 'level'=>0, + 'crewtype'=>-1 ]; $this->raw = $raw; @@ -20,6 +21,14 @@ class DummyGeneral extends General{ } } + public function getBattleInitSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{ + return new WarUnitTriggerCaller(); + } + + public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{ + return new WarUnitTriggerCaller(); + } + function applyDB($db):bool{ return true; } diff --git a/hwe/sammo/GameConstBase.php b/hwe/sammo/GameConstBase.php index 3d7a8f03..72e74276 100644 --- a/hwe/sammo/GameConstBase.php +++ b/hwe/sammo/GameConstBase.php @@ -98,6 +98,9 @@ class GameConstBase /** @var int 시작시 쌀 */ public static $defaultRice = 1000; + public static $generalMinimumGold = 0; + public static $generalMinimumRice = 500; + /** @var int 최대 턴 */ public static $maxTurn = 30; public static $maxChiefTurn = 12; diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index c1e301f9..af06178e 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -589,9 +589,6 @@ class General implements iAction{ $caller->merge($iObj->getBattleInitSkillTriggerList($unit)); } - if($caller->isEmpty()){ - return null; - } return $caller; } public function getBattlePhaseSkillTriggerList(WarUnit $unit):?WarUnitTriggerCaller{ @@ -619,9 +616,6 @@ class General implements iAction{ $caller->merge($iObj->getBattlePhaseSkillTriggerList($unit)); } - if($caller->isEmpty()){ - return null; - } return $caller; } diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index 0b573651..2099ff96 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -281,7 +281,7 @@ class GeneralAI{ } $commandList['che_물자조달'] = ( - (GameConst::$minNationalGold + GameConst::$minNationalRice + 10000) / + (GameConst::$minNationalGold + GameConst::$minNationalRice + 24*5*$env['develcost']) / Util::valueFit($nation['gold'] + $nation['rice'], (GameConst::$defaultGold + GameConst::$defaultRice)/2) ) * 10; @@ -1435,7 +1435,7 @@ class GeneralAI{ return null; } - $frontCities = $db->query('SELECT city, front, officer4 FROM city WHERE nation=%i AND front > 0 AND supply = 1'); + $frontCities = $db->query('SELECT city, front, officer4 FROM city WHERE nation=%i AND front > 0 AND supply = 1', $nationID); if(!$frontCities){ //접경이 아직 없음 diff --git a/hwe/sammo/WarUnit.php b/hwe/sammo/WarUnit.php index fc6e9662..4e23b054 100644 --- a/hwe/sammo/WarUnit.php +++ b/hwe/sammo/WarUnit.php @@ -138,7 +138,7 @@ class WarUnit{ } function getLogger():ActionLogger{ - return $this->general->logger; + return $this->getGeneral()->getLogger(); } function getKilled():int{ @@ -219,7 +219,7 @@ class WarUnit{ $myAtt = $this->getComputedAttack(); $opDef = $oppose->getComputedDefence(); - // 감소할 병사 수 + // 감소할 병사 $warPower = GameConst::$armperphase + $myAtt - $opDef; $opposeWarPowerMultiply = 1.0; diff --git a/hwe/sammo/WarUnitCity.php b/hwe/sammo/WarUnitCity.php index 1daebf89..4dc8790e 100644 --- a/hwe/sammo/WarUnitCity.php +++ b/hwe/sammo/WarUnitCity.php @@ -13,6 +13,7 @@ class WarUnitCity extends WarUnit{ $general->setVar('city', $raw['city']); $general->setVar('nation', $raw['nation']); $general->initLogger($year, $month); + $this->general = $general; $this->raw = $raw; $this->rawNation = $rawNation; diff --git a/hwe/sammo/WarUnitTrigger/WarActivateSkills.php b/hwe/sammo/WarUnitTrigger/WarActivateSkills.php index fb924924..d18e0232 100644 --- a/hwe/sammo/WarUnitTrigger/WarActivateSkills.php +++ b/hwe/sammo/WarUnitTrigger/WarActivateSkills.php @@ -9,7 +9,7 @@ use sammo\Util; use sammo\ObjectTrigger; class WarActivateSkills extends BaseWarUnitTrigger{ - protected $priority = ObjectTrigger::PRIORITY_INIT; + protected $priority = ObjectTrigger::PRIORITY_BEGIN; protected $isSelf; protected $activeSkills; diff --git a/hwe/sammo/WarUnitTrigger/che_필살시도.php b/hwe/sammo/WarUnitTrigger/che_필살시도.php index 68e2f0ae..f77f99e5 100644 --- a/hwe/sammo/WarUnitTrigger/che_필살시도.php +++ b/hwe/sammo/WarUnitTrigger/che_필살시도.php @@ -6,6 +6,7 @@ use sammo\WarUnitCity; use sammo\WarUnit; use sammo\GameUnitDetail; use sammo\ObjectTrigger; +use sammo\Util; class che_필살시도 extends BaseWarUnitTrigger{ protected $priority = ObjectTrigger::PRIORITY_PRE + 100; @@ -25,7 +26,7 @@ class che_필살시도 extends BaseWarUnitTrigger{ return true; } - $this->activateSkill('특수', '필살시도', '필살'); + $self->activateSkill('특수', '필살시도', '필살'); return true; diff --git a/src/sammo/Util.php b/src/sammo/Util.php index 1911f78e..31741736 100644 --- a/src/sammo/Util.php +++ b/src/sammo/Util.php @@ -438,6 +438,9 @@ class Util extends \utilphp\util */ public static function valueFit($value, $min = null, $max = null) { + if($max !== null && $min !== null && $max < $min){ + return $min; + } if ($min !== null && $value < $min) { return $min; }