Exemple #1
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Need in range selected target
            if (pp.Target == null || pm.fx.getDistance(pp.User.Position, pp.Target.Position) > pm.meleeRange) { yield break; }

            yield return 200; //Synchronize with weapon swing

            //pp.Message.Field6.Field0 = swing side
            if(pp.SwingSide == 3) {
                pm.fx.PlayEffectGroupActorToActor(18671, pp.User, pp.Target);
            } else {
                pm.fx.PlayEffectGroupActorToActor(18672, pp.User, pp.Target);
            }

            IList<Actor> hits = pm.FindActorsInFront(pp.User, pp.Target.Position, 180f, 10f);
            foreach (Actor actor in hits)
            {
                //Must not be other player either will need fix
                if(actor.DynamicID != pp.User.DynamicID)
                    pm.DoDamage(actor, 20, FloatingNumberMessage.FloatType.White);
            }

            //Regenerate ressource
            pm.generateRessource(pp.User, 4);

            //Flush all player buffer
            pm.flushAll(pp.User);
        }
Exemple #2
0
 public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
 {
     if (pm.fx.getDistance(pp.User.Position, pp.Target.Position) > pm.meleeRange)
     {
         pm.fx.PlayHitEffect(HitEffect.Flash, pp.User, pp.Target);
         pm.DoDamage(pp.Target, 25f, FloatingNumberMessage.FloatType.White);
     }
     yield break;
 }
Exemple #3
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*fx.SpawnEffect(pp.User, 86790, pp.TargetPosition);
            yield return 2000;
            fx.SpawnEffect(pp.User, 86769, pp.TargetPosition);
            fx.SpawnEffect(pp.User, 90364, pp.TargetPosition, -1, 4000);

            IList<Actor> hits = fx.FindActorsInRadius(pp.TargetPosition, 13f);
            fx.DoDamage(pp.User, hits, 150f, 0);*/
            yield break;
        }
Exemple #4
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            yield return 150;

            pm.fx.PlayEffectGroupActorToActor(18685, pp.User, pp.User);

            //Regenerate ressource
            pm.generateRessource(pp.User, 15);

            List<Actor> targetList = pp.User.World.GetActorsInRange(pp.User.Position, 17f);

            //Add stunt effect
            foreach (Actor actor in targetList)
            {
                if (actor.DynamicID != pp.User.DynamicID)
                {
                    pm.DoDamage(actor, 20f, FloatingNumberMessage.FloatType.White);
                    actor.setAttribute(GameAttribute.Stunned, new GameAttributeValue(true));
                }
            }

            //Set skill on Colldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(true), Skills.Skills.Barbarian.FuryGenerators.GroundStomp);
            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);

            yield return 3000;
            
            //Remove stunt effect after 3sec
            foreach (Actor actor in targetList)
            {
                if (actor.DynamicID != pp.User.DynamicID)
                {
                    actor.setAttribute(GameAttribute.Stunned, new GameAttributeValue(false));
                }
            }

            pm.SendDWordTick(pp.User.InGameClient);

            yield return 9000;

            //Remove skill cooldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(false), Skills.Skills.Barbarian.FuryGenerators.GroundStomp);
            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);
            
        }
Exemple #5
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*if (pp.Message.Field5 == 0)
                fx.PlayEffectGroupActorToActor(96176, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            else if (pp.Message.Field5 == 1)
                fx.PlayEffectGroupActorToActor(96176, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            else if (pp.Message.Field5 == 2)
                fx.PlayEffectGroupActorToActor(96178, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));

            if (fx.WillHitMeleeTarget(pp.User, pp.Target))
            {
                fx.PlayHitEffect(2, pp.User, pp.Target);
                fx.DoDamage(pp.User, pp.Target, 25f, 0);
            }*/

            yield break;
        }
