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; }
|
public TitleDataContractInfoUnlockData UnlockData { get; set; }
|
||||||
[JsonPropertyName("IsMainContract")]
|
[JsonPropertyName("IsMainContract")]
|
||||||
public bool IsMainContract { get; set; }
|
public bool IsMainContract { get; set; }
|
||||||
[JsonPropertyName("ContractDifficulty")]
|
[JsonPropertyName("Difficulty")]
|
||||||
public EYContractDifficulty ContractDifficulty { get; set; }
|
public EYContractDifficulty Difficulty { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TitleDataContractInfoReward {
|
public class TitleDataContractInfoReward {
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ public class TitleDataMissionInfo {
|
|||||||
public UDataTable OnboardingRewards { get; set; }
|
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 {
|
public class TitleDataMissionRewardInfo {
|
||||||
[JsonPropertyName("MissionRewardId")]
|
[JsonPropertyName("MissionRewardId")]
|
||||||
public string MissionRewardId { get; set; }
|
public string MissionRewardId { get; set; }
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class ClaimActiveContract : ICloudScriptFunction<FYClaimCompletedActiveCo
|
|||||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||||
private readonly UserDataService _userDataService;
|
private readonly UserDataService _userDataService;
|
||||||
private readonly TitleDataService _titleDataService;
|
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();
|
private readonly Random rnd = new Random();
|
||||||
|
|
||||||
public ClaimActiveContract(IHttpContextAccessor httpContextAccessor, UserDataService userDataService, TitleDataService titleDataService)
|
public ClaimActiveContract(IHttpContextAccessor httpContextAccessor, UserDataService userDataService, TitleDataService titleDataService)
|
||||||
@@ -219,20 +219,19 @@ public class ClaimActiveContract : ICloudScriptFunction<FYClaimCompletedActiveCo
|
|||||||
if (contract.IsMainContract) {
|
if (contract.IsMainContract) {
|
||||||
contractsCompleted.ContractsIDs.Add(contract.Name);
|
contractsCompleted.ContractsIDs.Add(contract.Name);
|
||||||
} else {
|
} else {
|
||||||
var parts = contract.Name.Split('-');
|
var contractDifficulty = contract.Difficulty;
|
||||||
var difficulty = parts[1];
|
|
||||||
|
|
||||||
var levelsData = JsonSerializer.Deserialize<Dictionary<string, int[]>>(titleData["LevelData"]);
|
var levelsData = JsonSerializer.Deserialize<Dictionary<string, int[]>>(titleData["LevelData"]);
|
||||||
var levels = levelsData[contract.Faction];
|
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) => {
|
var level = levels.Length - Array.FindIndex(levels, (int xp) => {
|
||||||
return factionProgression >= xp;
|
return factionProgression >= xp;
|
||||||
});
|
});
|
||||||
|
|
||||||
var factionBoard = jobBoardsData.Boards.Find(c => c.FactionId == contract.Faction);
|
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 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;
|
return level >= contracts[jobId].UnlockData.Level;
|
||||||
});
|
});
|
||||||
// If player completes a job, it means he has at least one unlocked anyway.
|
// 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 UserDataService _userDataService;
|
||||||
private readonly TitleDataService _titleDataService;
|
private readonly TitleDataService _titleDataService;
|
||||||
private readonly string[] factions = ["Korolev", "Osiris", "ICA"]; // TODO: Order is important
|
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();
|
private readonly Random rnd = new Random();
|
||||||
|
|
||||||
public RequestActiveObjectivesAndBoardsData(IHttpContextAccessor httpContextAccessor, UserDataService userDataService, TitleDataService titleDataService)
|
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 titleData = _titleDataService.Find(new List<string> { "Contracts", "Jobs", "LevelData" });
|
||||||
|
|
||||||
var contracts = JsonSerializer.Deserialize<Dictionary<string, TitleDataContractInfo>>(titleData["Contracts"]);
|
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 levelsData = JsonSerializer.Deserialize<Dictionary<string, int[]>>(titleData["LevelData"]);
|
||||||
var currentQuests = new Dictionary<string, Dictionary<string, bool>> {
|
var currentQuests = new Dictionary<string, Dictionary<EYContractDifficulty, bool>> {
|
||||||
["Korolev"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
["Korolev"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||||
["Osiris"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
["Osiris"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||||
["ICA"] = new Dictionary<string, bool> { ["Easy"] = false, ["Medium"] = false, ["Hard"] = false },
|
["ICA"] = new Dictionary<EYContractDifficulty, bool> { [EYContractDifficulty.Easy] = false, [EYContractDifficulty.Medium] = false, [EYContractDifficulty.Hard] = false },
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var contract in contractsActive.Contracts) {
|
foreach (var contract in contractsActive.Contracts) {
|
||||||
var parts = contract.ContractID.Split('-');
|
var contractData = contracts[contract.ContractID];
|
||||||
if (parts[0] != "NEW") {
|
if (contractData.IsMainContract) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var difficulty = parts[1];
|
currentQuests[contractData.Faction][contractData.Difficulty] = true;
|
||||||
var faction = parts[2] == "KOR" ? "Korolev" : parts[2];
|
|
||||||
currentQuests[faction][difficulty] = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < factions.Length; i++) {
|
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