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;
}