182 lines
4.0 KiB
C#
182 lines
4.0 KiB
C#
using System;
|
|
using Server.Network;
|
|
using Server.Items;
|
|
|
|
namespace Server.Mobiles
|
|
{
|
|
[CorpseName("Corpse of the neighborhood watch")]
|
|
public class InvasionAnnouncer : Lich
|
|
{
|
|
|
|
private static bool m_Talked;
|
|
private static string m_BroadcastMessage = "Everything is looking fine at the moment. Travel safe.";
|
|
private static bool m_GaveNews;
|
|
|
|
[Constructable]
|
|
public InvasionAnnouncer() : base()
|
|
{
|
|
Title = "the Neighborhood Watch";
|
|
Blessed = true;
|
|
CantWalk = true;
|
|
|
|
SpeechHue = Utility.RandomDyedHue();
|
|
|
|
Hue = Utility.RandomSkinHue();
|
|
|
|
if ( Female = Utility.RandomBool() )
|
|
{
|
|
Body = 0x191;
|
|
Name = NameList.RandomName( "female" );
|
|
|
|
switch( Utility.Random( 2 ) )
|
|
{
|
|
case 0: AddItem( new LeatherSkirt() ); break;
|
|
case 1: AddItem( new LeatherShorts() ); break;
|
|
}
|
|
|
|
switch( Utility.Random( 5 ) )
|
|
{
|
|
case 0: AddItem( new FemaleLeatherChest() ); break;
|
|
case 1: AddItem( new FemaleStuddedChest() ); break;
|
|
case 2: AddItem( new LeatherBustierArms() ); break;
|
|
case 3: AddItem( new StuddedBustierArms() ); break;
|
|
case 4: AddItem( new FemalePlateChest() ); break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Body = 0x190;
|
|
Name = NameList.RandomName( "male" );
|
|
|
|
AddItem( new PlateChest() );
|
|
AddItem( new PlateArms() );
|
|
AddItem( new PlateLegs() );
|
|
|
|
switch( Utility.Random( 3 ) )
|
|
{
|
|
case 0: AddItem( new Doublet( Utility.RandomNondyedHue() ) ); break;
|
|
case 1: AddItem( new Tunic( Utility.RandomNondyedHue() ) ); break;
|
|
case 2: AddItem( new BodySash( Utility.RandomNondyedHue() ) ); break;
|
|
}
|
|
}
|
|
|
|
Utility.AssignRandomHair( this );
|
|
|
|
if( Utility.RandomBool() )
|
|
Utility.AssignRandomFacialHair( this, HairHue );
|
|
|
|
Halberd Weapon = new Halberd();
|
|
|
|
Weapon.Movable = false;
|
|
Weapon.Crafter = this;
|
|
//Weapon.Quality = Weapon.Exceptional;
|
|
|
|
AddItem( Weapon );
|
|
|
|
Container pack = new Backpack();
|
|
|
|
pack.Movable = false;
|
|
|
|
pack.DropItem( new Gold( 10, 25 ) );
|
|
|
|
AddItem( pack );
|
|
|
|
Skills[SkillName.Anatomy].Base = 120.0;
|
|
Skills[SkillName.Tactics].Base = 120.0;
|
|
Skills[SkillName.Swords].Base = 120.0;
|
|
Skills[SkillName.MagicResist].Base = 120.0;
|
|
Skills[SkillName.DetectHidden].Base = 100.0;
|
|
}
|
|
|
|
public InvasionAnnouncer( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( (string) m_BroadcastMessage);
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_BroadcastMessage = reader.ReadString();
|
|
}
|
|
|
|
public override void OnMovement( Mobile m, Point3D oldLocation )
|
|
{
|
|
if( m_Talked == false )
|
|
{
|
|
if ( m.InRange( this, 3 ) && m is PlayerMobile)
|
|
{
|
|
m_Talked = true;
|
|
this.Say( m_BroadcastMessage );
|
|
this.Move( GetDirectionTo( m.Location ) );
|
|
SpamTimer t = new SpamTimer();
|
|
t.Start();
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnSpeech( SpeechEventArgs e )
|
|
{
|
|
base.OnSpeech( e );
|
|
|
|
if ( !e.Handled && InRange( e.Mobile, 3 ) )
|
|
{
|
|
if ( e.HasKeyword( 0x30 ) && m_GaveNews == false )
|
|
{
|
|
m_GaveNews = true;
|
|
this.Say( m_BroadcastMessage );
|
|
this.Move( GetDirectionTo( e.Mobile.Location ) );
|
|
NewsTimer t = new NewsTimer();
|
|
t.Start();
|
|
}
|
|
}
|
|
}
|
|
|
|
private class SpamTimer : Timer
|
|
{
|
|
public SpamTimer() : base( TimeSpan.FromMinutes( 1 ) )
|
|
{
|
|
Priority = TimerPriority.OneSecond;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
m_Talked = false;
|
|
}
|
|
}
|
|
|
|
private class NewsTimer : Timer
|
|
{
|
|
|
|
public NewsTimer() : base( TimeSpan.FromSeconds( 30 ) )
|
|
{
|
|
Priority = TimerPriority.OneSecond;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
m_GaveNews = false;
|
|
}
|
|
}
|
|
|
|
public static void SetAnnouncement( string str )
|
|
{
|
|
m_BroadcastMessage = str;
|
|
}
|
|
|
|
public static void DeleteAnnouncements()
|
|
{
|
|
m_BroadcastMessage = "Everything is looking fine at the moment. Travel safe.";
|
|
}
|
|
}
|
|
}
|