This commit is contained in:
CWX
2025-01-18 12:29:25 +00:00
5 changed files with 9 additions and 65 deletions
@@ -323,7 +323,7 @@ public class RepeatableQuestController
// Target is boss
if (targetKvP.Data.IsBoss.GetValueOrDefault(false))
{
var targets = questPool.Pool.Elimination.Targets.Get<TargetLocation>(targetKvP.Key);
questPool.Pool.Elimination.Targets.TryGetValue(targetKvP.Key, out var targets);
targets.Locations.Clear();
targets.Locations.Add("any");
}
@@ -332,7 +332,7 @@ public class RepeatableQuestController
// Non-boss targets
var possibleLocations = locations;
var targets = questPool.Pool.Elimination.Targets.Get<TargetLocation>(targetKvP.Key);
questPool.Pool.Elimination.Targets.TryGetValue(targetKvP.Key, out var targets);
var targetsClone = _cloner.Clone(targets);
var allowedLocations = targetKvP.Key == "Savage"
? targetsClone.Locations.Where((location) => location != "laboratory") // Exclude labs for Savage targets.
@@ -360,7 +360,7 @@ public class RepeatableQuestController
},
Elimination = new EliminationPool
{
Targets = new EliminationTargetPool()
Targets = new Dictionary<string, TargetLocation>()
},
Pickup = new ExplorationPool
{
@@ -150,6 +150,7 @@ public class RepeatableQuestGenerator
var maxKillDifficulty = eliminationConfig.MaxKills;
var targetPool = questTypePool.Pool.Elimination;
targetsConfig = (ProbabilityObjectArray<Target, string, BossInfo>)targetsConfig.Where((x) => questTypePool.Pool.Elimination.Targets.Contains(x.Key));
if (targetsConfig.Count == 0 || targetsConfig.All((x) => x.Data.IsBoss.GetValueOrDefault(false)))
{
+1 -45
View File
@@ -36,51 +36,7 @@ public record ExplorationPool
public record EliminationPool
{
[JsonPropertyName("targets")]
public EliminationTargetPool? Targets { get; set; }
}
public record EliminationTargetPool
{
[JsonPropertyName("Savage")]
public TargetLocation? Savage { get; set; }
[JsonPropertyName("AnyPmc")]
public TargetLocation? AnyPmc { get; set; }
[JsonPropertyName("bossBully")]
public TargetLocation? BossBully { get; set; }
[JsonPropertyName("bossGluhar")]
public TargetLocation? BossGluhar { get; set; }
[JsonPropertyName("bossKilla")]
public TargetLocation? BossKilla { get; set; }
[JsonPropertyName("bossSanitar")]
public TargetLocation? BossSanitar { get; set; }
[JsonPropertyName("bossTagilla")]
public TargetLocation? BossTagilla { get; set; }
[JsonPropertyName("bossKnight")]
public TargetLocation? BossKnight { get; set; }
[JsonPropertyName("bossZryachiy")]
public TargetLocation? BossZryachiy { get; set; }
[JsonPropertyName("bossBoar")]
public TargetLocation? BossBoar { get; set; }
[JsonPropertyName("bossBoarSniper")]
public TargetLocation? BossBoarSniper { get; set; }
public EliminationTargetPool this[string toLower]
{
get
{
return (EliminationTargetPool?)GetType().GetProperties().SingleOrDefault(p => p.GetJsonName() == toLower)?.GetValue(this);
}
}
public Dictionary<string, TargetLocation>? Targets { get; set; }
}
public record TargetLocation
@@ -133,13 +133,12 @@ public class ProbabilityObjectArray<T, K, V> : List<T> where T : ProbabilityObje
* Drawing can be with or without replacement
* @param count The number of times we want to draw
* @param replacement Draw with or without replacement from the input dict (true = dont remove after drawing)
* @param locklist list keys which shall be replaced even if drawing without replacement
* @param lockList list keys which shall be replaced even if drawing without replacement
* @returns Array consisting of N random keys for this ProbabilityObjectArray
*/
public List<K> Draw(int count = 1, bool replacement = true, List<K>? locklist = null)
public List<K> Draw(int count = 1, bool replacement = true, List<K>? lockList = null)
{
if (locklist == null)
locklist = new List<K>();
lockList ??= [];
if (Count == 0)
{
return [];
@@ -163,7 +162,7 @@ public class ProbabilityObjectArray<T, K, V> : List<T> where T : ProbabilityObje
var rand = Random.Shared.NextDouble();
var randomIndex = (int)probCumsum.First((x) => x > rand);
// We cannot put Math.random() directly in the findIndex because then it draws anew for each of its iteration
if (replacement || locklist.Contains(totals.keyArray[randomIndex]))
if (replacement || lockList.Contains(totals.keyArray[randomIndex]))
{
// Add random item from possible value into return array
drawnKeys.Add(totals.keyArray[randomIndex]);
@@ -1,12 +0,0 @@
using Core.Models.Spt.Repeatable;
namespace Core.Utils.Extensions
{
public static class EliminationTargetPoolExtensions
{
public static void Remove<T>(this EliminationTargetPool pool, T key)
{
// TODO: Implement
}
}
}