diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index 8ef3b3641..244b583fc 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -1774,29 +1774,17 @@ handlers.Save_EquipItem_EnchantOption = function(args) if (error < 0) return Get_Return(error); var urod = Get_JsonUserData(readonlydata); - var enchantdata = args.EnchantData; - var id = enchantdata.EnchantID; - - var slot = urod.Slot.find(f => f.Parts == enchantdata.Parts); - if (slot.Lv < Get_GlobalValue_nValue(`EnchantOpenLv${enchantdata.Slot + 1}`)) - return Get_Return(2); - var table = Get_MissionTable(); - if (Use_Item(table, urod, id, enchantdata.Count)) - { - var option = urod.EnchantOption[id].Option.at(-1); - slot.Enchant[enchantdata.Slot].ID = option.id; - slot.Enchant[enchantdata.Slot].Lv = option.lv; + var enchantresult = EnchantProcess(table, urod, args); // 마법부여 + Make_EqiupmentEnchantOption_perEnchant(urod, args.NeedOptionid); - Make_EqiupmentEnchantOption_perEnchant(urod, id); - - Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, enchantdata.Count); - Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, enchantdata.Count); - - Set_JsonUserData(urod); - return Get_Return(0, { lastoption: option, newoption : urod.EnchantOption[id] }); - } - return Get_Return(1); + Set_JsonUserData(urod); + return Get_Return(0, { + newoption : urod.EnchantOption[args.NeedOptionid], + EnchantCount: enchantresult.enchantcount, + AllEnchantAmount: enchantresult.allenchantamount, + Slot: urod.Slot + }); } handlers.Save_EquipItem_Enchant = function(args) // 사용 x { @@ -1867,6 +1855,8 @@ handlers.Save_Enchant_LvUp = function(args) } return Get_Return(1); } +const validEquipKeys = ["Weapon", "Armor", "Helmet", "Extra", "Ring", "Necklace"]; +const partsValue = { 0: "Weapon", 1: "Armor", 2: "Helmet", 3: "Extra", 4: "Ring", 5: "Necklace" }; handlers.Save_Equipment_MenuBack = function(args) { var readonlydata = Get_UserReadOnlyData(); @@ -1880,7 +1870,6 @@ handlers.Save_Equipment_MenuBack = function(args) var equipDict = {}; for (var i = 0; i < rawEquipArray.length; ++i) equipDict[rawEquipArray[i].Key] = rawEquipArray[i].Value; - var validEquipKeys = ["Weapon", "Armor", "Helmet", "Extra", "Ring", "Necklace"]; for (var i = 0; i < validEquipKeys.length; ++i) { var key = validEquipKeys[i]; @@ -1892,67 +1881,41 @@ handlers.Save_Equipment_MenuBack = function(args) } } - // 마법부여 - var rawEnchantArray = args.EquipMenuData.Enchant; - var enchantDic = {}; - for (var i = 0; i < rawEnchantArray.length; ++i) { - var part = rawEnchantArray[i].Key; - enchantDic[part] = {}; + var enchantresult = EnchantProcess(table, urod, args); // 마법부여 - var innerList = rawEnchantArray[i].Value; - for (var j = 0; j < innerList.length; ++j) { - var enchantID = innerList[j].Key; - var count = innerList[j].Value; - enchantDic[part][enchantID] = count; - } - } - - var enchantsuccess = true; + Set_JsonUserData(urod); + return Get_Return(0, { + Equip: urod.Equip.Equip, + EnchantCount: enchantresult.enchantcount, + AllEnchantAmount: enchantresult.allenchantamount, + Slot: urod.Slot + }); +} +function EnchantProcess(table, urod, args) +{ var totalCount = 0; - for (var i = 0; i < validEquipKeys.length; ++i) + var lst = args.EquipMenuData.Enchantlst; + for (var i = 0; i < lst.length; ++i) { - var key = validEquipKeys[i]; - for (var id in enchantDic[key]) + var row = lst[i]; + var parts = partsValue[row[0]]; + var slotIndex = row[1]; + var enchantid = Add_Amount(10000, row[2]); + + var slot = urod.Slot.find(f => f.Parts == parts); + if (slot.Lv >= Get_GlobalValue_nValue(`EnchantOpenLv${slotIndex + 1}`) && Use_Item(table, urod, enchantid, 1)) { - totalCount = Add_Amount(totalCount, enchantDic[key][id]); - enchantsuccess = Use_Item(table, urod, id, enchantDic[key][id]); - if (!enchantsuccess) break; + var option = urod.EnchantOption[enchantid].Option[urod.EnchantOption[enchantid].Index++]; + var enchantdata = slot.Enchant[slotIndex]; + enchantdata.ID = option.id; + enchantdata.Lv = option.lv; + + ++totalCount; + Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, 1); + Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, 1); } - if (!enchantsuccess) break; } - - if (enchantsuccess) - { // 성공이므로 마지막 인챈트 및 인덱스 적용 - Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, totalCount); - Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, totalCount); - - for (var i = 0; i < validEquipKeys.length; ++i) - { - var key = validEquipKeys[i]; - for (var id in enchantDic[key]) - urod.EnchantOption[id].Index = Add_Amount(urod.EnchantOption[id].Index, enchantDic[key][id]); - } - - var rawLastEnchant = args.EquipMenuData.LastEnchant; - for (var i = 0; i < rawLastEnchant.length; ++i) - { - var part = rawLastEnchant[i].Key; - var slotList = rawLastEnchant[i].Value; - for (var j = 0; j < slotList.length; ++j) - { - var slotIndex = slotList[j].Key; - var id = slotList[j].Value; - - var slot = urod.Slot.find(f => f.Parts == part); - var enchantdata = slot.Enchant[slotIndex]; - var option = urod.EnchantOption[id].Option[urod.EnchantOption[id].Index - 1]; - enchantdata.ID = option.id; - enchantdata.Lv = option.lv; - } - } - } - var allEnchantAmount = []; var enchantable = Get_EnchantListTable(); for (var i = 0; i < enchantable.length; ++ i) @@ -1960,15 +1923,11 @@ handlers.Save_Equipment_MenuBack = function(args) var id = enchantable[i].n_EnchantID; allEnchantAmount.push( { itemid: id, amount: Get_ItemAmount(urod, id) } ); } - // 마법 부여 끝 - Set_JsonUserData(urod); - return Get_Return(0, { - Equip: urod.Equip.Equip, - EnchantCount: totalCount, - AllEnchantAmount: allEnchantAmount, - Slot: urod.Slot - }); + return { + enchantcount: totalCount, + allenchantamount: allEnchantAmount + } } handlers.Save_Skill_MenuBack = function(args) diff --git a/Assets/Script/Server/ServerClass.cs b/Assets/Script/Server/ServerClass.cs index 8cd04cea9..54f156bf5 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -3152,8 +3152,10 @@ public class SC_EnchantEquipItemResult } public class SC_EnchantOptionResult { - public SD_OptionDetailData lastoption; public SD_EquipItemEnchant newoption; + public int EnchantCount; + public List Slot; + public List AllEnchantAmount; } public class SC_EquipmentMenuBackResult { @@ -3227,11 +3229,6 @@ public class CS_AwakenData awaken[eStat.LUK] = 0; } } -public class CS_EquipSlotEnchantData -{ - public eItem Parts; - public int Slot, EnchantID, Count; -} public class CS_EquipmentMenuBackData { public Dictionary Equip = new Dictionary @@ -3239,17 +3236,12 @@ public class CS_EquipmentMenuBackData { eItem.Weapon, 0 }, { eItem.Armor, 0 }, { eItem.Helmet, 0 }, { eItem.Extra, 0 }, { eItem.Ring, 0 }, { eItem.Necklace, 0 }, }; - public Dictionary> Enchant = new Dictionary> - { // 파츠, <인챈트 ID, 마법 부여 횟수> - { eItem.Weapon, new Dictionary() }, { eItem.Armor, new Dictionary() }, - { eItem.Helmet, new Dictionary() }, { eItem.Extra, new Dictionary() }, - { eItem.Ring, new Dictionary() }, { eItem.Necklace, new Dictionary() }, - }; - public Dictionary> LastEnchant = new Dictionary> - { // 파츠, <슬롯, 인챈트 ID> - { eItem.Weapon, new Dictionary() }, { eItem.Armor, new Dictionary() }, - { eItem.Helmet, new Dictionary() }, { eItem.Extra, new Dictionary() }, - { eItem.Ring, new Dictionary() }, { eItem.Necklace, new Dictionary() }, + public List> Enchantlst = new List>(); + + Dictionary dic_parts = new Dictionary + { + { eItem.Weapon, 0 }, { eItem.Armor, 1 }, { eItem.Helmet, 2 }, { eItem.Extra, 3 }, { eItem.Ring, 4 }, + { eItem.Necklace, 5 }, }; public void Init(bool equip, bool enchant) @@ -3263,40 +3255,23 @@ public class CS_EquipmentMenuBackData Equip[key] = sdata.Get_EqiupmentEquip(key); } - if (enchant) - { - var enchantkeys = Enchant.Keys.ToList(); - foreach (var item in enchantkeys) - { - Enchant[item].Clear(); - LastEnchant[item].Clear(); - } - } + if (enchant) Enchantlst.Clear(); } public void Add_Enchant(eItem parts, int slot, int enchantid) { - if (!Enchant[parts].ContainsKey(enchantid)) - Enchant[parts].Add(enchantid, 1); - else - ++Enchant[parts][enchantid]; - - if (!LastEnchant[parts].ContainsKey(slot)) - LastEnchant[parts].Add(slot, enchantid); + Enchantlst.Add(new List { dic_parts[parts], slot, enchantid - 10000 }); } public bool isNeedServerSave() { var sdata = ServerInfo.Ins.m_ServerData; foreach (var item in Equip) - { if (Equip[item.Key] != sdata.Get_EqiupmentEquip(item.Key)) return true; - } - foreach (var item in LastEnchant) - if (item.Value.Count > 0) - return true; + if (Enchantlst.Count > 0) + return true; return false; } diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index e42313aae..0c74aaea6 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1625,7 +1625,7 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_EquipItem_SlotLvUpInit(itemid, _act); }, 2f); }); } - public void Save_EquipItem_EnchantOption(CS_EquipSlotEnchantData data, Action _act) + public void Save_EquipItem_EnchantOption(int needoptionid, CS_EquipmentMenuBackData data, Action _act) { NetWait.Ins.Set(true); PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest @@ -1635,7 +1635,8 @@ public class ServerInfo : MyCoroutine FunctionParameter = new { Token = m_LoginInfo.EntityToken.EntityToken, - EnchantData = data, + EquipMenuData = data, + NeedOptionid = needoptionid } }, result => @@ -1654,11 +1655,11 @@ public class ServerInfo : MyCoroutine } } else - Set_Coroutine(() => { Save_EquipItem_EnchantOption(data, _act); }, 2f); + Set_Coroutine(() => { Save_EquipItem_EnchantOption(needoptionid, data, _act); }, 2f); }, fail => { - Set_Coroutine(() => { Save_EquipItem_EnchantOption(data, _act); }, 2f); + Set_Coroutine(() => { Save_EquipItem_EnchantOption(needoptionid, data, _act); }, 2f); }); } /// diff --git a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs index b0a7018db..310679717 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs @@ -1,4 +1,3 @@ -using CodeStage.AntiCheat.ObscuredTypes; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -17,8 +16,7 @@ public class EquipmentEnchantCard : CardBase EnchantListTableData m_Data; EnchantRateTableData m_EnchantRateTableData; - ObscuredInt m_EnchantCount; - CS_EquipSlotEnchantData m_EnchantData = new CS_EquipSlotEnchantData(); + eItem m_Parts; public override void Set(T _base) { @@ -28,10 +26,7 @@ public class EquipmentEnchantCard : CardBase Set_UI(); // 착용 장비 DSUtil.InActivateGameObjects(gos, PopupMgr.Ins.m_EquipmentItemPopup.isActiveAndEnabled ? 1 : 0); - m_EnchantCount = 0; - m_EnchantCount.RandomizeCryptoKey(); - m_EnchantData.EnchantID = m_Data.n_EnchantID; - m_EnchantData.Parts = PopupMgr.Ins.m_EquipmentItemPopup.Get_Parts(); + m_Parts = PopupMgr.Ins.m_EquipmentItemPopup.Get_Parts(); } public override void Set_UI() @@ -73,34 +68,36 @@ public class EquipmentEnchantCard : CardBase var sdata = ServerInfo.Ins.m_ServerData; if (sdata.Get_EnchantLv(m_Data.n_EnchantID) > 0 && sdata.Check_ItemAmount(m_Data.n_EnchantID, 1)) { // 마법 부여 하자 - ++m_EnchantCount; m_EnchantCount.RandomizeCryptoKey(); - sdata.Use_Item(m_Data.n_EnchantID, 1); var enchant = sdata.EnchantOption[m_Data.n_EnchantID]; var option = enchant.Option[enchant.Index++]; + sdata.Set_SlotEnchant(m_Parts, Select_EnchantCardData.Index, option.id, option.lv); if (enchant.Option.Count <= enchant.Index) { - NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Init(false, true); - m_EnchantData.Count = m_EnchantCount; - // 현재까지 저장하고 새로운 데이터 받아오기 - m_EnchantData.Slot = Select_EnchantCardData.Index; - ServerInfo.Ins.Save_EquipItem_EnchantOption(m_EnchantData, result => + ServerInfo.Ins.Save_EquipItem_EnchantOption(m_Data.n_EnchantID, NewGameUI.Ins.m_EquipmentUI.m_MenuBackData, + result => { - sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ACC, 0, m_EnchantCount); - sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ALL, 0, m_EnchantCount); + NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Init(false, true); // 초기화 + + sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ACC, 0, result.EnchantCount); + sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ALL, 0, result.EnchantCount); + + sdata.Slot.Clear(); + for (int i = 0; i < result.Slot.Count; i++) + sdata.Slot.Add(result.Slot[i].Get()); + + for (int i = 0; i < result.AllEnchantAmount.Count; i++) + sdata.Set_Item(result.AllEnchantAmount[i].itemid, result.AllEnchantAmount[i].amount); - sdata.Set_SlotEnchant(m_EnchantData.Parts, m_EnchantData.Slot, result.lastoption.id, result.lastoption.lv); sdata.EnchantOption[m_Data.n_EnchantID] = result.newoption; - m_EnchantCount = 0; m_EnchantCount.RandomizeCryptoKey(); RefreshUI(); }); } else { - NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Add_Enchant(m_EnchantData.Parts, m_EnchantData.Slot, m_Data.n_EnchantID); - sdata.Set_SlotEnchant(m_EnchantData.Parts, m_EnchantData.Slot, option.id, option.lv); + NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Add_Enchant(m_Parts, Select_EnchantCardData.Index, m_Data.n_EnchantID); RefreshUI(); } }