public override void OnSuccess(Sprite sprite)
        {
            if (sprite is Aisling)
            {
                var client = (sprite as Aisling).Client;

                var debuff = new debuff_frozen();

                var i = sprite.GetInfront(sprite);

                if (i == null || i.Count == 0)
                {
                    client.SendMessage(0x02, "you have embarrassed yourself.");
                    return;
                }


                foreach (var target in i)
                {
                    if (target is Money)
                        continue;
                    if (target is Item)
                        continue;

                    target.RemoveDebuff("sleep");
                    target.RemoveDebuff("frozen");

                    if (!target.HasDebuff(debuff.Name))
                    {
                        Apply(client, debuff, target);
                        return;
                    }
                }
            }
        }
Exemple #2
0
        public override void OnUse(Sprite sprite)
        {
            if (!Skill.Ready)
            {
                return;
            }

            if (sprite is Aisling && Skill.Ready)
            {
                var client = (sprite as Aisling).Client;
                client.TrainSkill(Skill);

                if (client.Aisling != null && !client.Aisling.Dead)
                {
                    var success = Skill.RollDice(rand);

                    if (success)
                    {
                        OnSuccess(sprite);
                    }
                    else
                    {
                        OnFailed(sprite);
                    }
                }
            }
            else
            {
                var target = sprite.Target;
                if (target == null)
                {
                    return;
                }

                if (target is Aisling)
                {
                    var debuff = new debuff_frozen();
                    {
                        if (!target.HasDebuff(debuff.Name))
                        {
                            Apply((target as Aisling)?.Client, debuff, target);
                        }
                    }
                }
            }
        }
        public override void OnSuccess(Sprite sprite)
        {
            var collided = false;

            var action = new ServerFormat1A
            {
                Serial = sprite.Serial,
                Number = 0x82,
                Speed  = 20
            };

            var    debuff = new debuff_frozen();
            Sprite t      = null;

            for (var i = 0; i < 5; i++)
            {
                var targets = sprite.GetInfront(i, true);
                var hits    = 0;
                foreach (var target in targets)
                {
                    if (target.Serial == sprite.Serial)
                    {
                        continue;
                    }

                    if (target != null)
                    {
                        if (sprite is Aisling aisling)
                        {
                            var position = target.Position;

                            if (sprite.Direction == 0)
                            {
                                position.Y++;
                            }
                            if (sprite.Direction == 1)
                            {
                                position.X--;
                            }
                            if (sprite.Direction == 2)
                            {
                                position.Y--;
                            }
                            if (sprite.Direction == 3)
                            {
                                position.X++;
                            }


                            aisling.Client.WarpTo(position);
                        }
                    }

                    t = target;
                    hits++;
                }

                if (hits > 0)
                {
                    if (t != null)
                    {
                        t.RemoveDebuff("sleep");
                        t.RemoveDebuff("frozen");

                        if (!t.HasDebuff(debuff.Name))
                        {
                            sprite.Show(Scope.NearbyAislings, action);
                            t.ApplyDamage(sprite, 0, false, Skill.Template.Sound);
                            debuff.OnApplied(t, debuff);
                        }
                    }

                    collided = true;
                    break;
                }
            }

            Task.Delay(50).ContinueWith(dc =>
            {
                if (Target != null && collided)
                {
                    if (Target is Monster || Target is Mundane || Target is Aisling)
                    {
                        Target.Show(Scope.NearbyAislings,
                                    new ServerFormat29((uint)sprite.Serial, (uint)Target.Serial,
                                                       Skill.Template.TargetAnimation, 0, 100));
                    }


                    sprite.Show(Scope.NearbyAislings, action);
                }
            }).Wait();
        }