Exemple #6
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            // HACK: made up spell, not real magic missile
            /*for (int step = 1; step < 10; ++step)
            {
                var spos = new Vector3D();
                spos.X = pp.User.Position.X + ((pp.TargetPosition.X - pp.User.Position.X) * (step * 0.10f));
                spos.Y = pp.User.Position.Y + ((pp.TargetPosition.Y - pp.User.Position.Y) * (step * 0.10f));
                spos.Z = pp.User.Position.Z + ((pp.TargetPosition.Z - pp.User.Position.Z) * (step * 0.10f));

                fx.SpawnEffect(pp.User, 61419, spos);

                IList<Actor> hits = fx.FindActorsInRadius(spos, 6f);
                fx.DoDamage(pp.User, hits, 60f, 0);
                yield return 100;
            }*/
            yield break;
        }
Exemple #7
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Need in range selected target
            if (pp.Target == null || pm.fx.getDistance(pp.User.Position, pp.Target.Position) > pm.meleeRange) { yield break; }

            yield return 100; //Synchronize with weapon swing and give time to player position to update

            //Add 20% knockback chance
            if (pm._rand.Next(0, 100) < 60) { pm.fx.DoKnockback(pp.User, pp.Target, 1); }

            //Effect may depend on rune/gender not implemented for the moment
            pm.fx.PlayEffectGroupActorToActor(18662, pp.User, pp.User);
            pm.fx.PlayHitEffect(HitEffect.Flash, pp.Target, pp.User);

            //Tmp dmg
            pm.DoDamage(pp.Target, 30f, FloatingNumberMessage.FloatType.White);
                        
            //Regenerate ressource
            pm.generateRessource(pp.User, 6);

            //Flush all player buffer
            pm.flushAll(pp.User);
        }
Exemple #8
0
 public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
 {
     /*Vector3D startpos;
     if (pp.Target == null)
         startpos = pp.User.Position;
     else
         startpos = pp.TargetPosition;
     
     for (int n = 0; n < 7; ++n)
     {
         IList<Actor> nearby = fx.FindActorsInRadius(startpos, 20f, 1);
         if (nearby.Count > 0)
         {
             fx.SpawnEffect(pp.User, 99063, nearby[0].Position);
             fx.DoDamage(pp.User, nearby[0], 100f, 0);
             yield return 100;
         }
         else
         {
             break;
         }
     }*/
     yield break;
 }
Exemple #9
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*fx.RegisterChannelingPower(pp.User, 150);

            fx.ActorLookAt(pp.User, pp.TargetPosition);

            // if throttling only update proxy if needed, then exit
            if (pp.ThrottledCast)
            {
                if (pp.Target == null)
                    fx.GetChanneledProxy(pp.User, 0, pp.TargetPosition);
                yield break;
            }

            IList<Actor> targets;
            if (pp.Target == null)
            {
                targets = new List<Actor>();
                fx.PlayRopeEffectActorToActor(0x78c0, pp.User, fx.GetChanneledProxy(pp.User, 0, pp.TargetPosition));
            }
            else
            {
                targets = fx.FindActorsInRadius(pp.TargetPosition, 15f, 1);
                targets.Insert(0, pp.Target);
                Actor effect_source = pp.User;
                foreach (Actor actor in targets)
                {
                    fx.PlayHitEffect(2, effect_source, actor);
                    fx.PlayRopeEffectActorToActor(0x78c0, effect_source, actor);
                    effect_source = actor;
                }
            }

            fx.DoDamage(pp.User, targets, 12, 0);*/
            yield break;
        }
