From bd8dc7168f6404ca00a018f93780cbb85a038f07 Mon Sep 17 00:00:00 2001 From: "xavier@runuo.com" Date: Mon, 11 Mar 2013 14:49:19 +0000 Subject: [PATCH] prevent null ref --- Scripts/Engines/MLQuests/Items/Teleporters.cs | 449 +++++++++--------- 1 file changed, 226 insertions(+), 223 deletions(-) diff --git a/Scripts/Engines/MLQuests/Items/Teleporters.cs b/Scripts/Engines/MLQuests/Items/Teleporters.cs index a778ebee2..275fb588f 100644 --- a/Scripts/Engines/MLQuests/Items/Teleporters.cs +++ b/Scripts/Engines/MLQuests/Items/Teleporters.cs @@ -1,223 +1,226 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Server; -using Server.Items; -using Server.Mobiles; - -namespace Server.Engines.MLQuests.Items -{ - public class MLQuestTeleporter : Teleporter - { - private MLQuest m_RequiredQuest; - private TextDefinition m_Message; - - [CommandProperty( AccessLevel.GameMaster )] - public MLQuest RequiredQuest - { - get { return m_RequiredQuest; } - // Needs work for in-game - set { m_RequiredQuest = value; InvalidateProperties(); } - } - - [CommandProperty( AccessLevel.GameMaster )] - public TextDefinition Message - { - get { return m_Message; } - set { m_Message = value; } - } - - [Constructable] - public MLQuestTeleporter() - : this( Point3D.Zero, null, null, null ) - { - } - - [Constructable] - public MLQuestTeleporter( Point3D pointDest, Map mapDest ) - : this( pointDest, mapDest, null, null ) - { - } - - [Constructable] - public MLQuestTeleporter( Point3D pointDest, Map mapDest, MLQuest quest, TextDefinition message ) - : base( pointDest, mapDest ) - { - m_RequiredQuest = quest; - m_Message = message; - } - - public override bool CanTeleport( Mobile m ) - { - if ( !base.CanTeleport( m ) ) - return false; - - if ( m_RequiredQuest != null ) - { - PlayerMobile pm = m as PlayerMobile; - - if ( pm == null ) - return false; - - MLQuestContext context = MLQuestSystem.GetContext( pm ); - - if ( context == null || ( !context.IsDoingQuest( m_RequiredQuest ) && !context.HasDoneQuest( m_RequiredQuest ) ) ) - { - TextDefinition.SendMessageTo( m, m_Message ); - return false; - } - } - - return true; - } - - public override void GetProperties( ObjectPropertyList list ) - { - base.GetProperties( list ); - - if ( m_RequiredQuest != null ) - list.Add( String.Format( "Required quest: {0}", m_RequiredQuest ) ); - } - - public MLQuestTeleporter( Serial serial ) - : base( serial ) - { - } - - public override void Serialize( GenericWriter writer ) - { - base.Serialize( writer ); - - writer.Write( (int) 0 ); // version - - MLQuestSystem.WriteQuestRef( writer, m_RequiredQuest ); - TextDefinition.Serialize( writer, m_Message ); - } - - public override void Deserialize( GenericReader reader ) - { - base.Deserialize( reader ); - - int version = reader.ReadInt(); - - m_RequiredQuest = MLQuestSystem.ReadQuestRef( reader ); - m_Message = TextDefinition.Deserialize( reader ); - } - } - - public interface ITicket - { - void OnTicketUsed( Mobile from ); - } - - public class TicketTeleporter : Teleporter - { - private Type m_TicketType; - private TextDefinition m_Message; - - [CommandProperty( AccessLevel.GameMaster )] - public Type TicketType - { - get { return m_TicketType; } - set { m_TicketType = value; InvalidateProperties(); } - } - - [CommandProperty( AccessLevel.GameMaster )] - public TextDefinition Message - { - get { return m_Message; } - set { m_Message = value; } - } - - [Constructable] - public TicketTeleporter() - : this( Point3D.Zero, null, null, null ) - { - } - - [Constructable] - public TicketTeleporter( Point3D pointDest, Map mapDest ) - : this( pointDest, mapDest, null, null ) - { - } - - [Constructable] - public TicketTeleporter( Point3D pointDest, Map mapDest, Type ticketType, TextDefinition message ) - : base( pointDest, mapDest ) - { - m_TicketType = ticketType; - m_Message = message; - } - - public override bool CanTeleport( Mobile m ) - { - if ( !base.CanTeleport( m ) ) - return false; - - if ( m_TicketType != null ) - { - Item ticket = null; - Container pack = m.Backpack; - - if ( pack != null ) - ticket = pack.FindItemByType( m_TicketType, false ); // Check (top level) backpack - - if ( ticket == null ) - { - foreach ( Item item in m.Items ) // Check paperdoll - { - if ( m_TicketType.IsAssignableFrom( item.GetType() ) ) - { - ticket = item; - break; - } - } - } - - if ( ticket == null ) - { - TextDefinition.SendMessageTo( m, m_Message ); - return false; - } - - if ( ticket is ITicket ) - ((ITicket)ticket).OnTicketUsed( m ); - } - - return true; - } - - public override void GetProperties( ObjectPropertyList list ) - { - base.GetProperties( list ); - - if ( m_TicketType != null ) - list.Add( String.Format( "Required ticket: {0}", m_TicketType.Name ) ); - } - - public TicketTeleporter( Serial serial ) - : base( serial ) - { - } - - public override void Serialize( GenericWriter writer ) - { - base.Serialize( writer ); - - writer.Write( (int)0 ); // version - - writer.Write( m_TicketType.FullName ); - TextDefinition.Serialize( writer, m_Message ); - } - - public override void Deserialize( GenericReader reader ) - { - base.Deserialize( reader ); - - int version = reader.ReadInt(); - - m_TicketType = ScriptCompiler.FindTypeByFullName( reader.ReadString(), false ); - m_Message = TextDefinition.Deserialize( reader ); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Engines.MLQuests.Items +{ + public class MLQuestTeleporter : Teleporter + { + private MLQuest m_RequiredQuest; + private TextDefinition m_Message; + + [CommandProperty( AccessLevel.GameMaster )] + public MLQuest RequiredQuest + { + get { return m_RequiredQuest; } + // Needs work for in-game + set { m_RequiredQuest = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TextDefinition Message + { + get { return m_Message; } + set { m_Message = value; } + } + + [Constructable] + public MLQuestTeleporter() + : this( Point3D.Zero, null, null, null ) + { + } + + [Constructable] + public MLQuestTeleporter( Point3D pointDest, Map mapDest ) + : this( pointDest, mapDest, null, null ) + { + } + + [Constructable] + public MLQuestTeleporter( Point3D pointDest, Map mapDest, MLQuest quest, TextDefinition message ) + : base( pointDest, mapDest ) + { + m_RequiredQuest = quest; + m_Message = message; + } + + public override bool CanTeleport( Mobile m ) + { + if ( !base.CanTeleport( m ) ) + return false; + + if ( m_RequiredQuest != null ) + { + PlayerMobile pm = m as PlayerMobile; + + if ( pm == null ) + return false; + + MLQuestContext context = MLQuestSystem.GetContext( pm ); + + if ( context == null || ( !context.IsDoingQuest( m_RequiredQuest ) && !context.HasDoneQuest( m_RequiredQuest ) ) ) + { + TextDefinition.SendMessageTo( m, m_Message ); + return false; + } + } + + return true; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_RequiredQuest != null ) + list.Add( String.Format( "Required quest: {0}", m_RequiredQuest ) ); + } + + public MLQuestTeleporter( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + MLQuestSystem.WriteQuestRef( writer, m_RequiredQuest ); + TextDefinition.Serialize( writer, m_Message ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_RequiredQuest = MLQuestSystem.ReadQuestRef( reader ); + m_Message = TextDefinition.Deserialize( reader ); + } + } + + public interface ITicket + { + void OnTicketUsed( Mobile from ); + } + + public class TicketTeleporter : Teleporter + { + private Type m_TicketType; + private TextDefinition m_Message; + + [CommandProperty( AccessLevel.GameMaster )] + public Type TicketType + { + get { return m_TicketType; } + set { m_TicketType = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TextDefinition Message + { + get { return m_Message; } + set { m_Message = value; } + } + + /* set default config to prevent null ref @ serialize due to uninitialized data */ + + [Constructable] + public TicketTeleporter() + : this( new Point3D( 6223, 336, 60 ), Map.Trammel ) + { + } + + [Constructable] + public TicketTeleporter( Point3D pointDest, Map mapDest ) + : this( pointDest, mapDest, typeof( AcidProofRope ), 1074272 ) + { + } + + [Constructable] + public TicketTeleporter( Point3D pointDest, Map mapDest, Type ticketType, TextDefinition message ) + : base( pointDest, mapDest ) + { + m_TicketType = ticketType; + m_Message = message; + } + + public override bool CanTeleport( Mobile m ) + { + if ( !base.CanTeleport( m ) ) + return false; + + if ( m_TicketType != null ) + { + Item ticket = null; + Container pack = m.Backpack; + + if ( pack != null ) + ticket = pack.FindItemByType( m_TicketType, false ); // Check (top level) backpack + + if ( ticket == null ) + { + foreach ( Item item in m.Items ) // Check paperdoll + { + if ( m_TicketType.IsAssignableFrom( item.GetType() ) ) + { + ticket = item; + break; + } + } + } + + if ( ticket == null ) + { + TextDefinition.SendMessageTo( m, m_Message ); + return false; + } + + if ( ticket is ITicket ) + ((ITicket)ticket).OnTicketUsed( m ); + } + + return true; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_TicketType != null ) + list.Add( String.Format( "Required ticket: {0}", m_TicketType.Name ) ); + } + + public TicketTeleporter( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + + writer.Write( m_TicketType.FullName ); + TextDefinition.Serialize( writer, m_Message ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_TicketType = ScriptCompiler.FindTypeByFullName( reader.ReadString(), false ); + m_Message = TextDefinition.Deserialize( reader ); + } + } +} +