From 2f005966f9e471372786e863da5b7acac497e037 Mon Sep 17 00:00:00 2001 From: Mark Sturgill Date: Sat, 15 Feb 2014 13:52:03 -0700 Subject: [PATCH] move stuckmenu methods from core mobile to PlayerMobile take advantage of IEntity/Parent refactor in a few trivial places --- Scripts/Engines/Help/HelpGump.cs | 2 +- Scripts/Engines/Help/StuckMenu.cs | 4 +- Scripts/Mobiles/PlayerMobile.cs | 77 ++++++++++++++++++++++++++++++- Server/Item.cs | 14 +++--- Server/Mobile.cs | 77 ++++++------------------------- 5 files changed, 101 insertions(+), 73 deletions(-) diff --git a/Scripts/Engines/Help/HelpGump.cs b/Scripts/Engines/Help/HelpGump.cs index 2fba14603..6d28ba7e6 100644 --- a/Scripts/Engines/Help/HelpGump.cs +++ b/Scripts/Engines/Help/HelpGump.cs @@ -239,7 +239,7 @@ namespace Server.Engines.Help { from.SendLocalizedMessage( 1061632 ); // You can't do that while carrying the sigil. } - else if ( from.CanUseStuckMenu() && from.Region.CanUseStuckMenu( from ) && !CheckCombat( from ) && !from.Frozen && !from.Criminal && (Core.AOS || from.Kills < 5) ) + else if ( from is PlayerMobile && ((PlayerMobile)from).CanUseStuckMenu() && from.Region.CanUseStuckMenu( from ) && !CheckCombat( from ) && !from.Frozen && !from.Criminal && (Core.AOS || from.Kills < 5) ) { StuckMenu menu = new StuckMenu( from, from, true ); diff --git a/Scripts/Engines/Help/StuckMenu.cs b/Scripts/Engines/Help/StuckMenu.cs index 32b07a2e3..7eb674ec3 100644 --- a/Scripts/Engines/Help/StuckMenu.cs +++ b/Scripts/Engines/Help/StuckMenu.cs @@ -1,4 +1,5 @@ using System; +using Server.Mobiles; using Server.Network; using Server.Gumps; @@ -203,7 +204,8 @@ namespace Server.Menus.Questions new TeleportTimer( m_Mobile, entry, TimeSpan.FromSeconds( 10.0 + (Utility.RandomDouble() * 110.0) ) ).Start(); - m_Mobile.UsedStuckMenu(); + if (m_Mobile is PlayerMobile) + ((PlayerMobile)m_Mobile).UsedStuckMenu(); } else { diff --git a/Scripts/Mobiles/PlayerMobile.cs b/Scripts/Mobiles/PlayerMobile.cs index 7f7e97cac..4ea4269cb 100644 --- a/Scripts/Mobiles/PlayerMobile.cs +++ b/Scripts/Mobiles/PlayerMobile.cs @@ -2936,6 +2936,47 @@ namespace Server.Mobiles } } + #region Stuck Menu + private DateTime[] m_StuckMenuUses; + + public bool CanUseStuckMenu() + { + if (m_StuckMenuUses == null) + { + return true; + } + else + { + for (int i = 0; i < m_StuckMenuUses.Length; ++i) + { + if ((DateTime.UtcNow - m_StuckMenuUses[i]) > TimeSpan.FromDays(1.0)) + { + return true; + } + } + + return false; + } + } + + public void UsedStuckMenu() + { + if (m_StuckMenuUses == null) + { + m_StuckMenuUses = new DateTime[2]; + } + + for (int i = 0; i < m_StuckMenuUses.Length; ++i) + { + if ((DateTime.UtcNow - m_StuckMenuUses[i]) > TimeSpan.FromDays(1.0)) + { + m_StuckMenuUses[i] = DateTime.UtcNow; + return; + } + } + } + #endregion + private List m_PermaFlags; private List m_VisList; private Hashtable m_AntiMacroTable; @@ -3310,6 +3351,24 @@ namespace Server.Mobiles switch ( version ) { + case 29: + { + if (reader.ReadBool()) + { + m_StuckMenuUses = new DateTime[reader.ReadInt()]; + + for (int i = 0; i < m_StuckMenuUses.Length; ++i) + { + m_StuckMenuUses[i] = reader.ReadDateTime(); + } + } + else + { + m_StuckMenuUses = null; + } + + goto case 28; + } case 28: { m_PeacedUntil = reader.ReadDateTime(); @@ -3601,7 +3660,23 @@ namespace Server.Mobiles base.Serialize( writer ); - writer.Write( (int) 28 ); // version + writer.Write( (int) 29 ); // version + + if (m_StuckMenuUses != null) + { + writer.Write(true); + + writer.Write(m_StuckMenuUses.Length); + + for (int i = 0; i < m_StuckMenuUses.Length; ++i) + { + writer.Write(m_StuckMenuUses[i]); + } + } + else + { + writer.Write(false); + } writer.Write( (DateTime) m_PeacedUntil ); writer.Write( (DateTime) m_AnkhNextUse ); diff --git a/Server/Item.cs b/Server/Item.cs index ff7392285..9ed54ae7c 100644 --- a/Server/Item.cs +++ b/Server/Item.cs @@ -1151,7 +1151,11 @@ namespace Server { IEntity parent = bounce.m_Parent; - if ( parent is Item && !((Item)parent).Deleted ) + if (parent.Deleted) + { + MoveToWorld(bounce.m_WorldLoc, bounce.m_Map); + } + else if ( parent is Item ) { Item p = (Item)parent; IEntity root = p.RootParent; @@ -1165,7 +1169,7 @@ namespace Server MoveToWorld( from.Location, from.Map ); } } - else if ( parent is Mobile && !((Mobile)parent).Deleted ) + else if ( parent is Mobile ) { if ( !((Mobile)parent).EquipItem( this ) ) MoveToWorld( bounce.m_WorldLoc, bounce.m_Map ); @@ -2157,10 +2161,8 @@ namespace Server if ( GetSaveFlag( flags, SaveFlag.Parent ) ) { - if ( m_Parent is Mobile && !( (Mobile) m_Parent ).Deleted ) - writer.Write( ( (Mobile) m_Parent ).Serial ); - else if ( m_Parent is Item && !( (Item) m_Parent ).Deleted ) - writer.Write( ( (Item) m_Parent ).Serial ); + if (m_Parent != null && !m_Parent.Deleted) + writer.Write(m_Parent.Serial); else writer.Write( (int) Serial.MinusOne ); } diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 7b5e14d9d..ea7802f9f 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -749,7 +749,6 @@ namespace Server private bool m_DisplayGuildTitle; private Mobile m_GuildFealty; private long m_NextSpellTime; - private DateTime[] m_StuckMenuUses; private Timer m_ExpireCombatant; private Timer m_ExpireCriminal; private Timer m_ExpireAggrTimer; @@ -3502,26 +3501,6 @@ namespace Server this.Region.OnCriminalAction( this, message ); } - public virtual bool CanUseStuckMenu() - { - if( m_StuckMenuUses == null ) - { - return true; - } - else - { - for( int i = 0; i < m_StuckMenuUses.Length; ++i ) - { - if( (DateTime.UtcNow - m_StuckMenuUses[i]) > TimeSpan.FromDays( 1.0 ) ) - { - return true; - } - } - - return false; - } - } - public virtual bool IsSnoop( Mobile from ) { return (from != this); @@ -5415,23 +5394,6 @@ namespace Server { } - public void UsedStuckMenu() - { - if( m_StuckMenuUses == null ) - { - m_StuckMenuUses = new DateTime[2]; - } - - for( int i = 0; i < m_StuckMenuUses.Length; ++i ) - { - if( (DateTime.UtcNow - m_StuckMenuUses[i]) > TimeSpan.FromDays( 1.0 ) ) - { - m_StuckMenuUses[i] = DateTime.UtcNow; - return; - } - } - } - [CommandProperty( AccessLevel.GameMaster )] public bool Squelched { @@ -5451,6 +5413,11 @@ namespace Server switch( version ) { + case 32: + { + // Removed StuckMenu + goto case 31; + } case 31: { m_LastStrGain = reader.ReadDeltaTime(); @@ -5714,19 +5681,17 @@ namespace Server m_StatMods = new List(); m_SkillMods = new List(); - if( reader.ReadBool() ) + if (version < 32) { - m_StuckMenuUses = new DateTime[reader.ReadInt()]; - - for( int i = 0; i < m_StuckMenuUses.Length; ++i ) + if (reader.ReadBool()) { - m_StuckMenuUses[i] = reader.ReadDateTime(); + int count = reader.ReadInt(); + for (int i = 0; i < count; ++i) + { + reader.ReadDateTime(); + } } } - else - { - m_StuckMenuUses = null; - } if( m_Player && m_Map != Map.Internal ) { @@ -5883,7 +5848,7 @@ namespace Server public virtual void Serialize( GenericWriter writer ) { - writer.Write( (int)31 ); // version + writer.Write( (int)32 ); // version writer.WriteDeltaTime( m_LastStrGain ); writer.WriteDeltaTime( m_LastIntGain ); @@ -6001,22 +5966,6 @@ namespace Server writer.Write( (byte)m_StrLock ); writer.Write( (byte)m_DexLock ); writer.Write( (byte)m_IntLock ); - - if( m_StuckMenuUses != null ) - { - writer.Write( true ); - - writer.Write( m_StuckMenuUses.Length ); - - for( int i = 0; i < m_StuckMenuUses.Length; ++i ) - { - writer.Write( m_StuckMenuUses[i] ); - } - } - else - { - writer.Write( false ); - } } [CommandProperty( AccessLevel.GameMaster )]