서버 각성 리팩토링

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

View File

@ -41,6 +41,7 @@ public class PCUI : BotMenuBase
} }
CS_AwakenData emptyawaken = new CS_AwakenData(); CS_AwakenData emptyawaken = new CS_AwakenData();
LimitSlotChangeData emptylimitslot = new LimitSlotChangeData();
public override void Check_ServerSave(bool exitui) public override void Check_ServerSave(bool exitui)
{ {
var sdata = ServerInfo.Ins.m_ServerData; var sdata = ServerInfo.Ins.m_ServerData;
@ -53,7 +54,11 @@ public class PCUI : BotMenuBase
if (changeCostume || changeworker || changejob || pcawakend || changelimitslot) 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), ServerInfo.Ins.Save_PC_MenuBack(sdata.Get_EqiupmentEquip(eItem.PCCostume),
sdata.Get_EqiupmentEquip(eItem.Worker), sdata.Get_EqiupmentEquip(eItem.Worker),
sdata.Get_EqiupmentEquip(eItem.PC), sdata.Get_EqiupmentEquip(eItem.PC),
@ -101,15 +106,16 @@ public class PCUI : BotMenuBase
if (exitui) base.OnClick_Back(); 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 else
{ {
if (exitui) base.OnClick_Back(); 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() public override void OnClick_Back()