diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 8070d0f0..bacd3b46 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -870,40 +870,40 @@ namespace TShockAPI if (args.Player.Index != owner) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (dmg > 175) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (TShock.CheckIgnores(args.Player)) { - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (TShock.CheckProjectilePermission(args.Player, index, type)) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (args.Player.ProjectileThreshold >= TShock.Config.ProjectileThreshold) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000) { - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } @@ -938,26 +938,26 @@ namespace TShockAPI if (args.Player.Index != Main.projectile[index].owner) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (TShock.CheckIgnores(args.Player)) { - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if (TShock.CheckProjectilePermission(args.Player, index, type)) { args.Player.LastThreat = DateTime.UtcNow; - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000) { - args.Player.SendData(PacketTypes.ProjectileNew, "", index); + args.Player.RemoveProjectile(ident, owner); return true; } diff --git a/TShockAPI/Net/ProjectileRemoveMsg.cs b/TShockAPI/Net/ProjectileRemoveMsg.cs new file mode 100644 index 00000000..c4c68f34 --- /dev/null +++ b/TShockAPI/Net/ProjectileRemoveMsg.cs @@ -0,0 +1,35 @@ +using System.IO; +using System.IO.Streams; + +namespace TShockAPI.Net +{ + public class ProjectileRemoveMsg : BaseMsg + { + public override PacketTypes ID + { + get + { + return PacketTypes.ProjectileNew; + } + } + + public short Index { get; set; } + public byte Owner { get; set; } + + public override void Pack(Stream stream) + { + stream.WriteInt16(Index); + stream.WriteSingle(-1); + stream.WriteSingle(-1); + stream.WriteSingle(0); + stream.WriteSingle(0); + stream.WriteSingle(0); + stream.WriteInt16(0); + stream.WriteByte(Owner); + stream.WriteByte(0); + stream.WriteSingle(0); + stream.WriteSingle(0); + stream.WriteSingle(0); + } + } +} diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 4d07ba8b..91b88cc8 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -281,6 +281,20 @@ namespace TShockAPI } } + public void RemoveProjectile(int index, int owner) + { + using (var ms = new MemoryStream()) + { + var msg = new ProjectileRemoveMsg() + { + Index = (short)index, + Owner = (byte)owner + }; + msg.PackFull(ms); + SendRawData(ms.ToArray()); + } + } + public virtual bool SendTileSquare(int x, int y, int size = 10) { try diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index dbdb91bc..6149414f 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -107,6 +107,7 @@ + @@ -182,7 +183,7 @@ - +