1 using System.Collections.Generic;
11 namespace Loot.Api.Strategy
23 this.properties = properties;
29 WeightedRandom<Modifier> wr =
new WeightedRandom<Modifier>();
30 foreach (var e
in pool.GetRollableModifiers(context))
32 wr.Add(e, e.Properties.RollChance);
39 InitFields(modifierContext.
Item, properties);
40 var list = PreRoll(pool, modifierContext, properties);
41 list = Roll(list, pool, modifierContext, properties);
42 PostRoll(ref list, pool, modifierContext, properties);
49 Main.PlaySound(SoundID.Item37, -1, -1);
56 return currentModifiers;
59 WeightedRandom<Modifier> wr =
new WeightedRandom<Modifier>();
60 if (modifierContext.
Pool != null)
62 foreach (var modifier
in modifierContext.
Pool.GetRollableModifiers(modifierContext))
64 wr.Add(modifier, modifier.Properties.RollChance);
67 else if (modifierContext.
PoolSet != null && modifierContext.
PoolSet.Any())
69 var randomPool = modifierContext.
PoolSet[Main.rand.Next(modifierContext.
PoolSet.Count - 1)];
70 foreach (var modifier
in randomPool.GetRollableModifiers(modifierContext))
72 wr.Add(modifier, modifier.Properties.RollChance);
77 wr = GetRandomList(modifierContext, drawPool);
80 var list = currentModifiers;
88 int z = currentModifiers.Count;
94 line = PreRollLine(ref currentModifiers, drawPool, modifierContext, properties) ?? RollLine(currentModifiers, drawPool, modifierContext, properties, wr);
95 if (line == null)
continue;
96 currentModifiers.Add(line);
97 PostRollLine(ref currentModifiers, line, drawPool, modifierContext, properties);
98 if (currentModifiers.Count > z)
break;
104 wr.elements.RemoveAll(x => x.Item1.Type == line.
Type);
105 wr.needsRefresh =
true;
114 var preset = properties?.
PresetLines?.Invoke() ??
new List<Modifier>();
115 preset.ForEach(x => RollProperties(x, preset, modifierContext, properties));
116 preset.ForEach(x => x.Roll(modifierContext, preset));
133 if (weightedRandom.elements.Count <= 0
141 _forceNextRoll =
false;
146 RollProperties(rolledModifier, currentModifiers, modifierContext, properties);
148 rolledModifier.
Roll(modifierContext, currentModifiers);
153 if (!rolledModifier.
PostRoll(modifierContext, currentModifiers))
155 _forceNextRoll =
true;
159 return rolledModifier;
171 if (modifierContext.
Player != null)
175 if (modifierContext.
Rarity != null)
static void UpdateGraphicsEntities(List< Modifier > modifiers, Item item)
virtual float ExtraMagnitudePower
Defines a modifier, which is an unloaded GlobalItem Making it a GlobalItem gives easy access to all h...
void InitFields(Item item, RollingStrategyProperties properties)
virtual void PostRoll(ref List< Modifier > modifiers, ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties)
int MaxRollableLines
The maximum amount of modifiers that can roll
This class is responsible for handling ShaderEntity and GlowmaskEntity that come from the Modifiers o...
float ExtraLuck
Gives extra luck when rolling modifiers
RollingStrategyProperties properties
ModifierProperties RollMagnitudeAndPower(float magnitudePower=1f, float lukStat=0f)
Defines a context in which a Modifier might be rolled Which fields are available (not null) depends o...
ModifierEffect GetEffect(Type type)
float RollNextChance
Chance to roll a consecutive modifier
List< ModifierPool > PoolSet
ModifierProperties Properties
virtual List< Modifier > Roll(List< Modifier > currentModifiers, ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties)
void RollProperties(Modifier modifier, List< Modifier > modifiers, ModifierContext modifierContext, RollingStrategyProperties properties)
Defines properties that will be used when an item is being rolled in a IRollingStrategy<T> These can ...
virtual void PostRollLine(ref List< Modifier > modifiers, Modifier line, ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties)
virtual Modifier RollLine(List< Modifier > currentModifiers, ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties, WeightedRandom< Modifier > weightedRandom)
virtual void Clone(ref Modifier clone)
Allows modders to do custom cloning here Happens after default cloning, which clones various info (mo...
Defines an item that may be modified by modifiers from mods
static ModifierDelegatorPlayer GetPlayer(Player player)
virtual Modifier PreRollLine(ref List< Modifier > currentModifiers, ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties)
Defines a modifier pool. A modifier pool holds a certain amount of effects in an array It allows to r...
static LootModItem GetInfo(Item item)
virtual void PlaySoundEffect(Item item)
virtual void Roll(ModifierContext ctx, IEnumerable< Modifier > rolledModifiers)
Allows modders to do something when the modifier is rolled in the given context The passed rolledModi...
virtual List< Modifier > PreRoll(ModifierPool drawPool, ModifierContext modifierContext, RollingStrategyProperties properties)
float MagnitudePower
The minimum strength of lines to roll
virtual bool PostRoll(ModifierContext ctx, IEnumerable< Modifier > rolledModifiers)
Returns if the modifier will actually be added after it is rolled. This is called after Roll is calle...
virtual ModifierProperties.ModifierPropertiesBuilder GetModifierProperties(Item item)
WeightedRandom< Modifier > GetRandomList(ModifierContext context, ModifierPool pool)
Func< List< Modifier > > PresetLines
Returns a list of lines that will be rolled initially
Holds player-entity data and handles it
int MinRollableLines
The minimum amount of modifiers to roll