From e9ec3636c16a9b85a45886aae4ff1bbae2d172a7 Mon Sep 17 00:00:00 2001 From: Ino Date: Sat, 5 Jul 2025 09:11:23 +0900 Subject: [PATCH] Save_Enchant_LvUp --- .../Editor/Resources/.CloudScript.js | 77 +++++++++++++------ Assets/Script/Server/ServerInfo.cs | 37 +++++++++ .../UI/Eqiupment/EquipmentEnchantCard.cs | 11 ++- 3 files changed, 98 insertions(+), 27 deletions(-) diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index 8ba745fe4..151bf5147 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -244,8 +244,8 @@ function Add_Item(table, itemtable, urod, itemid, amount, isCheat) { default: if (!urod.Item[itemid]) urod.Item[itemid] = [0, 0, 0]; - urod.Item[itemid][0] += amount; - if (!isCheat) urod.Item[itemid][1] += amount; // 총 획득량 + urod.Item[itemid][0] = Add_Amount(urod.Item[itemid][0], amount); + if (!isCheat) urod.Item[itemid][1] = Add_Amount(urod.Item[itemid][1], amount); // 총 획득량 break; case "Weapon": @@ -255,13 +255,13 @@ function Add_Item(table, itemtable, urod, itemid, amount, isCheat) case "Necklace": case "Ring": if (!urod.Equipment[itemid]) urod.Equipment[itemid] = [0, 0, 0]; - urod.Equipment[itemid][0] += amount; + urod.Equipment[itemid][0] = Add_Amount(urod.Equipment[itemid][0], amount); Add_Collection(urod, itemid, amount); break; case "Skill": if (!urod.Skill[itemid]) urod.Skill[itemid] = [amount - 1,1,0]; // 레벨 증가 - else urod.Skill[itemid][0] += amount; + else urod.Skill[itemid][0] = Add_Amount(urod.Skill[itemid][0], amount); break; case "PC": @@ -270,19 +270,19 @@ function Add_Item(table, itemtable, urod, itemid, amount, isCheat) break; case "Pet": - if (!urod.Pet[itemid]) urod.Pet[itemid] = [0, 1]; // [레벨, 획득 수] - urod.Pet[itemid][0] += amount; + if (!urod.Pet[itemid]) urod.Pet[itemid] = [0, 1]; + urod.Pet[itemid][0] = Add_Amount(urod.Pet[itemid][0], amount); break; case "Enchant": if (!urod.Enchant[itemid]) urod.Enchant[itemid] = [0, 0, 0, 0]; - urod.Enchant[itemid][0] += amount; - urod.Enchant[itemid][2] += amount; + urod.Enchant[itemid][0] = Add_Amount(urod.Enchant[itemid][0], amount); + urod.Enchant[itemid][2] = Add_Amount(urod.Enchant[itemid][2], amount); break; case "Relic": if (!urod.Relic[itemid]) urod.Relic[itemid] = [0, 0, 0]; - urod.Relic[itemid][0] += amount; + urod.Relic[itemid][0] = Add_Amount(urod.Relic[itemid][0], amount); break; } } @@ -296,7 +296,7 @@ function Use_Item(table, urod, itemid, amount) if (urod.Item[itemid][0] >= amount) { urod.Item[itemid][0] -= amount; - urod.Item[itemid][2] += amount; // 총 사용량 + urod.Item[itemid][2] = Add_Amount(urod.Item[itemid][2], amount); // 총 사용량 return true; } } @@ -331,7 +331,7 @@ function Use_Item(table, urod, itemid, amount) if (urod.Enchant[itemid][0] >= amount) { urod.Enchant[itemid][0] -= amount; - urod.Enchant[itemid][3] += amount; + urod.Enchant[itemid][3] = Add_Amount(urod.Enchant[itemid][3], amount); return true; } } @@ -405,24 +405,24 @@ function Add_MissionCount(table, urod, purpose, conditionvalue, count, setValue) if (!urod.Mission[key1][key2]) urod.Mission[key1][key2] = [0, 0]; if (setValue) urod.Mission[key1][key2][1] = count; - else urod.Mission[key1][key2][1] += count; + else urod.Mission[key1][key2][1] = Add_Amount(urod.Mission[key1][key2][1], count); } } // 가이드 퀘스트 체크 var guideData = table.find(f=>f.n_MissionGroupId == 0 && f.n_MissionIndex == urod.Common[10]); if (guideData && guideData.e_MissionConditionType == purpose) - urod.Common[11] += count; + urod.Common[11] = Add_Amount(urod.Common[11], count); } function Add_Collection(urod, id, count) { if (!urod.Collection[id]) urod.Collection[id] = 0; - urod.Collection[id] += count; + urod.Collection[id] = Add_Amount(urod.Collection[id], count); } function Add_MobCollection(urod, id, count) { if (!urod.MobKill[id]) urod.MobKill[id] = 0; - urod.MobKill[id] += count; + urod.MobKill[id] = Add_Amount(urod.MobKill[id], count); } function Get_Exp(lv) { @@ -529,9 +529,9 @@ handlers.Save_StageResult = function(args) var itemtable = Get_ItemTable(); // 경험치 처리 - urod.PC.Exp += args.Exp; + urod.PC.Exp = Add_Amount(urod.PC.Exp, args.Exp); while (urod.PC.Exp >= Get_Exp(urod.PC.Lv + 1)) { - urod.PC.Lv++; + ++urod.PC.Lv; } // 아이템 처리 (args.Item은 JS object 형태로 전달됨) @@ -548,7 +548,7 @@ handlers.Save_StageResult = function(args) for (var key in args.Mob) { var Id = key; var Count = args.Mob[key]; - mobcount += Count; + mobcount = Add_Amount(mobcount, Count); Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); Add_MobCollection(urod, Id, Count); } @@ -556,7 +556,7 @@ handlers.Save_StageResult = function(args) for (var key in args.Elite) { var Id = key; var Count = args.Elite[key]; - elitemobcount += Count; + elitemobcount = Add_Amount(elitemobcount, Count); Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); Add_MobCollection(urod, Id, Count); } @@ -564,13 +564,13 @@ handlers.Save_StageResult = function(args) for (var key in args.Boss) { var Id = key; var Count = args.Boss[key]; - bossmobcount += Count; + bossmobcount = Add_Amount(bossmobcount + Count); Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); Add_MobCollection(urod, Id, Count); } - Add_MissionCount(table, urod, "KILL_MONSTER_ALL", 0, mobcount + elitemobcount + bossmobcount, false); - Add_MissionCount(table, urod, "KILL_MONSTER_ACC", 0, mobcount + elitemobcount + bossmobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_ALL", 0, Add_Amount(mobcount + elitemobcount + bossmobcount), false); + Add_MissionCount(table, urod, "KILL_MONSTER_ACC", 0, Add_Amount(mobcount + elitemobcount + bossmobcount), false); Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 1, mobcount, false); Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 2, elitemobcount, false); Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 3, bossmobcount, false); @@ -606,7 +606,7 @@ handlers.Save_PC_Stat = function(args) if (curUsePoint <= remainPoint) { for (var i = 0; i < 4; i++) { - urod.PC.Stat[i] += args.UsePoint[i]; + urod.PC.Stat[i] = Add_Amount(urod.PC.Stat[i], args.UsePoint[i]); } Add_MissionCount(Get_MissionTable(), urod, "HERO_STAT_UPGRADE_ACC", 0, curUsePoint, false); Set_JsonUserData(urod); @@ -1271,7 +1271,7 @@ handlers.Save_EquipItem_SlotLvUp = function(args) log.info("슬롯 강화 비용 " + price); if (Use_Item(table, urod, esu_data.n_ConsumeGoodsID, price)) { - m_SD_Slot.Use += price; + m_SD_Slot.Use = Add_Amount(m_SD_Slot.Use, price); ++m_SD_Slot.Lv; Add_MissionCount(table, urod, "EQUIP_SLOT_UPGRADE_ALL", 0, 1); @@ -1353,6 +1353,31 @@ handlers.Save_EquipItem_Enchant = function(args) } return Get_Return(1); } + +handlers.Save_Enchant_LvUp = function(args) +{ + var readonlydata = Get_UserReadOnlyData(); + var error = Get_Error(readonlydata, args.Token); + if (error < 0) return Get_Return(error); + + var urod = Get_JsonUserData(readonlydata); + + var s_enchant = urod.Enchant[args.EnchantID]; + + var table = Get_MissionTable(); + var er_table = Get_EnchantRateTable(); + var er_data = er_table.find(f=>f.n_EnchantLv == s_enchant[1]); + + if (er_data.n_NextLvRequireCount <= 0) return Get_Return(2); + if (Use_Item(table, urod, args.EnchantID, er_data.n_NextLvRequireCount)) + { + ++s_enchant[1]; + + Set_JsonUserData(urod); + return Get_Return(0); + } + return Get_Return(1); +} /////////////////////////////////// 서버 처리 handlers.Write_UnityInApp = function(args) @@ -10121,6 +10146,10 @@ function IsRateTrue1000000(rate) { return Math.floor(Math.random() * 1000000) < rate; } +function Add_Amount(...args) +{ + return args.reduce((sum, val) => sum + Number(val), 0); +} diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 8e56f3750..65c469726 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1565,6 +1565,43 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_EquipItem_Enchant(itemid, eid, slot, _act); }, 2f); }); } + + public void Save_Enchant_LvUp(int eid, Action _act) + { + NetWait.Ins.Set(true); + PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest + { + FunctionName = MethodBase.GetCurrentMethod().Name, + GeneratePlayStreamEvent = true, + FunctionParameter = new + { + Token = m_LoginInfo.EntityToken.EntityToken, + EnchantID = eid, + } + }, + result => + { + if (result.Error == null) + { + NetWait.Ins.Set(false); + var str_result = result.FunctionResult.ToString(); + var error = MyErrorCheck(str_result); + // (0 성공, 1 실패 (잠긴 인챈트 슬롯), 3 실패 (없는 아이템), 4 실패 (업그레이드 정보 없는 파츠)) + switch (error) + { + case 0: _act?.Invoke(); break; + case 1: ToastUI.Ins.Set(388); break; + case 2: ToastUI.Ins.Set(999900003); break; + } + } + else + Set_Coroutine(() => { Save_Enchant_LvUp(eid, _act); }, 2f); + }, + fail => + { + Set_Coroutine(() => { Save_Enchant_LvUp(eid, _act); }, 2f); + }); + } #endregion #region 우편 diff --git a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs index c9d76947d..254ba31b4 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs @@ -46,12 +46,17 @@ public class EquipmentEnchantCard : CardBase } public void OnClick_Reinforce() { + if (m_EnchantRateTableData.n_NextLvRequireCount <= 0) { ToastUI.Ins.Set(999900003); return; } + var sdata = ServerInfo.Ins.m_ServerData; if (sdata.Check_ItemAmount(m_Data.n_EnchantID, m_EnchantRateTableData.n_NextLvRequireCount)) { - sdata.Use_Item(m_Data.n_EnchantID, m_EnchantRateTableData.n_NextLvRequireCount); - sdata.Add_EnchantLv(m_Data.n_EnchantID); - Set_UI(); + ServerInfo.Ins.Save_Enchant_LvUp(m_Data.n_EnchantID, () => + { + sdata.Use_Item(m_Data.n_EnchantID, m_EnchantRateTableData.n_NextLvRequireCount); + sdata.Add_EnchantLv(m_Data.n_EnchantID); + Set_UI(); + }); } } public void OnClick_EnchantEquipItem()