115 lines
No EOL
2.7 KiB
C#
115 lines
No EOL
2.7 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Network;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class Guillotine : Item
|
|
{
|
|
[Constructable]
|
|
public Guillotine()
|
|
: base( 4656 )
|
|
{
|
|
Movable = false;
|
|
}
|
|
|
|
private DateTime m_NextUse;
|
|
|
|
public override void OnDoubleClick( Mobile from )
|
|
{
|
|
if ( !from.InRange( this.GetWorldLocation(), 2 ) || !from.InLOS( this ) )
|
|
{
|
|
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that
|
|
}
|
|
else if ( Visible && ( ItemID == 4656 || ItemID == 4702 ) && DateTime.Now >= m_NextUse )
|
|
{
|
|
Point3D p = this.GetWorldLocation();
|
|
|
|
if ( 1 > Utility.Random( Math.Max( Math.Abs( from.X - p.X ), Math.Abs( from.Y - p.Y ) ) ) )
|
|
{
|
|
Effects.PlaySound( from.Location, from.Map, from.GetHurtSound() );
|
|
from.PublicOverheadMessage( MessageType.Regular, from.SpeechHue, true, "Ouch!" );
|
|
Spells.SpellHelper.Damage( TimeSpan.FromSeconds( 0.5 ), from, Utility.Dice( 2, 10, 5 ) );
|
|
}
|
|
|
|
Effects.PlaySound( this.GetWorldLocation(), this.Map, 0x387 );
|
|
|
|
Timer.DelayCall( TimeSpan.FromSeconds( 0.25 ), new TimerCallback( Down1 ) );
|
|
Timer.DelayCall( TimeSpan.FromSeconds( 0.50 ), new TimerCallback( Down2 ) );
|
|
|
|
Timer.DelayCall( TimeSpan.FromSeconds( 5.00 ), new TimerCallback( BackUp ) );
|
|
|
|
m_NextUse = DateTime.Now + TimeSpan.FromSeconds( 10.0 );
|
|
}
|
|
}
|
|
|
|
private void Down1()
|
|
{
|
|
ItemID = ( ItemID == 4656 ? 4678 : 4712 );
|
|
}
|
|
|
|
private void Down2()
|
|
{
|
|
ItemID = ( ItemID == 4678 ? 4679 : 4713 );
|
|
|
|
Point3D p = this.GetWorldLocation();
|
|
Map f = this.Map;
|
|
|
|
if ( f == null )
|
|
return;
|
|
|
|
new Blood( 4650 ).MoveToWorld( p, f );
|
|
|
|
for ( int i = 0; i < 4; ++i )
|
|
{
|
|
int x = p.X - 2 + Utility.Random( 5 );
|
|
int y = p.Y - 2 + Utility.Random( 5 );
|
|
int z = p.Z;
|
|
|
|
if ( !f.CanFit( x, y, z, 1, false, false, true ) )
|
|
{
|
|
z = f.GetAverageZ( x, y );
|
|
|
|
if ( !f.CanFit( x, y, z, 1, false, false, true ) )
|
|
continue;
|
|
}
|
|
|
|
new Blood().MoveToWorld( new Point3D( x, y, z ), f );
|
|
}
|
|
}
|
|
|
|
private void BackUp()
|
|
{
|
|
if ( ItemID == 4678 || ItemID == 4679 )
|
|
ItemID = 4656;
|
|
else if ( ItemID == 4712 || ItemID == 4713 )
|
|
ItemID = 4702;
|
|
}
|
|
|
|
public Guillotine( Serial serial )
|
|
: base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (byte) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadByte();
|
|
|
|
if ( ItemID == 4678 || ItemID == 4679 )
|
|
ItemID = 4656;
|
|
else if ( ItemID == 4712 || ItemID == 4713 )
|
|
ItemID = 4702;
|
|
}
|
|
}
|
|
} |