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:
parent
f12e9745c6
commit
2ad37d54aa
214 changed files with 4881 additions and 1243 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue