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); }
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; }
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; }
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); }
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; }
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; }
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); }
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; }
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; }
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; }
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; }
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; }
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; }
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); }
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); }
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; }
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); }
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; }
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; }
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); }
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; }
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); }
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; }
// 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);