Exemple #10
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
           /* fx.RegisterChannelingPower(pp.User, 200);

            if (!pp.UserIsChanneling)
            {
                Actor targetProxy = fx.GetChanneledProxy(pp.User, 0, pp.TargetPosition);
                Actor userProxy = fx.GetChanneledProxy(pp.User, 1, pp.User.Position);
                fx.ActorLookAt(userProxy, pp.TargetPosition);
                fx.PlayEffectGroupActorToActor(97385, userProxy, userProxy);
                fx.PlayEffectGroupActorToActor(134442, userProxy, targetProxy);
            }

            if (!pp.ThrottledCast)
            {
                yield return 800;
                // update proxy target location laggy
                if (fx.ChannelingCanceled(pp.User))
                    fx.GetChanneledProxy(pp.User, 0, pp.TargetPosition);

                fx.SpawnEffect(pp.User, 97821, pp.TargetPosition);
                fx.DoDamage(pp.User, fx.FindActorsInRadius(pp.TargetPosition, 6f), 20, 0);
            }*/
            yield break;
        }
Exemple #11
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*yield return 350;
            fx.PlayEffectGroupActorToActor(19356, pp.User, fx.SpawnTempProxy(pp.User, pp.User.Position));

            IList<Actor> hits = fx.FindActorsInRadius(pp.User.Position, 20);
            foreach (Actor actor in hits)
            {
                fx.DoKnockback(pp.User, actor, 10f);
                fx.DoDamage(pp.User, actor, 20, 0);
            }*/
            yield break;
        }
Exemple #12
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*fx.RegisterChannelingPower(pp.User);

            // TODO: hit effects
            Effect pid = fx.GetChanneledProxy(pp.User, 0, pp.TargetPosition);
            if (! pp.UserIsChanneling)
            {
                fx.PlayRopeEffectActorToActor(30888, pp.User, pid);
            }

            // TODO: beam damage
            //DoDamage(user, target, 12, 0);*/
            yield break;
        }
Exemple #13
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            /*if (pp.Message.Field5 == 0)
                fx.PlayEffectGroupActorToActor(18987, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            else if (pp.Message.Field5 == 1)
                fx.PlayEffectGroupActorToActor(18988, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            else if (pp.Message.Field5 == 2)
                fx.PlayEffectGroupActorToActor(96519, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));

            if (pp.Message.Field5 != 2)
            {
                if (fx.WillHitMeleeTarget(pp.User, pp.Target))
                {
                    fx.PlayHitEffect(6, pp.User, pp.Target);
                    fx.DoDamage(pp.User, pp.Target, 25f, 0);
                }
            }
            else
            {
                IList<Actor> hits = fx.FindActorsInRadius(pp.User.Position, 10);
                foreach (Actor hit in hits)
                {
                    fx.PlayHitEffect(6, pp.User, hit);
                    fx.DoDamage(pp.User, hit, 25f, 0);
                }
            }*/
            yield break;
        }
Exemple #14
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            yield return 200; 

            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(158731, pp.User, pp.User);

            IList<Actor> hits = pm.FindActorsInFront(pp.User, pp.Target.Position, 180f, 15f);
            foreach (Actor actor in hits)
            {
                //Must not be other player either will need fix
                if (actor.DynamicID != pp.User.DynamicID)
                {
                    //15% crit chance
                    if (pm._rand.Next(0, 100) < 15) {
                        pm.DoDamage(actor, 40, FloatingNumberMessage.FloatType.White);
                    } else {
                        pm.DoDamage(actor, 40, FloatingNumberMessage.FloatType.WhiteCritical);
                    }
                }
                pm.SendDWordTick(pp.User.InGameClient);
            }

            //Regenerate ressource
            pm.userRessource(pp.User, 20);

            //Flush all player buffer
            pm.flushAll(pp.User);
        }
