서버 각성 리팩토링

This commit is contained in:
Ino 2025-08-05 12:31:05 +09:00
parent 2b59c2fe7c
commit 989e0b4daf
2 changed files with 42 additions and 29 deletions

View File

@ -320,10 +320,10 @@ function Init_Enchant() {
}
function Init_Awaken() {
return {
STR: { LV : 1, Exp : 0 },
DEX: { LV : 1, Exp : 0 },
INT: { LV : 1, Exp : 0 },
LUK: { LV : 1, Exp : 0 }
STR: { Lv : 1, Exp : 0 },
DEX: { Lv : 1, Exp : 0 },
INT: { Lv : 1, Exp : 0 },
LUK: { Lv : 1, Exp : 0 }
};
}
function Init_PC() {
@ -992,46 +992,41 @@ handlers.Save_PC_MenuBack = function(args)
{
var upgradeValue = parseInt((awakenData.upgrade.find(x => x.Key === statKey)?.Value) || 0);
var awakenValue = parseInt((awakenData.awaken.find(x => x.Key === statKey)?.Value) || 0);
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
for (var j = 0; j < upgradeValue; ++j)
{
var lv = urod.Awaken[statKey].Lv;
var audata = awakenUpgradeTable.find(f => f.n_AwakenStep == lv);
if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel && awakenValue > 0)
{
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
if (TryAwakenLevelUp(table, audata, urod, statKey, awakenValue)) {
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost))
{
--awakenValue;
urod.Awaken[statKey].Exp = 0;
++urod.Awaken[statKey].Lv;
--j; // 다시 반복
continue;
}
else break;
--awakenValue;
--j;
continue;
}
var price = Get_K_Value(lv, audata.f_BalanceConstant, audata.n_DefaultUpgradeCostValue, audata.f_CountPerUpgradeCostValue);
if (urod.Awaken[statKey].Exp < audata.n_MaxUpgradeLevel && Use_Item(table, urod, awakenupgradeid, price))
{
++urod.Awaken[statKey].Exp;
if (TryAwakenLevelUp(table, audata, urod, statKey, awakenmat, awakenValue))
{
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
--awakenValue;
}
}
}
if (upgradeValue == 0 && awakenValue > 0)
{
var lv = urod.Awaken[statKey].Lv;
var audata = awakenUpgradeTable.find(f => f.n_AwakenStep == lv);
if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel)
if (TryAwakenLevelUp(table, audata, urod, statKey, awakenmat, awakenValue))
{
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost))
{
--awakenValue;
urod.Awaken[statKey].Exp = 0;
++urod.Awaken[statKey].Lv;
}
--awakenValue;
}
}
}
@ -1088,6 +1083,18 @@ function Get_PCAwakenMatKey(stat)
}
return "";
}
function TryAwakenLevelUp(table, audata, urod, statKey, awakenmat, awakenValue) {
if (urod.Awaken[statKey].Exp < audata.n_MaxUpgradeLevel) return false;
if (awakenValue <= 0) return false;
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost)) {
urod.Awaken[statKey].Exp = 0;
urod.Awaken[statKey].Lv++;
return true;
}
return false;
}
handlers.Save_PC_Stat = function(args)
{

View File

@ -41,6 +41,7 @@ public class PCUI : BotMenuBase
}
CS_AwakenData emptyawaken = new CS_AwakenData();
LimitSlotChangeData emptylimitslot = new LimitSlotChangeData();
public override void Check_ServerSave(bool exitui)
{
var sdata = ServerInfo.Ins.m_ServerData;
@ -53,7 +54,11 @@ public class PCUI : BotMenuBase
if (changeCostume || changeworker || changejob || pcawakend || changelimitslot)
{
var limitslotdata = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Get();
var limitslotdata = emptylimitslot;
if (PCLimitUI.isIns) limitslotdata = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData;
else limitslotdata.Init();
limitslotdata = limitslotdata.Get();
ServerInfo.Ins.Save_PC_MenuBack(sdata.Get_EqiupmentEquip(eItem.PCCostume),
sdata.Get_EqiupmentEquip(eItem.Worker),
sdata.Get_EqiupmentEquip(eItem.PC),
@ -101,15 +106,16 @@ public class PCUI : BotMenuBase
if (exitui) base.OnClick_Back();
}
});
foreach (var key in dic_EnterID.Keys.ToList())
dic_EnterID[key] = 0;
if (PCAwakenUI.isIns) PCAwakenUI.Ins.Get_CS_AwakenData().Init();
if (PCLimitUI.isIns) PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Init();
}
else
{
if (exitui) base.OnClick_Back();
}
foreach (var key in dic_EnterID.Keys.ToList())
dic_EnterID[key] = 0;
if (PCAwakenUI.isIns) PCAwakenUI.Ins.Get_CS_AwakenData().Init();
}
public override void OnClick_Back()