Example #1
0
 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);
             }
         }
     }
 }
Example #2
0
        public override void OnPayload(Payload payload)
        {
            if (payload is DeathPayload)
            {

            }
        }
Example #3
0
File: Wizard.cs Project: n4v/mooege
 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.
 }
Example #4
0
File: Wizard.cs Project: n4v/mooege
            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]);
                            }
                        }
                    }
                }
            }
Example #5
0
File: Wizard.cs Project: n4v/mooege
            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.
                }
            }
Example #6
0
 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());
         }
     }
 }
Example #7
0
            public override void OnPayload(Payload payload)
            {
                base.OnPayload(payload);

                //reflect 45% of melee damage
            }
Example #8
0
 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);
             }
         }
     }
 }
Example #9
0
File: Wizard.cs Project: n4v/mooege
 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();
             }
         }
     }*/
 }
Example #10
0
 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();
     }
 }
Example #11
0
 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);
     }
 }
Example #12
0
 public virtual void OnPayload(Payloads.Payload payload)
 {
 }
Example #13
0
 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());
         }
     }
 }
Example #14
0
 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))));
         }
     }
 }
Example #15
0
 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());
             }
         }
     }
 }
Example #16
0
File: Wizard.cs Project: n4v/mooege
 public override void OnPayload(Payload payload)
 {
     if (payload.Target == Target && payload is HitPayload)
     {
         if (Rune_D > 0)
         {
             _AddArmor();
         }
     }
 }
Example #17
0
File: Wizard.cs Project: n4v/mooege
 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());
         }
     }
 }
Example #18
0
            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);
                }
            }
Example #19
0
File: Wizard.cs Project: n4v/mooege
 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)
     }
 }
Example #20
0
 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);
             }
         }
     }
 }
Example #21
0
            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);
                            }
                        }
                    }
                }
            }