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