From f66008da56e99c447f43b2824b9d7bb5df2cbfeb Mon Sep 17 00:00:00 2001 From: Hide_D Date: Fri, 7 Jul 2023 17:08:05 +0000 Subject: [PATCH] =?UTF-8?q?refac,=20fix:=20General=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EA=B3=BC=EC=A0=95=EC=97=90=EC=84=9C=20acc?= =?UTF-8?q?essLog=20=EB=B6=84=EB=A6=AC=20-=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B8=EC=88=98=201=EA=B0=9C=20=EC=B6=94=EA=B0=80,=20-=20?= =?UTF-8?q?mergeQueryColumn=EC=97=90=EC=84=9C=20$accessLogColumn=EC=97=90?= =?UTF-8?q?=20=EC=A0=95=EC=83=81=EC=A0=81=EC=9C=BC=EB=A1=9C=20enum[]=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20-=20createGeneralObjListFromDB=EB=A5=BC=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=201=ED=9A=8C=20=EB=B6=84=EB=A6=AC=20-=20Gene?= =?UTF-8?q?ral=EC=97=90=20getAccessLogVar()=20=EC=B6=94=EA=B0=80=20=20=20-?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20=EC=A0=9C=EA=B3=B5?= =?UTF-8?q?=20=EC=98=88=EC=A0=95=20'=EC=97=86=EC=9D=8C'=20-=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EB=90=9C=20=EC=83=9D=EC=84=B1=EC=9E=90=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EA=B2=8C=20=ED=98=B8=EC=B6=9C=20=EB=B6=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20-=20NPC=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20accessLog?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=EA=B0=92=EC=9D=B4=20null=EC=9D=BC=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EC=9C=BC=EB=AF=80=EB=A1=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_currentCity.php | 2 +- hwe/func.php | 8 +- hwe/func_time_event.php | 2 +- hwe/j_simulate_battle.php | 8 +- hwe/process_war.php | 2 +- hwe/sammo/API/General/GetFrontInfo.php | 6 +- hwe/sammo/API/Global/GeneralList.php | 2 +- hwe/sammo/API/Nation/GeneralList.php | 4 +- .../API/NationCommand/GetReservedCommand.php | 2 +- hwe/sammo/Constraint/ReqGeneralCrewMargin.php | 2 +- hwe/sammo/Event/Action/ProcessIncome.php | 4 +- hwe/sammo/Event/Action/RaiseDisaster.php | 2 +- hwe/sammo/General.php | 126 ++++++++---- hwe/ts/components/GeneralBasicCard.vue | 2 +- hwe/ts/components/GeneralList.vue | 186 +++++++++--------- hwe/ts/components/GeneralLiteCard.vue | 2 +- hwe/ts/defs/API/Nation.ts | 4 +- hwe/ts/utilGame/formatRefreshScore.ts | 3 +- hwe/v_NPCControl.php | 2 +- 19 files changed, 210 insertions(+), 159 deletions(-) diff --git a/hwe/b_currentCity.php b/hwe/b_currentCity.php index f650ad32..565822f6 100644 --- a/hwe/b_currentCity.php +++ b/hwe/b_currentCity.php @@ -327,7 +327,7 @@ $templates = new \League\Plates\Engine('templates'); if ($ourGeneral && !$isNPC) { $turnText = []; - $generalObj = new General($general, null, null, null, null, null, false); + $generalObj = new General($general, null, null, null, null, null, null, false); foreach ($generalTurnList[$generalObj->getID()] as $turnRawIdx => $turn) { $turnIdx = $turnRawIdx + 1; $turnText[] = "{$turnIdx} : $turn"; diff --git a/hwe/func.php b/hwe/func.php index 90f5da0a..bc6d6eba 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -1026,12 +1026,16 @@ function increaseRefresh($type = "", $cnt = 1) GeneralAccessLogColumn::generalID->value => $generalID, GeneralAccessLogColumn::userID->value => $userID, GeneralAccessLogColumn::lastRefresh->value => $date, - GeneralAccessLogColumn::refreshTotal->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refreshTotal->value, $cnt), - GeneralAccessLogColumn::refresh->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refresh->value, $cnt), + GeneralAccessLogColumn::refreshTotal->value => $cnt, + GeneralAccessLogColumn::refresh->value => $cnt, + GeneralAccessLogColumn::refreshScore->value => $cnt, + GeneralAccessLogColumn::refreshScoreTotal->value => $cnt, ], [ GeneralAccessLogColumn::lastRefresh->value => $date, GeneralAccessLogColumn::refreshTotal->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refreshTotal->value, $cnt), GeneralAccessLogColumn::refresh->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refresh->value, $cnt), + GeneralAccessLogColumn::refreshScore->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refreshScore->value, $cnt), + GeneralAccessLogColumn::refreshScoreTotal->value => $db->sqleval('%b + %i', GeneralAccessLogColumn::refreshScoreTotal->value, $cnt), ]); $serverPath = __DIR__; diff --git a/hwe/func_time_event.php b/hwe/func_time_event.php index aebe8e8e..22086dd8 100644 --- a/hwe/func_time_event.php +++ b/hwe/func_time_event.php @@ -383,7 +383,7 @@ function disaster(RandUtil $rng) { $generalList = array_map( function($rawGeneral) use ($city, $year, $month){ - return new General($rawGeneral, null, $city, null, $year, $month, false); + return new General($rawGeneral, null, null, $city, null, $year, $month, false); }, $generalListByCity[$city['city']]??[] ); diff --git a/hwe/j_simulate_battle.php b/hwe/j_simulate_battle.php index d5cf09b9..a43d1ee1 100644 --- a/hwe/j_simulate_battle.php +++ b/hwe/j_simulate_battle.php @@ -270,7 +270,7 @@ if (key_exists('inheritBuff', $rawAttacker)) { } $rawAttacker['aux'] = Json::encode($rawAttacker['aux']); $rawAttacker['owner'] = 0; -$attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month); +$attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), null, $rawAttackerCity, $rawAttackerNation, $year, $month); $attacker = new WarUnitGeneral( $tmpRNG, $attackerGeneral, @@ -308,7 +308,7 @@ foreach ($rawDefenderList as $idx => $rawDefenderGeneral) { $rawDefenderGeneral['aux'] = Json::encode($rawDefenderGeneral['aux']); $rawDefenderGeneral['owner'] = 0; - $defenderGeneral = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true); + $defenderGeneral = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), null, $rawDefenderCity, $rawAttackerNation, $year, $month, true); $defenderList[] = new WarUnitGeneral( $tmpRNG, @@ -382,7 +382,7 @@ function simulateBattle( $warRng = new RandUtil(new LiteHashDRBG($warSeed)); - $attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), $rawAttackerCity, $rawAttackerNation, $year, $month); + $attackerGeneral = new General($rawAttacker, extractRankVar($rawAttacker), null, $rawAttackerCity, $rawAttackerNation, $year, $month); $attacker = new WarUnitGeneral( $warRng, $attackerGeneral, @@ -395,7 +395,7 @@ function simulateBattle( $defenderList = []; foreach ($rawDefenderList as $rawDefenderGeneral) { - $defenderGeneral = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true); + $defenderGeneral = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), null, $rawDefenderCity, $rawAttackerNation, $year, $month, true); $defenderList[] = new WarUnitGeneral( $warRng, diff --git a/hwe/process_war.php b/hwe/process_war.php index 4f497991..6e27057d 100644 --- a/hwe/process_war.php +++ b/hwe/process_war.php @@ -598,7 +598,7 @@ function ConquerCity(array $admin, General $general, array $city) Util::formatListOfBackticks(General::mergeQueryColumn(['npc', 'gold', 'rice', 'experience', 'explevel', 'belong', 'dedication', 'dedlevel', 'aux'], 1)[0]), $defenderNationID, 12 - ), null, $city, $loseNation, $year, $month, false); + ), null, null, $city, $loseNation, $year, $month, false); $josaUl = JosaUtil::pick($defenderNationName, '을'); $attackerLogger->pushNationalHistoryLog("{$defenderNationName}{$josaUl} 정복"); diff --git a/hwe/sammo/API/General/GetFrontInfo.php b/hwe/sammo/API/General/GetFrontInfo.php index 43def670..69f7d169 100644 --- a/hwe/sammo/API/General/GetFrontInfo.php +++ b/hwe/sammo/API/General/GetFrontInfo.php @@ -385,7 +385,7 @@ class GetFrontInfo extends \sammo\BaseAPI 'personal' => $general->getVar(GeneralColumn::personal), // GameObjClassKey; 'belong' => $general->getVar(GeneralColumn::belong), // number; - 'refreshScoreTotal' => $general->getVar(GeneralAccessLogColumn::refreshScoreTotal), // number; + 'refreshScoreTotal' => $general->getAccessLogVar(GeneralAccessLogColumn::refreshScoreTotal, 0), // number; 'officerLevel' => $general->getVar(GeneralColumn::officer_level), // number; 'officerLevelText' => getOfficerLevelText($general->getVar(GeneralColumn::officer_level), $rawNation['level']), // string; @@ -402,7 +402,7 @@ class GetFrontInfo extends \sammo\BaseAPI 'troop' => $general->getVar(GeneralColumn::troop), // number; //P0 End - 'refreshScore' => $general->getVar(GeneralAccessLogColumn::refreshScore), // number; + 'refreshScore' => $general->getAccessLogVar(GeneralAccessLogColumn::refreshScore, 0), // number; 'specage' => $general->getVar(GeneralColumn::specage), // number; 'specage2' => $general->getVar(GeneralColumn::specage2), // number; 'leadership_exp' => $general->getVar(GeneralColumn::leadership_exp), // number; @@ -537,7 +537,7 @@ class GetFrontInfo extends \sammo\BaseAPI $nationID = $general->getNationID(); $cityID = $general->getCityID(); - $limitState = checkLimit($general->getVar('refresh_score') ?? 0); + $limitState = checkLimit($general->getAccessLogVar(GeneralAccessLogColumn::refreshScore, 0)); if ($limitState >= 2) { return [ 'result' => false, diff --git a/hwe/sammo/API/Global/GeneralList.php b/hwe/sammo/API/Global/GeneralList.php index 27a558a5..897159fa 100644 --- a/hwe/sammo/API/Global/GeneralList.php +++ b/hwe/sammo/API/Global/GeneralList.php @@ -108,7 +108,7 @@ class GeneralList extends \sammo\BaseAPI getDed($dedication), getOfficerLevelText($officerLevel, $nationArr['level']), $killturn, - $refreshScoreTotal + $refreshScoreTotal ?: 0, ]; } diff --git a/hwe/sammo/API/Nation/GeneralList.php b/hwe/sammo/API/Nation/GeneralList.php index 28f17547..a61424fa 100644 --- a/hwe/sammo/API/Nation/GeneralList.php +++ b/hwe/sammo/API/Nation/GeneralList.php @@ -82,7 +82,7 @@ class GeneralList extends \sammo\BaseAPI 'owner_name' => 9, //안씀. - //acessLog + //accessLog 'refresh_score_total' => 0, 'refresh_score' => 1, @@ -98,6 +98,8 @@ class GeneralList extends \sammo\BaseAPI static $columnRemap = [ 'special' => 'specialDomestic', 'special2' => 'specialWar', + 'refresh_score_total' => 'refreshScoreTotal', + 'refresh_score' => 'refreshScore', 'aux' => null, ]; diff --git a/hwe/sammo/API/NationCommand/GetReservedCommand.php b/hwe/sammo/API/NationCommand/GetReservedCommand.php index 06abcb99..dd08f3b8 100644 --- a/hwe/sammo/API/NationCommand/GetReservedCommand.php +++ b/hwe/sammo/API/NationCommand/GetReservedCommand.php @@ -62,7 +62,7 @@ class GetReservedCommand extends \sammo\BaseAPI $generals = []; foreach ($db->query('SELECT no,name,turntime,npc,city,nation,officer_level FROM general WHERE nation = %i AND officer_level >= 5', $nationID) as $rawGeneral) { - $generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, null, $year, $month, false); + $generals[$rawGeneral['officer_level']] = new General($rawGeneral, null, null, null, null, $year, $month, false); } $nationTurnList = []; diff --git a/hwe/sammo/Constraint/ReqGeneralCrewMargin.php b/hwe/sammo/Constraint/ReqGeneralCrewMargin.php index d1d141e2..1f8f5e8d 100644 --- a/hwe/sammo/Constraint/ReqGeneralCrewMargin.php +++ b/hwe/sammo/Constraint/ReqGeneralCrewMargin.php @@ -39,7 +39,7 @@ class ReqGeneralCrewMargin extends Constraint{ //XXX: 왜 General -> obj -> General 변환을 하고 있나? //FIXME: RankVar, city에 따라 통솔이 바뀐다면 이 부분에 문제가 발생. - $generalObj = new General($this->general, null, null, null, null, null, true); + $generalObj = new General($this->general, null, null, null, null, null, null, true); if($reqCrewType->id != $generalObj->getCrewTypeObj()->id){ return true; diff --git a/hwe/sammo/Event/Action/ProcessIncome.php b/hwe/sammo/Event/Action/ProcessIncome.php index f0ad251d..7173070f 100644 --- a/hwe/sammo/Event/Action/ProcessIncome.php +++ b/hwe/sammo/Event/Action/ProcessIncome.php @@ -88,7 +88,7 @@ class ProcessIncome extends \sammo\Event\Action // 각 장수들에게 지급 foreach ($generalRawList as $rawGeneral) { - $generalObj = new General($rawGeneral, null, null, null, $year, $month, false); + $generalObj = new General($rawGeneral, null, null, null, null, $year, $month, false); $gold = Util::round(getBill($generalObj->getVar('dedication')) * $ratio); $generalObj->increaseVar('gold', $gold); @@ -169,7 +169,7 @@ class ProcessIncome extends \sammo\Event\Action // 각 장수들에게 지급 foreach ($generalRawList as $rawGeneral) { - $generalObj = new General($rawGeneral, null, null, null, $year, $month, false); + $generalObj = new General($rawGeneral, null, null, null, null, $year, $month, false); $rice = Util::round(getBill($generalObj->getVar('dedication')) * $ratio); $generalObj->increaseVar('rice', $rice); diff --git a/hwe/sammo/Event/Action/RaiseDisaster.php b/hwe/sammo/Event/Action/RaiseDisaster.php index 28cc3b9a..da7cb8b0 100644 --- a/hwe/sammo/Event/Action/RaiseDisaster.php +++ b/hwe/sammo/Event/Action/RaiseDisaster.php @@ -131,7 +131,7 @@ class RaiseDisaster extends \sammo\Event\Action $generalList = array_map( function ($rawGeneral) use ($city, $year, $month) { - return new General($rawGeneral, null, $city, null, $year, $month, false); + return new General($rawGeneral, null, null, $city, null, $year, $month, false); }, $generalListByCity[$city['city']] ?? [] ); diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php index 96599797..9ea8fa3f 100644 --- a/hwe/sammo/General.php +++ b/hwe/sammo/General.php @@ -24,6 +24,9 @@ class General implements iAction /** @var Map */ protected Map $rankVarSet; + /** @var Map */ + protected ?Map $accessLogRead; + /** @var \sammo\ActionLogger */ protected $logger; @@ -79,12 +82,13 @@ class General implements iAction /** * @param array $raw DB row값. * @param null|Map $rawRank + * @param null|Map $rawAccessLog * @param null|array $city DB city 테이블의 row값 * @param int|null $year 게임 연도 * @param int|null $month 게임 월 * @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, officer_level 정도로 초기화 가능 */ - public function __construct(array $raw, ?Map $rawRank, ?array $city, ?array $nation, ?int $year, ?int $month, bool $fullConstruct = true) + public function __construct(array $raw, ?Map $rawRank, ?Map $rawAccessLog, ?array $city, ?array $nation, ?int $year, ?int $month, bool $fullConstruct = true) { //TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함. @@ -110,6 +114,10 @@ class General implements iAction } else { $this->rankVarRead = new Map(); } + + $this->accessLogRead = $rawAccessLog; + + $this->rankVarIncrease = new Map(); $this->rankVarSet = new Map(); @@ -772,6 +780,19 @@ class General implements iAction return $this->rankVarRead[$key]; } + function getAccessLogVar(GeneralAccessLogColumn $key, $defaultValue = null): int | string | null + { + if (!$this->accessLogRead) { + return $defaultValue; + } + + if (!$this->accessLogRead->hasKey($key)) { + return $defaultValue; + } + + return $this->accessLogRead[$key]; + } + /** * @param \MeekroDB $db */ @@ -1026,11 +1047,15 @@ class General implements iAction 'personal', 'special', 'special2', 'defence_train', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'betray', 'recent_war', 'last_turn', 'myset', - 'specage', 'specage2', 'refresh_score', 'refresh_score_total', 'aux', 'permission', 'penalty', + 'specage', 'specage2', 'aux', 'permission', 'penalty', + ]; + $fullAcessLogColumn = [ + GeneralAccessLogColumn::refreshScore, + GeneralAccessLogColumn::refreshScoreTotal, ]; if ($reqColumns === null) { - return [$fullColumn, RankColumn::cases()]; + return [$fullColumn, RankColumn::cases(), $fullAcessLogColumn]; } /** @var RankColumn[] */ @@ -1098,44 +1123,17 @@ class General implements iAction [$column, $rankColumn, $accessLogColumn] = static::mergeQueryColumn($column, $constructMode); if ($generalIDList === null) { - if (!$accessLogColumn) { - $rawGenerals = Util::convertArrayToDict( - $db->query('SELECT %l FROM general WHERE 1', Util::formatListOfBackticks($column)), - 'no' - ); - } else { - $rawGenerals = Util::convertArrayToDict( - $db->query( - 'SELECT %l, %l FROM `general` LEFT JOIN general_access_log - ON general.no = general_access_log.general_id WHERE 1', - Util::formatListOfBackticks($column), - Util::formatListOfBackticks($accessLogColumn) - ), - 'no' - ); - } + $rawGenerals = Util::convertArrayToDict( + $db->query('SELECT %l FROM general WHERE 1', Util::formatListOfBackticks($column)), + 'no' + ); $generalIDList = array_keys($rawGenerals); } else { - if(!$accessLogColumn){ - $rawGenerals = Util::convertArrayToDict( - $db->query('SELECT %l FROM general WHERE no IN %li', Util::formatListOfBackticks($column), $generalIDList), - 'no' - ); - } - else{ - $rawGenerals = Util::convertArrayToDict( - $db->query( - 'SELECT %l, %l FROM `general` LEFT JOIN general_access_log - ON general.no = general_access_log.general_id WHERE no IN %li', - Util::formatListOfBackticks($column), - Util::formatListOfBackticks($accessLogColumn), - $generalIDList - ), - 'no' - ); - } - + $rawGenerals = Util::convertArrayToDict( + $db->query('SELECT %l FROM general WHERE no IN %li', Util::formatListOfBackticks($column), $generalIDList), + 'no' + ); } @@ -1157,6 +1155,23 @@ class General implements iAction } } + $rawAccessLogs = new Map(); + if ($accessLogColumn) { + $rawValue = $db->query( + 'SELECT `general_id`, %l FROM general_access_log WHERE general_id IN %li', + Util::formatListOfBackticks($accessLogColumn), + $generalIDList + ); + foreach ($rawValue as $rawLog) { + $generalID = $rawLog['general_id']; + $logValue = new Map(); + foreach ($rawLog as $key => $value) { + $logValue[GeneralAccessLogColumn::from($key)] = $value; + } + $rawAccessLogs[$generalID] = $logValue; + } + } + $result = []; foreach ($generalIDList as $generalID) { if (!key_exists($generalID, $rawGenerals)) { @@ -1166,7 +1181,7 @@ class General implements iAction if ($rawRanks->hasKey($generalID) && $rawRanks[$generalID]->count() !== count($rankColumn)) { throw new \RuntimeException('column의 수가 일치하지 않음 : ' . $generalID); } - $result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID] ?? null, null, null, $year, $month, $constructMode > 1); + $result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID] ?? null, $rawAccessLogs[$generalID] ?? null, null, null, $year, $month, $constructMode > 1); } return $result; @@ -1186,10 +1201,37 @@ class General implements iAction /** * @var string[] $column * @var RankColumn[] $rankColumn + * @var GeneralAccessLogCoumn[] $accessLogColumn */ - [$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode); + [$column, $rankColumn, $accessLogColumn] = static::mergeQueryColumn($column, $constructMode); + + /** @var Map|null */ + $rawAccessLog = null; + + if (!$accessLogColumn) { + $rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID); + } else { + $rawGeneral = $db->queryFirstRow( + 'SELECT %l, %l FROM `general` LEFT JOIN general_access_log + ON general.no = general_access_log.general_id WHERE no = %i', + Util::formatListOfBackticks($column), + Util::formatListOfBackticks($accessLogColumn), + $generalID + ); + + $rawAccessLog = new Map(); + foreach($accessLogColumn as $accessLogKey) { + if(!key_exists($accessLogKey->value, $rawGeneral)){ + continue; + } + $rawAccessLog[$accessLogKey] = $rawGeneral[$accessLogKey->value]; + unset($rawGeneral[$accessLogKey->value]); + } + if($rawAccessLog->count() === 0){ + $rawAccessLog = null; + } + } - $rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID); if (!$rawGeneral) { return new DummyGeneral($constructMode > 0); } @@ -1208,7 +1250,7 @@ class General implements iAction } - $general = new static($rawGeneral, $rawRankValues, null, null, $year, $month, $constructMode > 1); + $general = new static($rawGeneral, $rawRankValues, $rawAccessLog, null, null, $year, $month, $constructMode > 1); return $general; } diff --git a/hwe/ts/components/GeneralBasicCard.vue b/hwe/ts/components/GeneralBasicCard.vue index 82b64512..0d1a1e4f 100644 --- a/hwe/ts/components/GeneralBasicCard.vue +++ b/hwe/ts/components/GeneralBasicCard.vue @@ -152,7 +152,7 @@
벌점
- {{ formatRefreshScore(general.refreshScoreTotal) }} {{ general.refreshScoreTotal.toLocaleString() }}점({{ general.refreshScore }}) + {{ formatRefreshScore(general.refreshScoreTotal) }} {{ (general.refreshScoreTotal ?? 0).toLocaleString() }}점({{ general.refreshScore ?? 0 }})
diff --git a/hwe/ts/components/GeneralList.vue b/hwe/ts/components/GeneralList.vue index df1de86b..321cc784 100644 --- a/hwe/ts/components/GeneralList.vue +++ b/hwe/ts/components/GeneralList.vue @@ -42,7 +42,7 @@ class="form-check-label" :for="`column-type-${colID}`" :style="{ - textDecoration: validColumns.has(colID) ? undefined : 'line-through', + textDecoration: validColumns.has(colID) ? undefined : 'line-through' }" > {{ col.getColDef().headerName }} @@ -57,7 +57,7 @@
, - required: true, + required: true }, troops: { type: Object as PropType>, - required: true, + required: true }, height: { type: String as PropType<"static" | "fill" | number | `${number}px` | `${number}%`>, required: false, - default: "static", + default: "static" }, env: { type: Object as PropType, - required: true, + required: true }, toolbarID: { type: String, required: false, - default: undefined, + default: undefined }, role: { type: String, required: false, - default: "generic", + default: "generic" }, availableGeneralClick: { type: Boolean, required: false, - default: true, - }, + default: true + } }); const emit = defineEmits<{ @@ -271,7 +271,7 @@ watch( displaySettingsKey, JSON.stringify({ version: displaySettingVersion, - settings, + settings }) ); console.log("저장!", Array.from(newSettings.keys())); @@ -305,7 +305,7 @@ function storeDisplaySetting() { const setting: GridDisplaySetting = { column: columnApi.value.getColumnState(), - columnGroup: columnApi.value.getColumnGroupState(), + columnGroup: columnApi.value.getColumnGroupState() }; displaySettings.value.set(nickName, setting); @@ -485,14 +485,14 @@ const sortableNumber: Omit = { comparator: (a, b, _a, _b, _desc) => a - b, sortingOrder: ["desc", "asc", null], filter: NumberFilter, - cellClass: rightAlignClass, + cellClass: rightAlignClass }; const defaultColDef = ref({ resizable: true, headerClass: "default-cell-header", cellClass: centerCellClass, floatingFilter: true, - width: 80, + width: 80 }); const columnRawDefs = ref>>({ icon: { @@ -510,7 +510,7 @@ const columnRawDefs = ref }, pinned: "left", cellClass: [props.availableGeneralClick ? "clickable-cell" : "", ...defaultCellClass], - lockPosition: true, + lockPosition: true }, name: { headerName: "장수명", @@ -524,7 +524,7 @@ const columnRawDefs = ref cellStyle: (val: CellClassParams) => { const gen = unwrap(val.data); const style: StyleValue = { - color: getNPCColor(gen.npc), + color: getNPCColor(gen.npc) }; return style as CellStyle; }, @@ -546,7 +546,7 @@ const columnRawDefs = ref cellClass: [props.availableGeneralClick ? "clickable-cell" : "", ...defaultCellClass], filter: true, hide: false, - lockVisible: true, + lockVisible: true }, //npc: { headerName: "NPC", colId: "npc", field: "npc" }, stat: { @@ -562,7 +562,7 @@ const columnRawDefs = ref const gen = unwrap(obj.data); return `${gen.leadership}|${gen.strength}|${gen.intel}`; }, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "leadership", @@ -571,7 +571,7 @@ const columnRawDefs = ref ...sortableNumber, columnGroupShow: "open", width: 60, - type: "numericColumn", + type: "numericColumn" }, { colId: "strength", @@ -579,7 +579,7 @@ const columnRawDefs = ref field: "strength", ...sortableNumber, columnGroupShow: "open", - width: 60, + width: 60 }, { colId: "intel", @@ -587,9 +587,9 @@ const columnRawDefs = ref field: "intel", ...sortableNumber, columnGroupShow: "open", - width: 60, - }, - ], + width: 60 + } + ] }, officerLevel: { @@ -620,7 +620,7 @@ const columnRawDefs = ref }, filter: true, cellClass: centerCellClass, - width: 70, + width: 70 }, expDedLv: { headerName: "명성/계급", @@ -637,7 +637,7 @@ const columnRawDefs = ref return ""; } return `Lv ${data.explevel}
${data.dedLevelText}`; - }, + } }, { colId: "explevel", @@ -652,7 +652,7 @@ const columnRawDefs = ref }, ...sortableNumber, cellClass: centerCellClass, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "dedlevel", @@ -667,14 +667,14 @@ const columnRawDefs = ref }, sortable: true, comparator: (a, b, _a, _b, _desc) => { - return (_a.data?.dedlevel??0) - (_b.data?.dedlevel??0); + return (_a.data?.dedlevel ?? 0) - (_b.data?.dedlevel ?? 0); }, sortingOrder: ["desc", "asc", null], filter: true, cellClass: centerCellClass, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, goldRice: { headerName: "자금", @@ -704,7 +704,7 @@ const columnRawDefs = ref const lhsAmount = lhs.gold + lhs.rice; const rhsAmount = rhs.gold + rhs.rice; return lhsAmount - rhsAmount; - }, + } }, { colId: "gold", @@ -713,7 +713,7 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter("금"), width: 70, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "rice", @@ -722,9 +722,9 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter("쌀"), width: 70, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, city: { colId: "city", @@ -744,7 +744,7 @@ const columnRawDefs = ref return ""; } return convertSearch초성(gameConstStore.value.cityConst[data.city].name); - }, + } }, troop: { colId: "troop", @@ -795,7 +795,7 @@ const columnRawDefs = ref const [troopName, troopLeader] = troopInfo; const cityName = gameConstStore.value.cityConst[troopLeader.city].name; return convertSearch초성(`${troopName}$${cityName}`); - }, + } }, crewtypeAndCrew: { groupId: "crewtypeAndCrew", @@ -809,11 +809,11 @@ const columnRawDefs = ref cells: ((): GridCellInfo[][] => { return [ [{ target: "crewtype", iActionMap: gameConstStore.value.iActionInfo.crewtype }], - [{ target: "crew", converter: (value) => [`${value.crew.toLocaleString()}명`, undefined] }], + [{ target: "crew", converter: (value) => [`${value.crew.toLocaleString()}명`, undefined] }] ]; - })(), + })() }, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "crewtype", @@ -821,7 +821,7 @@ const columnRawDefs = ref field: "crewtype", cellRenderer: SimpleTooltipCell, cellRendererParams: { - iActionMap: gameConstStore.value.iActionInfo.crewtype, + iActionMap: gameConstStore.value.iActionInfo.crewtype }, sortable: true, columnGroupShow: "open", @@ -832,7 +832,7 @@ const columnRawDefs = ref } const name = gameConstStore.value.iActionInfo.crewtype[data.crewtype].name; return convertSearch초성(name); - }, + } }, { colId: "crew", @@ -841,9 +841,9 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter("명"), width: 70, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, trainAtmos: { groupId: "trainAtmos", @@ -859,7 +859,7 @@ const columnRawDefs = ref } return `${data.train}
${data.atmos}`; }, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "train", @@ -868,7 +868,7 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter(), width: 70, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "atmos", @@ -877,7 +877,7 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter(), width: 70, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "defence_train", @@ -886,9 +886,9 @@ const columnRawDefs = ref sortable: true, sortingOrder: ["desc", "asc", null], valueFormatter: (value: GenValueParams) => formatDefenceTrain(value.value), - width: 50, - }, - ], + width: 50 + } + ] }, specials: { groupId: "specials", @@ -904,13 +904,13 @@ const columnRawDefs = ref [{ target: "personal", iActionMap: gameConstStore.value.iActionInfo.personality }], [ { target: "specialDomestic", iActionMap: gameConstStore.value.iActionInfo.specialDomestic }, - { target: "specialWar", iActionMap: gameConstStore.value.iActionInfo.specialWar }, - ], + { target: "specialWar", iActionMap: gameConstStore.value.iActionInfo.specialWar } + ] ]; - })(), + })() }, width: 80, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "personal", @@ -918,7 +918,7 @@ const columnRawDefs = ref field: "personal", cellRenderer: SimpleTooltipCell, cellRendererParams: { - iActionMap: gameConstStore.value.iActionInfo.personality, + iActionMap: gameConstStore.value.iActionInfo.personality }, width: 60, sortable: true, @@ -927,7 +927,7 @@ const columnRawDefs = ref filterValueGetter: ({ data }) => { const name = gameConstStore.value.iActionInfo.personality[data.personal].name; return convertSearch초성(name); - }, + } }, { colId: "specialDomestic", @@ -935,7 +935,7 @@ const columnRawDefs = ref field: "specialDomestic", cellRenderer: SimpleTooltipCell, cellRendererParams: { - iActionMap: gameConstStore.value.iActionInfo.specialDomestic, + iActionMap: gameConstStore.value.iActionInfo.specialDomestic }, width: 60, sortable: true, @@ -944,7 +944,7 @@ const columnRawDefs = ref filterValueGetter: ({ data }) => { const name = gameConstStore.value.iActionInfo.specialDomestic[data.specialDomestic].name; return convertSearch초성(name); - }, + } }, { colId: "specialWar", @@ -952,7 +952,7 @@ const columnRawDefs = ref field: "specialWar", cellRenderer: SimpleTooltipCell, cellRendererParams: { - iActionMap: gameConstStore.value.iActionInfo.specialWar, + iActionMap: gameConstStore.value.iActionInfo.specialWar }, width: 60, sortable: true, @@ -961,9 +961,9 @@ const columnRawDefs = ref filterValueGetter: ({ data }) => { const name = gameConstStore.value.iActionInfo.specialWar[data.specialWar].name; return convertSearch초성(name); - }, - }, - ], + } + } + ] }, reservedCommandShort: { groupId: "reservedCommandShort", @@ -1005,9 +1005,9 @@ const columnRawDefs = ref }, cellStyle: { lineHeight: "1em", - fontSize: "0.85em", + fontSize: "0.85em" }, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "reservedCommand", @@ -1042,11 +1042,11 @@ const columnRawDefs = ref }, cellStyle: { lineHeight: "1em", - fontSize: "0.85em", + fontSize: "0.85em" }, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, turntime: { colId: "turntime", @@ -1061,7 +1061,7 @@ const columnRawDefs = ref return turntime.substring(14, 19); }, sortable: true, - cellClass: centerCellClass, + cellClass: centerCellClass }, recent_war: { colId: "recent_war", @@ -1076,7 +1076,7 @@ const columnRawDefs = ref return turntime.substring(14, 19); }, sortable: true, - cellClass: centerCellClass, + cellClass: centerCellClass }, years: { groupId: "years", @@ -1093,7 +1093,7 @@ const columnRawDefs = ref return `${data.age}세
${data.belong}년`; }, cellClass: centerCellClass, - columnGroupShow: "closed", + columnGroupShow: "closed" }, { colId: "age", @@ -1103,7 +1103,7 @@ const columnRawDefs = ref valueFormatter: (v: GenValueParams) => `${v.value}세`, width: 60, cellClass: centerCellClass, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "belong", @@ -1113,9 +1113,9 @@ const columnRawDefs = ref valueFormatter: (v: GenValueParams) => `${v.value}년`, width: 60, cellClass: centerCellClass, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, killturnAndRefresh: { groupId: "killturnAndRefresh", @@ -1128,11 +1128,11 @@ const columnRawDefs = ref if (data === undefined) { return "?"; } - return `${data.killturn.toLocaleString()}턴
${data.refreshScoreTotal.toLocaleString()}점`; + return `${data.killturn.toLocaleString()}턴
${(data.refreshScoreTotal ?? 0).toLocaleString()}점`; }, cellClass: rightAlignClass, columnGroupShow: "closed", - width: 70, + width: 70 }, { colId: "killturn", @@ -1146,7 +1146,7 @@ const columnRawDefs = ref }, ...sortableNumber, width: 70, - columnGroupShow: "open", + columnGroupShow: "open" }, { colId: "refreshScoreTotal", @@ -1156,13 +1156,15 @@ const columnRawDefs = ref if (data === undefined) { return "?"; } - return `${data.refreshScoreTotal.toLocaleString()}점
(${formatRefreshScore(data.refreshScoreTotal)})`; + return `${(data.refreshScoreTotal ?? 0).toLocaleString()}점
(${formatRefreshScore( + data.refreshScoreTotal + )})`; }, ...sortableNumber, width: 70, - columnGroupShow: "open", - }, - ], + columnGroupShow: "open" + } + ] }, warResults: { groupId: "warResults", @@ -1180,7 +1182,7 @@ const columnRawDefs = ref }, cellClass: centerCellClass, columnGroupShow: "closed", - width: 90, + width: 90 }, { colId: "warnum", @@ -1189,7 +1191,7 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter("전"), columnGroupShow: "open", - width: 60, + width: 60 }, { colId: "killnum", @@ -1198,7 +1200,7 @@ const columnRawDefs = ref ...sortableNumber, valueFormatter: numberFormatter("승"), columnGroupShow: "open", - width: 60, + width: 60 }, { colId: "killcrew", @@ -1214,10 +1216,10 @@ const columnRawDefs = ref }, valueFormatter: numberFormatter("%"), columnGroupShow: "open", - width: 60, - }, - ], - }, + width: 60 + } + ] + } }); const columnDefs = ref([...Object.values(columnRawDefs.value)]); watch(columnRawDefs, (val) => { diff --git a/hwe/ts/components/GeneralLiteCard.vue b/hwe/ts/components/GeneralLiteCard.vue index af4fd67d..2183b75f 100644 --- a/hwe/ts/components/GeneralLiteCard.vue +++ b/hwe/ts/components/GeneralLiteCard.vue @@ -79,7 +79,7 @@
벌점
- {{ formatRefreshScore(general.refreshScoreTotal) }} {{ general.refreshScoreTotal.toLocaleString() }}점 + {{ formatRefreshScore(general.refreshScoreTotal) }} {{ (general.refreshScoreTotal ?? 0).toLocaleString() }}점
diff --git a/hwe/ts/defs/API/Nation.ts b/hwe/ts/defs/API/Nation.ts index 2f88ecb3..cf221689 100644 --- a/hwe/ts/defs/API/Nation.ts +++ b/hwe/ts/defs/API/Nation.ts @@ -27,7 +27,7 @@ export type GeneralListItemP0 = { specialWar: GameObjClassKey; personal: GameObjClassKey; belong: number; - refreshScoreTotal: number; + refreshScoreTotal: number | null; officerLevel: number; //권한에따라 태수,군사,시종 노출 여부가 다름 officerLevelText: string; @@ -46,7 +46,7 @@ export type GeneralListItemP0 = { }; export type GeneralListItemP1 = { - refreshScore: number; + refreshScore: number | null; specage: number; specage2: number; leadership_exp: number; diff --git a/hwe/ts/utilGame/formatRefreshScore.ts b/hwe/ts/utilGame/formatRefreshScore.ts index 677e9f74..394cf679 100644 --- a/hwe/ts/utilGame/formatRefreshScore.ts +++ b/hwe/ts/utilGame/formatRefreshScore.ts @@ -13,7 +13,8 @@ const refreshScoreMap: [number, string][] = [ [12800, "헐..."], ]; -export function formatRefreshScore(refreshScore: number) { +export function formatRefreshScore(refreshScore: number | null) { + if (!refreshScore) refreshScore = 0; const idx = bs(refreshScoreMap, refreshScore, ([key], needle) => key - needle); if (idx >= 0) { return refreshScoreMap[idx][1] ?? "?"; diff --git a/hwe/v_NPCControl.php b/hwe/v_NPCControl.php index 366ecef4..c9307359 100644 --- a/hwe/v_NPCControl.php +++ b/hwe/v_NPCControl.php @@ -43,7 +43,7 @@ $nationStor = KVStorage::getStorage($db, $nationID, 'nation_env'); $nationStor->cacheValues(['npc_nation_policy', 'npc_general_policy']); $gameStor->cacheAll(); -$general = new General($me, null, null, $nation, $gameStor->year, $gameStor->month, false); +$general = new General($me, null, null, null, $nation, $gameStor->year, $gameStor->month, false); $rawServerPolicy = $gameStor->getValue('npc_nation_policy') ?? []; $rawNationPolicy = $nationStor->getValue('npc_nation_policy') ?? [];