Convert movement, actions (lift/use), combat, and spells to use Core.TickCount and avoid DateTime caveats (performance, system time dependency, etc) Refactor DateTime.Now to DateTime.UtcNow Add LOS check for Iron Maiden addon
167 lines
No EOL
4.6 KiB
C#
167 lines
No EOL
4.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server;
|
|
using Server.Items;
|
|
using Server.Network;
|
|
|
|
namespace Server.Mobiles
|
|
{
|
|
public abstract class BaseGuildmaster : BaseVendor
|
|
{
|
|
private List<SBInfo> m_SBInfos = new List<SBInfo>();
|
|
protected override List<SBInfo> SBInfos{ get { return m_SBInfos; } }
|
|
|
|
public override bool IsActiveVendor{ get{ return false; } }
|
|
|
|
public override bool ClickTitle{ get{ return false; } }
|
|
|
|
public virtual int JoinCost{ get{ return 500; } }
|
|
|
|
public virtual TimeSpan JoinAge{ get{ return TimeSpan.FromDays( 0.0 ); } }
|
|
public virtual TimeSpan JoinGameAge{ get{ return TimeSpan.FromDays( 2.0 ); } }
|
|
public virtual TimeSpan QuitAge{ get{ return TimeSpan.FromDays( 7.0 ); } }
|
|
public virtual TimeSpan QuitGameAge{ get{ return TimeSpan.FromDays( 4.0 ); } }
|
|
|
|
public override void InitSBInfo()
|
|
{
|
|
}
|
|
|
|
public virtual bool CheckCustomReqs( PlayerMobile pm )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public virtual void SayGuildTo( Mobile m )
|
|
{
|
|
SayTo( m, 1008055 + (int)NpcGuild );
|
|
}
|
|
|
|
public virtual void SayWelcomeTo( Mobile m )
|
|
{
|
|
SayTo( m, 1008054 ); // Welcome to the guild! Thou shalt find that fellow members shall grant thee lower prices in shops.
|
|
}
|
|
|
|
public virtual void SayPriceTo( Mobile m )
|
|
{
|
|
m.Send( new MessageLocalizedAffix( Serial, Body, MessageType.Regular, SpeechHue, 3, 1008052, Name, AffixType.Append, JoinCost.ToString(), "" ) );
|
|
}
|
|
|
|
public virtual bool WasNamed( string speech )
|
|
{
|
|
string name = this.Name;
|
|
|
|
return ( name != null && Insensitive.StartsWith( speech, name ) );
|
|
}
|
|
|
|
public override bool HandlesOnSpeech( Mobile from )
|
|
{
|
|
if ( from.InRange( this.Location, 2 ) )
|
|
return true;
|
|
|
|
return base.HandlesOnSpeech( from );
|
|
}
|
|
|
|
public override void OnSpeech( SpeechEventArgs e )
|
|
{
|
|
Mobile from = e.Mobile;
|
|
|
|
if ( !e.Handled && from is PlayerMobile && from.InRange( this.Location, 2 ) && WasNamed( e.Speech ) )
|
|
{
|
|
PlayerMobile pm = (PlayerMobile)from;
|
|
|
|
if ( e.HasKeyword( 0x0004 ) ) // *join* | *member*
|
|
{
|
|
if ( pm.NpcGuild == this.NpcGuild )
|
|
SayTo( from, 501047 ); // Thou art already a member of our guild.
|
|
else if ( pm.NpcGuild != NpcGuild.None )
|
|
SayTo( from, 501046 ); // Thou must resign from thy other guild first.
|
|
else if ( pm.GameTime < JoinGameAge || (pm.CreationTime + JoinAge) > DateTime.UtcNow )
|
|
SayTo( from, 501048 ); // You are too young to join my guild...
|
|
else if ( CheckCustomReqs( pm ) )
|
|
SayPriceTo( from );
|
|
|
|
e.Handled = true;
|
|
}
|
|
else if ( e.HasKeyword( 0x0005 ) ) // *resign* | *quit*
|
|
{
|
|
if ( pm.NpcGuild != this.NpcGuild )
|
|
{
|
|
SayTo( from, 501052 ); // Thou dost not belong to my guild!
|
|
}
|
|
else if ( (pm.NpcGuildJoinTime + QuitAge) > DateTime.UtcNow || (pm.NpcGuildGameTime + QuitGameAge) > pm.GameTime )
|
|
{
|
|
SayTo( from, 501053 ); // You just joined my guild! You must wait a week to resign.
|
|
}
|
|
else
|
|
{
|
|
SayTo( from, 501054 ); // I accept thy resignation.
|
|
pm.NpcGuild = NpcGuild.None;
|
|
}
|
|
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
|
|
base.OnSpeech( e );
|
|
}
|
|
|
|
public override bool OnGoldGiven( Mobile from, Gold dropped )
|
|
{
|
|
if ( from is PlayerMobile && dropped.Amount == JoinCost )
|
|
{
|
|
PlayerMobile pm = (PlayerMobile)from;
|
|
|
|
if ( pm.NpcGuild == this.NpcGuild )
|
|
{
|
|
SayTo( from, 501047 ); // Thou art already a member of our guild.
|
|
}
|
|
else if ( pm.NpcGuild != NpcGuild.None )
|
|
{
|
|
SayTo( from, 501046 ); // Thou must resign from thy other guild first.
|
|
}
|
|
else if ( pm.GameTime < JoinGameAge || (pm.CreationTime + JoinAge) > DateTime.UtcNow )
|
|
{
|
|
SayTo( from, 501048 ); // You are too young to join my guild...
|
|
}
|
|
else if ( CheckCustomReqs( pm ) )
|
|
{
|
|
SayWelcomeTo( from );
|
|
|
|
pm.NpcGuild = this.NpcGuild;
|
|
pm.NpcGuildJoinTime = DateTime.UtcNow;
|
|
pm.NpcGuildGameTime = pm.GameTime;
|
|
|
|
dropped.Delete();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return base.OnGoldGiven( from, dropped );
|
|
}
|
|
|
|
public BaseGuildmaster( string title ) : base( title )
|
|
{
|
|
Title = String.Format( "the {0} {1}", title, Female ? "guildmistress" : "guildmaster" );
|
|
}
|
|
|
|
public BaseGuildmaster( 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();
|
|
}
|
|
}
|
|
} |