Lots of fixes, changes, rewrites of various things, including but not limited to:

Logging of staff crafting items,
Fixes for the OSI client changes
The potion stacking stuff
BaseWeapon fix, so that damage increase things don't multiply themselves.
admin gump fixes for Firewall
Various display tweaks for weight
SoS no longer spawn in Tokuno
Hiryu hues happified to OSI standards
staff now see alliance chat correctly
Play barkeeper text increased per OSI
Various other OSI skill requirement changes
Various unimplemented features of the SE moves
EventSink for when the client version is received from client.
Client validation moved out of the core.
Client version validation now has options to ignore/kick/warn/annoy.  Automagically tries to detect current client.
Reverted the delayeddamagecontext back to OSI standards.
Can no longer use bags of sending in jail.

MagerySpell implemented. Now only Magery spells have a circle, and various other properties of 'em.
TransformationSpellHelper now implemented.  Things moved around for this.
Spells now need a Timespan for the cast delay, instead of arbitrarily based on Circle.  Circle doesn't make sense for non-Magery spells!
Alot of the spellweaving spells added to OSI standards.
This commit is contained in:
asayre 2007-05-26 03:12:41 +00:00
parent f12e9745c6
commit 2ad37d54aa
214 changed files with 4881 additions and 1243 deletions

View file

@ -13,13 +13,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Animate Dead", "Uus Corp",
SpellCircle.Fourth, // 0.5 + 1.0 = 1.5s base cast delay
203,
9031,
Reagent.GraveDust,
Reagent.DaemonBlood
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.5 ); } }
public override double RequiredSkill{ get{ return 40.0; } }
public override int RequiredMana{ get{ return 23; } }

View file

@ -10,12 +10,13 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Blood Oath", "In Jux Mani Xen",
SpellCircle.Fourth, // 0.5 + 1.0 = 1.5s base cast delay
203,
9031,
Reagent.DaemonBlood
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.5 ); } }
public override double RequiredSkill{ get{ return 20.0; } }
public override int RequiredMana{ get{ return 13; } }
@ -69,6 +70,7 @@ namespace Server.Spells.Necromancy
m.FixedParticles( 0x3728, 1, 13, 9502, 33, 7, (EffectLayer)255 );
TimeSpan duration = TimeSpan.FromSeconds( ((GetDamageSkill( Caster ) - GetResistSkill( m )) / 8) + 8 );
m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 ); //Skill check for gain
new ExpireTimer( Caster, m, duration ).Start();
}

View file

@ -10,13 +10,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Corpse Skin", "In Agle Corp Ylem",
SpellCircle.Fourth, // 0.5 + 1.0 = 1.5s base cast delay
203,
9051,
Reagent.BatWing,
Reagent.GraveDust
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.5 ); } }
public override double RequiredSkill{ get{ return 20.0; } }
public override int RequiredMana{ get{ return 11; } }
@ -59,6 +60,7 @@ namespace Server.Spells.Necromancy
double ss = GetDamageSkill( Caster );
double mr = ( Caster == m ? 0.0 : GetResistSkill( m ) );
m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 ); //Skill check for gain
TimeSpan duration = TimeSpan.FromSeconds( ((ss - mr) / 2.5) + 40.0 );

View file

@ -10,12 +10,13 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Curse Weapon", "An Sanct Gra Char",
SpellCircle.First, // 0.5 + 0.25 = 0.75s base cast delay
203,
9031,
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 0.75 ); } }
public override double RequiredSkill{ get{ return 0.0; } }
public override int RequiredMana{ get{ return 7; } }

View file

@ -11,13 +11,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Evil Omen", "Pas Tym An Sanct",
SpellCircle.First, // 0.5 + 0.25 = 0.75s base cast delay
203,
9031,
Reagent.BatWing,
Reagent.NoxCrystal
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 0.75 ); } }
public override double RequiredSkill{ get{ return 20.0; } }
public override int RequiredMana{ get{ return 11; } }

