forked from devsam/core
feat: 포인트 초기화 추가
- 급하니까 일단 땜빵
This commit is contained in:
@@ -67,24 +67,24 @@ class ResetStat extends \sammo\BaseAPI
|
|||||||
$intel = $this->args['intel'];
|
$intel = $this->args['intel'];
|
||||||
$inheritBonusStat = $this->args['inheritBonusStat'] ?? null;
|
$inheritBonusStat = $this->args['inheritBonusStat'] ?? null;
|
||||||
|
|
||||||
if ($leadership + $strength + $intel > GameConst::$defaultStatTotal) {
|
if ($leadership + $strength + $intel != GameConst::$defaultStatTotal) {
|
||||||
return "능력치가 " . GameConst::$defaultStatTotal . "을 넘어섰습니다. 다시 가입해주세요!";
|
return "능력치 총합이 " . GameConst::$defaultStatTotal . "이 아닙니다. 다시 입력해주세요!";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($inheritBonusStat) {
|
if ($inheritBonusStat) {
|
||||||
if (count($inheritBonusStat) != 3) {
|
if (count($inheritBonusStat) != 3) {
|
||||||
return "보너스 능력치가 잘못 지정되었습니다. 다시 가입해주세요!";
|
return "보너스 능력치가 잘못 지정되었습니다. 다시 입력해주세요!";
|
||||||
}
|
}
|
||||||
foreach ($inheritBonusStat as $stat) {
|
foreach ($inheritBonusStat as $stat) {
|
||||||
if ($stat < 0) {
|
if ($stat < 0) {
|
||||||
return "보너스 능력치가 음수입니다. 다시 가입해주세요!";
|
return "보너스 능력치가 음수입니다. 다시 입력해주세요!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sum = array_sum($inheritBonusStat);
|
$sum = array_sum($inheritBonusStat);
|
||||||
if ($sum == 0) {
|
if ($sum == 0) {
|
||||||
$inheritBonusStat = null;
|
$inheritBonusStat = null;
|
||||||
} else if ($sum < 3 || $sum > 5) {
|
} else if ($sum < 3 || $sum > 5) {
|
||||||
return "보너스 능력치 합이 잘못 지정되었습니다. 다시 가입해주세요!";
|
return "보너스 능력치 합이 잘못 지정되었습니다. 다시 입력해주세요!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ class ResetStat extends \sammo\BaseAPI
|
|||||||
$pleadership = $inheritBonusStat[0] ?? 0;
|
$pleadership = $inheritBonusStat[0] ?? 0;
|
||||||
$pstrength = $inheritBonusStat[1] ?? 0;
|
$pstrength = $inheritBonusStat[1] ?? 0;
|
||||||
$pintel = $inheritBonusStat[2] ?? 0;
|
$pintel = $inheritBonusStat[2] ?? 0;
|
||||||
$userLogger->push("통솔 {$pleadership}, 무력 {$pstrength}, 지력 {$pintel} 보너스 능력치 적용", "inheritPoint");
|
$userLogger->push("{$reqAmount}로 통솔 {$pleadership}, 무력 {$pstrength}, 지력 {$pintel} 보너스 능력치 적용", "inheritPoint");
|
||||||
} else {
|
} else {
|
||||||
$rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
$rng = new RandUtil(new LiteHashDRBG(Util::simpleSerialize(
|
||||||
UniqueConst::$hiddenSeed,
|
UniqueConst::$hiddenSeed,
|
||||||
@@ -161,6 +161,8 @@ class ResetStat extends \sammo\BaseAPI
|
|||||||
$strength += $pstrength;
|
$strength += $pstrength;
|
||||||
$intel += $pintel;
|
$intel += $pintel;
|
||||||
|
|
||||||
|
$lastUserStatReset[] = $gameSeason;
|
||||||
|
|
||||||
|
|
||||||
$general->setVar('leadership', $leadership);
|
$general->setVar('leadership', $leadership);
|
||||||
$general->setVar('strength', $strength);
|
$general->setVar('strength', $strength);
|
||||||
@@ -169,6 +171,7 @@ class ResetStat extends \sammo\BaseAPI
|
|||||||
$userLogger->flush();
|
$userLogger->flush();
|
||||||
|
|
||||||
$inheritStor->setValue('previous', [$previousPoint - $reqAmount, null]);
|
$inheritStor->setValue('previous', [$previousPoint - $reqAmount, null]);
|
||||||
|
$userStor->setValue('last_stat_reset', $lastUserStatReset);
|
||||||
$general->increaseRankVar(RankColumn::inherit_point_spent_dynamic, $reqAmount);
|
$general->increaseRankVar(RankColumn::inherit_point_spent_dynamic, $reqAmount);
|
||||||
$general->applyDB($db);
|
$general->applyDB($db);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+103
-2
@@ -172,6 +172,56 @@
|
|||||||
<BButton class="col-6 offset-6" variant="primary" @click="checkOwner"> 소유자 찾기 </BButton>
|
<BButton class="col-6 offset-6" variant="primary" @click="checkOwner"> 소유자 찾기 </BButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col col-lg-4 col-sm-6 col-12 py-2">
|
||||||
|
<div class="row px-4">
|
||||||
|
<div class="a-right col-6 align-self-center">능력치 초기화</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="row">기본 능력치</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">통</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.leadership" type="number"
|
||||||
|
:min="currentStat.statMin" :max="currentStat.statMax" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">무</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.strength" type="number"
|
||||||
|
:min="currentStat.statMin" :max="currentStat.statMax" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">지</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.intel" type="number"
|
||||||
|
:min="currentStat.statMin" :max="currentStat.statMax" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">추가 능력치</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">통</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.inheritBonusStat[0]" type="number"
|
||||||
|
min="0" max="5" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">무</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.inheritBonusStat[1]" type="number"
|
||||||
|
min="0" max="5" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-2 center align-self-center">지</div>
|
||||||
|
<div class="col col-10"><b-form-input v-model.number="resetStatArgs.inheritBonusStat[2]" type="number"
|
||||||
|
min="0" max="5" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="a-right">
|
||||||
|
<small class="form-text text-muted">시즌 당 1회에 한 해 능력치를 초기화합니다. <br />
|
||||||
|
</small>
|
||||||
|
<span style="color: white">필요 포인트: {{ requiredResetStatPoint }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row px-4">
|
||||||
|
<BButton class="col-6 offset-6" variant="primary" @click="resetStat"> 능력치 초기화</BButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
@@ -224,6 +274,7 @@ declare const staticValues: {
|
|||||||
nextSpecial: number;
|
nextSpecial: number;
|
||||||
minSpecificUnique: number;
|
minSpecificUnique: number;
|
||||||
checkOwner: number;
|
checkOwner: number;
|
||||||
|
bornStatPoint: number;
|
||||||
};
|
};
|
||||||
resetTurnTimeLevel: number;
|
resetTurnTimeLevel: number;
|
||||||
resetSpecialWarLevel: number;
|
resetSpecialWarLevel: number;
|
||||||
@@ -246,16 +297,23 @@ declare const staticValues: {
|
|||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
availableTargetGeneral: Record<number, string>;
|
availableTargetGeneral: Record<number, string>;
|
||||||
|
currentStat: {
|
||||||
|
leadership: number;
|
||||||
|
strength: number;
|
||||||
|
intel: number;
|
||||||
|
statMax: number;
|
||||||
|
statMin: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref } from "vue";
|
import { reactive, ref, watch } from "vue";
|
||||||
import "@scss/game_bg.scss";
|
import "@scss/game_bg.scss";
|
||||||
import TopBackBar from "@/components/TopBackBar.vue";
|
import TopBackBar from "@/components/TopBackBar.vue";
|
||||||
import _ from "lodash-es";
|
import _ from "lodash-es";
|
||||||
import NumberInputWithInfo from "@/components/NumberInputWithInfo.vue";
|
import NumberInputWithInfo from "@/components/NumberInputWithInfo.vue";
|
||||||
import { SammoAPI } from "./SammoAPI";
|
import { SammoAPI } from "./SammoAPI";
|
||||||
import type { inheritBuffType, InheritPointLogItem } from "./defs/API/InheritAction";
|
import { InheritResetStat, type inheritBuffType, type InheritPointLogItem } from "./defs/API/InheritAction";
|
||||||
import * as JosaUtil from "@/util/JosaUtil";
|
import * as JosaUtil from "@/util/JosaUtil";
|
||||||
import { BButton } from "bootstrap-vue-next";
|
import { BButton } from "bootstrap-vue-next";
|
||||||
import { unwrap } from "./util/unwrap";
|
import { unwrap } from "./util/unwrap";
|
||||||
@@ -389,12 +447,20 @@ const {
|
|||||||
availableSpecialWar,
|
availableSpecialWar,
|
||||||
availableUnique,
|
availableUnique,
|
||||||
availableTargetGeneral,
|
availableTargetGeneral,
|
||||||
|
currentStat
|
||||||
} = staticValues;
|
} = staticValues;
|
||||||
|
|
||||||
const nextSpecialWar = ref(Object.keys(availableSpecialWar)[0]);
|
const nextSpecialWar = ref(Object.keys(availableSpecialWar)[0]);
|
||||||
const specificUnique = ref<string | null>(null);
|
const specificUnique = ref<string | null>(null);
|
||||||
const specificUniqueAmount = ref(inheritActionCost.minSpecificUnique);
|
const specificUniqueAmount = ref(inheritActionCost.minSpecificUnique);
|
||||||
|
|
||||||
|
const resetStatArgs = reactive<Required<Pick<InheritResetStat, 'inheritBonusStat'>> & InheritResetStat>({
|
||||||
|
leadership: currentStat.leadership,
|
||||||
|
strength: currentStat.strength,
|
||||||
|
intel: currentStat.intel,
|
||||||
|
inheritBonusStat: [0, 0, 0]
|
||||||
|
});
|
||||||
|
|
||||||
const lastLogID = ref(Math.min(...staticValues.lastInheritPointLogs.map((v) => v.id)));
|
const lastLogID = ref(Math.min(...staticValues.lastInheritPointLogs.map((v) => v.id)));
|
||||||
const inheritPointLogs = ref(
|
const inheritPointLogs = ref(
|
||||||
(() => {
|
(() => {
|
||||||
@@ -608,6 +674,41 @@ async function checkOwner(): Promise<void> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const requiredResetStatPoint = ref(0);
|
||||||
|
|
||||||
|
watch(resetStatArgs, (value) => {
|
||||||
|
const bonusStat = value.inheritBonusStat.reduce((acc, v) => acc + v, 0);
|
||||||
|
requiredResetStatPoint.value = bonusStat > 0 ? inheritActionCost.bornStatPoint : 0;
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
async function resetStat(): Promise<void> {
|
||||||
|
const statArg: InheritResetStat = {
|
||||||
|
leadership: resetStatArgs.leadership,
|
||||||
|
strength: resetStatArgs.strength,
|
||||||
|
intel: resetStatArgs.intel,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (resetStatArgs.inheritBonusStat.some(v => v > 0)) {
|
||||||
|
statArg.inheritBonusStat = resetStatArgs.inheritBonusStat;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!confirm(`능력치를 초기화 하시겠습니까? 시즌마다 한번만 가능합니다. 필요 포인트: ${requiredResetStatPoint.value}`)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await SammoAPI.InheritAction.ResetStat(statArg);
|
||||||
|
alert('초기화 되었습니다.');
|
||||||
|
location.reload();
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
alert(`실패했습니다: ${e}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
async function getMoreLog(): Promise<void> {
|
async function getMoreLog(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const result = await SammoAPI.InheritAction.GetMoreLog({
|
const result = await SammoAPI.InheritAction.GetMoreLog({
|
||||||
|
|||||||
+2
-1
@@ -17,7 +17,7 @@ import { APIPathGen, NumVar, StrVar } from "./util/APIPathGen.js";
|
|||||||
import type { BettingDetailResponse, BettingListResponse } from "./defs/API/Betting";
|
import type { BettingDetailResponse, BettingListResponse } from "./defs/API/Betting";
|
||||||
import type { ReserveBulkCommandResponse, ReserveCommandResponse, ReservedCommandResponse } from "./defs/API/Command";
|
import type { ReserveBulkCommandResponse, ReserveCommandResponse, ReservedCommandResponse } from "./defs/API/Command";
|
||||||
import type { ChiefResponse } from "./defs/API/NationCommand";
|
import type { ChiefResponse } from "./defs/API/NationCommand";
|
||||||
import type { inheritBuffType, InheritLogResponse } from "./defs/API/InheritAction";
|
import type { inheritBuffType, InheritLogResponse, InheritResetStat } from "./defs/API/InheritAction";
|
||||||
import type { SetBlockWarResponse, GeneralListResponse as NationGeneralListResponse, NationInfoResponse } from "./defs/API/Nation";
|
import type { SetBlockWarResponse, GeneralListResponse as NationGeneralListResponse, NationInfoResponse } from "./defs/API/Nation";
|
||||||
import type { UploadImageResponse } from "./defs/API/Misc";
|
import type { UploadImageResponse } from "./defs/API/Misc";
|
||||||
import type { GeneralLogType, GetGeneralLogResponse, JoinArgs } from "./defs/API/General";
|
import type { GeneralLogType, GetGeneralLogResponse, JoinArgs } from "./defs/API/General";
|
||||||
@@ -183,6 +183,7 @@ const apiRealPath = {
|
|||||||
CheckOwner: PUT as APICallT<{
|
CheckOwner: PUT as APICallT<{
|
||||||
destGeneralID: number;
|
destGeneralID: number;
|
||||||
}>,
|
}>,
|
||||||
|
ResetStat: PUT as APICallT<InheritResetStat>,
|
||||||
},
|
},
|
||||||
Message: {
|
Message: {
|
||||||
DeleteMessage: PATCH as APICallT<{
|
DeleteMessage: PATCH as APICallT<{
|
||||||
|
|||||||
@@ -22,3 +22,10 @@ export type InheritPointLogItem = {
|
|||||||
export type InheritLogResponse = ValidResponse & {
|
export type InheritLogResponse = ValidResponse & {
|
||||||
log: InheritPointLogItem[];
|
log: InheritPointLogItem[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type InheritResetStat = {
|
||||||
|
leadership: number;
|
||||||
|
strength: number;
|
||||||
|
intel: number;
|
||||||
|
inheritBonusStat?: [number, number, number];
|
||||||
|
};
|
||||||
@@ -99,11 +99,19 @@ $lastInheritPointLogs = $db->query('SELECT id, server_id, year, month, date, tex
|
|||||||
'nextSpecial' => GameConst::$inheritSpecificSpecialPoint,
|
'nextSpecial' => GameConst::$inheritSpecificSpecialPoint,
|
||||||
'minSpecificUnique' => GameConst::$inheritItemUniqueMinPoint,
|
'minSpecificUnique' => GameConst::$inheritItemUniqueMinPoint,
|
||||||
'checkOwner' => GameConst::$inheritCheckOwnerPoint,
|
'checkOwner' => GameConst::$inheritCheckOwnerPoint,
|
||||||
|
'bornStatPoint' => GameConst::$inheritBornStatPoint,
|
||||||
],
|
],
|
||||||
'availableSpecialWar' => $avilableSpecialWar,
|
'availableSpecialWar' => $avilableSpecialWar,
|
||||||
'availableUnique' => $availableUnique,
|
'availableUnique' => $availableUnique,
|
||||||
'lastInheritPointLogs' => $lastInheritPointLogs,
|
'lastInheritPointLogs' => $lastInheritPointLogs,
|
||||||
'availableTargetGeneral' => $availableTargetGeneral,
|
'availableTargetGeneral' => $availableTargetGeneral,
|
||||||
|
'currentStat' => [
|
||||||
|
'leadership' => Util::clamp($me->getVar('leadership'), GameConst::$defaultStatMin, GameConst::$defaultStatMax),
|
||||||
|
'strength' => Util::clamp($me->getVar('strength'), GameConst::$defaultStatMin, GameConst::$defaultStatMax),
|
||||||
|
'intel' => Util::clamp($me->getVar('intel'), GameConst::$defaultStatMin, GameConst::$defaultStatMax),
|
||||||
|
'statMin' => GameConst::$defaultStatMin,
|
||||||
|
'statMax' => GameConst::$defaultStatMax,
|
||||||
|
]
|
||||||
]
|
]
|
||||||
]) ?>
|
]) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Reference in New Issue
Block a user