From bd7b1c1460609d471b5dd22b42f2a7e7ea0301db Mon Sep 17 00:00:00 2001
From: tru321 <84877585+tru321@users.noreply.github.com>
Date: Wed, 8 Dec 2021 11:05:33 +0800
Subject: [PATCH] Update GetDataHandlers.cs
---
TShockAPI/GetDataHandlers.cs | 74 ++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index bf0fb54e..4e1ae400 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -135,6 +135,7 @@ namespace TShockAPI
{ PacketTypes.Teleport, HandleTeleport },
{ PacketTypes.PlayerHealOther, HandleHealOther },
{ PacketTypes.CatchNPC, HandleCatchNpc },
+ { PacketTypes.ReleaseNPC, HandleReleaseNpc },
{ PacketTypes.TeleportationPotion, HandleTeleportationPotion },
{ PacketTypes.CompleteAnglerQuest, HandleCompleteAnglerQuest },
{ PacketTypes.NumberOfAnglerQuestsCompleted, HandleNumberOfAnglerQuestsCompleted },
@@ -1638,6 +1639,56 @@ namespace TShockAPI
return args.Handled;
}
+ ///
+ /// The ReleaseNPC event arguments
+ ///
+ public class ReleaseNpcEventArgs : GetDataHandledEventArgs
+ {
+ ///
+ /// The X value of where NPC released
+ ///
+ public int X { get; set; }
+
+ ///
+ /// The Y value of where NPC released
+ ///
+ public int Y { get; set; }
+
+ ///
+ /// The NPC Type that player release
+ ///
+ public short Type { get; set; }
+
+ ///
+ /// The NPC release style
+ ///
+ public byte Style { get; set; }
+ }
+
+ ///
+ /// Called when player release a NPC, for checking critter released from item.
+ ///
+ public static HandlerList ReleaseNPC = new HandlerList();
+ private static bool OnReleaseNpc(TSPlayer player, MemoryStream data, int _x, int _y, short _type, byte _style)
+ {
+ if (ReleaseNPC == null)
+ {
+ return false;
+ }
+
+ var args = new ReleaseNpcEventArgs
+ {
+ Player = player,
+ Data = data,
+ X = _x,
+ Y = _y,
+ Type = _type,
+ Style = _style
+ };
+ ReleaseNPC.Invoke(null, args);
+ return args.Handled;
+ }
+
/// The arguments to the PlaceObject hook.
public class PlaceObjectEventArgs : GetDataHandledEventArgs
{
@@ -3658,10 +3709,33 @@ namespace TShockAPI
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, npcID);
return true;
}
+
+ if(args.Player.IsBeingDisabled())
+ {
+ TShock.Log.ConsoleDebug("GetDataHandlers / HandleCatchNpc rejected catch npc {0}", args.Player.Name);
+ Main.npc[npcID].active = true;
+ NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, npcID);
+ return true;
+ }
return false;
}
+ private static bool HandleReleaseNpc(GetDataHandlerArgs args)
+ {
+ var x = args.Data.ReadInt32();
+ var y = args.Data.ReadInt32();
+ var type = args.Data.ReadInt16();
+ var style = args.Data.ReadInt8();
+
+ if (OnReleaseNpc(args.Player, args.Data, x, y, type, style))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
private static bool HandleTeleportationPotion(GetDataHandlerArgs args)
{
var type = args.Data.ReadByte();