From f5d3e489ce09f3158439b7c19da078e4928d75ed Mon Sep 17 00:00:00 2001 From: Ino Date: Wed, 30 Jul 2025 16:01:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EC=9B=94=20=EC=98=B5=EC=85=98=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B0=9B=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Resources/.CloudScript.js | 35 +++++++++++++++---- Assets/Script/Server/ServerClass.cs | 19 +++++++++- Assets/Script/Server/ServerInfo.cs | 7 ++-- Assets/Script/UI/PC/Limit/PCLimit_Center.cs | 3 +- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index bdfe2985a..e42f1fcee 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -1116,6 +1116,33 @@ handlers.Save_PC_BuyJob = function(args) } } +function Make_LimitBreakOption(urod) +{ + urod.LimitBreakOption = {}; + urod.LimitBreakOption.Preset = [0, 0, 0]; + urod.LimitBreakOption.Option = { + "1": [], + "2": [], + "3": [] + }; + + var limitslotmagicrateTable = Get_LimitSlotMagicRateTable(); + var lv = urod.PC.LLv; + if (lv > 9) lv = 9; + var lsmc_data = limitslotmagicrateTable.find(f=>f.n_NeedLimitLv == lv); + var randombaTable = Get_RandomBagTable(); + var enchantgradeTable = Get_EnchantGradeTable(); + for (var i = 0; i < 3; ++i) + { + for (var j = 0; j < 500; ++j) + { + var grade = Get_RandomGachaGrade(lv); + var optionitemID = Get_RandomItem(lsmc_data.n_DropIndex, grade).itemid; + var olv = Get_OptionLv(grade); + urod.LimitBreakOption.Option[i + 1].push({ id : optionitemID, lv : olv }); + } + } +} handlers.Save_PC_LimitLvUp = function(args) { var readonlydata = Get_UserReadOnlyData(); @@ -1143,9 +1170,10 @@ handlers.Save_PC_LimitLvUp = function(args) ++urod.PC.LLv; var matamount = limitdata_next.n_MaxAbilityPoint - limitdata.n_MaxAbilityPoint; Add_Item(Get_MissionTable(), Get_ItemTable(), urod, matdata.n_Value, matamount); + Make_LimitBreakOption(urod); Set_JsonUserData(urod); - return Get_Return(0); + return Get_Return(0, { option : urod.LimitBreakOption }); } else return Get_Return(2); // PC 레벨 부족 @@ -1176,8 +1204,6 @@ handlers.Save_PC_LimitSlotOptionChange = function(args) } } - log.info("OpenSlotCount : " + OpenSlots.length); - log.info("LockCount : " + LockCount); if (OpenSlots.length == 0) return Get_Return(1); var global = Get_GlobalValueTable(); @@ -1186,7 +1212,6 @@ handlers.Save_PC_LimitSlotOptionChange = function(args) var table = Get_MissionTable(); var price = 10 * ((1 + LockCount) * LockCount / 2 + 1); - log.info("price : " + price); if (Use_Item(table, urod, matdata.n_Value, price)) { var rtnAdd = []; // [{ slot, randombagid, optionlv }] @@ -1200,8 +1225,6 @@ handlers.Save_PC_LimitSlotOptionChange = function(args) var lsmc_data = limitslotmagicrateTable.find(f=>f.n_NeedLimitLv == lv); //log.info("초월 레벨 : " + urod.PC.LLv + ", " + lv); //log.info(lsmc_data); - var randombaTable = Get_RandomBagTable(); - var enchantgradeTable = Get_EnchantGradeTable(); var grade = Get_RandomGachaGrade(lv); //log.info("등급 : " + grade); // 랜덤백에서 아이템 id 얻기 diff --git a/Assets/Script/Server/ServerClass.cs b/Assets/Script/Server/ServerClass.cs index e5559b269..b582a24c7 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -96,7 +96,7 @@ public partial class ServerData /// { 상품ID, 0 총 구매횟수, 1 이번 구매횟수, 2 광고 남은 시간 } /// public Dictionary Shop = new Dictionary(); - + public SD_LimitBreakOption LimitBreakOption; public List Book; public List ChapterQuest; @@ -227,6 +227,7 @@ public partial class ServerData temp.Gacha = DSUtil.Get_T_Dic(Gacha); temp.Common = DSUtil.Get_T_List(Common); foreach (var item in Shop) temp.Shop.Add(item.Key, item.Value.Get()); + temp.LimitBreakOption = LimitBreakOption; temp.Book = new List(); for (int i = 0; i < Book.Count; i++) @@ -272,6 +273,7 @@ public class ServerData_Read public SD_Farm_Read Farm; public Dictionary>> Mission = new Dictionary>>(); public Dictionary Shop = new Dictionary(); + public SD_LimitBreakOption LimitBreakOption; public List Book; public List ChapterQuest; @@ -328,6 +330,7 @@ public class ServerData_Read temp.Gacha = DSUtil.Get_T_Dic(Gacha); temp.Common = DSUtil.Get_T_List(Common); foreach (var item in Shop) temp.Shop.Add(item.Key, item.Value.Get()); + temp.LimitBreakOption = LimitBreakOption; temp.Book = new List(); for (int i = 0; i < Book.Count; i++) @@ -3072,6 +3075,16 @@ public class SD_Shop_Read return new SD_Shop { Buy = Buy, Time = Time, Buy_Total = Buy_Total }; } } +public class SD_LimitBreakOption +{ + public List Preset; + public Dictionary> Option; +} +[Serializable] +public class SD_LimitBreakOptionDetail +{ + public int id, lv; +} #endregion #region 서버 응답 클래스 @@ -3157,6 +3170,10 @@ public class SC_FarmSlotHarvestResult public int gem; public List Items; } +public class SC_LimitBreakLvUpResult +{ + public SD_LimitBreakOption option; +} #endregion #region 클라 -> 서버 diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 85a704cce..26300a9d8 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1091,7 +1091,7 @@ public class ServerInfo : MyCoroutine }); } - public void Save_PC_LimitLvUp(Action _act) + public void Save_PC_LimitLvUp(Action _act) { NetWait.Ins.Set(true); PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest @@ -1108,11 +1108,12 @@ public class ServerInfo : MyCoroutine if (result.Error == null) { NetWait.Ins.Set(false); - var error = MyErrorCheck(result.FunctionResult.ToString()); + var str_result = result.FunctionResult.ToString(); + var error = MyErrorCheck(str_result); // (0 성공, 1 실패(PC Lv 부족), 2 실패 (각성 Lv 부족), 3 실패 (각성 재료 id 없음), 4 실패 (더 이상 초월 불가)) switch (error) { - case 0: _act?.Invoke(); break; + case 0: _act?.Invoke(JsonConvert.DeserializeObject(str_result)); break; case 1: ToastUI.Ins.Set(264); break; case 2: ToastUI.Ins.Set(263); break; case 3: ToastUI.Ins.Set(999900005); break; diff --git a/Assets/Script/UI/PC/Limit/PCLimit_Center.cs b/Assets/Script/UI/PC/Limit/PCLimit_Center.cs index 1495eaad6..718e7d2e1 100644 --- a/Assets/Script/UI/PC/Limit/PCLimit_Center.cs +++ b/Assets/Script/UI/PC/Limit/PCLimit_Center.cs @@ -59,8 +59,9 @@ public class PCLimit_Center : PCLimit_StatInfo { if (sdata.PC.Lv >= Get_NeedPCLv()) { - ServerInfo.Ins.Save_PC_LimitLvUp(() => + ServerInfo.Ins.Save_PC_LimitLvUp(result => { + sdata.LimitBreakOption = result.option; sdata.Add_LimitLv(); PCLimitUI.Ins.Set(); MyValue.Get_ActorStatInfoorNull(eRole.PC);