This commit is contained in:
mark 2009-07-05 04:03:37 +00:00
parent 879e2fc778
commit f2b9f04620
29 changed files with 62 additions and 55 deletions

View file

@ -4950,7 +4950,7 @@ namespace Server.Mobiles
protected override void OnTick()
{
if( Core.ML && m_Creature.IsDeadBondedPet );
if( Core.ML && m_Creature.IsDeadBondedPet )
{
m_Creature.Delete();
}

View file

@ -611,9 +611,9 @@ namespace Server.Engines.CannedEvil
return Location;
}
private const int Level1 = 5; // First spawn level from 0-5 red skulls
private const int Level2 = 9; // Second spawn level from 6-9 red skulls
private const int Level3 = 13; // Third spawn level from 10-13 red skulls
private const int Level1 = 4; // First spawn level from 0-4 red skulls
private const int Level2 = 8; // Second spawn level from 5-8 red skulls
private const int Level3 = 12; // Third spawn level from 9-12 red skulls
public int GetSubLevel()
{

View file

@ -225,7 +225,7 @@ namespace Server.Gumps
public override void OnResponse( Mobile from, string text )
{
if ( m_Book.Deleted || !from.InRange( m_Book.GetWorldLocation(), 1 ) )
if ( m_Book.Deleted || !from.InRange( m_Book.GetWorldLocation(), (Core.ML ? 3 : 1) ) )
return;
if ( m_Book.CheckAccess( from ) )
@ -247,7 +247,7 @@ namespace Server.Gumps
{
from.SendLocalizedMessage( 502415 ); // Request cancelled.
if ( !m_Book.Deleted && from.InRange( m_Book.GetWorldLocation(), 1 ) )
if ( !m_Book.Deleted && from.InRange( m_Book.GetWorldLocation(), (Core.ML ? 3 : 1) ) )
{
from.CloseGump( typeof( RunebookGump ) );
from.SendGump( new RunebookGump( from, m_Book ) );
@ -259,7 +259,7 @@ namespace Server.Gumps
{
Mobile from = state.Mobile;
if ( m_Book.Deleted || !from.InRange( m_Book.GetWorldLocation(), 1 ) || !Multis.DesignContext.Check( from ) )
if ( m_Book.Deleted || !from.InRange( m_Book.GetWorldLocation(), (Core.ML ? 3 : 1) ) || !Multis.DesignContext.Check( from ) )
return;
int buttonID = info.ButtonID;

View file

@ -41,7 +41,7 @@ namespace Server.Items
}
#endregion
public virtual bool CanFortify{ get{ return false; } }
public virtual bool CanFortify{ get{ return true; } }
private int m_MaxHitPoints;
private int m_HitPoints;

View file

@ -302,7 +302,13 @@ namespace Server.Items
public override bool CanEquip( Mobile from )
{
if ( !Ethics.Ethic.CheckEquip( from, this ) )
{
return false;
}
else if ( !from.CanBeginAction( typeof( BaseWeapon ) ) )
{
return false;
}
return base.CanEquip( from );
}

View file

@ -179,11 +179,12 @@ namespace Server.Items
from.SendLocalizedMessage( 1063024 ); // You cannot perform this special move right now.
return false;
}
if ( Core.ML && from.Spell != null )
{
from.SendLocalizedMessage( 1063024 ); // You cannot perform this special move right now.
return false;
}
if ( Core.ML && from.Spell != null )
{
from.SendLocalizedMessage( 1063024 ); // You cannot perform this special move right now.
return false;
}
return CheckSkills( from ) && CheckMana( from, false );
}

View file

@ -1140,7 +1140,10 @@ namespace Server.Items
BaseWeapon weapon = defender.Weapon as BaseWeapon;
if ( weapon != null )
{
defender.FixedParticles(0x3779, 1, 15, 0x158B, 0x0, 0x3, EffectLayer.Waist);
weapon.OnSwing( defender, attacker );
}
CounterAttack.StopCountering( defender );
}
@ -2129,8 +2132,8 @@ namespace Server.Items
{
if ( checkSkills )
{
attacker.CheckSkill( SkillName.Tactics, 0.0, 120.0 ); // Passively check tactics for gain
attacker.CheckSkill( SkillName.Anatomy, 0.0, 120.0 ); // Passively check Anatomy for gain
attacker.CheckSkill( SkillName.Tactics, 0.0, attacker.Skills[SkillName.Tactics].Cap ); // Passively check tactics for gain
attacker.CheckSkill( SkillName.Anatomy, 0.0, attacker.Skills[SkillName.Anatomy].Cap ); // Passively check Anatomy for gain
if ( Type == WeaponType.Axe )
attacker.CheckSkill( SkillName.Lumberjacking, 0.0, 100.0 ); // Passively check Lumberjacking for gain
@ -2197,8 +2200,8 @@ namespace Server.Items
{
if ( checkSkills )
{
attacker.CheckSkill( SkillName.Tactics, 0.0, 120.0 ); // Passively check tactics for gain
attacker.CheckSkill( SkillName.Anatomy, 0.0, 120.0 ); // Passively check Anatomy for gain
attacker.CheckSkill( SkillName.Tactics, 0.0, attacker.Skills[SkillName.Tactics].Cap ); // Passively check tactics for gain
attacker.CheckSkill( SkillName.Anatomy, 0.0, attacker.Skills[SkillName.Anatomy].Cap ); // Passively check Anatomy for gain
if ( Type == WeaponType.Axe )
attacker.CheckSkill( SkillName.Lumberjacking, 0.0, 100.0 ); // Passively check Lumberjacking for gain

View file

@ -123,7 +123,7 @@ namespace Server.Items
}
arachnid.Opposition = new SlayerGroup[]{ reptilian };
arachnid.FoundOn = new Type[]{ typeof( AncientWyrm ), typeof( Dragon ), typeof( OphidianMatriarch ), typeof( ShadowWyrm ) };
arachnid.FoundOn = new Type[]{ typeof( AncientWyrm ), typeof( GreaterDragon ), typeof( Dragon ), typeof( OphidianMatriarch ), typeof( ShadowWyrm ) };
arachnid.Super = new SlayerEntry( SlayerName.ArachnidDoom, typeof( DreadSpider ), typeof( FrostSpider ), typeof( GiantBlackWidow ), typeof( GiantSpider ), typeof( Mephitis ), typeof( Scorpion ), typeof( TerathanAvenger ), typeof( TerathanDrone ), typeof( TerathanMatriarch ), typeof( TerathanWarrior ) );
arachnid.Entries = new SlayerEntry[]
{
@ -134,10 +134,10 @@ namespace Server.Items
reptilian.Opposition = new SlayerGroup[]{ arachnid };
reptilian.FoundOn = new Type[]{ typeof( TerathanAvenger ), typeof( TerathanMatriarch ) };
reptilian.Super = new SlayerEntry( SlayerName.ReptilianDeath, typeof( AncientWyrm ), typeof( DeepSeaSerpent ), typeof( Dragon ), typeof( Drake ), typeof( GiantIceWorm ), typeof( IceSerpent ), typeof( GiantSerpent ), typeof( Hiryu ), typeof( IceSnake ), typeof( JukaLord ), typeof( JukaMage ), typeof( JukaWarrior ), typeof( LavaSerpent ), typeof( LavaSnake ), typeof( LesserHiryu ), typeof( Lizardman ), typeof( OphidianArchmage ), typeof( OphidianKnight ), typeof( OphidianMage ), typeof( OphidianMatriarch ), typeof( OphidianWarrior ), typeof( SeaSerpent ), typeof( Serado ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SilverSerpent ), typeof( SkeletalDragon ), typeof( Snake ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ), typeof( Yamandon ) );
reptilian.Super = new SlayerEntry( SlayerName.ReptilianDeath, typeof( AncientWyrm ), typeof( DeepSeaSerpent ), typeof( GreaterDragon ), typeof( Dragon ), typeof( Drake ), typeof( GiantIceWorm ), typeof( IceSerpent ), typeof( GiantSerpent ), typeof( Hiryu ), typeof( IceSnake ), typeof( JukaLord ), typeof( JukaMage ), typeof( JukaWarrior ), typeof( LavaSerpent ), typeof( LavaSnake ), typeof( LesserHiryu ), typeof( Lizardman ), typeof( OphidianArchmage ), typeof( OphidianKnight ), typeof( OphidianMage ), typeof( OphidianMatriarch ), typeof( OphidianWarrior ), typeof( SeaSerpent ), typeof( Serado ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SilverSerpent ), typeof( SkeletalDragon ), typeof( Snake ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ), typeof( Yamandon ) );
reptilian.Entries = new SlayerEntry[]
{
new SlayerEntry( SlayerName.DragonSlaying, typeof( AncientWyrm ), typeof( Dragon ), typeof( Drake ), typeof( Hiryu ), typeof( LesserHiryu ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SkeletalDragon ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ) ),
new SlayerEntry( SlayerName.DragonSlaying, typeof( AncientWyrm ), typeof( GreaterDragon ), typeof( Dragon ), typeof( Drake ), typeof( Hiryu ), typeof( LesserHiryu ), typeof( SerpentineDragon ), typeof( ShadowWyrm ), typeof( SkeletalDragon ), typeof( SwampDragon ), typeof( WhiteWyrm ), typeof( Wyvern ) ),
new SlayerEntry( SlayerName.LizardmanSlaughter, typeof( Lizardman ) ),
new SlayerEntry( SlayerName.Ophidian, typeof( OphidianArchmage ), typeof( OphidianKnight ), typeof( OphidianMage ), typeof( OphidianMatriarch ), typeof( OphidianWarrior ) ),
new SlayerEntry( SlayerName.SnakesBane, typeof( DeepSeaSerpent ), typeof( GiantIceWorm ), typeof( GiantSerpent ), typeof( IceSerpent ), typeof( IceSnake ), typeof( LavaSerpent ), typeof( LavaSnake ), typeof( SeaSerpent ), typeof( Serado ), typeof( SilverSerpent ), typeof( Snake ), typeof( Yamandon ) )

View file

@ -207,7 +207,7 @@ namespace Server.Misc
Skills skills = from.Skills;
if ( !from.Player && ( skills.Total / skills.Cap ) >= Utility.RandomDouble() )//( skills.Total >= skills.Cap )
if ( from.Player && ( skills.Total / skills.Cap ) >= Utility.RandomDouble() )//( skills.Total >= skills.Cap )
{
for ( int i = 0; i < skills.Length; ++i )
{

View file

@ -29,7 +29,7 @@ namespace Server.Mobiles
SetDex( 151, 170 );
SetInt( 251, 282 );
SetDamage( 4, 5 );
SetDamage( 21, 28 );
SetDamageType( ResistanceType.Physical, 0 );
SetDamageType( ResistanceType.Cold, 50 );
@ -77,7 +77,7 @@ namespace Server.Mobiles
Item pads = from.FindItemOnLayer( Layer.Shoes );
if ( pads is PadsOfTheCuSidhe )
from.SendMessage( "Your boots allow you to mount the Cu Sidhe", null, 0x3B2 );
from.SendLocalizedMessage( 1071981 ); // Your boots allow you to mount the Cu Sidhe.
else
{
from.SendLocalizedMessage( 1072203 ); // Only Elves may use this.

View file

@ -21,7 +21,7 @@ namespace Server.Mobiles
SetHits( 751, 930 );
SetMana( 0 );
SetDamage( 6, 7 );
SetDamage( 18, 23 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -20,7 +20,7 @@ namespace Server.Mobiles
SetHits( 551, 650 );
SetDamage( 11, 13 );
SetDamage( 21, 25 );
SetDamageType( ResistanceType.Physical, 30 );
SetDamageType( ResistanceType.Poison, 70 );

View file

@ -21,7 +21,7 @@ namespace Server.Mobiles
SetHits( 1500 );
SetStam( 150 );
SetDamage( 5, 6 );
SetDamage( 16, 19 );
SetDamageType( ResistanceType.Physical, 30 );
SetDamageType( ResistanceType.Fire, 70 );

View file

@ -34,7 +34,7 @@ namespace Server.Mobiles
SetHits(304, 321);
SetDamage(6, 11);
SetDamage(11, 20);
SetDamageType(ResistanceType.Physical, 100);

View file

@ -32,7 +32,7 @@ namespace Server.Mobiles
SetHits(353, 399);
SetDamage(6, 11);
SetDamage(13, 24);
SetDamageType(ResistanceType.Physical, 100);

View file

@ -26,7 +26,7 @@ namespace Server.Mobiles
SetHits( 61, 69 );
SetDamage( 2, 21 );
SetDamage( 4, 40 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -24,7 +24,7 @@ namespace Server.Mobiles
SetHits( 1170, 1320 );
SetDamage( 3, 4 ); // Estimate until Anat/Tactics is verified
SetDamage( 26, 35 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -21,7 +21,7 @@ namespace Server.Mobiles
SetHits( 301, 340 );
SetDamage( 5, 8 );
SetDamage( 11, 20 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -21,7 +21,7 @@ namespace Server.Mobiles
SetHits( 401, 440 );
SetDamage( 4, 7 );
SetDamage( 11, 20 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -22,7 +22,7 @@ namespace Server.Mobiles
SetHits( 354, 383 );
SetDamage( 4, 7 );
SetDamage( 11, 20 );
SetDamageType( ResistanceType.Physical, 100 );

View file

@ -29,7 +29,7 @@ namespace Server.Mobiles
SetHits( 415, 445 );
SetDamage( 4, 7 );
SetDamage( 13, 23 );
SetDamageType( ResistanceType.Physical, 40 );
SetDamageType( ResistanceType.Cold, 20 );

View file

@ -23,7 +23,7 @@ namespace Server.Mobiles
SetHits( 302, 340 );
SetDamage( 5, 6 );
SetDamage( 11, 14 );
SetDamageType( ResistanceType.Physical, 100 );
@ -48,7 +48,8 @@ namespace Server.Mobiles
}
public override bool CanHeal { get { return true; } }
public override bool CanHeal { get { return true; } }
public override void GenerateLoot()
{
AddLoot( LootPack.Rich ); // Need to verify

View file

@ -21,7 +21,7 @@ namespace Server.Mobiles
SetInt( 475, 675 );
SetHits( 1000, 2000 );
SetStam( 120, 135 );
SetStam( 120, 135 );
SetDamage( 24, 33 );
@ -33,11 +33,11 @@ namespace Server.Mobiles
SetResistance( ResistanceType.Poison, 40, 60 );
SetResistance( ResistanceType.Energy, 50, 75 );
SetSkill( SkillName.Meditation, 0 );
SetSkill( SkillName.Meditation, 0 );
SetSkill( SkillName.EvalInt, 110.0, 140.0 );
SetSkill( SkillName.Magery, 110.0, 140.0 );
SetSkill( SkillName.Poisoning, 0 );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.Poisoning, 0 );
SetSkill( SkillName.Anatomy, 0 );
SetSkill( SkillName.MagicResist, 110.0, 140.0 );
SetSkill( SkillName.Tactics, 110.0, 140.0 );
SetSkill( SkillName.Wrestling, 115.0, 145.0 );
@ -90,11 +90,13 @@ namespace Server.Mobiles
base.Deserialize( reader );
int version = reader.ReadInt();
SetDamage( 24, 33 );
if( version == 0 )
{
Server.SkillHandlers.AnimalTaming.ScaleStats( this, 0.50 );
Server.SkillHandlers.AnimalTaming.ScaleSkills( this, 0.80, 0.90 ); // 90% * 80% = 72% of original skills trainable to 90%
Skills[25].Base = Skills[25].Cap; // Greater dragons have a 90% cap reduction and 90% skill reduction on magery
Skills[SkillName.Magery].Base = Skills[SkillName.Magery].Cap; // Greater dragons have a 90% cap reduction and 90% skill reduction on magery
}
}
}

View file

@ -68,6 +68,7 @@ namespace Server.Mobiles
}
public override bool AutoDispel{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override void OnGotMeleeAttack( Mobile attacker )
{

View file

@ -51,14 +51,7 @@ namespace Server.Mobiles
public override void OnThink()
{
bool expired;
expired = ( DateTime.Now >= m_ExpireTime );
if ( !expired && m_Owner != null )
expired = m_Owner.Deleted || Map != m_Owner.Map || !InRange( m_Owner, 16 );
if ( expired )
if ( m_Owner != null && ( DateTime.Now >= m_ExpireTime || m_Owner.Deleted || Map != m_Owner.Map || !InRange( m_Owner, 16 ) ) )
{
PlaySound( GetIdleSound() );
Delete();

View file

@ -1026,7 +1026,7 @@ namespace Server.Mobiles
strBase = this.Str; //this.Str already includes GetStatOffset/str
strOffs = AosAttributes.GetValue( this, AosAttribute.BonusHits );
if ( Core.ML && strOffs > 25 )
if ( Core.ML && strOffs > 25 && AccessLevel <= AccessLevel.Player )
strOffs = 25;
if ( AnimalForm.UnderTransformation( this, typeof( BakeKitsune ) ) || AnimalForm.UnderTransformation( this, typeof( GreyWolf ) ) )

View file

@ -55,7 +55,7 @@ namespace Server.Spells
maxSkill += (1 + ((int)Circle / 6)) * 25;
if( m.Skills[SkillName.MagicResist].Value < maxSkill )
m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 );
m.CheckSkill( SkillName.MagicResist, 0.0, m.Skills[SkillName.MagicResist].Cap );
return m.Skills[SkillName.MagicResist].Value;
}
@ -76,7 +76,7 @@ namespace Server.Spells
maxSkill += (1 + ((int)Circle / 6)) * 25;
if( target.Skills[SkillName.MagicResist].Value < maxSkill )
target.CheckSkill( SkillName.MagicResist, 0.0, 120.0 );
target.CheckSkill( SkillName.MagicResist, 0.0, target.Skills[SkillName.MagicResist].Cap );
return (n >= Utility.RandomDouble());
}

View file

@ -260,14 +260,14 @@ namespace Server.Spells
public virtual int GetDamageFixed( Mobile m )
{
m.CheckSkill( DamageSkill, 0.0, 120.0 );
m.CheckSkill( DamageSkill, 0.0, m.Skills[DamageSkill].Cap );
return m.Skills[DamageSkill].Fixed;
}
public virtual double GetDamageSkill( Mobile m )
{
m.CheckSkill( DamageSkill, 0.0, 120.0 );
m.CheckSkill( DamageSkill, 0.0, m.Skills[DamageSkill].Cap );
return m.Skills[DamageSkill].Value;
}

View file

@ -42,7 +42,7 @@ namespace Server.Spells.Necromancy
{
List<Mobile> targets = new List<Mobile>();
foreach ( Mobile m in Caster.GetMobilesInRange( 5 ) )
foreach ( Mobile m in Caster.GetMobilesInRange( Core.ML ? 4 : 5 ) )
if ( Caster != m && Caster.InLOS( m ) && SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) )
targets.Add( m );