Exemple #15
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            Console.Write("Fury stack : " + pp.User.Properties.furyStack + "\r\n");

            //Need in range selected target
            if (pp.Target == null || pm.fx.getDistance(pp.User.Position, pp.Target.Position) > pm.meleeRange) { yield break; }

            //Spawn frenzy effect
            //fx.SpawnEffect(pp.User, 3291, pp.User.Position, -1, 500);
            if (pp.User.Properties.furyStack == 0)
            {
                pm.fx.PlayEffectGroupActorToActor(18678, pp.User, pp.User);
            }

            pm.DoDamage(pp.Target, 30f, FloatingNumberMessage.FloatType.White);

            //Add 15% aps bonus for 4 sec
            if (pp.User.Properties.furyStack < 5)
            {
                pp.User.setAttribute(GameAttribute.Attacks_Per_Second_Total, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Attacks_Per_Second_Total, null).ValueF + 0.15f));
                pm.SendDWordTick(pp.User.InGameClient);
                pp.User.Properties.furyStack++;
            }

            //Regenerate ressource
            pm.generateRessource(pp.User, 3);

            yield return 4000;

            if (pp.User.Properties.furyStack > 0)
            {

                pp.User.setAttribute(GameAttribute.Attacks_Per_Second_Total, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Attacks_Per_Second_Total, null).ValueF - 0.15f));
                pm.SendDWordTick(pp.User.InGameClient);
                pp.User.Properties.furyStack--;

            }

            Console.Write("Fury stack : " + pp.User.Properties.furyStack);

        }
Exemple #16
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(18701, pp.User, pp.User);

            pm.userRessource(pp.User, 20);

            pm.flushAll(pp.User);

            yield break;
        }
Exemple #17
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Warcry effect
            pm.fx.PlayEffectGroupActorToActor(18664, pp.User, pp.User);

            List<Mooege.Core.GS.Player.Player> affectedPlayer = pp.User.World.GetPlayersInRange(pp.User.Position, 17f);

            foreach (Actor actor in affectedPlayer)
            {
                //Add 100% armor bonus
                actor.setAttribute(GameAttribute.Armor_Total, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Armor_Total, null).ValueF * 2));
            }
            
            //Set skill on Colldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(true), Skills.Skills.Barbarian.FuryGenerators.WarCry);
            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);

            yield return 30000;

            //Set skill on Colldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(false), Skills.Skills.Barbarian.FuryGenerators.WarCry);
            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);

            yield return 30000;

            foreach (Actor actor in affectedPlayer)
            {
                //Remove 100% armor bonus
                actor.setAttribute(GameAttribute.Armor_Total, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Armor_Total, null).ValueF / 2));
            }

            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);
        }
Exemple #18
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(70614, pp.User, pp.User);

            IList<Actor> targets = pp.User.World.GetActorsInRange(pp.User.Position, 9f);

            foreach (Actor target in targets)
            {
                pm.fx.PlayEffectGroupActorToActor(70804, pp.Target, pp.Target);
                pm.DoDamage(target, 20f, FloatingNumberMessage.FloatType.Red);
                pm.SendDWordTick(pp.User.InGameClient);
            }

            pm.userRessource(pp.User, 20);

            yield return 1000;

            foreach (Actor target in targets)
            {
                pm.DoDamage(target, 20f, FloatingNumberMessage.FloatType.White);
                pm.SendDWordTick(pp.User.InGameClient);
            }

            pm.flushAll(pp.User);

            yield return 1000;

            foreach (Actor target in targets)
            {
                pm.DoDamage(target, 20f, FloatingNumberMessage.FloatType.Red);
                pm.SendDWordTick(pp.User.InGameClient);
            }

            pm.flushAll(pp.User);

            yield break;
        }
Exemple #19
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(18664, pp.User, pp.User);

            //Add crit
            //pp.User.setAttribute(GameAttribute.Crit_Percent_Cap, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Crit_Percent_Cap, null).Value + 4));

            //Add dmg
            //pp.User.setAttribute(GameAttribute.Crit_Percent_Cap, new GameAttributeValue(pp.User.Attributes.GetAttributeValue(GameAttribute.Crit_Percent_Cap, null).Value + 4));

            //Regenerate ressource
            pm.userRessource(pp.User, 20);

            //Flush all player buffer
            pm.flushAll(pp.User);

            yield break;
        }
