270 lines
5.6 KiB
C#
270 lines
5.6 KiB
C#
using System;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class EnhancedBandage : Bandage
|
|
{
|
|
public static int HealingBonus => 10;
|
|
|
|
public override int LabelNumber => 1152441; // enhanced bandage
|
|
|
|
[Constructible]
|
|
public EnhancedBandage()
|
|
: this( 1 )
|
|
{
|
|
}
|
|
|
|
[Constructible]
|
|
public EnhancedBandage( int amount )
|
|
: base( amount )
|
|
{
|
|
Hue = 0x8A5;
|
|
}
|
|
|
|
public EnhancedBandage( Serial serial )
|
|
: base( serial )
|
|
{
|
|
}
|
|
|
|
public override bool Dye( Mobile from, DyeTub sender )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public override void AddNameProperties( ObjectPropertyList list )
|
|
{
|
|
base.AddNameProperties( list );
|
|
|
|
list.Add( 1075216 ); // these bandages have been enhanced
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.WriteEncodedInt( 0 ); //version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
[FlippableAttribute( 0x2AC0, 0x2AC3 )]
|
|
public class FountainOfLife : BaseAddonContainer
|
|
{
|
|
public override BaseAddonContainerDeed Deed => new FountainOfLifeDeed( m_Charges );
|
|
|
|
public override bool OnDragLift( Mobile from )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public virtual TimeSpan RechargeTime => TimeSpan.FromDays( 1 );
|
|
|
|
public override int LabelNumber => 1075197; // Fountain of Life
|
|
public override int DefaultGumpID => 0x484;
|
|
public override int DefaultDropSound => 66;
|
|
public override int DefaultMaxItems => 125;
|
|
|
|
private int m_Charges;
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int Charges
|
|
{
|
|
get => m_Charges;
|
|
set { m_Charges = Math.Min( value, 10 ); InvalidateProperties(); }
|
|
}
|
|
|
|
private Timer m_Timer;
|
|
|
|
[Constructible]
|
|
public FountainOfLife()
|
|
: this( 10 )
|
|
{
|
|
}
|
|
|
|
[Constructible]
|
|
public FountainOfLife( int charges )
|
|
: base( 0x2AC0 )
|
|
{
|
|
m_Charges = charges;
|
|
|
|
m_Timer = Timer.DelayCall( RechargeTime, RechargeTime, new TimerCallback( Recharge ) );
|
|
}
|
|
|
|
public FountainOfLife( Serial serial )
|
|
: base( serial )
|
|
{
|
|
}
|
|
|
|
public override bool OnDragDrop( Mobile from, Item dropped )
|
|
{
|
|
if ( dropped is Bandage )
|
|
{
|
|
bool allow = base.OnDragDrop( from, dropped );
|
|
|
|
if ( allow )
|
|
Enhance( from );
|
|
|
|
return allow;
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage( 1075209 ); // Only bandages may be dropped into the fountain.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public override bool OnDragDropInto( Mobile from, Item item, Point3D p )
|
|
{
|
|
if ( item is Bandage )
|
|
{
|
|
bool allow = base.OnDragDropInto( from, item, p );
|
|
|
|
if ( allow )
|
|
Enhance( from );
|
|
|
|
return allow;
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage( 1075209 ); // Only bandages may be dropped into the fountain.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public override void AddNameProperties( ObjectPropertyList list )
|
|
{
|
|
base.AddNameProperties( list );
|
|
|
|
list.Add( 1075217, m_Charges.ToString() ); // ~1_val~ charges remaining
|
|
}
|
|
|
|
public override void OnDelete()
|
|
{
|
|
m_Timer?.Stop();
|
|
|
|
base.OnDelete();
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.WriteEncodedInt( 0 ); //version
|
|
|
|
writer.Write( m_Charges );
|
|
writer.Write( (DateTime)m_Timer.Next );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
|
|
m_Charges = reader.ReadInt();
|
|
|
|
DateTime next = reader.ReadDateTime();
|
|
|
|
if ( next < DateTime.UtcNow )
|
|
m_Timer = Timer.DelayCall( TimeSpan.Zero, RechargeTime, new TimerCallback( Recharge ) );
|
|
else
|
|
m_Timer = Timer.DelayCall( next - DateTime.UtcNow, RechargeTime, new TimerCallback( Recharge ) );
|
|
}
|
|
|
|
public void Recharge()
|
|
{
|
|
m_Charges = 10;
|
|
|
|
Enhance( null );
|
|
}
|
|
|
|
public void Enhance( Mobile from )
|
|
{
|
|
for( int i = Items.Count - 1; i >= 0 && m_Charges > 0; --i )
|
|
{
|
|
if ( Items[i] is EnhancedBandage )
|
|
continue;
|
|
|
|
if ( Items[i] is Bandage bandage )
|
|
{
|
|
Item enhanced;
|
|
|
|
if ( bandage.Amount > m_Charges )
|
|
{
|
|
bandage.Amount -= m_Charges;
|
|
enhanced = new EnhancedBandage( m_Charges );
|
|
m_Charges = 0;
|
|
}
|
|
else
|
|
{
|
|
enhanced = new EnhancedBandage( bandage.Amount );
|
|
m_Charges -= bandage.Amount;
|
|
bandage.Delete();
|
|
}
|
|
|
|
if ( from == null || !TryDropItem( from, enhanced, false ) ) // try stacking first
|
|
DropItem( enhanced );
|
|
}
|
|
}
|
|
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
public class FountainOfLifeDeed : BaseAddonContainerDeed
|
|
{
|
|
public override int LabelNumber => 1075197; // Fountain of Life
|
|
public override BaseAddonContainer Addon => new FountainOfLife( m_Charges );
|
|
|
|
private int m_Charges;
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int Charges
|
|
{
|
|
get => m_Charges;
|
|
set { m_Charges = Math.Min( value, 10 ); InvalidateProperties(); }
|
|
}
|
|
|
|
[Constructible]
|
|
public FountainOfLifeDeed()
|
|
: this( 10 )
|
|
{
|
|
}
|
|
|
|
[Constructible]
|
|
public FountainOfLifeDeed( int charges )
|
|
{
|
|
LootType = LootType.Blessed;
|
|
m_Charges = charges;
|
|
}
|
|
|
|
public FountainOfLifeDeed( Serial serial )
|
|
: base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.WriteEncodedInt( 0 ); //version
|
|
|
|
writer.Write( m_Charges );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
|
|
m_Charges = reader.ReadInt();
|
|
}
|
|
}
|
|
}
|