public void SendTargetPayload(Actor target, Payloads.Payload payload) { if (_buffs.ContainsKey(target)) { List <Buff> buffs = _buffs[target]; int buffCount = buffs.Count; for (int i = 0; i < buffCount; ++i) { if (buffs[i] != null) { buffs[i].OnPayload(payload); } } } }
public override void OnPayload(Payload payload) { if (payload is DeathPayload) { } }
public override void OnPayload(Payload payload) { //TODO: If it's a deathpayload, and the archon is the user, add time to the timeout. //Timeout = WaitTicks(Timeout.TimeoutTick + (int)(1000f / Timeout.Game.UpdateFrequency * Timeout.Game.TickRate * 1f); //Consider adding a helper function to timers to add / subtract from their ticks/seconds. }
public override void OnPayload(Payload payload) { if (User != null && payload.Target != null && payload.Context.Target != null && payload.Context.User != null) { if (payload is AttackPayload && !payload.Context.Target.Equals(User) && payload.Context.User.Equals(User) && (payload.Context.PowerSNO.CompareTo(0x00007780) == 0)) //TODO: add detection for ranged attacks here, if Magic Weapon affects wands. { AttackPayload lastAttack = (AttackPayload)payload; if (Rune_A > 0) { //TODO: does this target the mob you attacked? AddBuff(Target, new PoisonTarget()); } if (Rune_B > 0) //Note: this implementation presumes that all lightning arcs will start at the soruce target, and then go only to their respective targets. //If it turns out that it's instead a chain-lightning-like mechanic, just redesign so that after each iteration, ropeSource becomes curTarget. { //TODO: find correct chance, formulas didn't specify. if (/*Rand.NextDouble() < 1*/true) { //TODO: find correct radius for "nearby". TargetList targets = GetEnemiesInRadius(lastAttack.Context.Target.Position, 10f); Actor ropeSource = lastAttack.Context.Target; Actor curTarget; float damage = ScriptFormula(7); int affectedTargets = 0; while (affectedTargets < ScriptFormula(6)) { if (ropeSource.World == null) ropeSource = SpawnProxy(ropeSource.Position); curTarget = targets.GetClosestTo(ropeSource.Position); if (curTarget != null) { targets.Actors.Remove(curTarget); if (curTarget.World != null) { ropeSource.AddRopeEffect(186883, curTarget); WeaponDamage(curTarget, damage, DamageType.Lightning); } affectedTargets++; } else { break; } } } } if (Rune_C > 0) { if (/*Rand.NextDouble() < ScriptFormula(9)*/true) { AddBuff(lastAttack.Context.Target, new KnockbackBuff(ScriptFormula(10))); } } if (Rune_D > 0) { //TODO: find correct chance, formulas didn't specify. if (/*Rand.NextDouble() < 1*/true) { GeneratePrimaryResource(ScriptFormula(11)); } } if (Rune_E > 0) { foreach (AttackPayload.DamageEntry dmg in lastAttack.DamageEntries) { //TODO: figure this out :) //lastAttack.Context.User.Attributes[GameAttribute.Hitpoints_Cur] += Math.Min(getDamageDone(), lastAttack.Context.User.Attributes[GameAttribute.Hitpoints_Max]); } } } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { if (Rune_C > 0) { //ScriptFormula(8) = % of Wizard Total Health -> 0.54 - (Rune_C * 0.04) //Math.Min(Total Damage incoming/Maximum Life, 26% of Maximum Life) float HPamount = User.Attributes[GameAttribute.Hitpoints_Max_Total]; float TargetHit = payload.Context.Target.Attributes[GameAttribute.Get_Hit_Current]; float NewDamage = Math.Min(TargetHit / HPamount, ScriptFormula(8) / HPamount); payload.Context.Target.Attributes[GameAttribute.Get_Hit_Current] = NewDamage; payload.Context.Target.Attributes.BroadcastChangedIfRevealed(); } if (Rune_D > 0) { //just a guess. if (Rand.NextDouble() < .4f) { GeneratePrimaryResource(ScriptFormula(11)); } } //drain __ primary resource for every 1% of your maximum Life absorbed. } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { //projectile? ScriptFormula(3) is speed. AttackPayload attack = new AttackPayload(this); attack.SetSingleTarget(payload.Context.User); attack.AddWeaponDamage(ScriptFormula(1), DamageType.Lightning); attack.Apply(); if (Rune_B > 0) { AddBuff(User, new IndigoBuff()); AddBuff(User, new MovementBuff(ScriptFormula(14), WaitSeconds(ScriptFormula(20)))); } if (Rune_C > 0) { AddBuff(User, new TeslaBuff()); } } }
public override void OnPayload(Payload payload) { base.OnPayload(payload); //reflect 45% of melee damage }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { if (Rune_C > 0) { if (Rand.NextDouble() < ScriptFormula(17)) { AddBuff(payload.Context.Target, new DebuffStunned(WaitSeconds(ScriptFormula(18)))); } } if (Rune_D > 0) { //says there's a chance, but no formula if (Rand.NextDouble() < 0.3f + (0.1f * Rune_D)) { GeneratePrimaryResource(ScriptFormula(23)); } } if (Rune_E > 0) { if (Rand.NextDouble() < ScriptFormula(10)) { WeaponDamage(GetEnemiesInRadius(payload.Context.Target.Position, ScriptFormula(20)), ScriptFormula(14), DamageType.Holy); } } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { WeaponDamage(payload.Context.User, ScriptFormula(0), DamageType.Cold); AddBuff(payload.Context.User, new DebuffChilled(0.5f, WaitSeconds(ScriptFormula(4)))); } //"your attacks have a chance to frost nova" /*if (payload.Target == User && payload is HitPayload) { if (Rune_E > 0) { if (Rand.NextDouble() < ScriptFormula(12)) { payload.Target.PlayEffectGroup(19321); AttackPayload frostNova = new AttackPayload(this); frostNova.Targets = GetEnemiesInRadius(payload.Target.Position, ScriptFormula(6)); frostNova.AddWeaponDamage(ScriptFormula(19) * ScriptFormula(13), DamageType.Cold); frostNova.OnHit = hitPayload => { AddBuff(hitPayload.Target, new DebuffFrozen(WaitSeconds(ScriptFormula(16)))); }; frostNova.Apply(); } } }*/ }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is DeathPayload) { AttackPayload attack = new AttackPayload(this); attack.Targets = GetEnemiesInRadius(User.Position, ScriptFormula(2)); attack.AddWeaponDamage(ScriptFormula(0), DamageType.Physical); attack.Apply(); base.Remove(); } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is DeathPayload) { Target.PlayEffectGroup(159027); WeaponDamage(GetEnemiesInRadius(Target.Position, ScriptFormula(6)), ScriptFormula(0), DamageType.Fire); } }
public virtual void OnPayload(Payloads.Payload payload) { }
public override void OnPayload(Payload payload) { if (Rune_B > 0) { if (payload.Target == Target && payload is HitPayload) { AddBuff(User, new IndigoBuff()); AddBuff(User, new MovementBuff(ScriptFormula(14), WaitSeconds(ScriptFormula(20)))); } } if (Rune_C > 0) { if (payload.Target == Target && payload is HitPayload) { AddBuff(User, new TeslaBuff()); } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { if (Rune_D > 0) { _AddArmor(); } if (Rune_A > 0) { WeaponDamage(payload.Context.Target, ScriptFormula(0), DamageType.Cold); AddBuff(payload.Context.Target, new DebuffChilled(0.5f, WaitSeconds(ScriptFormula(4)))); } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is DeathPayload) { //Need to check if monster already has a haunt on them, if it does -> check next monster. var target = GetEnemiesInRadius(payload.Context.Target.Position, ScriptFormula(10)) .GetClosestTo(payload.Context.Target.Position); if (target != null) { Target.AddComplexEffect(RuneSelect(19257, 111257, 111370, 113742, 111461, 111564), target); AddBuff(target, new Haunt1()); } else { if (Rune_B > 0) { var Lingerer = SpawnEffect(111345, Target.Position, 0, WaitSeconds(ScriptFormula(4))); Lingerer.OnTimeout = () => { Lingerer.World.BuffManager.RemoveAllBuffs(Lingerer); }; AddBuff(Lingerer, new HauntLinger()); } } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { if (Rune_D > 0) { _AddArmor(); } } }
public override void OnPayload(Payload payload) { //TODO:Rune_E -> Whenever you cast a spell that critically hits, you also shock a nearby enemy for 319% weapon damage as Lightning. if (payload.Target == Target && payload is HitPayload) { //projectile? ScriptFormula(3) is speed. AttackPayload attack = new AttackPayload(this); attack.SetSingleTarget(payload.Context.User); attack.AddWeaponDamage(ScriptFormula(1), DamageType.Lightning); attack.Apply(); if (Rune_B > 0) { AddBuff(User, new IndigoBuff()); AddBuff(User, new MovementBuff(ScriptFormula(14), WaitSeconds(ScriptFormula(20)))); } if (Rune_C > 0) { AddBuff(User, new TeslaBuff()); } } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is DeathPayload) { AttackPayload attack = new AttackPayload(this); attack.Targets = GetEnemiesInRadius(Target.Position, ScriptFormula(11)); attack.AddDamage(ScriptFormula(9) * Target.Attributes[GameAttribute.Hitpoints_Max_Total], ScriptFormula(10), DamageType.Physical); if (Rune_D > 0) { attack.OnHit = (hitPayload) => { GeneratePrimaryResource(ScriptFormula(14)); }; } attack.Apply(); SpawnProxy(Target.Position).PlayEffectGroup(18991); } }
public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) { if (Rune_A > 0) { //Reflect Damage back to Target SF(1) } //Absorb Damge (NoRune and Rune_C) -> ScriptFormula(0) or is it ScriptFormula(39) } }
public override void OnPayload(Payload payload) { if (payload is HitPayload && Target.Equals(payload.Context.User)) { //if (payload.IsCriticalHit) { if (Rune_B > 0) { if (Rand.NextDouble() < ScriptFormula(5)) { //ScriptFormula(4) -> extends duration } } if (Rune_C > 0) { //or ScriptFormula(15) if (Rand.NextDouble() < ScriptFormula(6)) { //drop additional health globes. } } if (Rune_D > 0) { GeneratePrimaryResource(ScriptFormula(3)); } if (Rune_E > 0) { User.PlayEffectGroup(210321); WeaponDamage(GetEnemiesInRadius(User.Position, ScriptFormula(9)), ScriptFormula(10), DamageType.Physical); } } } }
public override void OnPayload(Payload payload) { if (User != null && payload.Target != null && payload.Context.Target != null && payload.Context.User != null) { if (payload is AttackPayload && !payload.Context.Target.Equals(User) && payload.Context.User.Equals(User) && (payload.Context.PowerSNO.CompareTo(0x00007780) == 0)) { AttackPayload lastAttack = (AttackPayload)payload; //if (payload.IsCriticalHit) { if (Rune_B > 0) { if (Rand.NextDouble() < ScriptFormula(5)) { //ScriptFormula(4) -> extends duration } } if (Rune_C > 0) { if (Rand.NextDouble() < ScriptFormula(6)) { //drop additional health globes. } } if (Rune_D > 0) { GeneratePrimaryResource(ScriptFormula(3)); } if (Rune_E > 0) { User.PlayEffectGroup(210321); WeaponDamage(GetEnemiesInRadius(User.Position, ScriptFormula(9)), ScriptFormula(10), DamageType.Physical); } } } } }