Save_Mission

This commit is contained in:
Ino 2025-07-24 08:50:47 +09:00
parent f230c541f2
commit 8dd5068428
12 changed files with 549 additions and 55 deletions

View File

@ -24,6 +24,8 @@ public class GetServerTables
Get_ServerTable("BattleMapConfig", new List<string> { "s_Scene", "s_BGM", "n_MapName", "n_MapDesc", "s_MapIcon", "n_Portals" });
Get_ServerTable("CostumeList", new List<string> { "n_CostumeDesc", "s_Image", "s_Prefab", "exception" });
Get_ServerTable("WorkerList", new List<string> { "s_Prefab", "f_Scale", "f_UIScale", "f_MoveSpeed", "f_SeekTimeDelay" });
Get_ServerTable("ClassConfig", new List<string> { "s_AnimationController", "s_JobIcon", "s_WeaponLHPrefab", "n_WeaponLHIndex", "s_WeaponRHPrefab", "n_WeaponRHIndex", "e_BattleType", "f_Scale", "f_AttackRange", "f_AttackSPD", "f_MoveSPD", "e_MainStatType", "n_DefaultHP", "n_DefaultMP", "n_ExtraSkill", "n_AcquiredSkill1", "n_AcquiredSkill2", "n_AcquiredSkill3" });
Get_ServerTable("BreakingLimit", new List<string> { "f_Monster_DMG_Multiplier", "f_Boss_DMG_Multiplier", "f_ALL_STAT_Multiplier" });
}
static void Get_ServerTable(string path, List<string> except)

View File