View file

@ -14,13 +14,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Exorcism", "Ort Corp Grav",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.NoxCrystal,
Reagent.GraveDust
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill { get { return 80.0; } }
public override int RequiredMana { get { return 40; } }
@ -42,7 +43,7 @@ namespace Server.Spells.Necromancy
public override bool DelayedDamage { get { return false; } }
private const int Range = 18;
private static readonly int Range = (Core.ML ? 48 : 18);
public override int ComputeKarmaAward()
{
@ -59,10 +60,6 @@ namespace Server.Spells.Necromancy
}
else if( CheckSequence() )
{
/* Creates a withering frost around the Caster,
* which deals Cold Damage to all valid targets in a radius of 5 tiles.
*/
Map map = Caster.Map;
if( map != null )
@ -73,17 +70,11 @@ namespace Server.Spells.Necromancy
if( IsValidTarget( m ) )
targets.Add( m );
//Effects.PlaySound( Caster.Location, map, 0x1FB );
//Effects.PlaySound( Caster.Location, map, 0x10B );
//Effects.SendLocationParticles( EffectItem.Create( Caster.Location, map, EffectItem.DefaultDuration ), 0x37CC, 1, 40, 97, 3, 9917, 0 );
for( int i = 0; i < targets.Count; ++i )
{
Mobile m = targets[i];
//m.FixedParticles( 0x374A, 1, 15, 9502, 97, 3, (EffectLayer)255 );
//Suprisingly, no effects
//Suprisingly, no sparkle type effects
m.Location = GetNearestShrine( m );
}
@ -97,10 +88,6 @@ namespace Server.Spells.Necromancy
{
if( !m.Player || m.Alive )
return false;
/*
if( m.Corpse != null && m.Corpse.Map == m.Map )
return false;
* */
Corpse c = m.Corpse as Corpse;
Map map = m.Map;

View file

@ -10,13 +10,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Horrific Beast", "Rel Xen Vas Bal",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.BatWing,
Reagent.DaemonBlood
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 40.0; } }
public override int RequiredMana{ get{ return 11; } }
@ -26,10 +27,17 @@ namespace Server.Spells.Necromancy
{
}
public override void PlayEffect( Mobile m )
public override void DoEffect( Mobile m )
{
m.PlaySound( 0x165 );
m.FixedParticles( 0x3728, 1, 13, 9918, 92, 3, EffectLayer.Head );
m.Delta( MobileDelta.WeaponDamage );
}
public override void RemoveEffect( Mobile m )
{
m.Delta( MobileDelta.WeaponDamage );
}
}
}

View file

@ -10,7 +10,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Lich Form", "Rel Xen Corp Ort",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.GraveDust,
@ -18,6 +17,8 @@ namespace Server.Spells.Necromancy
Reagent.NoxCrystal
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 70.0; } }
public override int RequiredMana{ get{ return 23; } }
@ -33,7 +34,7 @@ namespace Server.Spells.Necromancy
{
}
public override void PlayEffect( Mobile m )
public override void DoEffect( Mobile m )
{
m.PlaySound( 0x19C );
m.FixedParticles( 0x3709, 1, 30, 9904, 1108, 6, EffectLayer.RightFoot );

View file

@ -10,7 +10,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Mind Rot", "Wis An Ben",
SpellCircle.Fourth, // 0.5 + 1.0 = 1.5s base cast delay
203,
9031,
Reagent.BatWing,
@ -18,6 +17,8 @@ namespace Server.Spells.Necromancy
Reagent.DaemonBlood
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.5 ); } }
public override double RequiredSkill{ get{ return 30.0; } }
public override int RequiredMana{ get{ return 17; } }
@ -50,6 +51,7 @@ namespace Server.Spells.Necromancy
m.FixedParticles( 0x373A, 1, 17, 9903, 15, 4, EffectLayer.Head );
TimeSpan duration = TimeSpan.FromSeconds( (((GetDamageSkill( Caster ) - GetResistSkill( m )) / 5.0) + 20.0) * (m.Player ? 1.0 : 2.0 ) );
m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 ); //Skill check for gain
if ( m.Player )
SetMindRotScalar( Caster, m, 1.25, duration );

