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

@ -22,16 +22,17 @@ namespace Server.Spells.Ninjitsu
AnimalFormContext context = AnimalForm.GetContext( e.Mobile );
if( context != null && context.SpeedBoost )
e.Mobile.Send( SpeedBoost.Enabled );
e.Mobile.Send( SpeedControl.MountSpeed );
}
private static SpellInfo m_Info = new SpellInfo(
"Animal Form", null,
SpellCircle.Fourth, // 1.0s base cast delay
-1,
9002
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.0 ); } }
public override double RequiredSkill{ get{ return 0.0; } }
public override int RequiredMana{ get{ return (Core.ML ? 10 : 0); } }
public override int CastRecoveryBase{ get { return (Core.ML ? 10 : base.CastRecoveryBase); } }
@ -49,7 +50,7 @@ namespace Server.Spells.Ninjitsu
Caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
return false;
}
else if ( Necromancy.TransformationSpell.UnderTransformation( Caster ) )
else if ( TransformationSpellHelper.UnderTransformation( Caster ) )
{
Caster.SendLocalizedMessage( 1063219 ); // You cannot mimic an animal while in that form.
return false;
@ -82,7 +83,7 @@ namespace Server.Spells.Ninjitsu
{
Caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
}
else if ( Necromancy.TransformationSpell.UnderTransformation( Caster ) )
else if( TransformationSpellHelper.UnderTransformation( Caster ) )
{
Caster.SendLocalizedMessage( 1063219 ); // You cannot mimic an animal while in that form.
}
@ -154,6 +155,13 @@ namespace Server.Spells.Ninjitsu
return MorphResult.NoSkill;
}
/*
if( !m.CheckSkill( SkillName.Ninjitsu, entry.ReqSkill, entry.ReqSkill + 37.5 ) )
return MorphResult.Fail;
*
* On OSI,it seems you can only gain starting at '0' using Animal form.
*/
double ninjitsu = m.Skills.Ninjitsu.Value;
if ( ninjitsu < entry.ReqSkill + 37.5 )
@ -174,7 +182,7 @@ namespace Server.Spells.Ninjitsu
m.HueMod = entry.HueMod;
if ( entry.SpeedBoost )
m.Send( SpeedBoost.Instantiate( true ) );
m.Send( SpeedControl.MountSpeed );
SkillMod mod = null;
@ -216,7 +224,7 @@ namespace Server.Spells.Ninjitsu
m_Table.Remove( m );
if ( context.SpeedBoost )
m.Send( SpeedBoost.Instantiate( false ) );
m.Send( SpeedControl.Disable );
SkillMod mod = context.Mod;

View file

@ -10,14 +10,12 @@ namespace Server.Spells.Ninjitsu
{
public class Backstab : NinjaMove
{
// TODO: Cannot hide for 5s
public Backstab()
{
}
public override int BaseMana{ get{ return 30; } }
public override double RequiredSkill{ get{ return 20.0; } }
public override double RequiredSkill{ get{ return Core.ML ? 40.0 : 20.0; } }
public override TextDefinition AbilityMessage{ get{ return new TextDefinition( 1063089 ); } } // You prepare to Backstab your opponent.
@ -41,7 +39,16 @@ namespace Server.Spells.Ninjitsu
public override bool OnBeforeSwing( Mobile attacker, Mobile defender )
{
return Validate( attacker ) && CheckMana( attacker, true );
bool valid = Validate( attacker ) && CheckMana( attacker, true );
if( valid )
{
attacker.BeginAction( typeof( Stealth ) );
Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), delegate { attacker.EndAction( typeof( Stealth ) ); } );
}
return valid;
}
public override bool ValidatesDuringHit { get { return false; } }

View file

