diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index c1faa215c..3d3d1bf2a 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -1564,6 +1564,64 @@ handlers.Save_Essence_Change = function(args) } return Get_Return(1); } +handlers.Save_Essence_Mileage = 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); + + const list_rewardstep = [200, 500, 700, 1000]; + const list_rewardid = [2000001, 2000002, 2000003, 2000004, 2000005, 2000006]; + const dic_rewardrate = { + 0: [0.5, 0.35, 0.25, 0.0, 0.0, 0.0], + 1: [0.0, 0.5, 0.35, 0.25, 0.0, 0.0], + 2: [0.0, 0.0, 0.5, 0.35, 0.25, 0.0], + 3: [0.0, 0.0, 0.0, 0.5, 0.35, 0.25], + }; + + var mileageid = Get_GlobalValue_nValue("n_EssenceMileageID"); + var mileageAmount = Get_ItemAmount(urod, mileageid); + if (mileageAmount < list_rewardstep[0]) return Get_Return(1); + + // step check + var step = 0; + if (mileageAmount >= list_rewardstep[3]) step = 3; + else if (mileageAmount >= list_rewardstep[2]) step = 2; + else if (mileageAmount >= list_rewardstep[1]) step = 1; + + var table = Get_MissionTable(); + var stepCost = list_rewardstep[step]; + if (Use_Item(table, urod, mileageid, stepCost)) + { + var itemtable = Get_ItemTable(); + var rewards = []; + + // 확률 기반 아이템 선택 + var rates = dic_rewardrate[step]; + var totalRate = rates.reduce((a, b) => a + b, 0); + var rand = Math.random() * totalRate; + + var selectedIndex = 0; + for (var i = 0; i < rates.length; i++) { + if (rand < rates[i]) { + selectedIndex = i; + break; + } + rand -= rates[i]; + } + + var itemid = list_rewardid[selectedIndex]; + var amount = 1; + Add_Item(table, itemtable, urod, itemid, amount); + rewards.push({ itemid: itemid, amount: amount }); + + Set_JsonUserData(urod); + return Get_Return(0, { mileage: stepCost, items: rewards }); + } + return Get_Return(1); +}; /////////////////////////////////// 서버 처리 handlers.Write_UnityInApp = function(args) diff --git a/Assets/Script/Server/ServerClass.cs b/Assets/Script/Server/ServerClass.cs index a8f2f8588..c59cf36ae 100644 --- a/Assets/Script/Server/ServerClass.cs +++ b/Assets/Script/Server/ServerClass.cs @@ -2990,7 +2990,7 @@ public class SC_PetLvUpResult { public int usemat, usepet; } -public class SC_EssenceExchangeResult +public class SC_EssenceResult { public int mileage; public List items; diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 1af7a63ac..d14bab96f 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -1826,7 +1826,7 @@ public class ServerInfo : MyCoroutine }); } - public void Save_Essence_Change(int essenceID, int amount, Action _act) + public void Save_Essence_Change(int essenceID, int amount, Action _act) { NetWait.Ins.Set(true); PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest @@ -1850,7 +1850,7 @@ public class ServerInfo : MyCoroutine // (0 성공, 1 실패 (정수 갯수 부족)) switch (error) { - case 0: _act?.Invoke(JsonConvert.DeserializeObject(str_result)); break; + case 0: _act?.Invoke(JsonConvert.DeserializeObject(str_result)); break; case 1: ToastUI.Ins.Set(388); break; } } @@ -1862,6 +1862,40 @@ public class ServerInfo : MyCoroutine Set_Coroutine(() => { Save_Essence_Change(essenceID, amount, _act); }, 2f); }); } + public void Save_Essence_Mileage(Action _act) + { + NetWait.Ins.Set(true); + PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest + { + FunctionName = MethodBase.GetCurrentMethod().Name, + GeneratePlayStreamEvent = true, + FunctionParameter = new + { + Token = m_LoginInfo.EntityToken.EntityToken, + } + }, + result => + { + if (result.Error == null) + { + NetWait.Ins.Set(false); + var str_result = result.FunctionResult.ToString(); + var error = MyErrorCheck(str_result); + // (0 성공, 1 실패 (마일리지 부족)) + switch (error) + { + case 0: _act?.Invoke(JsonConvert.DeserializeObject(str_result)); break; + case 1: ToastUI.Ins.Set(388); break; + } + } + else + Set_Coroutine(() => { Save_Essence_Mileage(_act); }, 2f); + }, + fail => + { + Set_Coroutine(() => { Save_Essence_Mileage(_act); }, 2f); + }); + } #endregion #region 우편 diff --git a/Assets/Script/UI/Collection/Essence/CollectionEssenceUI_Left.cs b/Assets/Script/UI/Collection/Essence/CollectionEssenceUI_Left.cs index 94a6ca0da..d3acadace 100644 --- a/Assets/Script/UI/Collection/Essence/CollectionEssenceUI_Left.cs +++ b/Assets/Script/UI/Collection/Essence/CollectionEssenceUI_Left.cs @@ -70,13 +70,14 @@ public class CollectionEssenceUI_Left : MonoBehaviour { Popup.Ins.Set(ePopupType.One, 283, () => { - var rewardid_index = DSUtil.Get_RandomIndex(dic_rewardrate[index]); - var essenceid = list_rewardid[rewardid_index]; - sdata.Use_Item(moneyid, list_rewardstep[index]); - sdata.Add_Item(essenceid, 1); - Set(); - CollectionEssenceUI_Right.Ins.Set(); - ObtainItemUI.Ins.Set(new ItemSimpleData { itemid = essenceid, amount = 1 }); + ServerInfo.Ins.Save_Essence_Mileage(result => + { + sdata.Use_Item(moneyid, result.mileage); + sdata.Add_Item(result.items[0].itemid, result.items[0].amount); + Set(); + CollectionEssenceUI_Right.Ins.Set(); + ObtainItemUI.Ins.Set(new ItemSimpleData { itemid = result.items[0].itemid, amount = 1 }); + }); }, null, list_rewardstep[index]); } }