From 893b42c3bf6d0f641b227540e52b96d9ae893943 Mon Sep 17 00:00:00 2001 From: Mark Sturgill Date: Wed, 2 Oct 2013 03:07:28 -0700 Subject: [PATCH] implement client bandage macro handler fix non-opl paragon chest container property display --- Scripts/Items/Containers/ParagonChest.cs | 1 + Scripts/Items/Skill Items/Misc/Bandage.cs | 36 +++++++++++++++++++++++ Server/EventSink.cs | 27 +++++++++++++++++ Server/Network/PacketHandlers.cs | 30 +++++++++++++++++++ 4 files changed, 94 insertions(+) diff --git a/Scripts/Items/Containers/ParagonChest.cs b/Scripts/Items/Containers/ParagonChest.cs index e7bc80394..15375791b 100644 --- a/Scripts/Items/Containers/ParagonChest.cs +++ b/Scripts/Items/Containers/ParagonChest.cs @@ -35,6 +35,7 @@ namespace Server.Items public override void OnSingleClick( Mobile from ) { + base.OnSingleClick(from); LabelTo( from, 1063449, m_Name ); } diff --git a/Scripts/Items/Skill Items/Misc/Bandage.cs b/Scripts/Items/Skill Items/Misc/Bandage.cs index a073dc79d..fc05623e1 100644 --- a/Scripts/Items/Skill Items/Misc/Bandage.cs +++ b/Scripts/Items/Skill Items/Misc/Bandage.cs @@ -18,6 +18,11 @@ namespace Server.Items get { return 0.1; } } + public static void Initialize() + { + EventSink.BandageTargetRequest += new BandageTargetRequestEventHandler(EventSink_BandageTargetRequest); + } + [Constructable] public Bandage() : this( 1 ) { @@ -74,6 +79,37 @@ namespace Server.Items } } + private static void EventSink_BandageTargetRequest(BandageTargetRequestEventArgs e) + { + Bandage b = e.Bandage as Bandage; + + if (b == null || b.Deleted) + return; + + Mobile from = e.Mobile; + + if (from.InRange(b.GetWorldLocation(), Range)) + { + Target t = from.Target; + + if (t != null) + { + Target.Cancel(from); + from.Target = null; + } + + from.RevealingAction(); + + from.SendLocalizedMessage(500948); // Who will you use the bandages on? + + new InternalTarget(b).Invoke(from, e.Target); + } + else + { + from.SendLocalizedMessage(500295); // You are too far away to do that. + } + } + private class InternalTarget : Target { private Bandage m_Bandage; diff --git a/Server/EventSink.cs b/Server/EventSink.cs index a357a0435..3838cb4b1 100644 --- a/Server/EventSink.cs +++ b/Server/EventSink.cs @@ -46,6 +46,7 @@ namespace Server public delegate void StunRequestEventHandler( StunRequestEventArgs e ); public delegate void OpenSpellbookRequestEventHandler( OpenSpellbookRequestEventArgs e ); public delegate void CastSpellRequestEventHandler( CastSpellRequestEventArgs e ); + public delegate void BandageTargetRequestEventHandler( BandageTargetRequestEventArgs e ); public delegate void AnimateRequestEventHandler( AnimateRequestEventArgs e ); public delegate void LogoutEventHandler( LogoutEventArgs e ); public delegate void SocketConnectEventHandler( SocketConnectEventArgs e ); @@ -464,6 +465,24 @@ namespace Server } } + public class BandageTargetRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + private Item m_Bandage; + private Mobile m_Target; + + public Mobile Mobile { get { return m_Mobile; } } + public Item Bandage { get { return m_Bandage; } } + public Mobile Target { get { return m_Target; } } + + public BandageTargetRequestEventArgs(Mobile m, Item bandage, Mobile target) + { + m_Mobile = m; + m_Bandage = bandage; + m_Target = target; + } + } + public class OpenSpellbookRequestEventArgs : EventArgs { private Mobile m_Mobile; @@ -805,6 +824,7 @@ namespace Server public static event StunRequestEventHandler StunRequest; public static event OpenSpellbookRequestEventHandler OpenSpellbookRequest; public static event CastSpellRequestEventHandler CastSpellRequest; + public static event BandageTargetRequestEventHandler BandageTargetRequest; public static event AnimateRequestEventHandler AnimateRequest; public static event LogoutEventHandler Logout; public static event SocketConnectEventHandler SocketConnect; @@ -998,6 +1018,12 @@ namespace Server CastSpellRequest( e ); } + public static void InvokeBandageTargetRequest( BandageTargetRequestEventArgs e ) + { + if ( BandageTargetRequest != null ) + BandageTargetRequest( e ); + } + public static void InvokeOpenSpellbookRequest( OpenSpellbookRequestEventArgs e ) { if ( OpenSpellbookRequest != null ) @@ -1104,6 +1130,7 @@ namespace Server StunRequest = null; OpenSpellbookRequest = null; CastSpellRequest = null; + BandageTargetRequest = null; AnimateRequest = null; Logout = null; SocketConnect = null; diff --git a/Server/Network/PacketHandlers.cs b/Server/Network/PacketHandlers.cs index d0de10181..49dc31968 100644 --- a/Server/Network/PacketHandlers.cs +++ b/Server/Network/PacketHandlers.cs @@ -168,6 +168,7 @@ namespace Server.Network RegisterExtended( 0x1A, true, new OnPacketReceive( StatLockChange ) ); RegisterExtended( 0x1C, true, new OnPacketReceive( CastSpell ) ); RegisterExtended( 0x24, false, new OnPacketReceive( UnhandledBF ) ); + RegisterExtended( 0x2C, true, new OnPacketReceive( BandageTarget ) ); RegisterEncoded( 0x19, true, new OnEncodedPacketReceive( SetAbility ) ); RegisterEncoded( 0x28, true, new OnEncodedPacketReceive( GuildGumpRequest ) ); @@ -1619,6 +1620,35 @@ namespace Server.Network EventSink.InvokeCastSpellRequest( new CastSpellRequestEventArgs( from, spellID, spellbook ) ); } + public static void BandageTarget(NetState state, PacketReader pvSrc) + { + Mobile from = state.Mobile; + + if (from == null) + return; + + if (from.AccessLevel >= AccessLevel.Counselor || DateTime.Now >= from.NextActionTime) + { + Item bandage = World.FindItem(pvSrc.ReadInt32()); + + if (bandage == null) + return; + + Mobile target = World.FindMobile(pvSrc.ReadInt32()); + + if (target == null) + return; + + EventSink.InvokeBandageTargetRequest(new BandageTargetRequestEventArgs(from, bandage, target)); + + from.NextActionTime = DateTime.Now + Mobile.ActionDelay; + } + else + { + from.SendActionMessage(); + } + } + public static void BatchQueryProperties( NetState state, PacketReader pvSrc ) { if ( !ObjectPropertyList.Enabled )