428 lines
9.9 KiB
C#
428 lines
9.9 KiB
C#
using System;
|
|
using Server;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Server.Mobiles;
|
|
using Server.Items;
|
|
using Server.Regions;
|
|
using Server.Network;
|
|
using Server.Misc;
|
|
using Server.Gumps;
|
|
using System.Globalization;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class Ankhs
|
|
{
|
|
public const int ResurrectRange = 8;
|
|
|
|
public static void Resurrect( Mobile m, Item item )
|
|
{
|
|
if ( m.Alive )
|
|
return;
|
|
|
|
if ( !m.InRange( item.GetWorldLocation(), ResurrectRange ) )
|
|
m.SendLocalizedMessage( 500446 ); // That is too far away.
|
|
else if( m.Map != null && m.Map.CanFit( m.Location, 16, false, false ) )
|
|
{
|
|
m.CloseGump( typeof( ResurrectGump ) );
|
|
m.SendGump( new ResurrectGump( m, ResurrectMessage.VirtueShrine ) );
|
|
}
|
|
else
|
|
m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there!
|
|
}
|
|
}
|
|
|
|
public class Shrine : Item
|
|
{
|
|
[Constructable]
|
|
public Shrine( ) : base( 0x1BC3 )
|
|
{
|
|
Movable = false;
|
|
Visible = false;
|
|
Name = "shrine";
|
|
}
|
|
|
|
public Shrine( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) )
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
|
|
//Region reg = Region.Find( this.Location, this.Map );
|
|
//reg.IsPartOf( "the Castle of the Black Knight" )
|
|
|
|
|
|
public override bool HandlesOnSpeech{ get{ return true; } }
|
|
|
|
public override void OnSpeech( SpeechEventArgs e )
|
|
{
|
|
if ( !e.Handled )
|
|
{
|
|
Mobile m = e.Mobile;
|
|
|
|
string keyword = "";
|
|
|
|
if ( m.Region.IsPartOf( "the Altar of Golden Rangers" ) || m.Region.IsPartOf( "the Ranger Outpost" ) ){ keyword = "Aurum"; }
|
|
else if ( m.Region.IsPartOf( "the Moon's Core" ) ){ keyword = "Ultimum Potentiae"; }
|
|
else if ( m.Region.IsPartOf( "the Black Magic Guild" ) ){ keyword = "Kas"; }
|
|
else if ( m.Region.IsPartOf( "the Tomb of Kas the Bloody Handed" ) ){ keyword = "Mortem Mangone"; }
|
|
else if ( m.Region.IsPartOf( "the Tomb of Malak the Syth Lord" ) ){ keyword = "Anakasu Arrii Venaal"; }
|
|
|
|
if ( !m.Player )
|
|
return;
|
|
|
|
if ( !m.InRange( GetWorldLocation(), 10 ) )
|
|
return;
|
|
|
|
bool isMatch = false;
|
|
|
|
if ( e.Speech.ToLower().IndexOf( keyword.ToLower() ) >= 0 )
|
|
isMatch = true;
|
|
|
|
if ( !isMatch )
|
|
return;
|
|
|
|
e.Handled = true;
|
|
|
|
if ( this.Name == "Kargoth" && this.Name == keyword ){}
|
|
}
|
|
}
|
|
|
|
public override void OnDoubleClickDead( Mobile m )
|
|
{
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
public class AnkhWest : Item
|
|
{
|
|
private InternalItem m_Item;
|
|
|
|
[Constructable]
|
|
public AnkhWest() : this( false )
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public AnkhWest( bool bloodied ) : base( bloodied ? 0x1D98 : 0x3 )
|
|
{
|
|
Movable = false;
|
|
|
|
m_Item = new InternalItem( bloodied, this );
|
|
}
|
|
|
|
public AnkhWest( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) )
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
[Hue, CommandProperty( AccessLevel.GameMaster )]
|
|
public override int Hue
|
|
{
|
|
get{ return base.Hue; }
|
|
set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; }
|
|
}
|
|
|
|
public override void OnDoubleClickDead( Mobile m )
|
|
{
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
public override void OnLocationChange( Point3D oldLocation )
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Location = new Point3D( X, Y + 1, Z );
|
|
}
|
|
|
|
public override void OnMapChange()
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Map = Map;
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
base.OnAfterDelete();
|
|
|
|
if ( m_Item != null )
|
|
m_Item.Delete();
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( m_Item );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_Item = reader.ReadItem() as InternalItem;
|
|
}
|
|
|
|
private class InternalItem : Item
|
|
{
|
|
private AnkhWest m_Item;
|
|
|
|
public InternalItem( bool bloodied, AnkhWest item ) : base( bloodied ? 0x1D97 : 0x2 )
|
|
{
|
|
Movable = false;
|
|
|
|
m_Item = item;
|
|
}
|
|
|
|
public InternalItem( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void OnLocationChange( Point3D oldLocation )
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Location = new Point3D( X, Y - 1, Z );
|
|
}
|
|
|
|
public override void OnMapChange()
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Map = Map;
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
base.OnAfterDelete();
|
|
|
|
if ( m_Item != null )
|
|
m_Item.Delete();
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) )
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
[Hue, CommandProperty( AccessLevel.GameMaster )]
|
|
public override int Hue
|
|
{
|
|
get{ return base.Hue; }
|
|
set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; }
|
|
}
|
|
|
|
public override void OnDoubleClickDead( Mobile m )
|
|
{
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( m_Item );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_Item = reader.ReadItem() as AnkhWest;
|
|
}
|
|
}
|
|
}
|
|
|
|
[TypeAlias( "Server.Items.AnkhEast" )]
|
|
public class AnkhNorth : Item
|
|
{
|
|
private InternalItem m_Item;
|
|
|
|
[Constructable]
|
|
public AnkhNorth() : this( false )
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public AnkhNorth( bool bloodied ) : base( bloodied ? 0x1E5D : 0x4 )
|
|
{
|
|
Movable = false;
|
|
|
|
m_Item = new InternalItem( bloodied, this );
|
|
}
|
|
|
|
public AnkhNorth( Serial serial )
|
|
: base( serial )
|
|
{
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) )
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
[Hue, CommandProperty( AccessLevel.GameMaster )]
|
|
public override int Hue
|
|
{
|
|
get{ return base.Hue; }
|
|
set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; }
|
|
}
|
|
|
|
public override void OnDoubleClickDead( Mobile m )
|
|
{
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
public override void OnLocationChange( Point3D oldLocation )
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Location = new Point3D( X + 1, Y, Z );
|
|
}
|
|
|
|
public override void OnMapChange()
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Map = Map;
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
base.OnAfterDelete();
|
|
|
|
if ( m_Item != null )
|
|
m_Item.Delete();
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( m_Item );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_Item = reader.ReadItem() as InternalItem;
|
|
}
|
|
|
|
[TypeAlias( "Server.Items.AnkhEast+InternalItem" )]
|
|
private class InternalItem : Item
|
|
{
|
|
private AnkhNorth m_Item;
|
|
|
|
public InternalItem( bool bloodied, AnkhNorth item )
|
|
: base( bloodied ? 0x1E5C : 0x5 )
|
|
{
|
|
Movable = false;
|
|
|
|
m_Item = item;
|
|
}
|
|
|
|
public InternalItem( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void OnLocationChange( Point3D oldLocation )
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Location = new Point3D( X - 1, Y, Z );
|
|
}
|
|
|
|
public override void OnMapChange()
|
|
{
|
|
if ( m_Item != null )
|
|
m_Item.Map = Map;
|
|
}
|
|
|
|
public override void OnAfterDelete()
|
|
{
|
|
base.OnAfterDelete();
|
|
|
|
if ( m_Item != null )
|
|
m_Item.Delete();
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) )
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
[Hue, CommandProperty( AccessLevel.GameMaster )]
|
|
public override int Hue
|
|
{
|
|
get{ return base.Hue; }
|
|
set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; }
|
|
}
|
|
|
|
public override void OnDoubleClickDead( Mobile m )
|
|
{
|
|
Ankhs.Resurrect( m, this );
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( m_Item );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_Item = reader.ReadItem() as AnkhNorth;
|
|
}
|
|
}
|
|
}
|
|
}
|