@ -9,14 +9,12 @@ namespace Server.Spells.Ninjitsu
{
public class FocusAttack : NinjaMove
{
// TODO: Display property bonus on equipped weapons.
public FocusAttack()
{
}
public override int BaseMana{ get{ return 20; } }
public override double RequiredSkill{ get{ return 60.0; } }
public override int BaseMana{ get{ return Core.ML ? 10 : 20; } }
public override double RequiredSkill{ get{ return Core.ML? 30.0 : 60 ; } }
public override TextDefinition AbilityMessage{ get{ return new TextDefinition( 1063095 ); } } // You prepare to focus all of your abilities into your next strike.

View file

@ -11,7 +11,7 @@ namespace Server.Spells.Ninjitsu
{
public class MirrorImage : NinjaSpell
{
private static Dictionary<Mobile, Int32> m_CloneCount = new Dictionary<Mobile, Int32>();
private static Dictionary<Mobile, int> m_CloneCount = new Dictionary<Mobile, int>();
public static bool HasClone( Mobile m )
{
@ -45,12 +45,13 @@ namespace Server.Spells.Ninjitsu
private static SpellInfo m_Info = new SpellInfo(
"Mirror Image", null,
SpellCircle.Sixth, // 1.5s base cast delay
-1,
9002
);
public override double RequiredSkill{ get{ return 40.0; } }
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.5 ); } }
public override double RequiredSkill{ get{ return Core.ML ? 20.0 : 40.0; } }
public override int RequiredMana{ get{ return 10; } }
public override bool BlockedByAnimalForm{ get{ return false; } }
@ -71,7 +72,7 @@ namespace Server.Spells.Ninjitsu
Caster.SendLocalizedMessage( 1063133 ); // You cannot summon a mirror image because you have too many followers.
return false;
}
else if ( Necromancy.TransformationSpell.UnderTransformation( Caster, typeof( HorrificBeastSpell ) ) )
else if( TransformationSpellHelper.UnderTransformation( Caster, typeof( HorrificBeastSpell ) ) )
{
Caster.SendLocalizedMessage( 1061091 ); // You cannot cast that spell in this form.
return false;
@ -102,7 +103,7 @@ namespace Server.Spells.Ninjitsu
{
Caster.SendLocalizedMessage( 1063133 ); // You cannot summon a mirror image because you have too many followers.
}
else if ( Necromancy.TransformationSpell.UnderTransformation( Caster, typeof( HorrificBeastSpell ) ) )
else if( TransformationSpellHelper.UnderTransformation( Caster, typeof( HorrificBeastSpell ) ) )
{
Caster.SendLocalizedMessage( 1061091 ); // You cannot cast that spell in this form.
}

View file

@ -10,5 +10,10 @@ namespace Server.Spells
public class NinjaMove : SpecialMove
{
public override SkillName MoveSkill{ get{ return SkillName.Ninjitsu; } }
public override void CheckGain( Mobile m )
{
m.CheckSkill( MoveSkill, RequiredSkill - 12.5, RequiredSkill + 37.5 ); //Per five on friday 02/16/07
}
}
}

View file

@ -20,7 +20,8 @@ namespace Server.Spells.Ninjitsu
public override bool BlocksMovement{ get{ return false; } }
public override int CastDelayBase{ get{ return 1; } }
//public override int CastDelayBase{ get{ return 1; } }
public override double CastDelayFastScalar { get { return 0; } }
public override int CastRecoveryBase{ get{ return 7; } }
@ -36,7 +37,8 @@ namespace Server.Spells.Ninjitsu
if ( from.NetState == null )
return false;
return ( (from.NetState.Flags & 0x10) != 0 );
//return ( (from.NetState.Flags & 0x10) != 0 );
return from.NetState.SupportsExpansion( Expansion.SE );
}
public override bool CheckCast()
@ -90,7 +92,7 @@ namespace Server.Spells.Ninjitsu
public override void GetCastSkills( out double min, out double max )
{
min = RequiredSkill;
min = RequiredSkill - 12.5; //Per 5 on friday 2/16/07
max = RequiredSkill + 37.5;
}

View file

@ -11,11 +11,12 @@ namespace Server.Spells.Ninjitsu
{
private static SpellInfo m_Info = new SpellInfo(
"Shadowjump", null,
SpellCircle.Fourth, // 1.0s base cast delay
-1,
9002
);
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds( 1.0 ); } }
public override double RequiredSkill{ get{ return 50.0; } }
public override int RequiredMana{ get{ return 15; } }

View file

@ -10,14 +10,12 @@ namespace Server.Spells.Ninjitsu
{
public class SurpriseAttack : NinjaMove
{
// TODO: Cannot hide for 5s
public SurpriseAttack()
{
}
public override int BaseMana{ get{ return 20; } }
public override double RequiredSkill{ get{ return 30.0; } }
public override double RequiredSkill{ get{ return Core.ML ? 60.0 : 30.0; } }
public override TextDefinition AbilityMessage{ get{ return new TextDefinition( 1063128 ); } } // You prepare to surprise your prey.
@ -34,7 +32,16 @@ namespace Server.Spells.Ninjitsu
public override bool OnBeforeSwing( Mobile attacker, Mobile defender )
{
return Validate( attacker ) && CheckMana( attacker, true );
bool valid = Validate( attacker ) && CheckMana( attacker, true );
if( valid )
{
attacker.BeginAction( typeof( Stealth ) );
Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), delegate { attacker.EndAction( typeof( Stealth ) ); } );
}
return valid;
}
public override bool ValidatesDuringHit { get { return false; } }