refac, game: 은퇴 시 포인트 반영 방식 변경

- 반영하지 않고 은퇴 이후로 넘기는 포인트 추가
- 은퇴시 계수를 Obj로 이동
This commit is contained in:
2022-10-02 19:41:38 +09:00
parent 22172ac66f
commit 50a75e4543
5 changed files with 43 additions and 35 deletions
+1 -2
View File
@@ -27,7 +27,6 @@ foreach ($db->queryFirstColumn(
$inheritPointManager = InheritancePointManager::getInstance();
foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
$inheritPointManager->mergeTotalInheritancePoint($genObj, true);
$inheritPointManager->mergeTotalInheritancePoint($genObj);
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
$inheritPointManager->clearInheritancePoint($genObj);
}
+1 -2
View File
@@ -1092,9 +1092,8 @@ function checkEmperior()
}
processSumInheritPointRank();
foreach ($allUserGenerals as $genObj) {
$inheritPointManager->mergeTotalInheritancePoint($genObj, true);
$inheritPointManager->mergeTotalInheritancePoint($genObj);
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
$inheritPointManager->clearInheritancePoint($genObj);
}
$gameStor->isunited = 2;
+3 -5
View File
@@ -626,7 +626,6 @@ class General implements iAction
$inheritPointManager = InheritancePointManager::getInstance();
$inheritPointManager->mergeTotalInheritancePoint($this);
$inheritPointManager->applyInheritanceUser($this->getVar('owner'));
$inheritPointManager->clearInheritancePoint($this);
}
@@ -686,9 +685,8 @@ class General implements iAction
$ownerID = $this->getVar('owner');
if ($ownerID) {
$inheritPointManager->mergeTotalInheritancePoint($this);
$inheritPointManager->mergeTotalInheritancePoint($this, true);
$inheritPointManager->applyInheritanceUser($ownerID, true);
$inheritPointManager->clearInheritancePoint($this);
}
$this->multiplyVarWithLimit('leadership', 0.85, 10);
@@ -1331,8 +1329,8 @@ class General implements iAction
return InheritancePointManager::getInstance()->increaseInheritancePoint($this, $key, $value, $aux);
}
public function mergeTotalInheritancePoint(bool $isEnd = false)
public function mergeTotalInheritancePoint(bool $isRebirth = false)
{
InheritancePointManager::getInstance()->mergeTotalInheritancePoint($this, $isEnd);
InheritancePointManager::getInstance()->mergeTotalInheritancePoint($this, $isRebirth);
}
}
+37 -26
View File
@@ -17,18 +17,18 @@ class InheritancePointManager
private function __construct()
{
$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::previous, new InheritancePointType(true, 1, '기존 포인트', 1));
$inheritanceKey->put(InheritanceKey::lived_month, new InheritancePointType(true, 1, '생존', 1));
$inheritanceKey->put(InheritanceKey::max_belong, new InheritancePointType(false, 10, '최대 임관년 수', null));
$inheritanceKey->put(InheritanceKey::max_domestic_critical, new InheritancePointType(true, 1, '최대 연속 내정 성공', null));
$inheritanceKey->put(InheritanceKey::active_action, new InheritancePointType(true, 3, '능동 행동 수', 1));
//$inheritanceKey->put(InheritanceKey::snipe_combat, new InheritancePointType(true, 10, '병종 상성 우위 횟수'));
$inheritanceKey->put(InheritanceKey::combat, new InheritancePointType(['rank', RankColumn::warnum], 5, '전투 횟수'));
$inheritanceKey->put(InheritanceKey::sabotage, new InheritancePointType(['rank', RankColumn::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, '베팅 당첨'));
$inheritanceKey->put(InheritanceKey::combat, new InheritancePointType(['rank', RankColumn::warnum], 5, '전투 횟수', 1));
$inheritanceKey->put(InheritanceKey::sabotage, new InheritancePointType(['rank', RankColumn::firenum], 20, '계략 성공 횟수', 1));
$inheritanceKey->put(InheritanceKey::unifier, new InheritancePointType(true, 1, '천통 기여', null));
$inheritanceKey->put(InheritanceKey::dex, new InheritancePointType(false, 0.001, '숙련도', 0.5));
$inheritanceKey->put(InheritanceKey::tournament, new InheritancePointType(true, 1, '토너먼트', 0.5));
$inheritanceKey->put(InheritanceKey::betting, new InheritancePointType(false, 10, '베팅 당첨', null));
$this->inheritanceKey = $inheritanceKey;
}
@@ -258,9 +258,8 @@ class InheritancePointManager
$inheritStor->setValue($key->value, [$newValue, $aux]);
}
public function clearInheritancePoint(General $general)
public function clearInheritancePoint(?int $ownerID)
{
$ownerID = $general->getVar('owner');
if (!$ownerID) {
return;
}
@@ -281,7 +280,7 @@ class InheritancePointManager
$inheritStor->setValue(InheritanceKey::previous->value, $previousPointInfo);
}
public function mergeTotalInheritancePoint(General $general, bool $isEnd = false)
public function mergeTotalInheritancePoint(General $general, bool $isRebirth = false)
{
$ownerID = $general->getVar('owner');
if (!$ownerID) {
@@ -296,7 +295,7 @@ class InheritancePointManager
$gameStor->cacheValues(['year', 'startyear', 'month']);
if ($general->getVar('npc') == 1) {
if (!$isEnd) {
if ($isRebirth) {
return;
}
@@ -331,18 +330,14 @@ class InheritancePointManager
}
function applyInheritanceUser(int $userID, bool $isRebirth = false): float
function applyInheritanceUser(int $ownerID, bool $isRebirth = false): float
{
if ($userID === 0) {
if ($ownerID === 0) {
return 0;
}
//FIXME: 굳이 merge, apply, clean 3단계를 거쳐야 할 이유가 없음
/** @var Map<InheritanceKey,float> */
$rebirthDegraded = new Map();
$rebirthDegraded[InheritanceKey::dex] = 0.5;
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$userID}");
$inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$ownerID}");
$totalPoint = 0;
/** @var array<string,array{0:float,1:string|float}> */
$allPoints = $inheritStor->getAll();
@@ -355,15 +350,27 @@ class InheritancePointManager
return $allPoints[InheritanceKey::previous->value][0];
}
$userLogger = new UserLogger($userID);
$userLogger = new UserLogger($ownerID);
$previousPoint = ($allPoints[InheritanceKey::previous->value] ?? [0, 0])[0];
foreach ($allPoints as $rKey => [$value,]) {
$keepValues = [];
foreach ($allPoints as $rKey => [$value, $auxV]) {
$key = InheritanceKey::from($rKey);
if ($isRebirth && $rebirthDegraded->hasKey($key)) {
$value *= $rebirthDegraded[$key];
/** @var InheritancePointType */
$keyTypeObj = $this->inheritanceKey->get($key);
if($isRebirth){
if($keyTypeObj->rebirthStoreCoeff === null){
$keepValues[$rKey] = [$value, $auxV];
continue;
}
$value *= $keyTypeObj->rebirthStoreCoeff;
}
$keyText = $this->getInheritancePointType($key)->info;
$userLogger->push("{$keyText} 포인트 {$value} 증가", "inheritPoint");
$totalPoint += $value;
@@ -373,6 +380,10 @@ class InheritancePointManager
$userLogger->flush();
$inheritStor->resetValues();
foreach($keepValues as $rKey => $pointPair){
$inheritStor->setValue($rKey, $pointPair);
}
$inheritStor->setValue(InheritanceKey::previous->value, [$totalPoint, null]);
return $totalPoint;
}
+1
View File
@@ -5,6 +5,7 @@ class InheritancePointType{
public bool|array $storeType,
public int|float $pointCoeff,
public string $info,
public ?float $rebirthStoreCoeff,
)
{