prevent null ref
This commit is contained in:
parent
8690feea0a
commit
bd8dc7168f
1 changed files with 226 additions and 223 deletions
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue