public BristlebackEffectApplier(IAbilitySkill skill) : base(skill) { var worker = new EffectApplierWorker( false, () => { return(unit => { unit.DamageManipulation.DamageReduction.AddSpecialSkillValue( skill, (abilityUnit, damageValue) => { var angle = unit.SourceUnit.FindRelativeAngle(abilityUnit.Position.Current) % (2 * Math.PI * 180) / Math.PI; if (angle >= 110 && angle <= 250) { return (1 + skill.Level.Current) * 0.08; } else if (angle >= 70 && angle <= 290) { return (1 + skill.Level.Current) * 0.04; } return 0; }); }); }, () => unit => { unit.DamageManipulation.DamageReduction.RemoveSpecialSkillValue(skill); }, null); this.Workers.Add(worker); }
public IceBlastModifierEffectApplier(IAbilityModifier modifier) : base(modifier) { var value = 0d; var worker = new EffectApplierWorker( true, () => { return(unit => { value = modifier.SourceSkill.SourceAbility.GetAbilityData("kill_pct") / 100; unit.DamageManipulation.Aa = new ValueHolder <float>( (abilityUnit, f) => { var percent = modifier.AffectedUnit.Health.Maximum * value; if (modifier.AffectedUnit.Health.Current - f <= percent) { return (float)percent; } return 0; }, true, () => modifier.SourceModifier.DieTime); }); }, () => unit => unit.DamageManipulation.Aa = null, () => { return(unit => { value = modifier.SourceSkill.SourceAbility.GetAbilityData("kill_pct") / 100; unit.DamageManipulation.Aa = new ValueHolder <float>( (abilityUnit, f) => { var percent = modifier.AffectedUnit.Health.Maximum * value; if (modifier.AffectedUnit.Health.Current - f <= percent) { return (float)percent; } return 0; }, true, () => modifier.SourceModifier.DieTime); }); }); this.Workers.Add(worker); }
public FleshGolemModifierEffectApplier(IAbilityModifier modifier) : base(modifier) { var worker = new EffectApplierWorker( false, () => { return(unit => { Console.WriteLine("applying undying"); unit.DamageManipulation.DamageAmplification.AddSpecialModifierValue( modifier, (abilityUnit, f) => { var baseAmp = .05 * modifier.SourceSkill.Level.Current; var distance = modifier.SourceSkill.Owner.Position.Current.Distance2D( modifier.AffectedUnit.Position.Current); if (distance <= 200) { return baseAmp + 0.15; } else if (distance > 750) { return 0.1; } else { return baseAmp + (750 - distance) * 0.03 / 110; } }); }); }, () => unit => { unit.DamageManipulation.DamageAmplification.RemoveSpecialModifierValue(modifier); }, null); this.Workers.Add(worker); }
public BloodrageModifierEffectApplier(IAbilityModifier modifier) : base(modifier) { this.ampApplier = new EffectApplierWorker( true, () => { return(unit => { this.realValue = Math.Floor( this.Modifier.SourceSkill.SourceAbility.GetAbilityData("damage_increase_pct")) / 100; this.value = this.realValue; unit.DamageManipulation.DamageAmplification.AddSpecialModifierValue( modifier, (abilityUnit, damageValue) => { if ( modifier.AffectedUnit.Position.Current.Distance2D( abilityUnit.Position.Current) < 2200) { return this.value; } else { return this.value / 2; } }, true); unit.DamageManipulation.AmpFromMe.AddSpecialModifierValue( modifier, (abilityUnit, damageValue) => { if ( modifier.AffectedUnit.Position.Current.Distance2D( abilityUnit.Position.Current) < 2200) { return this.value; } else { return this.value / 2; } }, true); }); }, () => { return(unit => { unit.DamageManipulation.DamageAmplification.RemoveSpecialModifierValue(modifier); unit.DamageManipulation.AmpFromMe.RemoveSpecialModifierValue(modifier); }); }, () => { return(unit => { this.realValue = Math.Floor( this.Modifier.SourceSkill.SourceAbility.GetAbilityData("damage_increase_pct")) / 100; this.value = this.realValue; unit.DamageManipulation.DamageAmplification.UpdateSpecialModifierValue( modifier, (abilityUnit, damageValue) => { if ( modifier.AffectedUnit.Position.Current.Distance2D( abilityUnit.Position.Current) < 2200) { return this.value; } else { return this.value / 2; } }); unit.DamageManipulation.AmpFromMe.UpdateSpecialModifierValue( modifier, (abilityUnit, damageValue) => { if ( modifier.AffectedUnit.Position.Current.Distance2D( abilityUnit.Position.Current) < 2200) { return this.value; } else { return this.value / 2; } }); }); }); this.Workers.Add(this.ampApplier); }