Convert movement, actions (lift/use), combat, and spells to use Core.TickCount and avoid DateTime caveats (performance, system time dependency, etc) Refactor DateTime.Now to DateTime.UtcNow Add LOS check for Iron Maiden addon
180 lines
No EOL
4.2 KiB
C#
180 lines
No EOL
4.2 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Network;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class RejuvinationAddonComponent : AddonComponent
|
|
{
|
|
public RejuvinationAddonComponent( int itemID ) : base( itemID )
|
|
{
|
|
}
|
|
|
|
public RejuvinationAddonComponent( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void OnDoubleClick( Mobile from )
|
|
{
|
|
if ( from.BeginAction( typeof( RejuvinationAddonComponent ) ) )
|
|
{
|
|
from.FixedEffect( 0x373A, 1, 16 );
|
|
|
|
int random = Utility.Random( 1, 4 );
|
|
|
|
if ( random == 1 || random == 4 )
|
|
{
|
|
from.Hits = from.HitsMax;
|
|
SendLocalizedMessageTo( from, 500801 ); // A sense of warmth fills your body!
|
|
}
|
|
|
|
if ( random == 2 || random == 4 )
|
|
{
|
|
from.Mana = from.ManaMax;
|
|
SendLocalizedMessageTo( from, 500802 ); // A feeling of power surges through your veins!
|
|
}
|
|
|
|
if ( random == 3 || random == 4 )
|
|
{
|
|
from.Stam = from.StamMax;
|
|
SendLocalizedMessageTo( from, 500803 ); // You feel as though you've slept for days!
|
|
}
|
|
|
|
Timer.DelayCall( TimeSpan.FromHours( 2.0 ), new TimerStateCallback( ReleaseUseLock_Callback ), new object[]{ from, random } );
|
|
}
|
|
}
|
|
|
|
public virtual void ReleaseUseLock_Callback( object state )
|
|
{
|
|
object[] states = (object[])state;
|
|
|
|
Mobile from = (Mobile)states[0];
|
|
int random = (int)states[1];
|
|
|
|
from.EndAction( typeof( RejuvinationAddonComponent ) );
|
|
|
|
if ( random == 4 )
|
|
{
|
|
from.Hits = from.HitsMax;
|
|
from.Mana = from.ManaMax;
|
|
from.Stam = from.StamMax;
|
|
SendLocalizedMessageTo( from, 500807 ); // You feel completely rejuvinated!
|
|
}
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
public abstract class BaseRejuvinationAnkh : BaseAddon
|
|
{
|
|
public BaseRejuvinationAnkh()
|
|
{
|
|
}
|
|
|
|
public override bool HandlesOnMovement{ get{ return true; } }
|
|
|
|
private DateTime m_NextMessage;
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
base.OnMovement( m, oldLocation );
|
|
|
|
if ( m.Player && Utility.InRange( Location, m.Location, 3 ) && !Utility.InRange( Location, oldLocation, 3 ) )
|
|
{
|
|
if ( DateTime.UtcNow >= m_NextMessage )
|
|
{
|
|
if ( Components.Count > 0 )
|
|
((AddonComponent)Components[0]).SendLocalizedMessageTo( m, 1010061 ); // An overwhelming sense of peace fills you.
|
|
|
|
m_NextMessage = DateTime.UtcNow + TimeSpan.FromSeconds( 25.0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
public BaseRejuvinationAnkh( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
public class RejuvinationAnkhWest : BaseRejuvinationAnkh
|
|
{
|
|
[Constructable]
|
|
public RejuvinationAnkhWest()
|
|
{
|
|
AddComponent( new RejuvinationAddonComponent( 0x3 ), 0, 0, 0 );
|
|
AddComponent( new RejuvinationAddonComponent( 0x2 ), 0, 1, 0 );
|
|
}
|
|
|
|
public RejuvinationAnkhWest( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
public class RejuvinationAnkhNorth : BaseRejuvinationAnkh
|
|
{
|
|
[Constructable]
|
|
public RejuvinationAnkhNorth()
|
|
{
|
|
AddComponent( new RejuvinationAddonComponent( 0x4 ), 0, 0, 0 );
|
|
AddComponent( new RejuvinationAddonComponent( 0x5 ), 1, 0, 0 );
|
|
}
|
|
|
|
public RejuvinationAnkhNorth( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
} |