public override void Attack() { Owner.CurrentSkill = new Skill((ushort)Owner.MagicType, 0, 0); //Thunder ScreenSystem.Send(Owner, MsgInteract.Create(Owner, Owner.CurrentTarget, MsgInteractType.Magic, 133337)); ScreenSystem.Send(Owner, MsgMagicEffect.Create(Owner, Owner.CurrentTarget, 133337)); Owner.LastAttack = DateTime.UtcNow; Owner.CurrentTarget.GetHit(Owner, 133337); }
public static void ExecuteAttack(Player player, Vector2 targetLocation) { if (!CostCovered(player)) { return; } var targets = GetTargets(player, targetLocation, player.CurrentSkill.Info.Type).ToArray(); foreach (var kvp in targets) { switch (MagicTypeHelper.Convert(player.CurrentSkill.Info.Type)) { case UseType.Damage: kvp.Item1.GetHit(player, kvp.Item2); break; case UseType.Heal: kvp.Item1.GetHealed(player, kvp.Item2); break; case UseType.Buff: if (!ScriptEngine.Scripts.TryGetValue(ScriptType.SkillUsage, out var script)) { continue; } if (script.Execute(kvp.Item1, player.CurrentSkill)) { kvp.Item1.GetBuffed(player, 0); } else { Output.WriteLine($"Unknown Skill: {player.CurrentSkill.Id} | Lv: {player.CurrentSkill.Info.Level}"); } break; default: Message.SendTo(player, $"Magic Attack Fail: {player.CurrentSkill.Info.Type} -> {MagicTypeHelper.Convert(player.CurrentSkill.Info.Type)}", MsgTextType.Talk); break; } } foreach (var packet in MsgMagicEffect.Create(player, targets)) { ScreenSystem.Send(player, packet, true); } }