Implemented GenerateRepeatableQuest

This commit is contained in:
Chomp
2025-01-17 18:58:35 +00:00
parent 9421070406
commit d862f845fd
3 changed files with 34 additions and 8 deletions
@@ -130,7 +130,7 @@ public class RepeatableQuestController
// Add repeatable quests of this loops sub-type (daily/weekly)
for (var i = 0; i < GetQuestCount(repeatableConfig, pmcData); i++)
{
RepeatableQuest quest = new RepeatableQuest();
var quest = new RepeatableQuest();
var lifeline = 0;
while (quest.Id is null && questTypePool.Types.Count > 0)
{
+32 -6
View File
@@ -1,16 +1,25 @@
using Core.Annotations;
using Core.Annotations;
using Core.Models.Eft.Common;
using Core.Models.Eft.Common.Tables;
using Core.Models.Spt.Config;
using Core.Models.Spt.Repeatable;
using Core.Models.Utils;
using Core.Utils;
namespace Core.Generators;
[Injectable]
public class RepeatableQuestGenerator
{
public RepeatableQuestGenerator()
protected ISptLogger<RepeatableQuestGenerator> _logger;
protected RandomUtil _randomUtil;
public RepeatableQuestGenerator(
ISptLogger<RepeatableQuestGenerator> logger,
RandomUtil randomUtil)
{
_logger = logger;
_randomUtil = randomUtil;
}
/// <summary>
@@ -23,15 +32,32 @@ public class RepeatableQuestGenerator
/// <param name="questTypePool">Possible quest types pool</param>
/// <param name="repeatableConfig">Repeatable quest config</param>
/// <returns>RepeatableQuest</returns>
public RepeatableQuest GenerateRepeatableQuest(
public RepeatableQuest? GenerateRepeatableQuest(
string sessionId,
int? pmcLevel,
int pmcLevel,
Dictionary<string, TraderInfo> pmcTraderInfo,
QuestTypePool questTypePool,
RepeatableQuestConfig repeatableConfig
)
{
throw new NotImplementedException();
var questType = _randomUtil.DrawRandomFromList(questTypePool.Types).First();
// Get traders from whitelist and filter by quest type availability
var traders = repeatableConfig.TraderWhitelist
.Where((x) => x.QuestTypes.Contains(questType))
.Select((x) => x.TraderId).ToList();
// filter out locked traders
traders = traders.Where((x) => pmcTraderInfo[x].Unlocked.GetValueOrDefault(false)).ToList();
var traderId = _randomUtil.DrawRandomFromList(traders).FirstOrDefault();
return questType switch
{
"Elimination" => GenerateEliminationQuest(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig),
"Completion" => GenerateCompletionQuest(sessionId, pmcLevel, traderId, repeatableConfig),
"Exploration" => GenerateExplorationQuest(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig),
"Pickup" => GeneratePickupQuest(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig),
_ => null
};
}
/// <summary>
@@ -159,7 +185,7 @@ public class RepeatableQuestGenerator
throw new NotImplementedException();
}
protected object GeneratePickupQuest(
protected RepeatableQuest GeneratePickupQuest(
string sessionId,
int pmcLevel,
string traderId,
+1 -1
View File
@@ -282,7 +282,7 @@ public class RandomUtil
/// <param name="replacement">Whether to draw with replacement. Defaults to true.</param>
/// <typeparam name="T">The type of elements in the list.</typeparam>
/// <returns>A List containing the drawn elements.</returns>
public List<T> DrawRandomFromList<T>(List<T> originalList, int count = 1, bool replacement = true)
public IEnumerable<T> DrawRandomFromList<T>(IEnumerable<T> originalList, int count = 1, bool replacement = true)
{
throw new NotImplementedException("ICloneable needs implemented on types before this can be written");
}