84 lines
No EOL
2 KiB
C#
84 lines
No EOL
2 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Network;
|
|
using Server.Mobiles;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public abstract class BaseHealPotion : BasePotion
|
|
{
|
|
public abstract int MinHeal { get; }
|
|
public abstract int MaxHeal { get; }
|
|
public abstract double Delay { get; }
|
|
|
|
public BaseHealPotion( PotionEffect effect ) : base( 0xF0C, effect )
|
|
{
|
|
}
|
|
|
|
public BaseHealPotion( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
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 void DoHeal( Mobile from )
|
|
{
|
|
int min = Scale( from, MinHeal );
|
|
int max = Scale( from, MaxHeal );
|
|
|
|
int heal = Utility.RandomMinMax( min, max );
|
|
if ( from is PlayerMobile ){ heal = (int)(heal * Server.Misc.Settings.HitPoints()); }
|
|
|
|
from.Heal( heal );
|
|
}
|
|
|
|
public override void Drink( Mobile from )
|
|
{
|
|
if ( from.Hits < from.HitsMax )
|
|
{
|
|
if ( from.Poisoned )
|
|
{
|
|
from.LocalOverheadMessage( MessageType.Regular, 0x22, 1005000 ); // You can not heal yourself in your current state.
|
|
}
|
|
else
|
|
{
|
|
if ( from.BeginAction( typeof( BaseHealPotion ) ) )
|
|
{
|
|
DoHeal( from );
|
|
|
|
BasePotion.PlayDrinkEffect( from );
|
|
|
|
this.Consume();
|
|
|
|
Timer.DelayCall( TimeSpan.FromSeconds( Delay ), new TimerStateCallback( ReleaseHealLock ), from );
|
|
}
|
|
else
|
|
{
|
|
from.LocalOverheadMessage( MessageType.Regular, 0x22, 500235 ); // You must wait 10 seconds before using another healing potion.
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage( 1049547 ); // You decide against drinking this potion, as you are already at full health.
|
|
}
|
|
}
|
|
|
|
private static void ReleaseHealLock( object state )
|
|
{
|
|
((Mobile)state).EndAction( typeof( BaseHealPotion ) );
|
|
}
|
|
}
|
|
} |