From 282b4135539596cfc6cc1726e9c89587c4bdf9ff Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sun, 8 May 2022 20:11:38 +0900 Subject: [PATCH] =?UTF-8?q?refac:=20InheritPointManager=EB=A5=BC=20Ds\Map?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 4 +- hwe/sammo/Enums/InheritanceKey.php | 2 +- hwe/sammo/General.php | 2 +- hwe/sammo/InheritancePointManager.php | 180 +++++++++++++------------- hwe/v_inheritPoint.php | 2 +- 5 files changed, 95 insertions(+), 95 deletions(-) diff --git a/hwe/func.php b/hwe/func.php index 522b9516..06999444 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -2015,10 +2015,10 @@ function deleteNation(General $lord, bool $applyDB): array // 전 장수 재야로 foreach ($nationGeneralList as $general) { $general->setAuxVar( - 'max_belong', + InheritanceKey::max_belong->value, max( $general->getVar('belong'), - $general->getAuxVar('max_belong') ?? 0 + $general->getAuxVar(InheritanceKey::max_belong->value) ?? 0 ) ); $general->setVar('belong', 0); diff --git a/hwe/sammo/Enums/InheritanceKey.php b/hwe/sammo/Enums/InheritanceKey.php index 603ec303..ad583a7c 100644 --- a/hwe/sammo/Enums/InheritanceKey.php +++ b/hwe/sammo/Enums/InheritanceKey.php @@ -10,7 +10,7 @@ enum InheritanceKey: string case max_belong = 'max_belong'; case max_domestic_critical = 'max_domestic_critical'; case active_action = 'active_action'; - case snipe_combat = 'snipe_combat'; + //case snipe_combat = 'snipe_combat'; case combat = 'combat'; case sabotage = 'sabotage'; case unifier = 'unifier'; diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index fcfd1a70..5781a291 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -1322,7 +1322,7 @@ class General implements iAction return $result; } - public function getInheritancePoint(InheritanceKey $key, &$aux = null, bool $forceCalc = false): int|float + public function getInheritancePoint(InheritanceKey $key, &$aux = null, bool $forceCalc = false): int|float|null { return InheritancePointManager::getInstance()->getInheritancePoint($this, $key, $aux, $forceCalc); } diff --git a/hwe/sammo/InheritancePointManager.php b/hwe/sammo/InheritancePointManager.php index 0ef90a29..f1718262 100644 --- a/hwe/sammo/InheritancePointManager.php +++ b/hwe/sammo/InheritancePointManager.php @@ -2,32 +2,33 @@ namespace sammo; -use sammo\VO\InheritancePointType;; +use sammo\VO\InheritancePointType; +use Ds\Map; use sammo\Enums\InheritanceKey; class InheritancePointManager { - /** @var array[string]InheritancePointType */ - public readonly array $inheritanceKey; + /** @var Map */ + public readonly Map $inheritanceKey; private static self|null $instance = null; private function __construct() { - $this->inheritanceKey = [ - InheritanceKey::previous->value => new InheritancePointType(true, 1, '기존 포인트'), - InheritanceKey::lived_month->value => new InheritancePointType(true, 1, '생존'), - InheritanceKey::max_belong->value => new InheritancePointType(false, 10, '최대 임관년 수'), - InheritanceKey::max_domestic_critical->value => new InheritancePointType(true, 1, '최대 연속 내정 성공'), - InheritanceKey::active_action->value => new InheritancePointType(true, 3, '능동 행동 수'), - //InheritanceKey::snipe_combat->value => new InheritancePointType(true, 10, '병종 상성 우위 횟수'), - InheritanceKey::combat->value => new InheritancePointType(['rank', 'warnum'], 5, '전투 횟수'), - InheritanceKey::sabotage->value => new InheritancePointType(['rank', 'firenum'], 20, '계략 성공 횟수'), - InheritanceKey::unifier->value => new InheritancePointType(true, 1, '천통 기여'), - InheritanceKey::dex->value => new InheritancePointType(false, 0.001, '숙련도'), - InheritanceKey::tournament->value => new InheritancePointType(true, 1, '토너먼트'), - InheritanceKey::betting->value => new InheritancePointType(false, 10, '베팅 당첨'), - ]; + $inheritanceKey = new Map(); + $inheritanceKey->put(InheritanceKey::previous, new InheritancePointType(true, 1, '기존 포인트')); + $inheritanceKey->put(InheritanceKey::lived_month, new InheritancePointType(true, 1, '생존')); + $inheritanceKey->put(InheritanceKey::max_belong, new InheritancePointType(false, 10, '최대 임관년 수')); + $inheritanceKey->put(InheritanceKey::max_domestic_critical, new InheritancePointType(true, 1, '최대 연속 내정 성공')); + $inheritanceKey->put(InheritanceKey::active_action, new InheritancePointType(true, 3, '능동 행동 수')); + //$inheritanceKey->put(InheritanceKey::snipe_combat, new InheritancePointType(true, 10, '병종 상성 우위 횟수')); + $inheritanceKey->put(InheritanceKey::combat, new InheritancePointType(['rank', 'warnum'], 5, '전투 횟수')); + $inheritanceKey->put(InheritanceKey::sabotage, new InheritancePointType(['rank', 'firenum'], 20, '계략 성공 횟수')); + $inheritanceKey->put(InheritanceKey::unifier, new InheritancePointType(true, 1, '천통 기여')); + $inheritanceKey->put(InheritanceKey::dex, new InheritancePointType(false, 0.001, '숙련도')); + $inheritanceKey->put(InheritanceKey::tournament, new InheritancePointType(true, 1, '토너먼트')); + $inheritanceKey->put(InheritanceKey::betting, new InheritancePointType(false, 10, '베팅 당첨')); + $this->inheritanceKey = $inheritanceKey; } public static function getInstance(): self @@ -40,13 +41,14 @@ class InheritancePointManager public function getInheritancePointType(InheritanceKey $key): InheritancePointType { - if (!key_exists($key->value, $this->inheritanceKey)) { - throw new \OutOfRangeException("{$key}는 유산 타입이 아님"); + $value = $this->inheritanceKey[$key]; + if ($value === null) { + throw new \OutOfRangeException("{$key->value}는 유산 타입이 아님"); } - return $this->inheritanceKey[$key->value]; + return $value; } - public function getInheritancePoint(General $general, InheritanceKey $key, &$aux = null, bool $forceCalc = false) + public function getInheritancePoint(General $general, InheritanceKey $key, &$aux = null, bool $forceCalc = false): int|float|null { $inheritType = $this->getInheritancePointType($key); @@ -91,7 +93,7 @@ class InheritancePointManager return [0, null]; }; switch ($key) { - case 'dex': + case InheritanceKey::dex: $extractFn = function () use ($general, $multiplier) { $dexLimit = Util::array_last(getDexLevelList())[0]; $totalDex = 0; @@ -106,7 +108,7 @@ class InheritancePointManager return [$totalDex * $multiplier, null]; }; break; - case 'betting': + case InheritanceKey::betting: $extractFn = function () use ($general, $multiplier) { $betWin = $general->getRankVar('betwin'); $betWinRate = $general->getRankVar('betwingold') / max(1, $general->getRankVar('betgold')); @@ -114,14 +116,14 @@ class InheritancePointManager return [$betWin * $multiplier * pow($betWinRate, 2), null]; }; break; - case 'max_belong': + case InheritanceKey::max_belong: $extractFn = function () use ($general, $multiplier) { - $maxBelong = max($general->getVar('belong'), $general->getAuxVar('max_belong') ?? 0); + $maxBelong = max($general->getVar('belong'), $general->getAuxVar(InheritanceKey::max_belong->value) ?? 0); return [$maxBelong * $multiplier, null]; }; break; default: - throw new \InvalidArgumentException("{$key}는 유산 추출기를 보유하고 있지 않음"); + throw new \InvalidArgumentException("{$key->value}는 유산 추출기를 보유하고 있지 않음"); } [$value, $aux] = ($extractFn)(); @@ -131,98 +133,99 @@ class InheritancePointManager public function setInheritancePoint(General $general, InheritanceKey $key, $value, $aux = null) { - if (!is_int($value) && !is_float($value)) { - throw new \InvalidArgumentException("{$value}는 숫자가 아님"); - } - $inheritType = InheritancePointManager::getInstance()->getInheritancePointType($key); + if (!is_int($value) && !is_float($value)) { + throw new \InvalidArgumentException("{$value}는 숫자가 아님"); + } + $inheritType = InheritancePointManager::getInstance()->getInheritancePointType($key); - $storeType = $inheritType->storeType; - $multiplier = $inheritType->pointCoeff; - if ($storeType !== true) { - throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님"); - } - if ($multiplier != 1 && $value != 0) { - throw new \InvalidArgumentException("{$key}는 1:1 유산 포인트가 아님"); - } + $storeType = $inheritType->storeType; + $multiplier = $inheritType->pointCoeff; + if ($storeType !== true) { + throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님"); + } + if ($multiplier != 1 && $value != 0) { + throw new \InvalidArgumentException("{$key}는 1:1 유산 포인트가 아님"); + } - $ownerID = $general->getVar('owner'); - if (!$ownerID) { - return; - } + $ownerID = $general->getVar('owner'); + if (!$ownerID) { + return; + } - if ($general->getVar('npc') >= 2) { - return; - } + if ($general->getVar('npc') >= 2) { + return; + } - $gameStor = KVStorage::getStorage(DB::db(), 'game_env'); - if ($gameStor->isunited != 0) { - return; - } + $gameStor = KVStorage::getStorage(DB::db(), 'game_env'); + if ($gameStor->isunited != 0) { + return; + } - $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); - $inheritStor->setValue($key, [$value, $aux]); + $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); + $inheritStor->setValue($key, [$value, $aux]); } public function increaseInheritancePoint(General $general, InheritanceKey $key, $value, $aux = null) { - if (!is_int($value) && !is_float($value)) { - throw new \InvalidArgumentException("{$value}는 숫자가 아님"); - } + if (!is_int($value) && !is_float($value)) { + throw new \InvalidArgumentException("{$value}는 숫자가 아님"); + } - $inheritType = InheritancePointManager::getInstance()->getInheritancePointType($key); + $inheritType = InheritancePointManager::getInstance()->getInheritancePointType($key); - $storeType = $inheritType->storeType; - $multiplier = $inheritType->pointCoeff; - if ($storeType !== true) { - throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님"); - } + $storeType = $inheritType->storeType; + $multiplier = $inheritType->pointCoeff; + if ($storeType !== true) { + throw new \InvalidArgumentException("{$key}는 직접 저장형 유산 포인트가 아님"); + } - $ownerID = $general->getVar('owner'); - if (!$ownerID) { - return; - } + $ownerID = $general->getVar('owner'); + if (!$ownerID) { + return; + } - if ($general->getVar('npc') >= 2) { - return; - } + if ($general->getVar('npc') >= 2) { + return; + } - $gameStor = KVStorage::getStorage(DB::db(), 'game_env'); - if ($gameStor->isunited != 0) { - return; - } + $gameStor = KVStorage::getStorage(DB::db(), 'game_env'); + if ($gameStor->isunited != 0) { + return; + } - $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); - [$oldValue, $oldAux] = $inheritStor->getValue($key->value) ?? [0, null]; + $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); + [$oldValue, $oldAux] = $inheritStor->getValue($key->value) ?? [0, null]; - if ($oldAux !== $aux) { - $oldValue = 0; - } + if ($oldAux !== $aux) { + $oldValue = 0; + } - $newValue = $oldValue + $value * $multiplier; - $inheritStor->setValue($key->value, [$newValue, $aux]); + $newValue = $oldValue + $value * $multiplier; + $inheritStor->setValue($key->value, [$newValue, $aux]); } - public function clearInheritancePoint(General $general){ + public function clearInheritancePoint(General $general) + { $ownerID = $general->getVar('owner'); - if(!$ownerID){ - return; + if (!$ownerID) { + return; } $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); $allPoints = $inheritStor->getAll(); if (!$allPoints || count($allPoints) == 0) { - //비었으므로 리셋 안함 - return; + //비었으므로 리셋 안함 + return; } if (count($allPoints) == 1 && key_exists(InheritanceKey::previous->value, $allPoints)) { - //이미 리셋되었으므로 리셋 안함 - return; + //이미 리셋되었으므로 리셋 안함 + return; } $previousPointInfo = $allPoints[InheritanceKey::previous->value]; $inheritStor->resetValues(); $inheritStor->setValue(InheritanceKey::previous->value, $previousPointInfo); -} + } public function mergeTotalInheritancePoint(General $general, bool $isEnd = false) { @@ -256,8 +259,7 @@ class InheritancePointManager $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}"); $inheritStor->cacheAll(); - foreach ($this->inheritanceKey as $rKey => $keyObj) { - $key = InheritanceKey::from($rKey); + foreach ($this->inheritanceKey as $key => $keyObj) { $storeType = $keyObj->storeType; $aux = null; $point = $general->getInheritancePoint($key, $aux, true); @@ -321,6 +323,4 @@ class InheritancePointManager $inheritStor->setValue(InheritanceKey::previous->value, [$totalPoint, null]); return $totalPoint; } - - } diff --git a/hwe/v_inheritPoint.php b/hwe/v_inheritPoint.php index 50aa80b8..c19a53ca 100644 --- a/hwe/v_inheritPoint.php +++ b/hwe/v_inheritPoint.php @@ -61,7 +61,7 @@ foreach (GameConst::$allItems as $subItems) { $items = []; foreach (InheritanceKey::cases() as $key) { - $items[$key] = $me->getInheritancePoint($key) ?? 0; + $items[$key->value] = $me->getInheritancePoint($key) ?? 0; } $resetTurnTimeLevel = ($me->getAuxVar('inheritResetTurnTime') ?? -1) + 1;