private GivenStatCollection Expand(GivenStatCollection coll)
 {
     // charge configuration
     foreach (var chargeType in Enums.GetValues <ChargeType>())
     {
         var chargeStat = Charge.From(chargeType);
         coll.Add(TotalOverride, chargeStat.Amount, chargeStat.Amount.Maximum.Value,
                  Condition.Unique($"{chargeType}.Charge.Amount.SetToMaximum"));
     }
     return(coll);
 }
示例#2
0
 private GivenStatCollection CreateCollection() => new GivenStatCollection(_modifierBuilder, ValueFactory)
 {
     // pools
     { BaseSet, EnergyShield.Recharge, 20 },
     { BaseSet, Life.RecoveryRate, 1 },
     { BaseSet, Mana.RecoveryRate, 1 },
     { BaseSet, EnergyShield.RecoveryRate, 1 },
     { BaseSet, Life.Regen.TargetPool, (int)Pool.Life },
     { BaseSet, Mana.Regen.TargetPool, (int)Pool.Mana },
     { BaseSet, EnergyShield.Regen.TargetPool, (int)Pool.EnergyShield },
     { BaseSet, EnergyShield.Recharge.Start, 1 },
     { BaseSet, AllSkills.ReservationPool, (int)Pool.Mana },
     // flasks
     { BaseSet, Flask.Effect, 1 },
     { BaseSet, Flask.LifeRecoverySpeed, 1 },
     { BaseSet, Flask.ManaRecoverySpeed, 1 },
     // Damage Multiplier
     { BaseSet, AnyDamageType.DamageMultiplier, 100 },
     // speed
     { BaseSet, Stat.ActionSpeed, 1 },
     { BaseSet, Stat.MovementSpeed, 1 },
     // crit
     { BaseSet, CriticalStrike.Chance.Maximum, 100 },
     { BaseSet, CriticalStrike.Chance.Minimum, 0 },
     // projectiles
     { BaseSet, Projectile.Count, 1 },
     // evasion
     { BaseSet, Evasion.Chance.Maximum, 95 },
     { BaseSet, Stat.ChanceToHit.Minimum, 5 },
     // block
     { BaseSet, Block.AttackChance.Maximum, 75 },
     { BaseSet, Block.SpellChance.Maximum, 75 },
     // dodge
     { BaseSet, Stat.Dodge.AttackChance.Maximum, 75 },
     { BaseSet, Stat.Dodge.SpellChance.Maximum, 75 },
     // charges
     { BaseSet, Charge.Endurance.Amount.Maximum, 3 },
     { BaseSet, Charge.Frenzy.Amount.Maximum, 3 },
     { BaseSet, Charge.Power.Amount.Maximum, 3 },
     { BaseSet, Charge.From(ChargeType.GhostShroud).Amount.Maximum, 3 },
     { BaseSet, Charge.From(ChargeType.Intensity).Amount.Maximum, 4 },
     { BaseSet, Charge.Endurance.Amount.Minimum, 0 },
     { BaseSet, Charge.Frenzy.Amount.Minimum, 0 },
     { BaseSet, Charge.Power.Amount.Minimum, 0 },
     { BaseSet, Charge.Endurance.Duration, 10 },
     { BaseSet, Charge.Frenzy.Duration, 10 },
     { BaseSet, Charge.Power.Duration, 10 },
     // Rampage
     { BaseSet, Stat.RampageStacks.Maximum, 1000 },
     // leech
     { BaseSet, Life.Leech.RateLimit, 20 },
     { BaseSet, Mana.Leech.RateLimit, 20 },
     { BaseSet, EnergyShield.Leech.RateLimit, 10 },
     { BaseSet, Life.Leech.Rate, 2 },
     { BaseSet, Mana.Leech.Rate, 2 },
     { BaseSet, EnergyShield.Leech.Rate, 2 },
     { BaseSet, Life.Leech.MaximumRecoveryPerInstance, 10 },
     { BaseSet, Mana.Leech.MaximumRecoveryPerInstance, 10 },
     { BaseSet, EnergyShield.Leech.MaximumRecoveryPerInstance, 10 },
     // resistances
     { BaseSet, Elemental.Resistance.Maximum, 75 },
     { BaseSet, Chaos.Resistance.Maximum, 75 },
     { BaseSet, Elemental.Resistance.Maximum.Maximum, 90 },
     { BaseSet, Chaos.Resistance.Maximum.Maximum, 90 },
     { BaseSet, Damage.Taken, 1 },
     // ailments
     { BaseSet, Ailment.Ignite.InstancesOn(Self).Maximum, 1 },
     { BaseSet, Ailment.Ignite.Source(Fire), 1 },
     { BaseSet, Ailment.Ignite.Duration, 4 },
     { TotalOverride, Ailment.Ignite.CriticalStrikesAlwaysInflict, 1 },
     { PercentLess, Damage.With(Ailment.Ignite), 50 },
     { BaseSet, Ailment.Shock.InstancesOn(Self).Maximum, 1 },
     { BaseSet, Ailment.Shock.Source(Lightning), 1 },
     { BaseSet, Ailment.Shock.Duration, 2 },
     { TotalOverride, Ailment.Shock.CriticalStrikesAlwaysInflict, 1 },
     { BaseSet, Ailment.ShockEffect, 1 },
     { BaseSet, Ailment.Chill.InstancesOn(Self).Maximum, 1 },
     { BaseSet, Ailment.Chill.Source(Cold), 1 },
     { BaseSet, Ailment.Chill.Duration, 2 },
     { BaseAdd, Ailment.Chill.Chance, 100 },
     { BaseSet, Ailment.ChillEffect, 1 },
     { BaseSet, Ailment.Freeze.InstancesOn(Self).Maximum, 1 },
     { BaseSet, Ailment.Freeze.Source(Cold), 1 },
     { BaseSet, Ailment.Freeze.Duration, 0.06 },
     { TotalOverride, Ailment.Freeze.CriticalStrikesAlwaysInflict, 1 },
     { BaseSet, Ailment.Bleed.InstancesOn(Self).Maximum, 1 },
     { BaseSet, Ailment.Bleed.Source(Physical), 1 },
     { BaseSet, Ailment.Bleed.Duration, 5 },
     { TotalOverride, Ailment.Bleed.Chance.With(DamageSource.Spell), 0 },
     { TotalOverride, Ailment.Bleed.Chance.With(DamageSource.Secondary), 0 },
     { PercentLess, Damage.With(Ailment.Bleed), 30 },
     { PercentMore, Damage.With(Ailment.Bleed), 100, Enemy.IsMoving },
     { BaseSet, Ailment.Poison.Source(Physical.And(Chaos)), 1 },
     { BaseSet, Ailment.Poison.Duration, 2 },
     { PercentLess, Damage.With(Ailment.Poison), 80 },
     // buffs
     { BaseSet, Buff.CurseLimit, 1 },
     { BaseSet, Buffs(Self).Effect, 1 },
     { BaseSet, Buff.Fortify.Duration, 4 },
     { BaseSet, Buff.Maim.Duration, 4 },
     { BaseSet, Buff.Taunt.Duration, 3 },
     { BaseSet, Buff.ArcaneSurge.Duration, 4 },
     { TotalOverride, Buff.Maim.Chance.With(DamageSource.Spell), 0 },
     { TotalOverride, Buff.Maim.Chance.With(DamageSource.Secondary), 0 },
     { BaseSet, Buff.Impale.StackCount.Maximum, 5 },
     // stun
     { BaseSet, Effect.Stun.Threshold, 1 },
     { BaseSet, Effect.Stun.Recovery, 1 },
     { BaseSet, Effect.Stun.Duration, 0.35 },
     // other
     { TotalOverride, Stat.Level.Minimum, 1 },
     { TotalOverride, Stat.Level.Maximum, 100 },
     { BaseSet, Stat.AreaOfEffect, 1 },
     { BaseSet, Stat.CooldownRecoverySpeed, 1 },
     { BaseSet, Stat.SkillStage.Minimum, 0 },
     { BaseSet, Stat.AttachedBrands.Maximum, 1 },
     { BaseSet, Stat.BannerStage.Maximum, 50 },
 };