Improve jobs handling and fix quests that get rotated
This commit is contained in:
@@ -15,8 +15,8 @@ public class TitleDataContractInfo {
|
||||
public TitleDataContractInfoUnlockData UnlockData { get; set; }
|
||||
[JsonPropertyName("IsMainContract")]
|
||||
public bool IsMainContract { get; set; }
|
||||
[JsonPropertyName("ContractDifficulty")]
|
||||
public EYContractDifficulty ContractDifficulty { get; set; }
|
||||
[JsonPropertyName("Difficulty")]
|
||||
public EYContractDifficulty Difficulty { get; set; }
|
||||
}
|
||||
|
||||
public class TitleDataContractInfoReward {
|
||||
|
||||
@@ -9,8 +9,6 @@ public class TitleDataMissionInfo {
|
||||
public UDataTable OnboardingRewards { get; set; }
|
||||
}
|
||||
|
||||
// {\"TalkToBadumReward\":{\"MissionRewardId\":\"TalkToBadumReward\",\"RewardEntries\":[{\"RewardType\":7,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Weapons.PRO_Weapons\\u0027\",\"RowName\":\"WP_E_SMG_Bullet_01\"},\"RewardAmount\":2},{\"RewardType\":7,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Weapons.PRO_Weapons\\u0027\",\"RowName\":\"WP_E_AR_Energy_01\"},\"RewardAmount\":1},{\"RewardType\":7,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Weapons.PRO_Weapons\\u0027\",\"RowName\":\"WP_E_Pistol_Bullet_01\"},\"RewardAmount\":5},{\"RewardType\":7,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Weapons.PRO_Weapons\\u0027\",\"RowName\":\"WP_E_SGun_Bullet_01\"},\"RewardAmount\":2},{\"RewardType\":6,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/AmmoTypes_DT.AmmoTypes_DT\\u0027\",\"RowName\":\"Light\"},\"RewardAmount\":6},{\"RewardType\":6,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/AmmoTypes_DT.AmmoTypes_DT\\u0027\",\"RowName\":\"Medium\"},\"RewardAmount\":4},{\"RewardType\":6,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/AmmoTypes_DT.AmmoTypes_DT\\u0027\",\"RowName\":\"Shotgun\"},\"RewardAmount\":2},{\"RewardType\":8,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Abilities.PRO_Abilities\\u0027\",\"RowName\":\"ShockGrenade_02\"},\"RewardAmount\":2},{\"RewardType\":8,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Abilities.PRO_Abilities\\u0027\",\"RowName\":\"Consumable_Health_01\"},\"RewardAmount\":5},{\"RewardType\":0,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_PlayerShield.PRO_PlayerShield\\u0027\",\"RowName\":\"Shield_01\"},\"RewardAmount\":5},{\"RewardType\":10,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Bags.PRO_Bags\\u0027\",\"RowName\":\"Bag_01\"},\"RewardAmount\":5},{\"RewardType\":7,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/PRO_Weapons.PRO_Weapons\\u0027\",\"RowName\":\"TOOL_MineralScanner_01\"},\"RewardAmount\":2}]},\"FirstMatchReward\":{\"MissionRewardId\":\"FirstMatchReward\",\"RewardEntries\":[{\"RewardType\":2,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/Materials_DT.Materials_DT\\u0027\",\"RowName\":\"Insulation\"},\"RewardAmount\":4},{\"RewardType\":1,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/Currencies_DT.Currencies_DT\\u0027\",\"RowName\":\"SoftCurrency\"},\"RewardAmount\":1500},{\"RewardType\":2,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/Materials_DT.Materials_DT\\u0027\",\"RowName\":\"GenericCreatureDrop\"},\"RewardAmount\":3},{\"RewardType\":2,\"RewardRowHandle\":{\"DataTable\":\"DataTable\\u0027/Game/DataTables/Materials_DT.Materials_DT\\u0027\",\"RowName\":\"ICAScrip\"},\"RewardAmount\":1}]}}",
|
||||
|
||||
public class TitleDataMissionRewardInfo {
|
||||
[JsonPropertyName("MissionRewardId")]
|
||||
public string MissionRewardId { get; set; }
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ClaimActiveContract : ICloudScriptFunction<FYClaimCompletedActiveCo
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
private readonly UserDataService _userDataService;
|
||||
private readonly TitleDataService _titleDataService;
|
||||
private readonly string[] difficulties = ["Easy", "Medium", "Hard"];
|
||||
private readonly EYContractDifficulty[] difficulties = [EYContractDifficulty.Easy, EYContractDifficulty.Medium, EYContractDifficulty.Hard];
|
||||
private readonly Random rnd = new Random();
|
||||
|
||||
public ClaimActiveContract(IHttpContextAccessor httpContextAccessor, UserDataService userDataService, TitleDataService titleDataService)
|
||||
@@ -219,20 +219,19 @@ public class ClaimActiveContract : ICloudScriptFunction<FYClaimCompletedActiveCo
|
||||
if (contract.IsMainContract) {
|
||||
contractsCompleted.ContractsIDs.Add(contract.Name);
|
||||
} else {
|
||||
var parts = contract.Name.Split('-');
|
||||
var difficulty = parts[1];
|
||||
var contractDifficulty = contract.Difficulty;
|
||||
|
||||
var levelsData = JsonSerializer.Deserialize<Dictionary<string, int[]>>(titleData["LevelData"]);
|
||||
var levels = levelsData[contract.Faction];
|
||||
var jobs = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string[]>>>(titleData["Jobs"]);
|
||||
var jobs = JsonSerializer.Deserialize<Dictionary<string, Dictionary<EYContractDifficulty, string[]>>>(titleData["Jobs"]);
|
||||
var level = levels.Length - Array.FindIndex(levels, (int xp) => {
|
||||
return factionProgression >= xp;
|
||||
});
|
||||
|
||||
var factionBoard = jobBoardsData.Boards.Find(c => c.FactionId == contract.Faction);
|
||||
var idx = Array.FindIndex(difficulties, d => d == difficulty);
|
||||
var idx = Array.FindIndex(difficulties, d => d == contractDifficulty);
|
||||
var factionJobs = jobs[contract.Faction];
|
||||
var jobsAvailable = Array.FindAll(factionJobs[difficulty], (string jobId) => {
|
||||
var jobsAvailable = Array.FindAll(factionJobs[contractDifficulty], (string jobId) => {
|
||||
return level >= contracts[jobId].UnlockData.Level;
|
||||
});
|
||||
// If player completes a job, it means he has at least one unlocked anyway.
|
||||
|
||||
+9
-11
@@ -16,7 +16,7 @@ public class RequestActiveObjectivesAndBoardsData : ICloudScriptFunction<FYQuery
|
||||
private readonly UserDataService _userDataService;
|
||||
private readonly TitleDataService _titleDataService;
|
||||
private readonly string[] factions = ["Korolev", "Osiris", "ICA"]; // TODO: Order is important
|
||||
private readonly string[] difficulties = ["Easy", "Medium", "Hard"];
|
||||
private readonly EYContractDifficulty[] difficulties = [EYContractDifficulty.Easy, EYContractDifficulty.Medium, EYContractDifficulty.Hard];
|
||||
private readonly Random rnd = new Random();
|
||||
|
||||
public RequestActiveObjectivesAndBoardsData(IHttpContextAccessor httpContextAccessor, UserDataService userDataService, TitleDataService titleDataService)
|
||||
@@ -47,22 +47,20 @@ public class RequestActiveObjectivesAndBoardsData : ICloudScriptFunction<FYQuery
|
||||
var titleData = _titleDataService.Find(new List<string> { "Contracts", "Jobs", "LevelData" });
|
||||
|
||||
var contracts = JsonSerializer.Deserialize<Dictionary<string, TitleDataContractInfo>>(titleData["Contracts"]);
|
||||
var jobs = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string[]>>>(titleData["Jobs"]);
|
||||
var jobs = JsonSerializer.Deserialize<Dictionary<string, Dictionary<EYContractDifficulty, string[]>>>(titleData["Jobs"]);
|
||||
var levelsData = JsonSerializer.Deserialize<Dictionary<string, int[]>>(titleData["LevelData"]);
|
||||
var currentQuests = new Dictionary<string, Dictionary<string, bool>> {
|
||||
["Korolev"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
||||
["Osiris"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
||||
["ICA"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
||||
var currentQuests = new Dictionary<string, Dictionary<EYContractDifficulty, bool>> {
|
||||
["Korolev"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||
["Osiris"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||
["ICA"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||
};
|
||||
|
||||
foreach (var contract in contractsActive.Contracts) {
|
||||
var parts = contract.ContractID.Split('-');
|
||||
if (parts[0] != "NEW") {
|
||||
var contractData = contracts[contract.ContractID];
|
||||
if (contractData.IsMainContract) {
|
||||
continue;
|
||||
}
|
||||
var difficulty = parts[1];
|
||||
var faction = parts[2] == "KOR" ? "Korolev" : parts[2];
|
||||
currentQuests[faction][difficulty] = true;
|
||||
currentQuests[contractData.Faction][contractData.Difficulty] = true;
|
||||
}
|
||||
|
||||
for (var i = 0; i < factions.Length; i++) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user