diff --git a/hwe/sammo/Command/General/che_숙련전환.php b/hwe/sammo/Command/General/che_숙련전환.php
index b6cc91e2..76a0aa34 100644
--- a/hwe/sammo/Command/General/che_숙련전환.php
+++ b/hwe/sammo/Command/General/che_숙련전환.php
@@ -1,242 +1,242 @@
-arg === null) {
- return false;
- }
- if (!key_exists('srcArmType', $this->arg)) {
- return false;
- }
- if (!key_exists('destArmType', $this->arg)) {
- return false;
- }
- $srcArmType = $this->arg['srcArmType'];
- $destArmType = $this->arg['destArmType'];
-
- if (!is_int($srcArmType)) {
- return false;
- }
- if (!key_exists($srcArmType, GameUnitConst::allType())) {
- return false;
- }
-
- if (!is_int($destArmType)) {
- return false;
- }
- if (!key_exists($destArmType, GameUnitConst::allType())) {
- return false;
- }
-
- if ($srcArmType === $destArmType) {
- return false;
- }
-
- $this->arg = [
- 'srcArmType' => $srcArmType,
- 'destArmType' => $destArmType
- ];
- return true;
- }
-
- protected function init()
- {
- $general = $this->generalObj;
-
- $this->setCity();
- $this->setNation();
-
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->minConditionConstraints = [
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice),
- ];
- }
-
- protected function initWithArg()
- {
- $this->srcArmType = $this->arg['srcArmType'];
- $this->srcArmTypeName = GameUnitConst::allType()[$this->srcArmType];
- $this->destArmType = $this->arg['destArmType'];
- $this->destArmTypeName = GameUnitConst::allType()[$this->destArmType];
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $this->fullConditionConstraints = [
- ConstraintHelper::NotBeNeutral(),
- ConstraintHelper::OccupiedCity(),
- ConstraintHelper::ReqGeneralGold($reqGold),
- ConstraintHelper::ReqGeneralRice($reqRice),
- ];
- }
-
- public function getBrief(): string
- {
- return "【{$this->srcArmTypeName}】숙련을 【{$this->destArmTypeName}】숙련으로 전환";
- }
-
- public function getCommandDetailTitle(): string
- {
- $name = $this->getName();
- [$reqGold, $reqRice] = $this->getCost();
-
- $title = "{$name}(통솔경험";
- if ($reqGold > 0) {
- $title .= ", 자금{$reqGold}";
- }
- if ($reqRice > 0) {
- $title .= ", 군량{$reqRice}";
- }
- $title .= ')';
- return $title;
- }
-
- public function getCost(): array
- {
- $env = $this->env;
- return [$env['develcost'], $env['develcost']];
- }
-
- public function getPreReqTurn(): int
- {
- return 0;
- }
-
- public function getPostReqTurn(): int
- {
- return 0;
- }
-
- public function run(): bool
- {
- if (!$this->hasFullConditionMet()) {
- throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
- }
-
- $db = DB::db();
-
- $general = $this->generalObj;
- $date = $general->getTurnTime($general::TURNTIME_HM);
-
- $logger = $general->getLogger();
-
- $srcDex = $general->getVar('dex' . $this->srcArmType);
- $cutDex = Util::toInt($srcDex * 0.25);
- $cutDexText = number_format($cutDex);
- $addDex = Util::toInt($cutDex * 9 / 10);
- $addDexText = number_format($addDex);
-
- $general->increaseVar('dex' . $this->srcArmType, -$cutDex);
- $general->increaseVar('dex' . $this->destArmType, $addDex);
-
- $josaUl = JosaUtil::pick($cutDex, '을');
- $josaRo = JosaUtil::pick($addDex, '로');
-
- [$reqGold, $reqRice] = $this->getCost();
-
- $logger->pushGeneralActionLog("{$this->srcArmTypeName} 숙련 {$cutDexText}{$josaUl} {$this->destArmTypeName} 숙련 {$addDexText}{$josaRo} 전환했습니다. <1>$date>");
-
- $general->addExperience(10);
- $general->increaseVarWithLimit('gold', -$reqGold, 0);
- $general->increaseVarWithLimit('rice', -$reqRice, 0);
- $general->increaseVar('leadership_exp', 2);
- $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
- $general->checkStatChange();
- tryUniqueItemLottery($general);
- $general->applyDB($db);
-
- return true;
- }
-
- public function getForm(): string
- {
- $db = DB::db();
-
- $general = $this->generalObj;
-
- $dexSrcTexts = [];
- $dexDestTexts = [];
- foreach (GameUnitConst::allType() as $armType => $armName) {
- $dexVal = $general->getVar('dex' . $armType);
- $dexValText = number_format($dexVal);
- $cutDex = Util::toInt($dexVal * 0.25);
- $addDex = Util::toInt($cutDex * 9 / 10);
- $addDexText = number_format($addDex);
- $newDex = $dexVal - $cutDex;
- $beforeDexLevel = getDexCall($dexVal);
- $afterDexLevel = getDexCall($newDex);
-
- $dexSrcTexts[$armType] = "{$armName} ({$beforeDexLevel} ⇒ {$afterDexLevel}, {$addDexText} 전환)";
- $dexDestTexts[$armType] = "{$armName} ({$dexValText})";
- }
-
- ob_start();
-?>
- 본인의 특정 병종 숙련을 25% 줄이고, 줄어든 숙련 중 9/10(90%p)를 다른 병종 숙련으로 전환합니다.
-
-
- 숙련을
-
-
- 숙련으로
-
-arg === null) {
+ return false;
+ }
+ if (!key_exists('srcArmType', $this->arg)) {
+ return false;
+ }
+ if (!key_exists('destArmType', $this->arg)) {
+ return false;
+ }
+ $srcArmType = $this->arg['srcArmType'];
+ $destArmType = $this->arg['destArmType'];
+
+ if (!is_int($srcArmType)) {
+ return false;
+ }
+ if (!key_exists($srcArmType, GameUnitConst::allType())) {
+ return false;
+ }
+
+ if (!is_int($destArmType)) {
+ return false;
+ }
+ if (!key_exists($destArmType, GameUnitConst::allType())) {
+ return false;
+ }
+
+ if ($srcArmType === $destArmType) {
+ return false;
+ }
+
+ $this->arg = [
+ 'srcArmType' => $srcArmType,
+ 'destArmType' => $destArmType
+ ];
+ return true;
+ }
+
+ protected function init()
+ {
+ $general = $this->generalObj;
+
+ $this->setCity();
+ $this->setNation();
+
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->minConditionConstraints = [
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice),
+ ];
+ }
+
+ protected function initWithArg()
+ {
+ $this->srcArmType = $this->arg['srcArmType'];
+ $this->srcArmTypeName = GameUnitConst::allType()[$this->srcArmType];
+ $this->destArmType = $this->arg['destArmType'];
+ $this->destArmTypeName = GameUnitConst::allType()[$this->destArmType];
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $this->fullConditionConstraints = [
+ ConstraintHelper::NotBeNeutral(),
+ ConstraintHelper::OccupiedCity(),
+ ConstraintHelper::ReqGeneralGold($reqGold),
+ ConstraintHelper::ReqGeneralRice($reqRice),
+ ];
+ }
+
+ public function getBrief(): string
+ {
+ return "【{$this->srcArmTypeName}】숙련을 【{$this->destArmTypeName}】숙련으로 전환";
+ }
+
+ public function getCommandDetailTitle(): string
+ {
+ $name = $this->getName();
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $title = "{$name}(통솔경험";
+ if ($reqGold > 0) {
+ $title .= ", 자금{$reqGold}";
+ }
+ if ($reqRice > 0) {
+ $title .= ", 군량{$reqRice}";
+ }
+ $title .= ')';
+ return $title;
+ }
+
+ public function getCost(): array
+ {
+ $env = $this->env;
+ return [$env['develcost'], $env['develcost']];
+ }
+
+ public function getPreReqTurn(): int
+ {
+ return 0;
+ }
+
+ public function getPostReqTurn(): int
+ {
+ return 0;
+ }
+
+ public function run(): bool
+ {
+ if (!$this->hasFullConditionMet()) {
+ throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
+ }
+
+ $db = DB::db();
+
+ $general = $this->generalObj;
+ $date = $general->getTurnTime($general::TURNTIME_HM);
+
+ $logger = $general->getLogger();
+
+ $srcDex = $general->getVar('dex' . $this->srcArmType);
+ $cutDex = Util::toInt($srcDex * 0.4);
+ $cutDexText = number_format($cutDex);
+ $addDex = Util::toInt($cutDex * 9 / 10);
+ $addDexText = number_format($addDex);
+
+ $general->increaseVar('dex' . $this->srcArmType, -$cutDex);
+ $general->increaseVar('dex' . $this->destArmType, $addDex);
+
+ $josaUl = JosaUtil::pick($cutDex, '을');
+ $josaRo = JosaUtil::pick($addDex, '로');
+
+ [$reqGold, $reqRice] = $this->getCost();
+
+ $logger->pushGeneralActionLog("{$this->srcArmTypeName} 숙련 {$cutDexText}{$josaUl} {$this->destArmTypeName} 숙련 {$addDexText}{$josaRo} 전환했습니다. <1>$date>");
+
+ $general->addExperience(10);
+ $general->increaseVarWithLimit('gold', -$reqGold, 0);
+ $general->increaseVarWithLimit('rice', -$reqRice, 0);
+ $general->increaseVar('leadership_exp', 2);
+ $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
+ $general->checkStatChange();
+ tryUniqueItemLottery($general);
+ $general->applyDB($db);
+
+ return true;
+ }
+
+ public function getForm(): string
+ {
+ $db = DB::db();
+
+ $general = $this->generalObj;
+
+ $dexSrcTexts = [];
+ $dexDestTexts = [];
+ foreach (GameUnitConst::allType() as $armType => $armName) {
+ $dexVal = $general->getVar('dex' . $armType);
+ $dexValText = number_format($dexVal);
+ $cutDex = Util::toInt($dexVal * 0.4);
+ $addDex = Util::toInt($cutDex * 9 / 10);
+ $addDexText = number_format($addDex);
+ $newDex = $dexVal - $cutDex;
+ $beforeDexLevel = getDexCall($dexVal);
+ $afterDexLevel = getDexCall($newDex);
+
+ $dexSrcTexts[$armType] = "{$armName} ({$beforeDexLevel} ⇒ {$afterDexLevel}, {$addDexText} 전환)";
+ $dexDestTexts[$armType] = "{$armName} ({$dexValText})";
+ }
+
+ ob_start();
+?>
+ 본인의 특정 병종 숙련을 40% 줄이고, 줄어든 숙련 중 9/10(90%p)를 다른 병종 숙련으로 전환합니다.
+
+
+ 숙련을
+
+
+ 숙련으로
+
+