166 lines
3.7 KiB
C#
166 lines
3.7 KiB
C#
using System;
|
|
using Server.Mobiles;
|
|
using Server.Network;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class CandyCane : Food
|
|
{
|
|
private static Dictionary<Mobile, CandyCaneTimer> m_ToothAches;
|
|
|
|
public static Dictionary<Mobile, CandyCaneTimer> ToothAches
|
|
{
|
|
get { return m_ToothAches; }
|
|
set { m_ToothAches = value; }
|
|
}
|
|
|
|
public static void Initialize()
|
|
{
|
|
m_ToothAches = new Dictionary<Mobile, CandyCaneTimer>();
|
|
}
|
|
|
|
public class CandyCaneTimer : Timer
|
|
{
|
|
private int m_Eaten;
|
|
private Mobile m_Eater;
|
|
|
|
public Mobile Eater { get { return m_Eater; } }
|
|
public int Eaten { get { return m_Eaten; } set { m_Eaten = value; } }
|
|
|
|
public CandyCaneTimer( Mobile eater )
|
|
: base( TimeSpan.FromSeconds( 30 ), TimeSpan.FromSeconds( 30 ) )
|
|
{
|
|
m_Eater = eater;
|
|
Priority = TimerPriority.FiveSeconds;
|
|
Start();
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
Eaten--;
|
|
|
|
if ( Eater == null || Eater.Deleted || Eaten <= 0 )
|
|
{
|
|
Stop();
|
|
ToothAches.Remove( Eater );
|
|
}
|
|
else if ( Eater.Map != Map.Internal && Eater.Alive )
|
|
{
|
|
if( Eaten > 60 )
|
|
{
|
|
Eater.Say( 1077388 + Utility.Random(5) ); // ARRGH! My tooth hurts sooo much!, etc.
|
|
|
|
if( Utility.RandomBool() )
|
|
{
|
|
Eater.Animate( 32, 5, 1, true, false, 0 );
|
|
}
|
|
}
|
|
else if ( Eaten == 60 )
|
|
{
|
|
Eater.SendLocalizedMessage( 1077393 ); // The extreme pain in your teeth subsides.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[Constructable]
|
|
public CandyCane() : base( 0x2bdd )
|
|
{
|
|
ItemID = 0x2bdd + Utility.Random(4);
|
|
Stackable = false;
|
|
LootType=LootType.Blessed;
|
|
}
|
|
|
|
public override void OnDoubleClick( Mobile from )
|
|
{
|
|
if( IsChildOf( from.Backpack ) || from.InRange(this, 1) )
|
|
{
|
|
from.PlaySound( 0x3a + Utility.Random(3) );
|
|
from.Animate( 34, 5, 1, true, false, 0 );
|
|
|
|
if ( !ToothAches.ContainsKey( from ) )
|
|
{
|
|
ToothAches.Add( from, new CandyCaneTimer( from ) );
|
|
}
|
|
|
|
ToothAches[from].Eaten += 32;
|
|
|
|
from.SendLocalizedMessage( 1077387 ); // You feel as if you could eat as much as you wanted!
|
|
Delete();
|
|
}
|
|
}
|
|
|
|
public CandyCane( 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 class GingerBreadCookie : Food
|
|
{
|
|
private readonly int[] m_Messages =
|
|
{
|
|
0,
|
|
1077396, // Noooo!
|
|
1077397, // Please don't eat me... *whimper*
|
|
1077405, // etc etc etc ..
|
|
1077406,
|
|
1077407,
|
|
1077408,
|
|
1077409
|
|
};
|
|
|
|
[Constructable]
|
|
public GingerBreadCookie() : base( 0x2be1 )
|
|
{
|
|
ItemID = Utility.RandomBool() ? 0x2be1 : 0x2be2;
|
|
Stackable = false;
|
|
LootType=LootType.Blessed;
|
|
}
|
|
|
|
public GingerBreadCookie( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void OnDoubleClick( Mobile from )
|
|
{
|
|
if( IsChildOf( from.Backpack ) || from.InRange(this, 1) )
|
|
{
|
|
int result;
|
|
if( ( result = m_Messages[Utility.Random( 0, m_Messages.Length )]) == 0 )
|
|
{
|
|
base.OnDoubleClick( from );
|
|
}
|
|
else
|
|
{
|
|
this.SendLocalizedMessageTo( from, result );
|
|
}
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|