View file

@ -11,9 +11,11 @@ namespace Server.Spells.Necromancy
public override SkillName CastSkill{ get{ return SkillName.Necromancy; } }
public override SkillName DamageSkill{ get{ return SkillName.SpiritSpeak; } }
//public override int CastDelayBase{ get{ return base.CastDelayBase; } } // Reference, 3
public override bool ClearHandsOnCast{ get{ return false; } }
public override int CastDelayFastScalar{ get{ return (Core.SE? base.CastDelayFastScalar : 0); } } // Necromancer spells are not effected by fast cast items, though they are by fast cast recovery
public override double CastDelayFastScalar{ get{ return (Core.SE? base.CastDelayFastScalar : 0); } } // Necromancer spells are not affected by fast cast items, though they are by fast cast recovery
public NecromancerSpell( Mobile caster, Item scroll, SpellInfo info ) : base( caster, scroll, info )
{
@ -21,7 +23,11 @@ namespace Server.Spells.Necromancy
public override int ComputeKarmaAward()
{
return -(70 + (10 * (int)Circle));
//TODO: Verify this formula being that Necro spells don't HAVE a circle.
//return -(70 + (10 * (int)Circle));
return -(40 + (int)(10 * (CastDelayBase.TotalSeconds / CastDelaySecondsPerTick)));
}
public override void GetCastSkills( out double min, out double max )

View file

@ -10,13 +10,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Pain Spike", "In Sar",
SpellCircle.Second, // 0.5 + 0.5 = 1s base cast delay
203,
9031,
Reagent.GraveDust,
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.0 ); } }
public override double RequiredSkill{ get{ return 20.0; } }
public override int RequiredMana{ get{ return 5; } }
@ -37,7 +38,7 @@ namespace Server.Spells.Necromancy
{
SpellHelper.Turn( Caster, m );
SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m );
//SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); //Irrelevent asfter AoS
/* Temporarily causes intense physical pain to the target, dealing direct damage.
* After 10 seconds the spell wears off, and if the target is still alive,
@ -49,6 +50,7 @@ namespace Server.Spells.Necromancy
m.PlaySound( 0x210 );
double damage = ((GetDamageSkill( Caster ) - GetResistSkill( m )) / 10) + (m.Player ? 18 : 30);
m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 ); //Skill check for gain
if ( damage < 1 )
damage = 1;

View file

@ -10,17 +10,18 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Poison Strike", "In Vas Nox",
(Core.ML ? SpellCircle.Fifth : // 0.5 + 1.25 = 1.75s base cast delay
SpellCircle.Fourth), // 0.5 + 1.0 = 1.5s base cast delay
203,
9031,
Reagent.NoxCrystal
);
public override double RequiredSkill{ get{ return 50.0; } }
public override int RequiredMana{ get{ return 17; } }
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( (Core.ML ? 1.75 : 1.5) ); } }
public PoisonStrikeSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info )
public override double RequiredSkill { get { return 50.0; } }
public override int RequiredMana { get { return 17; } }
public PoisonStrikeSpell( Mobile caster, Item scroll )
: base( caster, scroll, m_Info )
{
}
@ -29,11 +30,11 @@ namespace Server.Spells.Necromancy
Caster.Target = new InternalTarget( this );
}
public override bool DelayedDamage{ get{ return false; } }
public override bool DelayedDamage { get { return false; } }
public void Target( Mobile m )
{
if ( CheckHSequence( m ) )
if( CheckHSequence( m ) )
{
SpellHelper.Turn( Caster, m );
@ -42,7 +43,7 @@ namespace Server.Spells.Necromancy
* One tile from main target receives 50% damage, two tiles from target receives 33% damage.
*/
CheckResisted( m ); // Check magic resist for skill, but do not use return value
//CheckResisted( m ); // Check magic resist for skill, but do not use return value //reports from OSI: Necro spells don't give Resist gain
Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x36B0, 1, 14, 63, 7, 9915, 0 );
Effects.PlaySound( m.Location, m.Map, 0x229 );
@ -51,23 +52,23 @@ namespace Server.Spells.Necromancy
Map map = m.Map;
if ( map != null )
if( map != null )
{
List<Mobile> targets = new List<Mobile>();
foreach ( Mobile targ in m.GetMobilesInRange( 2 ) )
if ( (Caster == targ || SpellHelper.ValidIndirectTarget( Caster, targ )) && Caster.CanBeHarmful( targ, false ) )
foreach( Mobile targ in m.GetMobilesInRange( 2 ) )
if( (Caster == targ || SpellHelper.ValidIndirectTarget( Caster, targ )) && Caster.CanBeHarmful( targ, false ) )
targets.Add( targ );
for ( int i = 0; i < targets.Count; ++i )
for( int i = 0; i < targets.Count; ++i )
{
Mobile targ = targets[i];
int num;
if ( targ.InRange( m.Location, 0 ) )
if( targ.InRange( m.Location, 0 ) )
num = 1;
else if ( targ.InRange( m.Location, 1 ) )
else if( targ.InRange( m.Location, 1 ) )
num = 2;
else
num = 3;
@ -85,15 +86,16 @@ namespace Server.Spells.Necromancy
{
private PoisonStrikeSpell m_Owner;
public InternalTarget( PoisonStrikeSpell owner ) : base( 12, false, TargetFlags.Harmful )
public InternalTarget( PoisonStrikeSpell owner )
: base( 12, false, TargetFlags.Harmful )
{
m_Owner = owner;
}
protected override void OnTarget( Mobile from, object o )
{
if ( o is Mobile )
m_Owner.Target( (Mobile) o );
if( o is Mobile )
m_Owner.Target( (Mobile)o );
}
protected override void OnTargetFinish( Mobile from )

View file

@ -10,13 +10,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Strangle", "In Bal Nox",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
209,
9031,
Reagent.DaemonBlood,
Reagent.NoxCrystal
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 65.0; } }
public override int RequiredMana{ get{ return 29; } }
@ -35,7 +36,7 @@ namespace Server.Spells.Necromancy
{
SpellHelper.Turn( Caster, m );
SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m );
//SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); //Irrelevent after AoS
/* Temporarily chokes off the air suply of the target with poisonous fumes.
* The target is inflicted with poison damage over time.

View file

@ -12,7 +12,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Summon Familiar", "Kal Xen Bal",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.BatWing,
@ -20,6 +19,8 @@ namespace Server.Spells.Necromancy
Reagent.DaemonBlood
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 30.0; } }
public override int RequiredMana{ get{ return 17; } }

View file

@ -7,7 +7,7 @@ using Server.Spells.Seventh;
namespace Server.Spells.Necromancy
{
public abstract class TransformationSpell : NecromancerSpell
public abstract class TransformationSpell : NecromancerSpell, ITransformationSpell
{
public abstract int Body{ get; }
public virtual int Hue{ get{ return 0; } }
@ -26,116 +26,15 @@ namespace Server.Spells.Necromancy
public override bool CheckCast()
{
/*if ( Caster.Mounted )
{
Caster.SendLocalizedMessage( 1042561 ); // Please dismount first.
if( !TransformationSpellHelper.CheckCast( Caster, this ) )
return false;
}
else */
if ( Factions.Sigil.ExistsOn( Caster ) )
{
Caster.SendLocalizedMessage( 1061632 ); // You can't do that while carrying the sigil.
return false;
}
else if ( !Caster.CanBeginAction( typeof( PolymorphSpell ) ) )
{
Caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
return false;
}
else if ( Spells.Ninjitsu.AnimalForm.UnderTransformation( Caster ) )
{
Caster.SendLocalizedMessage( 1061091 ); // You cannot cast that spell in this form.
return false;
}
return base.CheckCast();
}
public override void OnCast()
{
Mobile caster = this.Caster;
/*if ( caster.Mounted )
{
caster.SendLocalizedMessage( 1042561 ); // Please dismount first.
}
else */
if ( Factions.Sigil.ExistsOn( Caster ) )
{
Caster.SendLocalizedMessage( 1061632 ); // You can't do that while carrying the sigil.
}
else if ( !caster.CanBeginAction( typeof( PolymorphSpell ) ) )
{
Caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
}
else if ( Spells.Ninjitsu.AnimalForm.UnderTransformation( Caster ) )
{
Caster.SendLocalizedMessage( 1061091 ); // You cannot cast that spell in this form.
}
else if ( !caster.CanBeginAction( typeof( IncognitoSpell ) ) || (caster.IsBodyMod && GetContext( caster ) == null) )
{
DoFizzle();
}
else if ( CheckSequence() )
{
TransformContext context = GetContext( caster );
Type ourType = this.GetType();
bool wasTransformed = ( context != null );
bool ourTransform = ( wasTransformed && context.Type == ourType );
if ( wasTransformed )
{
RemoveContext( caster, context, ourTransform );
if ( ourTransform )
{
caster.PlaySound( 0xFA );
caster.FixedParticles( 0x3728, 1, 13, 5042, EffectLayer.Waist );
}
}
if ( !ourTransform )
{
List<ResistanceMod> mods = new List<ResistanceMod>();
if ( PhysResistOffset != 0 )
mods.Add( new ResistanceMod( ResistanceType.Physical, PhysResistOffset ) );
if ( FireResistOffset != 0 )
mods.Add( new ResistanceMod( ResistanceType.Fire, FireResistOffset ) );
if ( ColdResistOffset != 0 )
mods.Add( new ResistanceMod( ResistanceType.Cold, ColdResistOffset ) );
if ( PoisResistOffset != 0 )
mods.Add( new ResistanceMod( ResistanceType.Poison, PoisResistOffset ) );
if ( NrgyResistOffset != 0 )
mods.Add( new ResistanceMod( ResistanceType.Energy, NrgyResistOffset ) );
if ( !((Body)this.Body).IsHuman )
{
Mobiles.IMount mt = Caster.Mount;
if ( mt != null )
mt.Rider = null;
}
caster.BodyMod = this.Body;
caster.HueMod = this.Hue;
for ( int i = 0; i < mods.Count; ++i )
caster.AddResistanceMod( mods[i] );
PlayEffect( caster );
Timer timer = new TransformTimer( caster, this );
timer.Start();
AddContext( caster, new TransformContext( timer, mods, ourType ) );
}
}
TransformationSpellHelper.OnCast( Caster, this );
FinishSequence();
}
@ -146,109 +45,12 @@ namespace Server.Spells.Necromancy
{
}
public virtual void PlayEffect( Mobile m )
public virtual void DoEffect( Mobile m )
{
}
private static Hashtable m_Table = new Hashtable();
public static void AddContext( Mobile m, TransformContext context )
public virtual void RemoveEffect( Mobile m )
{
m_Table[m] = context;
if ( context.Type == typeof( HorrificBeastSpell ) )
m.Delta( MobileDelta.WeaponDamage );
}
public static void RemoveContext( Mobile m, bool resetGraphics )
{
TransformContext context = GetContext( m );
if ( context != null )
RemoveContext( m, context, resetGraphics );
}
public static void RemoveContext( Mobile m, TransformContext context, bool resetGraphics )
{
m_Table.Remove( m );
List<ResistanceMod> mods = context.Mods;
for ( int i = 0; i < mods.Count; ++i )
m.RemoveResistanceMod( mods[i] );
if ( resetGraphics )
{
m.HueMod = -1;
m.BodyMod = 0;
}
context.Timer.Stop();
if ( context.Type == typeof( HorrificBeastSpell ) )
m.Delta( MobileDelta.WeaponDamage );
}
public static TransformContext GetContext( Mobile m )
{
return ( m_Table[m] as TransformContext );
}
public static bool UnderTransformation( Mobile m )
{
return ( GetContext( m ) != null );
}
public static bool UnderTransformation( Mobile m, Type type )
{
TransformContext context = GetContext( m );
return ( context != null && context.Type == type );
}
}
public class TransformContext
{
private Timer m_Timer;
private List<ResistanceMod> m_Mods;
private Type m_Type;
public Timer Timer{ get{ return m_Timer; } }
public List<ResistanceMod> Mods{ get{ return m_Mods; } }
public Type Type{ get{ return m_Type; } }
public TransformContext( Timer timer, List<ResistanceMod> mods, Type type )
{
m_Timer = timer;
m_Mods = mods;
m_Type = type;
}
}
public class TransformTimer : Timer
{
private Mobile m_Mobile;
private TransformationSpell m_Spell;
public TransformTimer( Mobile from, TransformationSpell spell ) : base( TimeSpan.FromSeconds( spell.TickRate ), TimeSpan.FromSeconds( spell.TickRate ) )
{
m_Mobile = from;
m_Spell = spell;
Priority = TimerPriority.TwoFiftyMS;
}
protected override void OnTick()
{
if ( m_Mobile.Deleted || !m_Mobile.Alive || m_Mobile.Body != m_Spell.Body || m_Mobile.Hue != m_Spell.Hue )
{
TransformationSpell.RemoveContext( m_Mobile, true );
Stop();
}
else
{
m_Spell.OnTick( m_Mobile );
}
}
}
}

