runuo/Scripts/Items/Weapons/HitLower.cs
2006-06-15 04:14:30 +00:00

96 lines
No EOL
2.1 KiB
C#

using System;
using System.Collections;
using Server;
namespace Server.Items
{
public class HitLower
{
public static readonly TimeSpan AttackEffectDuration = TimeSpan.FromSeconds( 10.0 );
public static readonly TimeSpan DefenseEffectDuration = TimeSpan.FromSeconds( 8.0 );
private static Hashtable m_AttackTable = new Hashtable();
public static bool IsUnderAttackEffect( Mobile m )
{
return m_AttackTable.Contains( m );
}
public static bool ApplyAttack( Mobile m )
{
if ( IsUnderAttackEffect( m ) )
return false;
m_AttackTable[m] = new AttackTimer( m );
m.SendLocalizedMessage( 1062319 ); // Your attack chance has been reduced!
return true;
}
private static void RemoveAttack( Mobile m )
{
m_AttackTable.Remove( m );
m.SendLocalizedMessage( 1062320 ); // Your attack chance has returned to normal.
}
private class AttackTimer : Timer
{
private Mobile m_Player;
public AttackTimer( Mobile player ) : base( AttackEffectDuration )
{
m_Player = player;
Priority = TimerPriority.TwoFiftyMS;
Start();
}
protected override void OnTick()
{
RemoveAttack( m_Player );
}
}
private static Hashtable m_DefenseTable = new Hashtable();
public static bool IsUnderDefenseEffect( Mobile m )
{
return m_DefenseTable.Contains( m );
}
public static bool ApplyDefense( Mobile m )
{
if ( IsUnderDefenseEffect( m ) )
return false;
m_DefenseTable[m] = new DefenseTimer( m );
m.SendLocalizedMessage( 1062318 ); // Your defense chance has been reduced!
return true;
}
private static void RemoveDefense( Mobile m )
{
m_DefenseTable.Remove( m );
m.SendLocalizedMessage( 1062321 ); // Your defense chance has returned to normal.
}
private class DefenseTimer : Timer
{
private Mobile m_Player;
public DefenseTimer( Mobile player ) : base( DefenseEffectDuration )
{
m_Player = player;
Priority = TimerPriority.TwoFiftyMS;
Start();
}
protected override void OnTick()
{
RemoveDefense( m_Player );
}
}
}
}