prevent null ref

This commit is contained in:
xavier@runuo.com 2013-03-11 14:49:19 +00:00
parent 8690feea0a
commit bd8dc7168f

View file

@ -1,223 +1,226 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Server; using Server;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
namespace Server.Engines.MLQuests.Items namespace Server.Engines.MLQuests.Items
{ {
public class MLQuestTeleporter : Teleporter public class MLQuestTeleporter : Teleporter
{ {
private MLQuest m_RequiredQuest; private MLQuest m_RequiredQuest;
private TextDefinition m_Message; private TextDefinition m_Message;
[CommandProperty( AccessLevel.GameMaster )] [CommandProperty( AccessLevel.GameMaster )]
public MLQuest RequiredQuest public MLQuest RequiredQuest
{ {
get { return m_RequiredQuest; } get { return m_RequiredQuest; }
// Needs work for in-game // Needs work for in-game
set { m_RequiredQuest = value; InvalidateProperties(); } set { m_RequiredQuest = value; InvalidateProperties(); }
} }
[CommandProperty( AccessLevel.GameMaster )] [CommandProperty( AccessLevel.GameMaster )]
public TextDefinition Message public TextDefinition Message
{ {
get { return m_Message; } get { return m_Message; }
set { m_Message = value; } set { m_Message = value; }
} }
[Constructable] [Constructable]
public MLQuestTeleporter() public MLQuestTeleporter()
: this( Point3D.Zero, null, null, null ) : this( Point3D.Zero, null, null, null )
{ {
} }
[Constructable] [Constructable]
public MLQuestTeleporter( Point3D pointDest, Map mapDest ) public MLQuestTeleporter( Point3D pointDest, Map mapDest )
: this( pointDest, mapDest, null, null ) : this( pointDest, mapDest, null, null )
{ {
} }
[Constructable] [Constructable]
public MLQuestTeleporter( Point3D pointDest, Map mapDest, MLQuest quest, TextDefinition message ) public MLQuestTeleporter( Point3D pointDest, Map mapDest, MLQuest quest, TextDefinition message )
: base( pointDest, mapDest ) : base( pointDest, mapDest )
{ {
m_RequiredQuest = quest; m_RequiredQuest = quest;
m_Message = message; m_Message = message;
} }
public override bool CanTeleport( Mobile m ) public override bool CanTeleport( Mobile m )
{ {
if ( !base.CanTeleport( m ) ) if ( !base.CanTeleport( m ) )
return false; return false;
if ( m_RequiredQuest != null ) if ( m_RequiredQuest != null )
{ {
PlayerMobile pm = m as PlayerMobile; PlayerMobile pm = m as PlayerMobile;
if ( pm == null ) if ( pm == null )
return false; return false;
MLQuestContext context = MLQuestSystem.GetContext( pm ); MLQuestContext context = MLQuestSystem.GetContext( pm );
if ( context == null || ( !context.IsDoingQuest( m_RequiredQuest ) && !context.HasDoneQuest( m_RequiredQuest ) ) ) if ( context == null || ( !context.IsDoingQuest( m_RequiredQuest ) && !context.HasDoneQuest( m_RequiredQuest ) ) )
{ {
TextDefinition.SendMessageTo( m, m_Message ); TextDefinition.SendMessageTo( m, m_Message );
return false; return false;
} }
} }
return true; return true;
} }
public override void GetProperties( ObjectPropertyList list ) public override void GetProperties( ObjectPropertyList list )
{ {
base.GetProperties( list ); base.GetProperties( list );
if ( m_RequiredQuest != null ) if ( m_RequiredQuest != null )
list.Add( String.Format( "Required quest: {0}", m_RequiredQuest ) ); list.Add( String.Format( "Required quest: {0}", m_RequiredQuest ) );
} }
public MLQuestTeleporter( Serial serial ) public MLQuestTeleporter( Serial serial )
: base( serial ) : base( serial )
{ {
} }
public override void Serialize( GenericWriter writer ) public override void Serialize( GenericWriter writer )
{ {
base.Serialize( writer ); base.Serialize( writer );
writer.Write( (int) 0 ); // version writer.Write( (int) 0 ); // version
MLQuestSystem.WriteQuestRef( writer, m_RequiredQuest ); MLQuestSystem.WriteQuestRef( writer, m_RequiredQuest );
TextDefinition.Serialize( writer, m_Message ); TextDefinition.Serialize( writer, m_Message );
} }
public override void Deserialize( GenericReader reader ) public override void Deserialize( GenericReader reader )
{ {
base.Deserialize( reader ); base.Deserialize( reader );
int version = reader.ReadInt(); int version = reader.ReadInt();
m_RequiredQuest = MLQuestSystem.ReadQuestRef( reader ); m_RequiredQuest = MLQuestSystem.ReadQuestRef( reader );
m_Message = TextDefinition.Deserialize( reader ); m_Message = TextDefinition.Deserialize( reader );
} }
} }
public interface ITicket public interface ITicket
{ {
void OnTicketUsed( Mobile from ); void OnTicketUsed( Mobile from );
} }
public class TicketTeleporter : Teleporter public class TicketTeleporter : Teleporter
{ {
private Type m_TicketType; private Type m_TicketType;
private TextDefinition m_Message; private TextDefinition m_Message;
[CommandProperty( AccessLevel.GameMaster )] [CommandProperty( AccessLevel.GameMaster )]
public Type TicketType public Type TicketType
{ {
get { return m_TicketType; } get { return m_TicketType; }
set { m_TicketType = value; InvalidateProperties(); } set { m_TicketType = value; InvalidateProperties(); }
} }
[CommandProperty( AccessLevel.GameMaster )] [CommandProperty( AccessLevel.GameMaster )]
public TextDefinition Message public TextDefinition Message
{ {
get { return m_Message; } get { return m_Message; }
set { m_Message = value; } set { m_Message = value; }
} }
[Constructable] /* set default config to prevent null ref @ serialize due to uninitialized data */
public TicketTeleporter()
: this( Point3D.Zero, null, null, null ) [Constructable]
{ public TicketTeleporter()
} : this( new Point3D( 6223, 336, 60 ), Map.Trammel )
{
[Constructable] }
public TicketTeleporter( Point3D pointDest, Map mapDest )
: this( pointDest, mapDest, null, null ) [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 ) [Constructable]
{ public TicketTeleporter( Point3D pointDest, Map mapDest, Type ticketType, TextDefinition message )
m_TicketType = ticketType; : base( pointDest, mapDest )
m_Message = message; {
} m_TicketType = ticketType;
m_Message = message;
public override bool CanTeleport( Mobile m ) }
{
if ( !base.CanTeleport( m ) ) public override bool CanTeleport( Mobile m )
return false; {
if ( !base.CanTeleport( m ) )
if ( m_TicketType != null ) return false;
{
Item ticket = null; if ( m_TicketType != null )
Container pack = m.Backpack; {
Item ticket = null;
if ( pack != null ) Container pack = m.Backpack;
ticket = pack.FindItemByType( m_TicketType, false ); // Check (top level) backpack
if ( pack != null )
if ( ticket == null ) ticket = pack.FindItemByType( m_TicketType, false ); // Check (top level) backpack
{
foreach ( Item item in m.Items ) // Check paperdoll if ( ticket == null )
{ {
if ( m_TicketType.IsAssignableFrom( item.GetType() ) ) foreach ( Item item in m.Items ) // Check paperdoll
{ {
ticket = item; if ( m_TicketType.IsAssignableFrom( item.GetType() ) )
break; {
} ticket = item;
} break;
} }
}
if ( ticket == null ) }
{
TextDefinition.SendMessageTo( m, m_Message ); if ( ticket == null )
return false; {
} TextDefinition.SendMessageTo( m, m_Message );
return false;
if ( ticket is ITicket ) }
((ITicket)ticket).OnTicketUsed( m );
} if ( ticket is ITicket )
((ITicket)ticket).OnTicketUsed( m );
return true; }
}
return true;
public override void GetProperties( ObjectPropertyList list ) }
{
base.GetProperties( list ); public override void GetProperties( ObjectPropertyList list )
{
if ( m_TicketType != null ) base.GetProperties( list );
list.Add( String.Format( "Required ticket: {0}", m_TicketType.Name ) );
} if ( m_TicketType != null )
list.Add( String.Format( "Required ticket: {0}", m_TicketType.Name ) );
public TicketTeleporter( Serial serial ) }
: base( serial )
{ public TicketTeleporter( Serial serial )
} : base( serial )
{
public override void Serialize( GenericWriter writer ) }
{
base.Serialize( writer ); public override void Serialize( GenericWriter writer )
{
writer.Write( (int)0 ); // version base.Serialize( writer );
writer.Write( m_TicketType.FullName ); writer.Write( (int)0 ); // version
TextDefinition.Serialize( writer, m_Message );
} writer.Write( m_TicketType.FullName );
TextDefinition.Serialize( writer, m_Message );
public override void Deserialize( GenericReader reader ) }
{
base.Deserialize( reader ); public override void Deserialize( GenericReader reader )
{
int version = reader.ReadInt(); base.Deserialize( reader );
m_TicketType = ScriptCompiler.FindTypeByFullName( reader.ReadString(), false ); int version = reader.ReadInt();
m_Message = TextDefinition.Deserialize( reader );
} m_TicketType = ScriptCompiler.FindTypeByFullName( reader.ReadString(), false );
} m_Message = TextDefinition.Deserialize( reader );
} }
}
}