View file

@ -10,7 +10,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Vampiric Embrace", "Rel Xen An Sanct",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.BatWing,
@ -18,6 +17,8 @@ namespace Server.Spells.Necromancy
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 99.0; } }
public override int RequiredMana{ get{ return 23; } }
@ -43,7 +44,7 @@ namespace Server.Spells.Necromancy
}
}
public override void PlayEffect( Mobile m )
public override void DoEffect( Mobile m )
{
Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x373A, 1, 17, 1108, 7, 9914, 0 );
Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x376A, 1, 22, 67, 7, 9502, 0 );

View file

@ -11,7 +11,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Vengeful Spirit", "Kal Xen Bal Beh",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.BatWing,
@ -19,6 +18,8 @@ namespace Server.Spells.Necromancy
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 80.0; } }
public override int RequiredMana{ get{ return 41; } }

View file

@ -10,7 +10,6 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Wither", "Kal Vas An Flam",
SpellCircle.Third, // 0.5 + 0.75 = 1.25s base cast delay
203,
9031,
Reagent.NoxCrystal,
@ -18,6 +17,8 @@ namespace Server.Spells.Necromancy
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.25 ); } }
public override double RequiredSkill{ get{ return 60.0; } }
public override int RequiredMana{ get{ return 23; } }

View file

@ -10,13 +10,14 @@ namespace Server.Spells.Necromancy
{
private static SpellInfo m_Info = new SpellInfo(
"Wraith Form", "Rel Xen Um",
SpellCircle.Sixth, // 0.5 + 1.5 = 2s base cast delay
203,
9031,
Reagent.NoxCrystal,
Reagent.PigIron
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 2.0 ); } }
public override double RequiredSkill{ get{ return 20.0; } }
public override int RequiredMana{ get{ return 17; } }
@ -33,7 +34,7 @@ namespace Server.Spells.Necromancy
{
}
public override void PlayEffect( Mobile m )
public override void DoEffect( Mobile m )
{
m.PlaySound( 0x17F );
m.FixedParticles( 0x374A, 1, 15, 9902, 1108, 4, EffectLayer.Waist );