RunUO/Scripts/Engines/MLQuests/Mobiles/SirHelper.cs

141 lines
3 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Server;
using Server.Engines.MLQuests.Gumps;
using Server.Gumps;
using Server.Items;
using Server.Mobiles;
using Server.Network;
namespace Server.Engines.MLQuests.Mobiles
{
public class SirHelper : Mage
{
private static readonly Gump m_Gump = new InfoNPCGump( 1078029, 1078028 );
private static readonly TimeSpan m_ShoutDelay = TimeSpan.FromSeconds( 20 );
private static readonly TimeSpan m_ShoutCooldown = TimeSpan.FromDays( 1 ); // TODO: Verify, could be a lot longer... or until a restart even
private DateTime m_NextShout;
public override bool IsActiveVendor { get { return false; } }
[Constructable]
public SirHelper()
{
Name = "Sir Helper";
Title = "the Profession Guide"; // TODO: Don't display in paperdoll
Hue = 0x83EA;
Direction = Direction.South;
Frozen = true;
}
public override void InitSBInfo()
{
}
public override bool GetGender()
{
return false; // male
}
public override void CheckMorph()
{
}
public override void InitOutfit()
{
HairItemID = 0x203C;
FacialHairItemID = 0x204D;
HairHue = FacialHairHue = 0x8A7;
AddItem( new Sandals() );
Item item;
item = new Cloak();
item.ItemID = 0x26AD;
item.Hue = 0x455;
AddItem( item );
item = new Robe();
item.ItemID = 0x26AE;
item.Hue = 0x4AB;
AddItem( item );
item = new Backpack();
item.Movable = false;
AddItem( item );
}
public override void OnDoubleClick( Mobile from )
{
if ( from.CanBeginAction( this ) )
{
from.BeginAction( this );
Timer.DelayCall<Mobile>( m_ShoutCooldown, EndLock, from );
}
MLQuestSystem.TurnToFace( this, from );
from.SendGump( m_Gump );
// Paperdoll doesn't open
//base.OnDoubleClick( from );
}
public override void OnThink()
{
base.OnThink();
if ( m_NextShout <= DateTime.UtcNow )
{
Packet shoutPacket = null;
foreach ( NetState state in GetClientsInRange( 12 ) )
{
Mobile m = state.Mobile;
if ( m.CanSee( this ) && m.InLOS( this ) && m.CanBeginAction( this ) )
{
if ( shoutPacket == null )
shoutPacket = Packet.Acquire( new MessageLocalized( Serial, Body, MessageType.Regular, 946, 3, 1078099, Name, "" ) ); // Double Click On Me For Help!
state.Send( shoutPacket );
}
}
Packet.Release( shoutPacket );
m_NextShout = DateTime.UtcNow + m_ShoutDelay;
}
}
private void EndLock( Mobile m )
{
m.EndAction( this );
}
public SirHelper( 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();
Frozen = true;
}
}
}