Save_PC_LimitLvUp

This commit is contained in:
Ino 2025-07-02 16:19:40 +09:00
parent c62e88327d
commit 45242d4bca
6 changed files with 229 additions and 40 deletions

View File

@ -872,6 +872,44 @@ handlers.Save_PC_Awaken = function(args)
else else
return Get_Return(3); return Get_Return(3);
} }
handlers.Save_PC_LimitLvUp = 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 limittable = Get_BreakingLimitTable();
var limitdata = limittable.find(f=>f.n_LimitLv == urod.PC.LLv);
var limitdata_next = limittable.find(f=>f.n_LimitLv == urod.PC.LLv + 1);
if (!limitdata_next) return Get_Return(5); // 더 이상 초월 불가
var global = Get_GlobalValueTable();
var matdata = global.find(f => f.s_ID == "n_AbilityMaterialID");
if (!matdata) return Get_Return(3); // 설정 누락
// PC 레벨 확인
if (urod.PC.Lv >= limitdata.n_RequireLevel)
{
// 각성 레벨 확인
var totalawakenLv = urod.Awaken["STR"].Lv + urod.Awaken["DEX"].Lv + urod.Awaken["INT"].Lv + urod.Awaken["LUK"].Lv;
//log.info("totalawakenLv " + totalawakenLv);
if (totalawakenLv >= limitdata.n_RequireTotalStat)
{
++urod.PC.LLv;
var matamount = limitdata_next.n_MaxAbilityPoint - limitdata.n_MaxAbilityPoint;
Add_Item(Get_MissionTable(), Get_ItemTable(), urod, matdata.n_Value, matamount);
Set_JsonUserData(urod);
return Get_Return(0);
}
else
return Get_Return(2); // PC 레벨 부족
}
else
return Get_Return(1); // PC 레벨 부족
}
/////////////////////////////////// 서버 처리 /////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args) handlers.Write_UnityInApp = function(args)
@ -2063,6 +2101,110 @@ function Get_AwakenUpgradeTable()
} }
]; ];
} }
function Get_BreakingLimitTable()
{
return [
{
"n_LimitLv": "1",
"n_RequireTotalStat": "5",
"n_RequireLevel": "3",
"n_MaxAbilityPoint": "1",
"n_Equip_Upgrade_Limit": "10",
"f_Monster_DMG_Multiplier": "0.05",
"f_Boss_DMG_Multiplier": "0",
"f_ALL_STAT_Multiplier": "0",
"n_limitSlotMagic": "0"
},
{
"n_LimitLv": "2",
"n_RequireTotalStat": "10",
"n_RequireLevel": "10",
"n_MaxAbilityPoint": "2",
"n_Equip_Upgrade_Limit": "15",
"f_Monster_DMG_Multiplier": "0.1",
"f_Boss_DMG_Multiplier": "0.1",
"f_ALL_STAT_Multiplier": "0.05",
"n_limitSlotMagic": "1"
},
{
"n_LimitLv": "3",
"n_RequireTotalStat": "15",
"n_RequireLevel": "20",
"n_MaxAbilityPoint": "3",
"n_Equip_Upgrade_Limit": "20",
"f_Monster_DMG_Multiplier": "0.25",
"f_Boss_DMG_Multiplier": "0.1",
"f_ALL_STAT_Multiplier": "0.065",
"n_limitSlotMagic": "2"
},
{
"n_LimitLv": "4",
"n_RequireTotalStat": "20",
"n_RequireLevel": "50",
"n_MaxAbilityPoint": "4",
"n_Equip_Upgrade_Limit": "25",
"f_Monster_DMG_Multiplier": "0.3",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.08",
"n_limitSlotMagic": "2"
},
{
"n_LimitLv": "5",
"n_RequireTotalStat": "25",
"n_RequireLevel": "100",
"n_MaxAbilityPoint": "5",
"n_Equip_Upgrade_Limit": "30",
"f_Monster_DMG_Multiplier": "0.35",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.1",
"n_limitSlotMagic": "3"
},
{
"n_LimitLv": "6",
"n_RequireTotalStat": "30",
"n_RequireLevel": "150",
"n_MaxAbilityPoint": "6",
"n_Equip_Upgrade_Limit": "35",
"f_Monster_DMG_Multiplier": "0.4",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.12",
"n_limitSlotMagic": "3"
},
{
"n_LimitLv": "7",
"n_RequireTotalStat": "35",
"n_RequireLevel": "200",
"n_MaxAbilityPoint": "7",
"n_Equip_Upgrade_Limit": "40",
"f_Monster_DMG_Multiplier": "0.45",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.14",
"n_limitSlotMagic": "4"
},
{
"n_LimitLv": "8",
"n_RequireTotalStat": "40",
"n_RequireLevel": "250",
"n_MaxAbilityPoint": "8",
"n_Equip_Upgrade_Limit": "45",
"f_Monster_DMG_Multiplier": "0.5",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.16",
"n_limitSlotMagic": "5"
},
{
"n_LimitLv": "9",
"n_RequireTotalStat": "45",
"n_RequireLevel": "300",
"n_MaxAbilityPoint": "9",
"n_Equip_Upgrade_Limit": "50",
"f_Monster_DMG_Multiplier": "0.55",
"f_Boss_DMG_Multiplier": "0.2",
"f_ALL_STAT_Multiplier": "0.18",
"n_limitSlotMagic": "6"
}
]
}
function Get_PlayOCoupons() function Get_PlayOCoupons()
{ {
var poc = JSON.parse(server.GetTitleInternalData("PlayO").Data.PlayO); var poc = JSON.parse(server.GetTitleInternalData("PlayO").Data.PlayO);

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1137,6 +1137,16 @@ public partial class ServerData
} }
break; break;
case ePurpose.HERO_OPTION_CHANGE_SLOT_LIMIT:
{
int count = 0;
// 오픈 슬롯 체크
for (int i = 0; i < 6; i++)
if (Get_LimitLv() >= table_breakinglimit.Ins.Get_SlotOpenLv(i + 1))
++count;
return count;
}
case ePurpose.EAT_FRUIT_TYPE_ACC: case ePurpose.EAT_FRUIT_TYPE_ACC:
return Get_EatFruitCount(data.n_MissionConditionValue); return Get_EatFruitCount(data.n_MissionConditionValue);
case ePurpose.EAT_FRUIT_TYPE_ALL: case ePurpose.EAT_FRUIT_TYPE_ALL:

