diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index a08ff7aa2..b06d0ba91 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -784,6 +784,91 @@ handlers.Save_StageResult = function(args) return Get_Return(0, { gold : Get_ItemAmount(urod, 2) , mainstat : rtnmainStat }); } +handlers.Save_PC_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 table = Get_MissionTable(); + var awakenData = args.AwakenData; + var awakenupgradeid = Get_GlobalValue_nValue("AWAKEN_GOODS_UPGRADE"); + var awakenUpgradeTable = Get_AwakenUpgradeTable(); + var useawakenMatIds = {}; + + for (var i = 0; i < awakenData.upgrade.length; ++i) + { + var statKey = awakenData.upgrade[i].Key; + var upgradeValue = parseInt(awakenData.upgrade[i].Value || 0); + var awakenValue = parseInt(awakenData.awaken[i].Value || 0); + + if (upgradeValue > 0) + for (var j = 0; j < upgradeValue; ++j) + { + var lv = urod.Awaken[statKey].Lv; + var audata = awakenUpgradeTable.find(f=>f.n_AwakenStep == lv); + + if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel && awakenValue > 0) + { // 각성 각성 + var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey)); + if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true; + if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost)) + { + --awakenValue; + urod.Awaken[statKey].Exp = 0; + ++urod.Awaken[statKey].Lv; + continue; + } + else break; + } + + var price = Get_K_Value(lv, audata.f_BalanceConstant, audata.n_DefaultUpgradeCostValue, audata.f_CountPerUpgradeCostValue); + if (urod.Awaken[statKey].Exp < audata.n_MaxUpgradeLevel && Use_Item(table, urod, awakenupgradeid, price)) + ++urod.Awaken[statKey].Exp; + } + else if (awakenValue > 0) + { + var lv = urod.Awaken[statKey].Lv; + var audata = awakenUpgradeTable.find(f=>f.n_AwakenStep == lv); + if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel) + { // 각성 각성 + var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey)); + if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true; + if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost)) + { + --awakenValue; + urod.Awaken[statKey].Exp = 0; + ++urod.Awaken[statKey].Lv; + } + } + } + } + + var rtn_awakenMatIds = []; + rtn_awakenMatIds.push({ itemid : parseInt(awakenupgradeid), amount : Get_ItemAmount(urod, awakenupgradeid) }); + for (var id in useawakenMatIds) + rtn_awakenMatIds.push({ itemid : parseInt(id), amount : Get_ItemAmount(urod, id) }); + + Set_JsonUserData(urod); + return Get_Return(0, { + awakekMats : rtn_awakenMatIds, + awaken : urod.Awaken + }); +} +function Get_PCAwakenMatKey(stat) +{ + switch (stat) + { + case "STR": return "AWAKEN_GOODS_STR"; + case "DEX": return "AWAKEN_GOODS_DEX"; + case "INT": return "AWAKEN_GOODS_INT"; + case "LUK": return "AWAKEN_GOODS_LUK"; + } + return ""; +} + handlers.Save_PC_Stat = function(args) { var readonlydata = Get_UserReadOnlyData(); @@ -11559,32 +11644,7 @@ function Get_GlobalValue_nValue(key) } function Get_AwakenUpgradeTable() { - return [ - { - "n_AwakenStep": "1", - "n_MaxUpgradeLevel": "10", - "n_AwakenGoodsCost": "1", - "n_DefaultUpgradeCostValue": "10000", - "f_CountPerUpgradeCostValue": "1.5", - "f_BalanceConstant": "0.032" - }, - { - "n_AwakenStep": "2", - "n_MaxUpgradeLevel": "25", - "n_AwakenGoodsCost": "2", - "n_DefaultUpgradeCostValue": "20000", - "f_CountPerUpgradeCostValue": "1.5", - "f_BalanceConstant": "0.032" - }, - { - "n_AwakenStep": "3", - "n_MaxUpgradeLevel": "30", - "n_AwakenGoodsCost": "3", - "n_DefaultUpgradeCostValue": "30000", - "f_CountPerUpgradeCostValue": "1.5", - "f_BalanceConstant": "0.032" - } - ]; + return [{"n_AwakenStep": "1", "n_MaxUpgradeLevel": "10", "n_AwakenGoodsCost": "1", "n_DefaultUpgradeCostValue": "1", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "2", "n_MaxUpgradeLevel": "15", "n_AwakenGoodsCost": "2", "n_DefaultUpgradeCostValue": "2", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "3", "n_MaxUpgradeLevel": "20", "n_AwakenGoodsCost": "3", "n_DefaultUpgradeCostValue": "3", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "4", "n_MaxUpgradeLevel": "25", "n_AwakenGoodsCost": "4", "n_DefaultUpgradeCostValue": "4", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "5", "n_MaxUpgradeLevel": "30", "n_AwakenGoodsCost": "5", "n_DefaultUpgradeCostValue": "5", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}]; } function Get_BreakingLimitTable() { @@ -24775,14 +24835,15 @@ function Get_K_Value(lv, balance, defaultval, perlv, abandon = true) { let val; if (Math.abs(balance) < 0.000001) { - val = defaultval + lv * perlv; + val = lv * perlv; } else { const base = lv * perlv; const exponent = balance * Math.sqrt(lv); - val = defaultval + Math.pow(base, exponent); + val = Math.pow(base, exponent); } val *= 0.0001; + val = Add_Amount(val, defaultval); if (abandon) { val = Math.floor(val); diff --git a/Assets/ResWork/Table/Export/AwakenUpgrade.json b/Assets/ResWork/Table/Export/AwakenUpgrade.json index 7a6235012..39e2050df 100644 --- a/Assets/ResWork/Table/Export/AwakenUpgrade.json +++ b/Assets/ResWork/Table/Export/AwakenUpgrade.json @@ -1 +1 @@ -[{"n_AwakenStep": "1", "n_MaxUpgradeLevel": "10", "n_AwakenGoodsCost": "1", "n_DefaultUpgradeCostValue": "10000", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "2", "n_MaxUpgradeLevel": "25", "n_AwakenGoodsCost": "2", "n_DefaultUpgradeCostValue": "20000", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "3", "n_MaxUpgradeLevel": "30", "n_AwakenGoodsCost": "3", "n_DefaultUpgradeCostValue": "30000", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}] \ No newline at end of file +[{"n_AwakenStep": "1", "n_MaxUpgradeLevel": "10", "n_AwakenGoodsCost": "1", "n_DefaultUpgradeCostValue": "1", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "2", "n_MaxUpgradeLevel": "15", "n_AwakenGoodsCost": "2", "n_DefaultUpgradeCostValue": "2", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "3", "n_MaxUpgradeLevel": "20", "n_AwakenGoodsCost": "3", "n_DefaultUpgradeCostValue": "3", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "4", "n_MaxUpgradeLevel": "25", "n_AwakenGoodsCost": "4", "n_DefaultUpgradeCostValue": "4", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}, {"n_AwakenStep": "5", "n_MaxUpgradeLevel": "30", "n_AwakenGoodsCost": "5", "n_DefaultUpgradeCostValue": "5", "f_CountPerUpgradeCostValue": "1.5", "f_BalanceConstant": "0.032"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/butler.xlsm b/Assets/ResWork/Table/butler.xlsm index 6d0d809aa..ddbf4b82c 100644 Binary files a/Assets/ResWork/Table/butler.xlsm and b/Assets/ResWork/Table/butler.xlsm differ diff --git a/Assets/Script/Server/ServerClass.cs b/Assets/Script/Server/ServerClass.cs index cc8f4f2f7..827a8060b 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -3106,6 +3106,11 @@ public class SC_Items public int itemid, amount; } +public class SC_PCMenuBackResult +{ + public List awakekMats; + public Dictionary awaken; +} public class SC_PCStatInit { public int gem; @@ -3160,4 +3165,26 @@ public class SC_FarmSlotHarvestResult public int gem; public List Items; } +#endregion + +#region 클라 -> 서버 +public class CS_AwakenData +{ + public Dictionary upgrade = new Dictionary + { { eStat.STR, 0 }, { eStat.DEX, 0 }, { eStat.INT, 0 }, { eStat.LUK, 0 }}; + public Dictionary awaken = new Dictionary + { { eStat.STR, 0 }, { eStat.DEX, 0 }, { eStat.INT, 0 }, { eStat.LUK, 0 }}; + + public void Init() + { + upgrade[eStat.STR] = 0; + awaken[eStat.STR] = 0; + upgrade[eStat.DEX] = 0; + awaken[eStat.DEX] = 0; + upgrade[eStat.INT] = 0; + awaken[eStat.INT] = 0; + upgrade[eStat.LUK] = 0; + awaken[eStat.LUK] = 0; + } +} #endregion \ No newline at end of file diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 1f0722699..1b64e965e 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -859,6 +859,43 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_StageResult(_act); }, 2f); }); } + public void Save_PC_MenuBack(CS_AwakenData awakenData, Action _act) + { + NetWait.Ins.Set(true); + PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest + { + FunctionName = MethodBase.GetCurrentMethod().Name, + GeneratePlayStreamEvent = true, + FunctionParameter = new + { + Token = m_LoginInfo.EntityToken.EntityToken, + AwakenData = awakenData + } + }, + result => + { + if (result.Error == null) + { + NetWait.Ins.Set(false); + var str_result = result.FunctionResult.ToString(); + var error = MyErrorCheck(str_result); + // (0 성공, 1 실패 (열린 슬롯 없음), 2 실패 (재화 부족), 3 실패 (각성 재료 id 없음)) + switch (error) + { + case 0: _act?.Invoke(JsonConvert.DeserializeObject(str_result)); break; + case 1: ToastUI.Ins.Set(999900011); break; + case 2: ToastUI.Ins.Set(388); break; + case 3: ToastUI.Ins.Set(999900005); break; + } + } + else + Set_Coroutine(() => { Save_PC_MenuBack(awakenData, _act); }, 2f); + }, + fail => + { + Set_Coroutine(() => { Save_PC_MenuBack(awakenData, _act); }, 2f); + }); + } public void Save_PC_Stat(List usepoint, Action _act) { diff --git a/Assets/Script/UI/PC/Awaken/PCAwakenCard.cs b/Assets/Script/UI/PC/Awaken/PCAwakenCard.cs index e4dfc2fb0..fe2e0f554 100644 --- a/Assets/Script/UI/PC/Awaken/PCAwakenCard.cs +++ b/Assets/Script/UI/PC/Awaken/PCAwakenCard.cs @@ -86,12 +86,19 @@ public class PCAwakenCard : CardBase var lv = sdata.Get_AwakenLv(m_Stat); if (sdata.Check_ItemAmount(moneyid, m_Price)) { - ServerInfo.Ins.Save_PC_AwakenLvUp(m_Stat, () => - { - sdata.Use_Item(moneyid, m_Price); - sdata.Add_AwakenExp(m_Stat); - Set_UI(); - }); + var csdata = PCAwakenUI.Ins.Get_CS_AwakenData(); + ++csdata.upgrade[m_Stat]; + + sdata.Use_Item(moneyid, m_Price); + sdata.Add_AwakenExp(m_Stat); + Set_UI(); + + //ServerInfo.Ins.Save_PC_AwakenLvUp(m_Stat, () => + //{ + // sdata.Use_Item(moneyid, m_Price); + // sdata.Add_AwakenExp(m_Stat); + // Set_UI(); + //}); } } } @@ -104,12 +111,19 @@ public class PCAwakenCard : CardBase var moneyid = Get_AwakenMoneyID(); if (sdata.Check_ItemAmount(moneyid, m_AwakenUpgradeTableData.n_AwakenGoodsCost)) { - ServerInfo.Ins.Save_PC_Awaken(m_Stat, () => - { - sdata.Use_Item(moneyid, m_AwakenUpgradeTableData.n_AwakenGoodsCost); - sdata.Add_AwakenLv(m_Stat); - Set_UI(); - }); + var csdata = PCAwakenUI.Ins.Get_CS_AwakenData(); + ++csdata.awaken[m_Stat]; + + sdata.Use_Item(moneyid, m_AwakenUpgradeTableData.n_AwakenGoodsCost); + sdata.Add_AwakenLv(m_Stat); + Set_UI(); + + //ServerInfo.Ins.Save_PC_Awaken(m_Stat, () => + //{ + // sdata.Use_Item(moneyid, m_AwakenUpgradeTableData.n_AwakenGoodsCost); + // sdata.Add_AwakenLv(m_Stat); + // Set_UI(); + //}); } } } diff --git a/Assets/Script/UI/PC/Awaken/PCAwakenUI.cs b/Assets/Script/UI/PC/Awaken/PCAwakenUI.cs index dfec81332..a731fbb8a 100644 --- a/Assets/Script/UI/PC/Awaken/PCAwakenUI.cs +++ b/Assets/Script/UI/PC/Awaken/PCAwakenUI.cs @@ -1,15 +1,28 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - public class PCAwakenUI : PCUIMenu { + public static bool isIns; + public static PCAwakenUI Ins; + private void Awake() { isIns = true; Ins = this; } + public PCAwakenUI_Set m_PCAwakenUI_Set; + CS_AwakenData m_CS_AwakenData = new CS_AwakenData(); + public override void Set() { base.Set(); NewGameUI.Ins.m_PCUI.Set_Money(table_GlobalValue.Ins.Get_Int("AWAKEN_GOODS_UPGRADE"), 0); m_PCAwakenUI_Set.Set(); + m_CS_AwakenData.Init(); + } + + public CS_AwakenData Get_CS_AwakenData() { return m_CS_AwakenData; } + public bool IsSendAwakenData() + { + foreach (var item in m_CS_AwakenData.upgrade) + if (item.Value > 0) return true; + foreach (var item in m_CS_AwakenData.awaken) + if (item.Value > 0) return true; + return false; } } \ No newline at end of file diff --git a/Assets/Script/UI/PC/Awaken/PCAwakenUI_Set.cs b/Assets/Script/UI/PC/Awaken/PCAwakenUI_Set.cs index 42da4c6df..e1320c98c 100644 --- a/Assets/Script/UI/PC/Awaken/PCAwakenUI_Set.cs +++ b/Assets/Script/UI/PC/Awaken/PCAwakenUI_Set.cs @@ -1,6 +1,4 @@ -using System.Collections; using System.Collections.Generic; -using UnityEngine; public class PCAwakenUI_Set : uScrollViewMgr { diff --git a/Assets/Script/UI/PC/PCUI.cs b/Assets/Script/UI/PC/PCUI.cs index 9d1bf63d6..5ccb28fd1 100644 --- a/Assets/Script/UI/PC/PCUI.cs +++ b/Assets/Script/UI/PC/PCUI.cs @@ -45,5 +45,16 @@ public class PCUI : BotMenuBase PCInfo.Ins.Make_Actors(false, ServerInfo.Ins.m_ServerData); }, 0.02f); } + + //if (PCAwakenUI.isIns && PCAwakenUI.Ins.IsSendAwakenData()) + if (PCAwakenUI.isIns) + { + ServerInfo.Ins.Save_PC_MenuBack(PCAwakenUI.Ins.Get_CS_AwakenData(), result => + { + for (int i = 0; i < result.awakekMats.Count; i++) + sdata.Set_Item(result.awakekMats[i].itemid, result.awakekMats[i].amount); + foreach (var item in result.awaken) sdata.Awaken[item.Key] = item.Value.Get(); + }); + } } } \ No newline at end of file