diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index f00b06857..e91c4d102 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -1874,6 +1874,7 @@ handlers.Save_Equipment_MenuBack = function(args) if (error < 0) return Get_Return(error); var urod = Get_JsonUserData(readonlydata); + var table = Get_MissionTable(); var rawEquipArray = args.EquipMenuData.Equip; var equipDict = {}; @@ -1887,12 +1888,85 @@ handlers.Save_Equipment_MenuBack = function(args) if (IsObtainItem(urod, itemID) && urod.Equip.Equip[key] != itemID) { urod.Equip.Equip[key] = itemID; - Add_MissionCount(Get_MissionTable(), urod, "EQUIP_ITEM_MOUNT_PARTS_LIMIT", Add_Amount(i, 1), 1); + Add_MissionCount(table, urod, "EQUIP_ITEM_MOUNT_PARTS_LIMIT", Add_Amount(i, 1), 1); } } + // 마법부여 + var rawEnchantArray = args.EquipMenuData.Enchant; + var enchantDic = {}; + for (var i = 0; i < rawEnchantArray.length; ++i) { + var part = rawEnchantArray[i].Key; + enchantDic[part] = {}; + + 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; + var totalCount = 0; + for (var i = 0; i < validEquipKeys.length; ++i) + { + var key = validEquipKeys[i]; + for (var id in enchantDic[key]) + { + totalCount = Add_Amount(totalCount, enchantDic[key][id]); + enchantsuccess = Use_Item(table, urod, id, enchantDic[key][id]); + if (!enchantsuccess) break; + } + 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) + { + log.info(enchantable[i]); + var id = enchantable[i].n_EnchantID; + allEnchantAmount.push( { id: id, amount: Get_ItemAmount(urod, id) } ); + } + + // AllSlotEnchant 전송 + Set_JsonUserData(urod); - return Get_Return(0, { Equip: urod.Equip.Equip }); + return Get_Return(0, { Equip: urod.Equip.Equip, 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 472e93247..061e75a71 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -3158,6 +3158,7 @@ public class SC_EnchantOptionResult public class SC_EquipmentMenuBackResult { public Dictionary Equip; + public int EnchantCount; } public class SC_PetGachaResult { @@ -3236,14 +3237,50 @@ 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 void Init() + public void Init(bool equip, bool enchant) { var sdata = ServerInfo.Ins.m_ServerData; - var keys = Equip.Keys.ToList(); // 키 복사 - foreach (var key in keys) - Equip[key] = sdata.Get_EqiupmentEquip(key); + if (equip) + { + var keys = Equip.Keys.ToList(); // 키 복사 + foreach (var key in keys) + Equip[key] = sdata.Get_EqiupmentEquip(key); + } + + if (enchant) + { + var enchantkeys = Enchant.Keys.ToList(); + foreach (var item in enchantkeys) + { + Enchant[item].Clear(); + LastEnchant[item].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); } public bool isNeedServerSave() @@ -3255,6 +3292,10 @@ public class CS_EquipmentMenuBackData return true; } + foreach (var item in LastEnchant) + if (item.Value.Count > 0) + return true; + return false; } } diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index e73a70af4..e42313aae 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1708,7 +1708,7 @@ public class ServerInfo : MyCoroutine public void Save_Equipment_MenuBack(CS_EquipmentMenuBackData data, Action _act) { NetWait.Ins.Set(true); - data.Init(); // 현재 데이터 전송 + data.Init(true, false); // 현재 데이터 전송 PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest { FunctionName = MethodBase.GetCurrentMethod().Name, diff --git a/Assets/Script/UI/Eqiupment/EquipItemEnchantOptionCard.cs b/Assets/Script/UI/Eqiupment/EquipItemEnchantOptionCard.cs index 698ef4577..df84e8b0e 100644 --- a/Assets/Script/UI/Eqiupment/EquipItemEnchantOptionCard.cs +++ b/Assets/Script/UI/Eqiupment/EquipItemEnchantOptionCard.cs @@ -31,6 +31,8 @@ public class EquipItemEnchantOptionCard : CardBase texts[1].text = MyText.Get_StatNameValueText(upgradeData.e_OptionType, m_EnchantCardData.EnchantData.Get_Value()); images[1].enabled = true; images[1].color = egcData.GradeColor; + + //Debug.Log(m_EnchantCardData.EnchantData.ID + " " + m_EnchantCardData.EnchantData.Lv); } else { // 오픈되었으나 비어있음 diff --git a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs index ca9853fa2..b0a7018db 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentEnchantCard.cs @@ -81,6 +81,7 @@ public class EquipmentEnchantCard : CardBase 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; @@ -98,6 +99,7 @@ public class EquipmentEnchantCard : CardBase } 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); RefreshUI(); } diff --git a/Assets/Script/UI/Eqiupment/EquipmentUI.cs b/Assets/Script/UI/Eqiupment/EquipmentUI.cs index 1182343f0..98bdb0432 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentUI.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentUI.cs @@ -19,12 +19,12 @@ public class EquipmentUI : BotMenuBase }; List list_infostat = new List { eStat.BaseDmg, eStat.MaxHP, eStat.STR, eStat.DEX, eStat.INT, eStat.LUK }; - CS_EquipmentMenuBackData m_MenuBackData = new CS_EquipmentMenuBackData(); + public CS_EquipmentMenuBackData m_MenuBackData = new CS_EquipmentMenuBackData(); public override void Set() { base.Set(); - m_MenuBackData.Init(); + m_MenuBackData.Init(true, true); Set_Money(101, 102, 103); m_EqiupmentPCInfo.Set(); m_equipItems.Set(); @@ -82,6 +82,10 @@ public class EquipmentUI : BotMenuBase var sdata = ServerInfo.Ins.m_ServerData; foreach (var item in result.Equip) sdata.Equip.Equip[item.Key] = item.Value; + + sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ACC, 0, result.EnchantCount); + sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ALL, 0, result.EnchantCount); + MyValue.Get_ActorStatInfoorNull(eRole.PC); base.OnClick_Back(); });