@ -347,12 +347,39 @@ function Add_MobCollection(urod, id, count)
if (!urod.MobKill[id]) urod.MobKill[id] = 0;
urod.MobKill[id] = Add_Amount(urod.MobKill[id], count);
}
function Get_Exp(lv) {
var base = (lv * 10) + 21 + (lv * 50);
var exp = Math.pow(base, 1.05 + Math.sqrt(lv * 0.0000000001));
return Math.max(Math.floor(exp), 0);
}
function Get_PureStat(urod, stat)
{
var rtnVale = 0;
for (var i = 0; i < urod.PC.Obtain.length; i++)
{
var classData = Get_ClassConfigTable().find(f=>f.n_ClassID == urod.PC.Obtain[i]);
switch (stat)
{
case 1:
rtnVale = Add_Amount(rtnVale, classData.n_DefaultStr);
rtnVale = Add_Amount(rtnVale, urod.PC.Stat("STR"));
break;
case 2:
rtnVale = Add_Amount(rtnVale, classData.n_DefaultDex);
rtnVale = Add_Amount(rtnVale, urod.PC.Stat("DEX"));
break;
case 3:
rtnVale = Add_Amount(rtnVale, classData.n_DefaultInt);
rtnVale = Add_Amount(rtnVale, urod.PC.Stat("INT"));
break;
case 4:
rtnVale = Add_Amount(rtnVale, classData.n_DefaultLuk);
rtnVale = Add_Amount(rtnVale, urod.PC.Stat("LUK"));
break;
}
}
return rtnVale;
}
handlers.Save_CheatItem = function(args)
{
@ -1992,6 +2019,155 @@ handlers.Save_Worker_Buy = function(args)
}
return Get_Return(1);
}
function Get_MissionCount(urod, data, group, id)
{
switch (data.e_MissionConditionType)
{
case "HERO_LEVEL_ACC":
return urod.PC.Lv;
case "CLASS_OPEN_LIMIT":
return PC.Obtain[data.n_MissionConditionValue] ? 1 : 0;
case "CHECK_PLAYTIME":
case "CHECK_PLAYTIME_ACC":
return urod.Common[6] / 60;
case "HERO_TRANSCENDENCE_ACC":
return urod.PC.LLv;
case "HERO_BASE_STAT_LIMIT":
return Get_PureStat(urod, data.n_MissionConditionValue);
case "HERO_AWAKEN_ACC":
switch (data.n_MissionConditionValue)
{
case 1: return urod.Awaken["STR"].Lv;
case 2: return urod.Awaken["DEX"].Lv;
case 3: return urod.Awaken["INT"].Lv;
case 4: return urod.Awaken["LUK"].Lv;
}
break;
case "HERO_OPTION_CHANGE_SLOT_LIMIT":
{
var count = 0;
var dic = Get_BreakingLimitSlotAndLv();
for (var i = 1; i <= 6; i++)
if (urod.PC.Lv >= dic[i])
++count;
return count;
}
case "EAT_FRUIT_TYPE_ACC":
{
var fruitid = data.n_MissionConditionValue;
return urod.Farm?.Eat?.[fruitid] ?? 0;
}
case "EAT_FRUIT_TYPE_ALL":
return Object.values(urod.Farm.Eat).reduce((sum, val) => sum + val, 0);
default:
if (urod.Mission[group])
{
if (urod.Mission[group][id])
return urod.Mission[group][id][1];
}
break;
}
return 0;
}
function Add_MissionLv(urod, group, id)
{
if (!urod.Mission[group])
return;
if (!urod.Mission[group][id]) {
// [level, count 등], 기본값 초기화
urod.Mission[group][id] = [0, 0];
}
// 레벨 증가
++urod.Mission[group][id][0];
var table = Get_MissionTable();
// 미션 데이터 가져오기
const missionData = table.find(f => f.n_MissionGroupId == group && f.n_MissionIndex == id);
if (!missionData) return;
if (missionData.e_LinkedQuestType == "First" || missionData.e_LinkedQuestType == "Ing")
{
const isACC = missionData.e_MissionConditionType.includes("_ACC");
if (!isACC) {
let addIndex = 1;
while (true) {
const nextId = Add_Amount(id, addIndex++);
if (Set_MissionCount(urod, group, nextId))
break;
}
}
}
}
function Set_MissionCount(urod, group, id)
{
const nextData = Get_MissionTable().find(f => f.n_MissionGroupId == group && f.n_MissionIndex == id);
if (!nextData) return false;
const type = nextData.e_LinkedQuestType;
if (type == "Ing" || type == "Last") {
const missionGroup = urod.Mission[group];
if (missionGroup && missionGroup[id]) {
for (let i = 0; i < missionGroup[id].length; i++) {
missionGroup[id][i] = 0;
}
}
}
return type == "Last";
}
function Add_MissionCompletCount(urod, group)
{
var completecondition = group == 1 ? "DAILY_MISSION_CLEAR_ALL" : group == 2 ? "WEEKLY_MISSION_CLEAR_ALL" : "ACHIEVEMENT_CLEAR_ACC";
const completeData = Get_MissionTable().find(f => f.e_MissionConditionType == completecondition);
if (!completeData) return;
const missionGroup = urod.Mission;
const key1 = group;
const key2 = completeData.n_MissionIndex;
if (!missionGroup[key1])
missionGroup[key1] = {};
if (!missionGroup[key1][key2])
missionGroup[key1][key2] = [0, 0];
++missionGroup[key1][key2][1];
}
handlers.Save_Mission = 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 data = table.find(f=>f.n_MissionGroupId == args.Group && f.n_MissionIndex == args.ID);
var lv = urod.Mission?.[args.Group]?.[args.ID]?.[0] ?? 0;
var count = Get_MissionCount(urod, data, args.Group, args.ID);
if (lv == 0 && count >= data.l_MissionConditionCount)
{
Add_Item(table, Get_ItemTable(), urod, data.n_RewardValue, data.n_MissionIndex);
Add_MissionLv(urod, data.n_MissionGroupId, data.n_MissionIndex);
Add_MissionCompletCount(urod, data.n_MissionGroupId);
Set_JsonUserData(urod);
return Get_Return(0);
}
return Get_Return(1);
}
/////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args)
@ -10432,6 +10608,107 @@ function Get_ClassOpenTable()
}
]
}
function Get_ClassConfigTable()
{
return [
{
"n_ClassID": "10101",
"n_Tier": "2",
"n_DefaultStr": "3",
"n_DefaultDex": "3",
"n_DefaultInt": "3",
"n_DefaultLuk": "10"
},
{
"n_ClassID": "10102",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10201",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10202",
"n_Tier": "2",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10301",
"n_Tier": "2",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10302",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10303",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10401",
"n_Tier": "2",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10402",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10501",
"n_Tier": "1",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10502",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10601",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
}
]
}
function Get_GlobalValueTable()
{
return [
@ -10773,107 +11050,97 @@ 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_BreakingLimitSlotAndLv()
{
const dataList = Get_BreakingLimitTable();
const dic_SlotOpenData = {}; // key: 슬롯 번호, value: 열리는 n_LimitLv
for (let i = 0; i < dataList.length; i++) {
const temp = dataList[i];
const slot = parseInt(temp.n_limitSlotMagic);
const level = parseInt(temp.n_LimitLv);
if (slot > 0 && !(slot in dic_SlotOpenData)) {
dic_SlotOpenData[slot] = level;
}
}
return dic_SlotOpenData;
}
function Get_EnchantListTable()
{
return [

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,74 @@
[
{
"n_LimitLv": "1",
"n_RequireTotalStat": "5",
"n_RequireLevel": "3",
"n_MaxAbilityPoint": "1",
"n_Equip_Upgrade_Limit": "10",
"n_limitSlotMagic": "0"
},
{
"n_LimitLv": "2",
"n_RequireTotalStat": "10",
"n_RequireLevel": "10",
"n_MaxAbilityPoint": "2",
"n_Equip_Upgrade_Limit": "15",
"n_limitSlotMagic": "1"
},
{
"n_LimitLv": "3",
"n_RequireTotalStat": "15",
"n_RequireLevel": "20",
"n_MaxAbilityPoint": "3",
"n_Equip_Upgrade_Limit": "20",
"n_limitSlotMagic": "2"
},
{
"n_LimitLv": "4",
"n_RequireTotalStat": "20",
"n_RequireLevel": "50",
"n_MaxAbilityPoint": "4",
"n_Equip_Upgrade_Limit": "25",
"n_limitSlotMagic": "2"
},
{
"n_LimitLv": "5",
"n_RequireTotalStat": "25",
"n_RequireLevel": "100",
"n_MaxAbilityPoint": "5",
"n_Equip_Upgrade_Limit": "30",
"n_limitSlotMagic": "3"
},
{
"n_LimitLv": "6",
"n_RequireTotalStat": "30",
"n_RequireLevel": "150",
"n_MaxAbilityPoint": "6",
"n_Equip_Upgrade_Limit": "35",
"n_limitSlotMagic": "3"
},
{
"n_LimitLv": "7",
"n_RequireTotalStat": "35",
"n_RequireLevel": "200",
"n_MaxAbilityPoint": "7",
"n_Equip_Upgrade_Limit": "40",
"n_limitSlotMagic": "4"
},
{
"n_LimitLv": "8",
"n_RequireTotalStat": "40",
"n_RequireLevel": "250",
"n_MaxAbilityPoint": "8",
"n_Equip_Upgrade_Limit": "45",
"n_limitSlotMagic": "5"
},
{
"n_LimitLv": "9",
"n_RequireTotalStat": "45",
"n_RequireLevel": "300",
"n_MaxAbilityPoint": "9",
"n_Equip_Upgrade_Limit": "50",
"n_limitSlotMagic": "6"
}
]

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 69eec313ebdca5a4ea823aa31842aafd
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,98 @@
[
{
"n_ClassID": "10101",
"n_Tier": "2",
"n_DefaultStr": "3",
"n_DefaultDex": "3",
"n_DefaultInt": "3",
"n_DefaultLuk": "10"
},
{
"n_ClassID": "10102",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10201",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10202",
"n_Tier": "2",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10301",
"n_Tier": "2",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10302",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10303",
"n_Tier": "3",
"n_DefaultStr": "10",
"n_DefaultDex": "5",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10401",
"n_Tier": "2",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10402",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10501",
"n_Tier": "1",
"n_DefaultStr": "5",
"n_DefaultDex": "10",
"n_DefaultInt": "5",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10502",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
},
{
"n_ClassID": "10601",
"n_Tier": "3",
"n_DefaultStr": "5",
"n_DefaultDex": "5",
"n_DefaultInt": "10",
"n_DefaultLuk": "0"
}
]

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 517f05211e32cf547981e2ce8a774ce1
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -1469,7 +1469,7 @@ public partial class ServerData
Set_Common(eCommon.Roullette_Count, 0);
Set_Common(eCommon.Roullette_LuckyCount, 0);
Set_Common(eCommon.Roullette_ADCount, 0);
Init_Mission(1);
//Init_Mission(1); // TODO 정인호 : 일일 미션 초기화
Init_Pass();
Init_Shop();
@ -1492,7 +1492,7 @@ public partial class ServerData
Set_Common(eCommon.DOY_Week, numweek);
LastTime = ServerInfo.ServerTime;
Init_ShopWeek();
Init_Mission(2);
//Init_Mission(2); // TODO 정인호 : 주간 미션 초기화
}
public void Init_Month()
{

View File

@ -2229,6 +2229,43 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_Worker_Buy(id, _act); }, 2f);
});
}
public void Save_Mission(int group, int id, Action _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
Group = group,
ID = id,
}
},
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(); break;
case 1: ToastUI.Ins.Set(999900037); break;
}
}
else
Set_Coroutine(() => { Save_Mission(group, id, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_Mission(group, id, _act); }, 2f);
});
}
#endregion
#region

View File

@ -57,6 +57,6 @@ public class FarmFarmerUI : BotMenuBase
public override void OnClick_Back()
{
base.OnClick_Back();
MainToFarm.Ins.Set_MyFarmer();
if (MainToFarm.isIns) MainToFarm.Ins.Set_MyFarmer();
}
}

View File

@ -63,12 +63,14 @@ public class MissionCard : CardBase
public virtual void OnClick_GetReward()
{
var sdata = ServerInfo.Ins.m_ServerData;
if (sdata.Get_MissionReward(m_Data))
if (sdata.CanGet_Mission(m_Data.n_MissionGroupId, m_Data.n_MissionIndex))
{
NewGameUI.Ins.m_MissionUI.Set_UI();
Set_Complete();
ServerInfo.Ins.Save_Mission(m_Data.n_MissionGroupId, m_Data.n_MissionIndex, () =>
{
sdata.Get_MissionReward(m_Data);
NewGameUI.Ins.m_MissionUI.Set_UI();
Set_Complete();
});
}
else
Popup.Ins.Set(ePopupType.One, 174, null, null, "미션 보상 받을 수 없음");
}
}