Exemple #20
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(18705, pp.User, pp.User);

            IList<Actor> targets = pp.User.World.GetActorsInRange(pp.User.Position, 25f);

            foreach (Actor actor in targets)
            {
                //Must not be other player either will need fix
                if (actor.DynamicID != pp.User.DynamicID)
                    actor.setAttribute(GameAttribute.Damage_Reduction_Current, new GameAttributeValue(0.5f));
            }

            //Regenerate ressource
            pm.userRessource(pp.User, 20);

            //Flush all player buffer
            pm.flushAll(pp.User);

            yield return 15000;

            //Remove debuff after 15 sec
            foreach (Actor actor in targets)
            {
                actor.setAttribute(GameAttribute.Damage_Reduction_Current, new GameAttributeValue(0f));
            }

            pm.flushAll(pp.User);

        }
Exemple #21
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            // TODO: make buffs disappear so skill can be implemented
            //if (pp.Message.Field5 == 0)
            //    fx.PlayEffectGroupActorToActor(73953, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            //else if (pp.Message.Field5 == 1)
            //    fx.PlayEffectGroupActorToActor(73953, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));
            //else if (pp.Message.Field5 == 2)
            //    fx.PlayEffectGroupActorToActor(73953, pp.User, fx.SpawnTempProxy(pp.User, pp.TargetPosition));

            yield break;
        }
Exemple #22
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager pm)
        {
            IList<Actor> inlineMonster = pm.FindActorsInFront(pp.User, pp.TargetPosition.Position, 20, pm.fx.getDistance(pp.User.Position, pp.TargetPosition.Position));

            //Add start effect
            pm.fx.PlayEffectGroupActorToActor(18680, pp.User, pp.User);

            //Play charge anim
            pm.fx.PlayAnimation(pp.User, 116118);

            //Move targe
            pm.fx.MoveActorNormal(pp.User, pp.User, pp.TargetPosition.Position, pm.fx.getRadian(pp.TargetPosition.Position, pp.User.Position));
            
            //Play end effect
            pm.fx.PlayEffectGroupActorToActor(18679, pp.User, pp.User);

            foreach (Actor target in inlineMonster)
            {
                pm.DoDamage(target, 20f, FloatingNumberMessage.FloatType.White);
            }

            foreach (Actor target in pp.User.World.GetActorsInRange(pp.TargetPosition.Position, 10f))
            {
                pm.DoDamage(target, 20f, FloatingNumberMessage.FloatType.White);
                pm.fx.DoKnockback(pp.User, target, 2);
            }

            //Play charge anim
            pm.fx.PlayAnimation(pp.User, 116117);

            //Regenerate ressource
            pm.generateRessource(pp.User, 15);

            //Set skill on Colldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(true), Skills.Skills.Barbarian.FuryGenerators.FuriousCharge);

            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);

            yield return 15000;

            //Set skill on Colldown
            pp.User.setAttribute(GameAttribute.Power_Disabled, new GameAttributeValue(true), Skills.Skills.Barbarian.FuryGenerators.FuriousCharge);
            pm.SendDWordTick(pp.User.InGameClient);
            pm.flushAll(pp.User);
        }
Exemple #23
0
        public override IEnumerable<int> Run(PowerParameters pp, PowerManager fx)
        {
            // HACK: made up demonic meteor spell, not real hydra
            /*fx.SpawnEffect(pp.User, 185366, pp.TargetPosition);
            yield return 400;

            IList<Actor> hits = fx.FindActorsInRadius(pp.TargetPosition, 10f);
            fx.DoDamage(pp.User, hits, 100f, 0);*/
            yield break;
        }
Exemple #24
0
 // Called to start executing a power
 // return yield an int to specify in milliseconds how long to wait before continuing.
 public abstract IEnumerable<int> Run(PowerParameters pp, PowerManager fx);