View File

@ -8,6 +8,7 @@ using PlayFab.ProgressionModels;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection;
using UnityEngine; using UnityEngine;
using UnityEngine.Networking; using UnityEngine.Networking;
using Random = UnityEngine.Random; using Random = UnityEngine.Random;
@ -327,7 +328,7 @@ public class ServerInfo : MyCoroutine
{ {
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Get_UserInfo", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new { Token = m_LoginInfo.EntityToken.EntityToken } FunctionParameter = new { Token = m_LoginInfo.EntityToken.EntityToken }
}, },
@ -391,7 +392,7 @@ public class ServerInfo : MyCoroutine
{ {
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "ServerSave_LoginToken", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -480,7 +481,7 @@ public class ServerInfo : MyCoroutine
{ {
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_Rank", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -550,7 +551,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Get_OtherUserInfo", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new { Token = m_LoginInfo.EntityToken.EntityToken, ID = _playfabid } FunctionParameter = new { Token = m_LoginInfo.EntityToken.EntityToken, ID = _playfabid }
}, },
@ -589,7 +590,7 @@ public class ServerInfo : MyCoroutine
FirebaseAnalyticsEvent_Inapp(_productid); FirebaseAnalyticsEvent_Inapp(_productid);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Write_UnityInApp", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -620,7 +621,7 @@ public class ServerInfo : MyCoroutine
FirebaseAnalyticsEvent_Inapp(_pd.productId); FirebaseAnalyticsEvent_Inapp(_pd.productId);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Write_Onestore", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -683,7 +684,7 @@ public class ServerInfo : MyCoroutine
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "SendMail_Daily", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -736,7 +737,7 @@ public class ServerInfo : MyCoroutine
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "GuideQuestComplete", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -765,7 +766,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_CheatItem", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -815,7 +816,7 @@ public class ServerInfo : MyCoroutine
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_StageResult", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -854,7 +855,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_Stat", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -888,7 +889,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_StatInit", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -927,7 +928,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_Ability", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -965,7 +966,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_AbilityInit", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1005,7 +1006,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_BuyJob", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1043,7 +1044,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_EquipJob", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1077,7 +1078,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_AwakenLvUp", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1113,7 +1114,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Save_PC_Awaken", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1145,6 +1146,43 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_PC_Awaken(stat, _act); }, 2f); Set_Coroutine(() => { Save_PC_Awaken(stat, _act); }, 2f);
}); });
} }
public void Save_PC_LimitLvUp(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 error = MyErrorCheck(result.FunctionResult.ToString());
// (0 성공, 1 실패(PC Lv 부족), 2 실패 (각성 Lv 부족), 3 실패 (각성 재료 id 없음), 4 실패 (더 이상 초월 불가))
switch (error)
{
case 0: _act?.Invoke(); break;
case 1: ToastUI.Ins.Set(264); break;
case 2: ToastUI.Ins.Set(263); break;
case 3: ToastUI.Ins.Set(999900005); break;
case 4: ToastUI.Ins.Set(999900010); break;
}
}
else
Set_Coroutine(() => { Save_PC_LimitLvUp(_act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_PC_LimitLvUp(_act); }, 2f);
});
}
#endregion #endregion
#region #region
@ -1154,7 +1192,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(_netwait); NetWait.Ins.Set(_netwait);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Get_MailList", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1199,7 +1237,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Get_MailReward", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1230,7 +1268,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Get_AllMail", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {
@ -1299,7 +1337,7 @@ public class ServerInfo : MyCoroutine
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{ {
FunctionName = "Use_Coupon", FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true, GeneratePlayStreamEvent = true,
FunctionParameter = new FunctionParameter = new
{ {

View File

@ -50,30 +50,29 @@ public class PCLimit_Center : PCLimit_StatInfo
{ {
var sdata = ServerInfo.Ins.m_ServerData; var sdata = ServerInfo.Ins.m_ServerData;
var total = Get_Total_AwakenLv(sdata); var total = Get_Total_AwakenLv(sdata);
if (total >= Get_NeedAwakenLv()) if (!DSUtil.CheckNull(m_NextData))
{ {
if (sdata.PC.Lv >= Get_NeedPCLv()) if (total >= Get_NeedAwakenLv())
{ {
sdata.Add_LimitLv(); if (sdata.PC.Lv >= Get_NeedPCLv())
PCLimitUI.Ins.Set();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
var moneyid = table_GlobalValue.Ins.Get_Int("n_AbilityMaterialID");
sdata.Add_Item(moneyid, m_NextData.n_MaxAbilityPoint - m_CurData.n_MaxAbilityPoint);
// 오픈 슬롯 체크
for (int i = 0; i < 6; i++)
{ {
var lv = sdata.Get_LimitLv(); ServerInfo.Ins.Save_PC_LimitLvUp(() =>
var openlv = table_breakinglimit.Ins.Get_SlotOpenLv(i + 1); {
if (lv >= openlv) sdata.Add_LimitLv();
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_SLOT_LIMIT, 0, i + 1, true); PCLimitUI.Ins.Set();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
var moneyid = table_GlobalValue.Ins.Get_Int("n_AbilityMaterialID");
sdata.Add_Item(moneyid, m_NextData.n_MaxAbilityPoint - m_CurData.n_MaxAbilityPoint);
});
} }
else
ToastUI.Ins.Set(264);
} }
else else
ToastUI.Ins.Set(264); ToastUI.Ins.Set(263);
} }
else else
ToastUI.Ins.Set(263); ToastUI.Ins.Set(999900010);
} }
} }