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 @@
-
+