More implementation of QuestHelper

made `QId` consistent
This commit is contained in:
Chomp
2025-01-12 21:06:05 +00:00
parent 5e7b4e3538
commit 045c1a5eb5
5 changed files with 52 additions and 11 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ public class TraderController
public List<TraderBase> GetAllTraders(string sessionId)
{
var traders = new List<TraderBase>();
return traders;
}
/// <summary>
+41 -3
View File
@@ -496,11 +496,49 @@ public class QuestHelper
/**
* Add all quests to a profile with the provided statuses
* @param pmcProfile profile to update
* @param statuses statuses quests should have
* @param statuses statuses quests should have added to profile
*/
public void AddAllQuestsToProfile(PmcData pmcProfile, List<QuestStatusEnum> statuses)
{
throw new NotImplementedException();
// Iterate over all quests in db
var quests = _databaseService.GetQuests();
foreach (var (key, questData) in quests) {
// Quest from db matches quests in profile, skip
if (pmcProfile.Quests.Any((x) => x.QId == questData.Id))
{
continue;
}
// Create dict of status to add to quest in profile
var statusesDict = new Dictionary<QuestStatusEnum, long>();
foreach (var status in statuses)
{
statusesDict.Add(status, _timeUtil.GetTimeStamp());
}
var questRecordToAdd = new QuestStatus {
QId = key,
StartTime = _timeUtil.GetTimeStamp(),
Status = statuses[^1], // Get last status in list as currently active status
StatusTimers = statusesDict,
CompletedConditions = [],
AvailableAfter = 0,
};
// Check if the quest already exists in the profile
var existingQuest = pmcProfile.Quests.FirstOrDefault(x => x.QId == key);
if (existingQuest != null)
{
// Update existing quest
existingQuest.Status = questRecordToAdd.Status;
existingQuest.StatusTimers = questRecordToAdd.StatusTimers;
}
else
{
// Add new quest to the profile
pmcProfile.Quests.Add(questRecordToAdd);
}
}
}
public void FindAndRemoveQuestFromArrayIfExists(string questId, List<QuestStatus> quests)
@@ -623,7 +661,7 @@ public class QuestHelper
if (conditionToFulfil.AvailableAfter > 0)
{
// Compare current time to unlock time for previous quest
prerequisiteQuest.StatusTimers.TryGetValue(prerequisiteQuest.Status.ToString(), out var previousQuestCompleteTime);
prerequisiteQuest.StatusTimers.TryGetValue(prerequisiteQuest.Status.Value, out var previousQuestCompleteTime);
var unlockTime = previousQuestCompleteTime + conditionToFulfil.AvailableAfter;
if (unlockTime > _timeUtil.GetTimeStamp())
{
+2 -2
View File
@@ -57,7 +57,7 @@ public class BotBase
public Hideout? Hideout { get; set; }
[JsonPropertyName("Quests")]
public List<Quests>? Quests { get; set; }
public List<QuestStatus>? Quests { get; set; }
[JsonPropertyName("TradersInfo")]
public Dictionary<string, TraderInfo>? TradersInfo { get; set; }
@@ -710,7 +710,7 @@ public class Quests
public QuestStatusEnum? Status { get; set; }
[JsonPropertyName("statusTimers")]
public Dictionary<string, long>? StatusTimers { get; set; }
public Dictionary<QuestStatusEnum, long>? StatusTimers { get; set; }
/** Property does not exist in live profile data, but is used by ProfileChanges.questsStatus when sent to client */
[JsonPropertyName("completedConditions")]
+6 -3
View File
@@ -130,6 +130,9 @@ public class Quest
public double ChangeStandingCost { get; set; }
}
/// <summary>
/// Same as BotBase.Quests
/// </summary>
public class QuestStatus
{
[JsonPropertyName("id")]
@@ -139,16 +142,16 @@ public class QuestStatus
public string? Uid { get; set; }
[JsonPropertyName("qid")]
public string? Qid { get; set; }
public string? QId { get; set; }
[JsonPropertyName("startTime")]
public double? StartTime { get; set; }
[JsonPropertyName("status")]
public double? Status { get; set; }
public QuestStatusEnum? Status { get; set; }
[JsonPropertyName("statusTimers")]
public Dictionary<string, double>? StatusTimers { get; set; }
public Dictionary<QuestStatusEnum, long>? StatusTimers { get; set; }
[JsonPropertyName("completedConditions")]
public List<string>? CompletedConditions { get; set; }
@@ -1,4 +1,4 @@
using System.Text.Json.Serialization;
using System.Text.Json.Serialization;
namespace Core.Models.Eft.Common.Tables;
@@ -56,7 +56,7 @@ public class RepeatableQuestStatus
public string? Uid { get; set; }
[JsonPropertyName("qid")]
public string? Qid { get; set; }
public string? QId { get; set; }
[JsonPropertyName("startTime")]
public long? StartTime { get; set; }