move stuckmenu methods from core mobile to PlayerMobile

take advantage of IEntity/Parent refactor in a few trivial places
This commit is contained in:
Mark Sturgill 2014-02-15 13:52:03 -07:00
parent 12826da7c4
commit 2f005966f9
5 changed files with 101 additions and 73 deletions

View file

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

View file

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

View file

@ -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<Mobile> m_PermaFlags;
private List<Mobile> 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 );

View file

@ -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 );
}

View file

@ -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<StatMod>();
m_SkillMods = new List<SkillMod>();
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 )]