Files
abysmal-isle/Scripts/SubSystem/Event System/Events/Town Invasion/InvasionAnnouncer.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

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.";
}
}
}