ModernUO/Scripts/Engines/MLQuests/Items/Teleporters.cs
eos 35fbffdb51 ML quest system; first SVN release.
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.
2013-02-03 01:05:17 +00:00

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