diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index da28d7773..f00b06857 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -1577,7 +1577,7 @@ handlers.Save_Equipment_Craft = function(args) } return Get_Return(2); } -handlers.Save_Equipment_Equip = function(args) +handlers.Save_Equipment_Equip = function(args) // 사용 x { var readonlydata = Get_UserReadOnlyData(); var error = Get_Error(readonlydata, args.Token); @@ -1867,6 +1867,33 @@ handlers.Save_Enchant_LvUp = function(args) } return Get_Return(1); } +handlers.Save_Equipment_MenuBack = 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 rawEquipArray = args.EquipMenuData.Equip; + 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]; + var itemID = equipDict[key]; + 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); + } + } + + Set_JsonUserData(urod); + return Get_Return(0, { Equip: urod.Equip.Equip }); +} handlers.Save_Skill_MenuBack = function(args) { diff --git a/Assets/Script/Server/ServerClass.cs b/Assets/Script/Server/ServerClass.cs index abcdff24d..472e93247 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -3155,6 +3155,10 @@ public class SC_EnchantOptionResult public SD_OptionDetailData lastoption; public SD_EquipItemEnchant newoption; } +public class SC_EquipmentMenuBackResult +{ + public Dictionary Equip; +} public class SC_PetGachaResult { public int gem; @@ -3225,4 +3229,33 @@ public class CS_EquipSlotEnchantData public eItem Parts; public int Slot, EnchantID, Count; } +public class CS_EquipmentMenuBackData +{ + public Dictionary Equip = new Dictionary + { + { eItem.Weapon, 0 }, { eItem.Armor, 0 }, { eItem.Helmet, 0 }, { eItem.Extra, 0 }, { eItem.Ring, 0 }, + { eItem.Necklace, 0 }, + }; + + public void Init() + { + var sdata = ServerInfo.Ins.m_ServerData; + + var keys = Equip.Keys.ToList(); // 키 복사 + foreach (var key in keys) + Equip[key] = sdata.Get_EqiupmentEquip(key); + } + + 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; + } + + return false; + } +} #endregion \ No newline at end of file diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 62fafed81..e73a70af4 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1436,6 +1436,7 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_Equipment_Craft(itemid, _act); }, 2f); }); } + [Obsolete("Use Save_Equipment_MenuBack Instead")] public void Save_Equipment_Equip(int itemid, Action _act) { NetWait.Ins.Set(true); @@ -1663,6 +1664,7 @@ public class ServerInfo : MyCoroutine /// /// itemid : 인챈트 할 착용 아이템 id /// + [Obsolete("Use Save_Equipment_MenuBack Instead")] public void Save_EquipItem_Enchant(int itemid, int eid, int slot, Action _act) { NetWait.Ins.Set(true); @@ -1703,6 +1705,37 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_EquipItem_Enchant(itemid, eid, slot, _act); }, 2f); }); } + public void Save_Equipment_MenuBack(CS_EquipmentMenuBackData data, Action _act) + { + NetWait.Ins.Set(true); + data.Init(); // 현재 데이터 전송 + PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest + { + FunctionName = MethodBase.GetCurrentMethod().Name, + GeneratePlayStreamEvent = true, + FunctionParameter = new + { + Token = m_LoginInfo.EntityToken.EntityToken, + EquipMenuData = data, + } + }, + result => + { + if (result.Error == null) + { + NetWait.Ins.Set(false); + var str_result = result.FunctionResult.ToString(); + var error = MyErrorCheck(str_result); + _act?.Invoke(JsonConvert.DeserializeObject(str_result)); + } + else + Set_Coroutine(() => { Save_Equipment_MenuBack(data, _act); }, 2f); + }, + fail => + { + Set_Coroutine(() => { Save_Equipment_MenuBack(data, _act); }, 2f); + }); + } public void Save_Enchant_LvUp(int eid, Action _act) { diff --git a/Assets/Script/UI/Eqiupment/EquipmentPopup_Obtain.cs b/Assets/Script/UI/Eqiupment/EquipmentPopup_Obtain.cs index a0aa43a31..abe4456b4 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentPopup_Obtain.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentPopup_Obtain.cs @@ -76,6 +76,15 @@ public class EquipmentPopup_Obtain : EquipmentPopupBase { if (!sdata.IsEquip(m_Data.e_EquipParts, m_Data.n_EquipID)) { + sdata.Equip.Set_Equip(m_Data.e_EquipParts, m_Data.n_EquipID); + act_RefreshUI(); + NewGameUI.Ins.m_EquipmentUI.m_equipItems.Set(); + NewGameUI.Ins.m_EquipmentUI.m_EquipmentUI_Items.Set_UI(); + if (m_Data.e_EquipParts == eItem.Weapon) + MyValue.MyPC.Change_Weapon(); + MyValue.Get_ActorStatInfoorNull(eRole.PC); + + /* ServerInfo.Ins.Save_Equipment_Equip(m_Data.n_EquipID, () => { sdata.Equip.Set_Equip(m_Data.e_EquipParts, m_Data.n_EquipID); @@ -96,6 +105,7 @@ public class EquipmentPopup_Obtain : EquipmentPopupBase case eItem.Necklace: sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_MOUNT_PARTS_LIMIT, 6); break; } }); + */ } } } diff --git a/Assets/Script/UI/Eqiupment/EquipmentUI.cs b/Assets/Script/UI/Eqiupment/EquipmentUI.cs index 512929514..1182343f0 100644 --- a/Assets/Script/UI/Eqiupment/EquipmentUI.cs +++ b/Assets/Script/UI/Eqiupment/EquipmentUI.cs @@ -19,10 +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 override void Set() { base.Set(); + m_MenuBackData.Init(); Set_Money(101, 102, 103); m_EqiupmentPCInfo.Set(); m_equipItems.Set(); @@ -72,7 +74,24 @@ public class EquipmentUI : BotMenuBase public override void OnClick_Back() { - base.OnClick_Back(); + if (m_MenuBackData.isNeedServerSave()) + { + ServerInfo.Ins.Save_Equipment_MenuBack(m_MenuBackData, + result => + { + var sdata = ServerInfo.Ins.m_ServerData; + foreach (var item in result.Equip) + sdata.Equip.Equip[item.Key] = item.Value; + MyValue.Get_ActorStatInfoorNull(eRole.PC); + base.OnClick_Back(); + }); + + } + else + { + base.OnClick_Back(); + } + PopupMgr.Ins.m_EquipmentItemPopup.OnClick_Back(); PopupMgr.Ins.m_EquipmentMakePopup.OnClick_Back(); PopupMgr.Ins.m_EquipmentPopup.OnClick_Back();