diff --git a/hwe/sammo/Command/General/che_기술연구.php b/hwe/sammo/Command/General/che_기술연구.php
index 79892d26..6c9f9a2a 100644
--- a/hwe/sammo/Command/General/che_기술연구.php
+++ b/hwe/sammo/Command/General/che_기술연구.php
@@ -1,137 +1,137 @@
-arg = null;
- return true;
- }
-
- protected function init()
- {
-
- $general = $this->generalObj;
-
- $this->setCity();
- $this->setNation(['tech']);
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->fullConditionConstraints=[
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::NotWanderingNation(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::SuppliedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice)
- ];
-
- $this->reqGold = $reqGold;
- }
-
- public function run():bool{
- if(!$this->hasFullConditionMet()){
- throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
- }
-
- $db = DB::db();
-
- $general = $this->generalObj;
-
- $trust = Util::valueFit($this->city['trust'], 50);
-
- $score = Util::valueFit($this->calcBaseScore(), 1);
-
- ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
- if($trust < 80){
- $successRatio *= $trust / 80;
- }
- $successRatio = $general->onCalcDomestic(static::$cityKey, 'success', $successRatio);
- $failRatio = $general->onCalcDomestic(static::$cityKey, 'fail', $failRatio);
-
- $successRatio = Util::valueFit($successRatio, 0, 1);
- $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
- $normalRatio = 1 - $failRatio - $successRatio;
-
- $pick = Util::choiceRandomUsingWeight([
- 'fail'=>$failRatio,
- 'success'=>$successRatio,
- 'normal'=>$normalRatio
- ]);
-
- $logger = $general->getLogger();
-
- $date = $general->getTurnTime($general::TURNTIME_HM);
-
- $score *= CriticalScoreEx($pick);
- $score = Util::round($score);
-
- $exp = $score * 0.7;
- $ded = $score * 1.0;
-
- $scoreText = number_format($score, 0);
-
- $josaUl = JosaUtil::pick(static::$actionName, '을');
- if($pick == 'fail'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else if($pick == 'success'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else{
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
- }
-
- if(TechLimit($this->env['startyear'], $this->env['year'], $this->nation['tech'])){
- $score /= 4;
- }
-
- $genCount = Util::valueFit(
- $db->queryFirstField('SELECT gennum FROM nation WHERE nation=%i', $general->getVar('nation')),
- GameConst::$initialNationGenLimit
- );
-
- $nationUpdated = [
- 'tech' => $this->nation['tech'] + $score/$genCount
- ];
- $db->update('nation', $nationUpdated, 'nation=%i', $general->getVar('nation'));
-
- $general->increaseVarWithLimit('gold', -$this->reqGold, 0);
- $general->addExperience($exp);
- $general->addDedication($ded);
- $general->increaseVar(static::$statKey.'_exp', 1);
-
- $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
- $general->checkStatChange();
- tryUniqueItemLottery($general);
- $general->applyDB($db);
-
- return true;
- }
-
-
+arg = null;
+ return true;
+ }
+
+ protected function init()
+ {
+
+ $general = $this->generalObj;
+
+ $this->setCity();
+ $this->setNation(['tech']);
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->fullConditionConstraints=[
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::NotWanderingNation(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::SuppliedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice)
+ ];
+
+ $this->reqGold = $reqGold;
+ }
+
+ public function run():bool{
+ if(!$this->hasFullConditionMet()){
+ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
+ }
+
+ $db = DB::db();
+
+ $general = $this->generalObj;
+
+ $trust = Util::valueFit($this->city['trust'], 50);
+
+ $score = Util::valueFit($this->calcBaseScore(), 1);
+
+ ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
+ if($trust < 80){
+ $successRatio *= $trust / 80;
+ }
+ $successRatio = $general->onCalcDomestic(static::$actionKey, 'success', $successRatio);
+ $failRatio = $general->onCalcDomestic(static::$actionKey, 'fail', $failRatio);
+
+ $successRatio = Util::valueFit($successRatio, 0, 1);
+ $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
+ $normalRatio = 1 - $failRatio - $successRatio;
+
+ $pick = Util::choiceRandomUsingWeight([
+ 'fail'=>$failRatio,
+ 'success'=>$successRatio,
+ 'normal'=>$normalRatio
+ ]);
+
+ $logger = $general->getLogger();
+
+ $date = $general->getTurnTime($general::TURNTIME_HM);
+
+ $score *= CriticalScoreEx($pick);
+ $score = Util::round($score);
+
+ $exp = $score * 0.7;
+ $ded = $score * 1.0;
+
+ $scoreText = number_format($score, 0);
+
+ $josaUl = JosaUtil::pick(static::$actionName, '을');
+ if($pick == 'fail'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else if($pick == 'success'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else{
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+
+ if(TechLimit($this->env['startyear'], $this->env['year'], $this->nation['tech'])){
+ $score /= 4;
+ }
+
+ $genCount = Util::valueFit(
+ $db->queryFirstField('SELECT gennum FROM nation WHERE nation=%i', $general->getVar('nation')),
+ GameConst::$initialNationGenLimit
+ );
+
+ $nationUpdated = [
+ 'tech' => $this->nation['tech'] + $score/$genCount
+ ];
+ $db->update('nation', $nationUpdated, 'nation=%i', $general->getVar('nation'));
+
+ $general->increaseVarWithLimit('gold', -$this->reqGold, 0);
+ $general->addExperience($exp);
+ $general->addDedication($ded);
+ $general->increaseVar(static::$statKey.'_exp', 1);
+
+ $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+ $general->checkStatChange();
+ tryUniqueItemLottery($general);
+ $general->applyDB($db);
+
+ return true;
+ }
+
+
}
\ No newline at end of file
diff --git a/hwe/sammo/Command/General/che_상업투자.php b/hwe/sammo/Command/General/che_상업투자.php
index 8b8f3ea8..9643a3e2 100644
--- a/hwe/sammo/Command/General/che_상업투자.php
+++ b/hwe/sammo/Command/General/che_상업투자.php
@@ -1,208 +1,208 @@
-arg = null;
- return true;
- }
-
- protected function init(){
-
- $general = $this->generalObj;
-
- $this->setCity();
- $this->setNation();
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->fullConditionConstraints=[
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::NotWanderingNation(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::SuppliedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice),
- ConstraintHelper::RemainCityCapacity(static::$cityKey, static::$actionName)
- ];
-
- $this->reqGold = $reqGold;
- }
-
- public function getCommandDetailTitle():string{
- $name = $this->getName();
- $statTypeBase = [
- 'leadership'=>'통솔경험',
- 'strength'=>'무력경험',
- 'intel'=>'지력경험',
- ];
- $statType = $statTypeBase[static::$statKey];
- [$reqGold, $reqRice] = $this->getCost();
-
- $title = "{$name}({$statType}";
- if($reqGold > 0){
- $title .= ", 자금{$reqGold}";
- }
- if($reqRice > 0){
- $title .= ", 군량{$reqRice}";
- }
- $title .= ')';
- return $title;
- }
-
- public function getCost():array{
- $develCost = $this->env['develcost'];
- $reqGold = Util::round($this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost));
- $reqRice = 0;
-
- return [$reqGold, $reqRice];
- }
-
-
- public function getCompensationStyle():?int{
- return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
- }
-
- public function getPreReqTurn():int{
- return 0;
- }
-
- public function getPostReqTurn():int{
- return 0;
- }
-
- protected function calcBaseScore():float{
- $trust = Util::valueFit($this->city['trust'], 50);
- $general = $this->generalObj;
-
- if(static::$statKey == 'intel'){
- $score = $general->getIntel(true, true, true, false);
- }
- else if(static::$statKey == 'strength'){
- $score = $general->getStrength(true, true, true, false);
- }
- else if(static::$statKey == 'leadership'){
- $score = $general->getLeadership(true, true, true, false);
- }
- else{
- throw new \sammo\MustNotBeReachedException();
- }
-
- $score *= $trust / 100;
- $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
- $score *= Util::randRange(0.8, 1.2);
- $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
-
- return $score;
- }
-
- public function run():bool{
- if(!$this->hasFullConditionMet()){
- throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
- }
-
- $db = DB::db();
-
- $general = $this->generalObj;
-
- $trust = Util::valueFit($this->city['trust'], 50);
-
- $score = Util::valueFit($this->calcBaseScore(), 1);
-
- ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
- if($trust < 80){
- $successRatio *= $trust / 80;
- }
- $successRatio = $general->onCalcDomestic(static::$cityKey, 'success', $successRatio);
- $failRatio = $general->onCalcDomestic(static::$cityKey, 'fail', $failRatio);
-
- $successRatio = Util::valueFit($successRatio, 0, 1);
- $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
- $normalRatio = 1 - $failRatio - $successRatio;
-
- $pick = Util::choiceRandomUsingWeight([
- 'fail'=>$failRatio,
- 'success'=>$successRatio,
- 'normal'=>$normalRatio
- ]);
-
- $logger = $general->getLogger();
-
- $date = $general->getTurnTime($general::TURNTIME_HM);
-
- $score *= CriticalScoreEx($pick);
- $score = Util::round($score);
-
- $exp = $score * 0.7;
- $ded = $score * 1.0;
-
- $scoreText = number_format($score, 0);
-
- $josaUl = JosaUtil::pick(static::$actionName, '을');
- if($pick == 'fail'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else if($pick == 'success'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else{
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
- }
-
- if(in_array($this->city['front'], [1, 3]) && $this->nation['capital'] != $this->city['city']){
- $score *= static::$debuffFront;
- }
-
- //NOTE: 내정량 상승시 초과 가능?
- $cityUpdated = [
- static::$cityKey => Util::valueFit(
- $this->city[static::$cityKey] + $score,
- 0,
- $this->city[static::$cityKey.'_max']
- )
- ];
- $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
-
- $general->increaseVarWithLimit('gold', -$this->reqGold, 0);
- $general->addExperience($exp);
- $general->addDedication($ded);
- $general->increaseVar(static::$statKey.'_exp', 1);
- $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
- $general->checkStatChange();
- tryUniqueItemLottery($general);
- $general->applyDB($db);
-
- return true;
- }
-
-
+arg = null;
+ return true;
+ }
+
+ protected function init(){
+
+ $general = $this->generalObj;
+
+ $this->setCity();
+ $this->setNation();
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->fullConditionConstraints=[
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::NotWanderingNation(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::SuppliedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice),
+ ConstraintHelper::RemainCityCapacity(static::$cityKey, static::$actionName)
+ ];
+
+ $this->reqGold = $reqGold;
+ }
+
+ public function getCommandDetailTitle():string{
+ $name = $this->getName();
+ $statTypeBase = [
+ 'leadership'=>'통솔경험',
+ 'strength'=>'무력경험',
+ 'intel'=>'지력경험',
+ ];
+ $statType = $statTypeBase[static::$statKey];
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $title = "{$name}({$statType}";
+ if($reqGold > 0){
+ $title .= ", 자금{$reqGold}";
+ }
+ if($reqRice > 0){
+ $title .= ", 군량{$reqRice}";
+ }
+ $title .= ')';
+ return $title;
+ }
+
+ public function getCost():array{
+ $develCost = $this->env['develcost'];
+ $reqGold = Util::round($this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost));
+ $reqRice = 0;
+
+ return [$reqGold, $reqRice];
+ }
+
+
+ public function getCompensationStyle():?int{
+ return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
+ }
+
+ public function getPreReqTurn():int{
+ return 0;
+ }
+
+ public function getPostReqTurn():int{
+ return 0;
+ }
+
+ protected function calcBaseScore():float{
+ $trust = Util::valueFit($this->city['trust'], 50);
+ $general = $this->generalObj;
+
+ if(static::$statKey == 'intel'){
+ $score = $general->getIntel(true, true, true, false);
+ }
+ else if(static::$statKey == 'strength'){
+ $score = $general->getStrength(true, true, true, false);
+ }
+ else if(static::$statKey == 'leadership'){
+ $score = $general->getLeadership(true, true, true, false);
+ }
+ else{
+ throw new \sammo\MustNotBeReachedException();
+ }
+
+ $score *= $trust / 100;
+ $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
+ $score *= Util::randRange(0.8, 1.2);
+ $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
+
+ return $score;
+ }
+
+ public function run():bool{
+ if(!$this->hasFullConditionMet()){
+ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
+ }
+
+ $db = DB::db();
+
+ $general = $this->generalObj;
+
+ $trust = Util::valueFit($this->city['trust'], 50);
+
+ $score = Util::valueFit($this->calcBaseScore(), 1);
+
+ ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
+ if($trust < 80){
+ $successRatio *= $trust / 80;
+ }
+ $successRatio = $general->onCalcDomestic(static::$actionKey, 'success', $successRatio);
+ $failRatio = $general->onCalcDomestic(static::$actionKey, 'fail', $failRatio);
+
+ $successRatio = Util::valueFit($successRatio, 0, 1);
+ $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
+ $normalRatio = 1 - $failRatio - $successRatio;
+
+ $pick = Util::choiceRandomUsingWeight([
+ 'fail'=>$failRatio,
+ 'success'=>$successRatio,
+ 'normal'=>$normalRatio
+ ]);
+
+ $logger = $general->getLogger();
+
+ $date = $general->getTurnTime($general::TURNTIME_HM);
+
+ $score *= CriticalScoreEx($pick);
+ $score = Util::round($score);
+
+ $exp = $score * 0.7;
+ $ded = $score * 1.0;
+
+ $scoreText = number_format($score, 0);
+
+ $josaUl = JosaUtil::pick(static::$actionName, '을');
+ if($pick == 'fail'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else if($pick == 'success'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else{
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+
+ if(in_array($this->city['front'], [1, 3]) && $this->nation['capital'] != $this->city['city']){
+ $score *= static::$debuffFront;
+ }
+
+ //NOTE: 내정량 상승시 초과 가능?
+ $cityUpdated = [
+ static::$cityKey => Util::valueFit(
+ $this->city[static::$cityKey] + $score,
+ 0,
+ $this->city[static::$cityKey.'_max']
+ )
+ ];
+ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
+
+ $general->increaseVarWithLimit('gold', -$this->reqGold, 0);
+ $general->addExperience($exp);
+ $general->addDedication($ded);
+ $general->increaseVar(static::$statKey.'_exp', 1);
+ $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+ $general->checkStatChange();
+ tryUniqueItemLottery($general);
+ $general->applyDB($db);
+
+ return true;
+ }
+
+
}
\ No newline at end of file
diff --git a/hwe/sammo/Command/General/che_정착장려.php b/hwe/sammo/Command/General/che_정착장려.php
index 05586f14..60f5ba7a 100644
--- a/hwe/sammo/Command/General/che_정착장려.php
+++ b/hwe/sammo/Command/General/che_정착장려.php
@@ -1,191 +1,191 @@
-arg = null;
- return true;
- }
-
- protected function init(){
-
- $general = $this->generalObj;
-
- $this->setCity();
- $this->setNation();
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->fullConditionConstraints=[
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::NotWanderingNation(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::SuppliedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice),
- ConstraintHelper::RemainCityCapacity(static::$cityKey, static::$actionName)
- ];
-
- $this->reqRice = $reqRice;
- }
-
- public function getCommandDetailTitle():string{
- $name = $this->getName();
- $statTypeBase = [
- 'leadership'=>'통솔경험',
- 'strength'=>'무력경험',
- 'intel'=>'지력경험',
- ];
- $statType = $statTypeBase[static::$statKey];
- [$reqGold, $reqRice] = $this->getCost();
-
- $title = "{$name}({$statType}";
- if($reqGold > 0){
- $title .= ", 자금{$reqGold}";
- }
- if($reqRice > 0){
- $title .= ", 군량{$reqRice}";
- }
- $title .= ')';
- return $title;
- }
-
- public function getCost():array{
- $develCost = $this->env['develcost'] * 2;
- $reqGold = 0;
- $reqRice = Util::round($this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost));
-
- return [$reqGold, $reqRice];
- }
-
- public function getCompensationStyle():?int{
- return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
- }
-
- public function getPreReqTurn():int{
- return 0;
- }
-
- public function getPostReqTurn():int{
- return 0;
- }
-
- protected function calcBaseScore():float{
- $general = $this->generalObj;
-
- if(static::$statKey == 'leadership'){
- $score = $general->getLeadership(true, true, true, false);
- }
- else{
- throw new \sammo\MustNotBeReachedException();
- }
-
- $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
- $score *= Util::randRange(0.8, 1.2);
- $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
-
- return $score;
- }
-
- public function run():bool{
- if(!$this->hasFullConditionMet()){
- throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
- }
-
- $db = DB::db();
-
- $general = $this->generalObj;
-
- $score = Util::valueFit($this->calcBaseScore(), 1);
-
- ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
- $successRatio = $general->onCalcDomestic(static::$cityKey, 'success', $successRatio);
- $failRatio = $general->onCalcDomestic(static::$cityKey, 'fail', $failRatio);
-
- $successRatio = Util::valueFit($successRatio, 0, 1);
- $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
- $normalRatio = 1 - $failRatio - $successRatio;
-
- $pick = Util::choiceRandomUsingWeight([
- 'fail'=>$failRatio,
- 'success'=>$successRatio,
- 'normal'=>$normalRatio
- ]);
-
- $logger = $general->getLogger();
-
- $date = $general->getTurnTime($general::TURNTIME_HM);
-
- $score *= CriticalScoreEx($pick);
- $score = Util::round($score);
-
- $exp = $score * 0.7;
- $ded = $score * 1.0;
-
- $score *= 10;
-
- $scoreText = number_format($score, 0);
-
- $josaUl = JosaUtil::pick(static::$actionName, '을');
- if($pick == 'fail'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
- }
- else if($pick == 'success'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
- }
- else{
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
- }
-
- //NOTE: 내정량 상승시 초과 가능?
- $cityUpdated = [
- static::$cityKey => Util::valueFit(
- $this->city[static::$cityKey] + $score,
- 0,
- $this->city[static::$cityKey.'_max']
- )
- ];
- $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
-
- $general->increaseVarWithLimit('rice', -$this->reqRice, 0);
- $general->addExperience($exp);
- $general->addDedication($ded);
- $general->increaseVar(static::$statKey.'_exp', 1);
- $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
- $general->checkStatChange();
- tryUniqueItemLottery($general);
- $general->applyDB($db);
-
- return true;
- }
-
-
+arg = null;
+ return true;
+ }
+
+ protected function init(){
+
+ $general = $this->generalObj;
+
+ $this->setCity();
+ $this->setNation();
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->fullConditionConstraints=[
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::NotWanderingNation(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::SuppliedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice),
+ ConstraintHelper::RemainCityCapacity(static::$cityKey, static::$actionName)
+ ];
+
+ $this->reqRice = $reqRice;
+ }
+
+ public function getCommandDetailTitle():string{
+ $name = $this->getName();
+ $statTypeBase = [
+ 'leadership'=>'통솔경험',
+ 'strength'=>'무력경험',
+ 'intel'=>'지력경험',
+ ];
+ $statType = $statTypeBase[static::$statKey];
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $title = "{$name}({$statType}";
+ if($reqGold > 0){
+ $title .= ", 자금{$reqGold}";
+ }
+ if($reqRice > 0){
+ $title .= ", 군량{$reqRice}";
+ }
+ $title .= ')';
+ return $title;
+ }
+
+ public function getCost():array{
+ $develCost = $this->env['develcost'] * 2;
+ $reqGold = 0;
+ $reqRice = Util::round($this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost));
+
+ return [$reqGold, $reqRice];
+ }
+
+ public function getCompensationStyle():?int{
+ return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
+ }
+
+ public function getPreReqTurn():int{
+ return 0;
+ }
+
+ public function getPostReqTurn():int{
+ return 0;
+ }
+
+ protected function calcBaseScore():float{
+ $general = $this->generalObj;
+
+ if(static::$statKey == 'leadership'){
+ $score = $general->getLeadership(true, true, true, false);
+ }
+ else{
+ throw new \sammo\MustNotBeReachedException();
+ }
+
+ $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
+ $score *= Util::randRange(0.8, 1.2);
+ $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
+
+ return $score;
+ }
+
+ public function run():bool{
+ if(!$this->hasFullConditionMet()){
+ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
+ }
+
+ $db = DB::db();
+
+ $general = $this->generalObj;
+
+ $score = Util::valueFit($this->calcBaseScore(), 1);
+
+ ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
+ $successRatio = $general->onCalcDomestic(static::$actionKey, 'success', $successRatio);
+ $failRatio = $general->onCalcDomestic(static::$actionKey, 'fail', $failRatio);
+
+ $successRatio = Util::valueFit($successRatio, 0, 1);
+ $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
+ $normalRatio = 1 - $failRatio - $successRatio;
+
+ $pick = Util::choiceRandomUsingWeight([
+ 'fail'=>$failRatio,
+ 'success'=>$successRatio,
+ 'normal'=>$normalRatio
+ ]);
+
+ $logger = $general->getLogger();
+
+ $date = $general->getTurnTime($general::TURNTIME_HM);
+
+ $score *= CriticalScoreEx($pick);
+ $score = Util::round($score);
+
+ $exp = $score * 0.7;
+ $ded = $score * 1.0;
+
+ $score *= 10;
+
+ $scoreText = number_format($score, 0);
+
+ $josaUl = JosaUtil::pick(static::$actionName, '을');
+ if($pick == 'fail'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
+ }
+ else if($pick == 'success'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
+ }
+ else{
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 주민이 $scoreText>명 증가했습니다. <1>$date>");
+ }
+
+ //NOTE: 내정량 상승시 초과 가능?
+ $cityUpdated = [
+ static::$cityKey => Util::valueFit(
+ $this->city[static::$cityKey] + $score,
+ 0,
+ $this->city[static::$cityKey.'_max']
+ )
+ ];
+ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
+
+ $general->increaseVarWithLimit('rice', -$this->reqRice, 0);
+ $general->addExperience($exp);
+ $general->addDedication($ded);
+ $general->increaseVar(static::$statKey.'_exp', 1);
+ $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+ $general->checkStatChange();
+ tryUniqueItemLottery($general);
+ $general->applyDB($db);
+
+ return true;
+ }
+
+
}
\ No newline at end of file
diff --git a/hwe/sammo/Command/General/che_주민선정.php b/hwe/sammo/Command/General/che_주민선정.php
index a78c6200..85335d76 100644
--- a/hwe/sammo/Command/General/che_주민선정.php
+++ b/hwe/sammo/Command/General/che_주민선정.php
@@ -1,191 +1,191 @@
-arg = null;
- return true;
- }
-
- protected function init(){
-
- $general = $this->generalObj;
-
- $this->setCity();
- $this->setNation();
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->fullConditionConstraints=[
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::NotWanderingNation(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::SuppliedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice),
- ConstraintHelper::RemainCityTrust(static::$actionName)
- ];
-
- $this->reqRice = $reqRice;
- }
-
- public function getCommandDetailTitle():string{
- $name = $this->getName();
- $statTypeBase = [
- 'leadership'=>'통솔경험',
- 'strength'=>'무력경험',
- 'intel'=>'지력경험',
- ];
- $statType = $statTypeBase[static::$statKey];
- [$reqGold, $reqRice] = $this->getCost();
-
- $title = "{$name}({$statType}";
- if($reqGold > 0){
- $title .= ", 자금{$reqGold}";
- }
- if($reqRice > 0){
- $title .= ", 군량{$reqRice}";
- }
- $title .= ')';
- return $title;
- }
-
- public function getCost():array{
- $develCost = $this->env['develcost'] * 2;
- $reqGold = 0;
- $reqRice = $this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost);
-
- return [$reqGold, Util::round($reqRice)];
- }
-
- public function getCompensationStyle():?int{
- return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
- }
-
- public function getPreReqTurn():int{
- return 0;
- }
-
- public function getPostReqTurn():int{
- return 0;
- }
-
- protected function calcBaseScore():float{
- $general = $this->generalObj;
-
- if(static::$statKey == 'leadership'){
- $score = $general->getLeadership(true, true, true, false);
- }
- else{
- throw new \sammo\MustNotBeReachedException();
- }
-
- $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
- $score *= Util::randRange(0.8, 1.2);
- $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
- $score = Util::valueFit($score, 1);
-
- return $score;
- }
-
- public function run():bool{
- if(!$this->hasFullConditionMet()){
- throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
- }
-
- $db = DB::db();
-
- $general = $this->generalObj;
-
- $score = Util::valueFit($this->calcBaseScore(), 1);
-
- ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
- $successRatio = $general->onCalcDomestic(static::$cityKey, 'success', $successRatio);
- $failRatio = $general->onCalcDomestic(static::$cityKey, 'fail', $failRatio);
-
- $successRatio = Util::valueFit($successRatio, 0, 1);
- $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
- $normalRatio = 1 - $failRatio - $successRatio;
-
- $pick = Util::choiceRandomUsingWeight([
- 'fail'=>$failRatio,
- 'success'=>$successRatio,
- 'normal'=>$normalRatio
- ]);
-
- $logger = $general->getLogger();
-
- $date = $general->getTurnTime($general::TURNTIME_HM);
-
- $score *= CriticalScoreEx($pick);
-
- $exp = $score * 0.7;
- $ded = $score * 1.0;
-
- $score /= 10;
-
- $scoreText = number_format($score, 1);
-
- $josaUl = JosaUtil::pick(static::$actionName, '을');
- if($pick == 'fail'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else if($pick == 'success'){
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
- }
- else{
- $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
- }
-
- //NOTE: 내정량 상승시 초과 가능?
- $cityUpdated = [
- static::$cityKey => Util::valueFit(
- $this->city[static::$cityKey] + $score,
- 0,
- 100
- )
- ];
- $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
-
- $general->increaseVarWithLimit('rice', -$this->reqRice, 0);
- $general->addExperience($exp);
- $general->addDedication($ded);
- $general->increaseVar(static::$statKey.'_exp', 1);
- $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
- $general->checkStatChange();
- tryUniqueItemLottery($general);
- $general->applyDB($db);
-
- return true;
- }
-
-
+arg = null;
+ return true;
+ }
+
+ protected function init(){
+
+ $general = $this->generalObj;
+
+ $this->setCity();
+ $this->setNation();
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->fullConditionConstraints=[
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::NotWanderingNation(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::SuppliedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice),
+ ConstraintHelper::RemainCityTrust(static::$actionName)
+ ];
+
+ $this->reqRice = $reqRice;
+ }
+
+ public function getCommandDetailTitle():string{
+ $name = $this->getName();
+ $statTypeBase = [
+ 'leadership'=>'통솔경험',
+ 'strength'=>'무력경험',
+ 'intel'=>'지력경험',
+ ];
+ $statType = $statTypeBase[static::$statKey];
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $title = "{$name}({$statType}";
+ if($reqGold > 0){
+ $title .= ", 자금{$reqGold}";
+ }
+ if($reqRice > 0){
+ $title .= ", 군량{$reqRice}";
+ }
+ $title .= ')';
+ return $title;
+ }
+
+ public function getCost():array{
+ $develCost = $this->env['develcost'] * 2;
+ $reqGold = 0;
+ $reqRice = $this->generalObj->onCalcDomestic(static::$actionKey, 'cost', $develCost);
+
+ return [$reqGold, Util::round($reqRice)];
+ }
+
+ public function getCompensationStyle():?int{
+ return $this->generalObj->onCalcDomestic(static::$actionKey, 'score', 100)<=>100;
+ }
+
+ public function getPreReqTurn():int{
+ return 0;
+ }
+
+ public function getPostReqTurn():int{
+ return 0;
+ }
+
+ protected function calcBaseScore():float{
+ $general = $this->generalObj;
+
+ if(static::$statKey == 'leadership'){
+ $score = $general->getLeadership(true, true, true, false);
+ }
+ else{
+ throw new \sammo\MustNotBeReachedException();
+ }
+
+ $score *= getDomesticExpLevelBonus($general->getVar('explevel'));
+ $score *= Util::randRange(0.8, 1.2);
+ $score = $general->onCalcDomestic(static::$actionKey, 'score', $score);
+ $score = Util::valueFit($score, 1);
+
+ return $score;
+ }
+
+ public function run():bool{
+ if(!$this->hasFullConditionMet()){
+ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
+ }
+
+ $db = DB::db();
+
+ $general = $this->generalObj;
+
+ $score = Util::valueFit($this->calcBaseScore(), 1);
+
+ ['success'=>$successRatio, 'fail'=>$failRatio] = CriticalRatioDomestic($general, static::$statKey);
+ $successRatio = $general->onCalcDomestic(static::$actionKey, 'success', $successRatio);
+ $failRatio = $general->onCalcDomestic(static::$actionKey, 'fail', $failRatio);
+
+ $successRatio = Util::valueFit($successRatio, 0, 1);
+ $failRatio = Util::valueFit($failRatio, 0, 1 - $successRatio);
+ $normalRatio = 1 - $failRatio - $successRatio;
+
+ $pick = Util::choiceRandomUsingWeight([
+ 'fail'=>$failRatio,
+ 'success'=>$successRatio,
+ 'normal'=>$normalRatio
+ ]);
+
+ $logger = $general->getLogger();
+
+ $date = $general->getTurnTime($general::TURNTIME_HM);
+
+ $score *= CriticalScoreEx($pick);
+
+ $exp = $score * 0.7;
+ $ded = $score * 1.0;
+
+ $score /= 10;
+
+ $scoreText = number_format($score, 1);
+
+ $josaUl = JosaUtil::pick(static::$actionName, '을');
+ if($pick == 'fail'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 실패하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else if($pick == 'success'){
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 성공>하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+ else{
+ $logger->pushGeneralActionLog(static::$actionName."{$josaUl} 하여 $scoreText> 상승했습니다. <1>$date>");
+ }
+
+ //NOTE: 내정량 상승시 초과 가능?
+ $cityUpdated = [
+ static::$cityKey => Util::valueFit(
+ $this->city[static::$cityKey] + $score,
+ 0,
+ 100
+ )
+ ];
+ $db->update('city', $cityUpdated, 'city=%i', $general->getVar('city'));
+
+ $general->increaseVarWithLimit('rice', -$this->reqRice, 0);
+ $general->addExperience($exp);
+ $general->addDedication($ded);
+ $general->increaseVar(static::$statKey.'_exp', 1);
+ $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+ $general->checkStatChange();
+ tryUniqueItemLottery($general);
+ $general->applyDB($db);
+
+ return true;
+ }
+
+
}
\ No newline at end of file