직업 구매

This commit is contained in:
Ino 2025-07-01 16:44:41 +09:00
parent 087cd3c0e5
commit c18d41efa5
5 changed files with 125 additions and 8 deletions

View File

@ -177,6 +177,7 @@ handlers.ServerSave_AllData = function(args)
} }
/////////////////////////////////// 서버 처리 /////////////////////////////////// 서버 처리
// table 변수는 기본적으로 미션 테이블
function Get_UserReadOnlyData() function Get_UserReadOnlyData()
{ {
return server.GetUserReadOnlyData({ PlayFabId: currentPlayerId }); return server.GetUserReadOnlyData({ PlayFabId: currentPlayerId });
@ -360,6 +361,8 @@ function Add_MissionCount(table, urod, purpose, conditionvalue, count, setValue)
// 조건 값 확인 // 조건 값 확인
//log.info("typeof n_MissionConditionValue: " + typeof mission.n_MissionConditionValue); //log.info("typeof n_MissionConditionValue: " + typeof mission.n_MissionConditionValue);
//log.info("typeof conditionvalue: " + typeof conditionvalue); //log.info("typeof conditionvalue: " + typeof conditionvalue);
//log.info("n_MissionConditionValue: " + mission.n_MissionConditionValue);
//log.info("conditionvalue: " + conditionvalue);
if (mission.n_MissionConditionValue == 0 || conditionvalue == mission.n_MissionConditionValue) { if (mission.n_MissionConditionValue == 0 || conditionvalue == mission.n_MissionConditionValue) {
var key1 = mission.n_MissionGroupId; var key1 = mission.n_MissionGroupId;
var key2 = mission.n_MissionIndex; var key2 = mission.n_MissionIndex;
@ -704,6 +707,73 @@ handlers.Save_PC_AbilityInit = function(args)
return Get_Return(2); // 젬 부족 return Get_Return(2); // 젬 부족
} }
} }
handlers.Save_PC_BuyJob = 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 global = Get_GlobalValueTable();
var matdata = global.find(f => f.s_ID == "n_JobMaterialID");
if (!matdata) return Get_Return(1); // 설정 누락
var materialId = matdata.n_Value;
if (urod.PC.Obtain.includes(args.JobID))
return Get_Return(3); // 가진 직업
var classopentable = Get_ClassOpenTable();
var m_Data = classopentable.find(f=>f.n_ClassID == args.JobID);
// linkedId1 확인
const linkedClass1 = parseInt(m_Data.n_linkedClass1);
if (linkedClass1 > 0 && !urod.PC.Obtain.map(id => parseInt(id)).includes(linkedClass1))
return Get_Return(4);
// linkedId2 확인
const linkedClass2 = parseInt(m_Data.n_linkedClass2);
if (linkedClass2 > 0 && !urod.PC.Obtain.map(id => parseInt(id)).includes(linkedClass2))
return Get_Return(4);
// 특성 확인
if (m_Data.n_RequireAbility > 0)
{
if (!urod.Ability[m_Data.n_RequireAbility] || urod.Ability[m_Data.n_RequireAbility] < 1)
return Get_Return(5);
}
// 각성 확인 1
if (m_Data.e_RequireAwakenType1 != "None")
{
if (!urod.Awaken[m_Data.e_RequireAwakenType1] || urod.Awaken[m_Data.e_RequireAwakenType1].Lv < m_Data.n_RequireAwakenStep1)
return Get_Return(6);
}
// 각성 확인 2
if (m_Data.e_RequireAwakenType2 != "None")
{
if (!urod.Awaken[m_Data.e_RequireAwakenType2] || urod.Awaken[m_Data.e_RequireAwakenType2].Lv < m_Data.n_RequireAwakenStep2)
return Get_Return(6);
}
var itemtable = Get_ItemTable();
if (Use_Item(itemtable, urod, matdata.n_Value, m_Data.n_NeedGoodsCount))
{
var table = Get_MissionTable();
Add_Item(table, itemtable, urod, args.JobID, 1);
// 미션 카운트
Add_MissionCount(table, urod, "CLASS_OPEN_LIMIT", m_Data.n_ClassOpenMission, 1, false);
Set_JsonUserData(urod);
return Get_Return(0);
}
else
{
return Get_Return(2); // 재화 부족
}
}
/////////////////////////////////// 서버 처리 /////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args) handlers.Write_UnityInApp = function(args)
@ -1347,6 +1417,11 @@ function Get_AbilityConfigTable()
var titleData = server.GetTitleInternalData({ Keys: ["AbilityConfigData"] }); var titleData = server.GetTitleInternalData({ Keys: ["AbilityConfigData"] });
return JSON.parse(titleData.Data.AbilityConfigData); return JSON.parse(titleData.Data.AbilityConfigData);
} }
function Get_ClassOpenTable()
{
var titleData = server.GetTitleInternalData({ Keys: ["ClassOpenConditionTable"] });
return JSON.parse(titleData.Data.ClassOpenConditionTable);
}
function Get_GlobalValueTable() function Get_GlobalValueTable()
{ {
var titleData = server.GetTitleInternalData({ Keys: ["GlobalValue"] }); var titleData = server.GetTitleInternalData({ Keys: ["GlobalValue"] });

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -999,6 +999,45 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_PC_AbilityInit(battleType, _act); }, 2f); Set_Coroutine(() => { Save_PC_AbilityInit(battleType, _act); }, 2f);
}); });
} }
public void Save_PC_BuyJob(int jobid, Action _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = "Save_PC_BuyJob",
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
JobID = jobid,
}
},
result =>
{
if (result.Error == null)
{
NetWait.Ins.Set(false);
var error = MyErrorCheck(result.FunctionResult.ToString());
switch (error)
{
case 0: _act?.Invoke(); break;
case 1: ToastUI.Ins.Set(999900005); break;
case 2: ToastUI.Ins.Set(388); break;
case 3: ToastUI.Ins.Set(999900006); break;
case 4: ToastUI.Ins.Set(999900007); break;
case 5: ToastUI.Ins.Set(999900008); break;
case 6: ToastUI.Ins.Set(263); break;
}
}
else
Set_Coroutine(() => { Save_PC_BuyJob(jobid, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_PC_BuyJob(jobid, _act); }, 2f);
});
}
#endregion #endregion
#region #region

View File

@ -116,16 +116,19 @@ public class PCJobUI_OpenCondition : MonoBehaviour
} }
else else
{ // 전직 { // 전직
if (CanJobBuy(true)) //if (CanJobBuy(true))
{ {
var moneyid = table_GlobalValue.Ins.Get_Int("n_JobMaterialID"); var moneyid = table_GlobalValue.Ins.Get_Int("n_JobMaterialID");
if (sdata.Check_ItemAmount(moneyid, m_Data.n_NeedGoodsCount)) //if (sdata.Check_ItemAmount(moneyid, m_Data.n_NeedGoodsCount))
{ {
sdata.Use_Item(moneyid, m_Data.n_NeedGoodsCount); ServerInfo.Ins.Save_PC_BuyJob(m_Data.n_ClassID, () =>
sdata.PC.Add_PC(m_ClassId); {
Set_UI(); sdata.Use_Item(moneyid, m_Data.n_NeedGoodsCount);
MyValue.Get_ActorStatInfoorNull(eRole.PC); sdata.PC.Add_PC(m_ClassId);
sdata.Add_MissionCount(ePurpose.CLASS_OPEN_LIMIT, m_Data.n_ClassOpenMission); Set_UI();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
sdata.Add_MissionCount(ePurpose.CLASS_OPEN_LIMIT, m_Data.n_ClassOpenMission);
});
} }
} }
} }