More implementation of QuestHelper
made `QId` consistent
This commit is contained in:
@@ -36,7 +36,7 @@ public class TraderController
|
||||
public List<TraderBase> GetAllTraders(string sessionId)
|
||||
{
|
||||
var traders = new List<TraderBase>();
|
||||
|
||||
return traders;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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")]
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user