Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Targeting;
|
||||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.Spells;
|
||||
using Server.Spells.Seventh;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.ACC.CSS.Systems.Ranger
|
||||
{
|
||||
public class RangerHuntersAimSpell : RangerSpell
|
||||
{
|
||||
private static SpellInfo m_Info = new SpellInfo(
|
||||
"Hunter's Aim", "Cu Ner Sinta",
|
||||
//SpellCircle.Fourth,
|
||||
212,
|
||||
9041,
|
||||
Reagent.Nightshade,
|
||||
CReagent.SpringWater,
|
||||
Reagent.Bloodmoss
|
||||
);
|
||||
|
||||
public override SpellCircle Circle
|
||||
{
|
||||
get { return SpellCircle.Fourth; }
|
||||
}
|
||||
|
||||
public override double CastDelay{ get{ return 3.0; } }
|
||||
public override int RequiredMana{ get{ return 25; } }
|
||||
public override double RequiredSkill{ get{ return 50; } }
|
||||
|
||||
private static Hashtable m_Table = new Hashtable();
|
||||
|
||||
public RangerHuntersAimSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info )
|
||||
{
|
||||
}
|
||||
|
||||
public static double GetScalar( Mobile m )
|
||||
{
|
||||
double val = 1.0;
|
||||
|
||||
if ( m.CanBeginAction( typeof( RangerHuntersAimSpell ) ) )
|
||||
val = 1.5;
|
||||
|
||||
return val;
|
||||
}
|
||||
public static bool HasEffect( Mobile m )
|
||||
{
|
||||
return ( m_Table[m] != null );
|
||||
}
|
||||
|
||||
public static void RemoveEffect( Mobile m )
|
||||
{
|
||||
object[] mods = (object[])m_Table[m];
|
||||
|
||||
if ( mods != null )
|
||||
{
|
||||
m.RemoveStatMod( ((StatMod)mods[0]).Name );
|
||||
m.RemoveStatMod( ((StatMod)mods[1]).Name );
|
||||
m.RemoveSkillMod( (SkillMod)mods[2] );
|
||||
m.RemoveSkillMod( (SkillMod)mods[3] );
|
||||
}
|
||||
|
||||
m_Table.Remove( m );
|
||||
|
||||
m.EndAction( typeof( RangerHuntersAimSpell ) );
|
||||
|
||||
m.BodyMod = 0;
|
||||
}
|
||||
|
||||
public override bool CheckCast()
|
||||
{
|
||||
if ( !base.CheckCast() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if ( !Caster.CanBeginAction( typeof( RangerHuntersAimSpell ) ) )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1005559 );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnCast()
|
||||
{
|
||||
if ( !Caster.CanBeginAction( typeof( RangerHuntersAimSpell ) ) )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1005559 );
|
||||
}
|
||||
|
||||
else if ( CheckSequence() )
|
||||
{
|
||||
object[] mods = new object[]
|
||||
{
|
||||
new StatMod( StatType.Dex, "[Ranger] Dex Offset", 5, TimeSpan.Zero ),
|
||||
new StatMod( StatType.Str, "[Ranger] Str Offset", 5, TimeSpan.Zero ),
|
||||
new DefaultSkillMod( SkillName.Archery, true, 20 ),
|
||||
new DefaultSkillMod( SkillName.Tactics, true, 20 ),
|
||||
|
||||
};
|
||||
|
||||
m_Table[Caster] = mods;
|
||||
|
||||
Caster.AddStatMod( (StatMod)mods[0] );
|
||||
Caster.AddStatMod( (StatMod)mods[1] );
|
||||
Caster.AddSkillMod( (SkillMod)mods[2] );
|
||||
Caster.AddSkillMod( (SkillMod)mods[3] );
|
||||
|
||||
double span = 1.0 * RangerHuntersAimSpell.GetScalar( Caster );
|
||||
new InternalTimer( Caster, TimeSpan.FromMinutes( (int)span ) ).Start();
|
||||
|
||||
IMount mount = Caster.Mount;
|
||||
|
||||
if ( mount != null )
|
||||
mount.Rider = null;
|
||||
|
||||
|
||||
Caster.BeginAction( typeof( RangerHuntersAimSpell ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private Mobile m_Owner;
|
||||
private DateTime m_Expire;
|
||||
|
||||
public InternalTimer( Mobile owner, TimeSpan duration ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 0.1 ) )
|
||||
{
|
||||
m_Owner = owner;
|
||||
m_Expire = DateTime.Now + duration;
|
||||
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( DateTime.Now >= m_Expire )
|
||||
{
|
||||
RangerHuntersAimSpell.RemoveEffect( m_Owner );
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user