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