Secondary changes: - Region fixes, mainly for New Haven. - Recipe system changes. - Enabled ML craftables. - Dyeing/cutting restrictions for quest items. - Moved IsInvulnerable from BaseVendor to BaseCreature. - Moved RandomBrightHue to Utility. - Items no longer decay when attached to a spawner. - Quest item hue is now faked through packets, instead of overriding Hue. - Re-enabled item drag effects for SA clients. - Fixed AssignRandomFacialHair bug in Utility. - Added random hue comments to Utility.
223 lines
5 KiB
C#
223 lines
5 KiB
C#
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 );
|
|
}
|
|
}
|
|
}
|