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