250 lines
No EOL
8.1 KiB
C#
250 lines
No EOL
8.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Server;
|
|
using Server.Items;
|
|
using Server.Gumps;
|
|
using Server.Mobiles;
|
|
using Server.Targeting;
|
|
|
|
namespace Server
|
|
{
|
|
public class JusticeVirtue
|
|
{
|
|
private static TimeSpan LossDelay = TimeSpan.FromDays( 7.0 );
|
|
private const int LossAmount = 950;
|
|
|
|
public static void Initialize()
|
|
{
|
|
VirtueGump.Register( 109, new OnVirtueUsed( OnVirtueUsed ) );
|
|
}
|
|
|
|
public static bool CheckMapRegion( Mobile first, Mobile second )
|
|
{
|
|
Map map = first.Map;
|
|
|
|
if ( second.Map != map )
|
|
return false;
|
|
|
|
return GetMapRegion( map, first.Location ) == GetMapRegion( map, second.Location );
|
|
}
|
|
|
|
public static int GetMapRegion( Map map, Point3D loc )
|
|
{
|
|
if ( map == null || map.MapID >= 2 )
|
|
return 0;
|
|
|
|
if ( loc.X < 5120 )
|
|
return 0;
|
|
|
|
if ( loc.Y < 2304 )
|
|
return 1;
|
|
|
|
return 2;
|
|
}
|
|
|
|
public static void OnVirtueUsed( Mobile from )
|
|
{
|
|
if ( !from.CheckAlive() )
|
|
return;
|
|
|
|
PlayerMobile protector = from as PlayerMobile;
|
|
|
|
if ( protector == null )
|
|
return;
|
|
|
|
if ( !VirtueHelper.IsSeeker( protector, VirtueName.Justice ) )
|
|
{
|
|
protector.SendLocalizedMessage( 1049610 ); // You must reach the first path in this virtue to invoke it.
|
|
}
|
|
else if ( !protector.CanBeginAction( typeof( JusticeVirtue ) ) )
|
|
{
|
|
protector.SendLocalizedMessage( 1049370 ); // You must wait a while before offering your protection again.
|
|
}
|
|
else if ( protector.JusticeProtectors.Count > 0 )
|
|
{
|
|
protector.SendLocalizedMessage( 1049542 ); // You cannot protect someone while being protected.
|
|
}
|
|
else if ( protector.Map != Map.Felucca )
|
|
{
|
|
protector.SendLocalizedMessage( 1049372 ); // You cannot use this ability here.
|
|
}
|
|
else
|
|
{
|
|
protector.BeginTarget( 14, false, TargetFlags.None, new TargetCallback( OnVirtueTargeted ) );
|
|
protector.SendLocalizedMessage( 1049366 ); // Choose the player you wish to protect.
|
|
}
|
|
}
|
|
|
|
public static void OnVirtueTargeted( Mobile from, object obj )
|
|
{
|
|
PlayerMobile protector = from as PlayerMobile;
|
|
PlayerMobile pm = obj as PlayerMobile;
|
|
|
|
if ( protector == null )
|
|
return;
|
|
|
|
if ( !VirtueHelper.IsSeeker( protector, VirtueName.Justice ) )
|
|
protector.SendLocalizedMessage( 1049610 ); // You must reach the first path in this virtue to invoke it.
|
|
else if ( !protector.CanBeginAction( typeof( JusticeVirtue ) ) )
|
|
protector.SendLocalizedMessage( 1049370 ); // You must wait a while before offering your protection again.
|
|
else if ( protector.JusticeProtectors.Count > 0 )
|
|
protector.SendLocalizedMessage( 1049542 ); // You cannot protect someone while being protected.
|
|
else if ( protector.Map != Map.Felucca )
|
|
protector.SendLocalizedMessage( 1049372 ); // You cannot use this ability here.
|
|
else if ( pm == null )
|
|
protector.SendLocalizedMessage( 1049678 ); // Only players can be protected.
|
|
else if ( pm.Map != Map.Felucca )
|
|
protector.SendLocalizedMessage( 1049372 ); // You cannot use this ability here.
|
|
else if ( pm == protector || pm.Criminal || pm.Kills >= 5 )
|
|
protector.SendLocalizedMessage( 1049436 ); // That player cannot be protected.
|
|
else if ( pm.JusticeProtectors.Count > 0 )
|
|
protector.SendLocalizedMessage( 1049369 ); // You cannot protect that player right now.
|
|
else if ( pm.HasGump( typeof( AcceptProtectorGump ) ) )
|
|
protector.SendLocalizedMessage( 1049369 ); // You cannot protect that player right now.
|
|
else
|
|
pm.SendGump( new AcceptProtectorGump( protector, pm ) );
|
|
}
|
|
|
|
public static void OnVirtueAccepted( PlayerMobile protector, PlayerMobile protectee )
|
|
{
|
|
if ( !VirtueHelper.IsSeeker( protector, VirtueName.Justice ) )
|
|
{
|
|
protector.SendLocalizedMessage( 1049610 ); // You must reach the first path in this virtue to invoke it.
|
|
}
|
|
else if ( !protector.CanBeginAction( typeof( JusticeVirtue ) ) )
|
|
{
|
|
protector.SendLocalizedMessage( 1049370 ); // You must wait a while before offering your protection again.
|
|
}
|
|
else if ( protector.JusticeProtectors.Count > 0 )
|
|
{
|
|
protector.SendLocalizedMessage( 1049542 ); // You cannot protect someone while being protected.
|
|
}
|
|
else if ( protector.Map != Map.Felucca )
|
|
{
|
|
protector.SendLocalizedMessage( 1049372 ); // You cannot use this ability here.
|
|
}
|
|
else if ( protectee.Map != Map.Felucca )
|
|
{
|
|
protector.SendLocalizedMessage( 1049372 ); // You cannot use this ability here.
|
|
}
|
|
else if ( protectee == protector || protectee.Criminal || protectee.Kills >= 5 )
|
|
{
|
|
protector.SendLocalizedMessage( 1049436 ); // That player cannot be protected.
|
|
}
|
|
else if ( protectee.JusticeProtectors.Count > 0 )
|
|
{
|
|
protector.SendLocalizedMessage( 1049369 ); // You cannot protect that player right now.
|
|
}
|
|
else
|
|
{
|
|
protectee.JusticeProtectors.Add( protector );
|
|
|
|
string args = String.Format( "{0}\t{1}", protector.Name, protectee.Name );
|
|
|
|
protectee.SendLocalizedMessage( 1049451, args ); // You are now being protected by ~1_NAME~.
|
|
protector.SendLocalizedMessage( 1049452, args ); // You are now protecting ~2_NAME~.
|
|
}
|
|
}
|
|
|
|
public static void OnVirtueRejected( PlayerMobile protector, PlayerMobile protectee )
|
|
{
|
|
string args = String.Format( "{0}\t{1}", protector.Name, protectee.Name );
|
|
|
|
protectee.SendLocalizedMessage( 1049453, args ); // You have declined protection from ~1_NAME~.
|
|
protector.SendLocalizedMessage( 1049454, args ); // ~2_NAME~ has declined your protection.
|
|
|
|
if ( protector.BeginAction( typeof( JusticeVirtue ) ) )
|
|
Timer.DelayCall( TimeSpan.FromMinutes( 15.0 ), new TimerStateCallback( RejectDelay_Callback ), protector );
|
|
}
|
|
|
|
public static void RejectDelay_Callback( object state )
|
|
{
|
|
Mobile m = state as Mobile;
|
|
|
|
if ( m != null )
|
|
m.EndAction( typeof( JusticeVirtue ) );
|
|
}
|
|
|
|
public static void CheckAtrophy( Mobile from )
|
|
{
|
|
PlayerMobile pm = from as PlayerMobile;
|
|
|
|
if ( pm == null )
|
|
return;
|
|
|
|
try
|
|
{
|
|
if ( (pm.LastJusticeLoss + LossDelay) < DateTime.UtcNow )
|
|
{
|
|
if ( VirtueHelper.Atrophy( from, VirtueName.Justice, LossAmount ) )
|
|
from.SendLocalizedMessage( 1049373 ); // You have lost some Justice.
|
|
|
|
pm.LastJusticeLoss = DateTime.UtcNow;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
public class AcceptProtectorGump : Gump
|
|
{
|
|
private PlayerMobile m_Protector;
|
|
private PlayerMobile m_Protectee;
|
|
|
|
public AcceptProtectorGump( PlayerMobile protector, PlayerMobile protectee ) : base( 150, 50 )
|
|
{
|
|
m_Protector = protector;
|
|
m_Protectee = protectee;
|
|
|
|
Closable = false;
|
|
|
|
AddPage( 0 );
|
|
|
|
AddBackground( 0, 0, 396, 218, 3600 );
|
|
|
|
AddImageTiled( 15, 15, 365, 190, 2624 );
|
|
AddAlphaRegion( 15, 15, 365, 190 );
|
|
|
|
AddHtmlLocalized( 30, 20, 360, 25, 1049365, 0x7FFF, false, false ); // Another player is offering you their <a href="?ForceTopic88">protection</a>:
|
|
AddLabel( 90, 55, 1153, protector.Name );
|
|
|
|
AddImage( 50, 45, 9005 );
|
|
AddImageTiled( 80, 80, 200, 1, 9107 );
|
|
AddImageTiled( 95, 82, 200, 1, 9157 );
|
|
|
|
AddRadio( 30, 110, 9727, 9730, true, 1 );
|
|
AddHtmlLocalized( 65, 115, 300, 25, 1049444, 0x7FFF, false, false ); // Yes, I would like their protection.
|
|
|
|
AddRadio( 30, 145, 9727, 9730, false, 0 );
|
|
AddHtmlLocalized( 65, 148, 300, 25, 1049445, 0x7FFF, false, false ); // No thanks, I can take care of myself.
|
|
|
|
AddButton( 160, 175, 247, 248, 2, GumpButtonType.Reply, 0 );
|
|
|
|
AddImage( 215, 0, 50581 );
|
|
|
|
AddImageTiled( 15, 14, 365, 1, 9107 );
|
|
AddImageTiled( 380, 14, 1, 190, 9105 );
|
|
AddImageTiled( 15, 205, 365, 1, 9107 );
|
|
AddImageTiled( 15, 14, 1, 190, 9105 );
|
|
AddImageTiled( 0, 0, 395, 1, 9157 );
|
|
AddImageTiled( 394, 0, 1, 217, 9155 );
|
|
AddImageTiled( 0, 216, 395, 1, 9157 );
|
|
AddImageTiled( 0, 0, 1, 217, 9155 );
|
|
}
|
|
|
|
public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
|
|
{
|
|
if ( info.ButtonID == 2 )
|
|
{
|
|
bool okay = info.IsSwitched( 1 );
|
|
|
|
if ( okay )
|
|
JusticeVirtue.OnVirtueAccepted( m_Protector, m_Protectee );
|
|
else
|
|
JusticeVirtue.OnVirtueRejected( m_Protector, m_Protectee );
|
|
}
|
|
}
|
|
}
|
|
} |