Implemented GenerateRepeatableQuest
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user