- Future ML craftables added to the special repair list until the craft system is updated.

- Items can now be repaired while wearing them.
- Items can now be fortified while wearing them.
- Fixed repair deed messages not sending.
- Sound effect added to powder of fortifying.
- Map issue for fishing and SOSs fixed, where it would not allow fishing in empty resource banks when not on the target SOS map.
- Added proximity spawner.
- Improved spawner mouseover menu, now also shows types set on the spawner which are not yet spawned.
- Fixed spawners only deleting half of their spawned objects when deleted.
- Added the ability to set TextDefinition objects in the props gump.
- WaitTeleporters now round delays to nearest in the remaining time messages.
- Updated TextDefinition to be more usable; made it parsable from string and added safe serialization/deserialization methods.
- Improved checking whether a mobile can flee.
- Monsters that give ML minor artifacts will no longer flee when low on hits (like paragons).
- Monsters that give ML minor artifacts will no longer spawn as paragon.
- Fixed issue with pets not eating certain foods.
- AI and targeting fixes for Red Death, Pyre and Swoop.
- Fame and karma added to Rend.
- Swoop corrected to have 0 karma.
- Stat and skill tweaks for Putrefier.
- Changelings will no longer show their fame title when morphed.
- Added travel restrictions for ML dungeons.
- Fixed issue of travel restriction message displaying twice.
- Monster teleporting is no longer affected by region travel restrictions.
This commit is contained in:
eos 2012-03-07 18:59:52 +00:00
parent 4bcde77cc2
commit a0e13d5007
25 changed files with 432 additions and 140 deletions

View file

@ -46,7 +46,7 @@ namespace Server.Mobiles
double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax;
if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 ) // Less than 10% health
if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 && m_Mobile.CanFlee ) // Less than 10% health
{
m_Mobile.DebugSay( "I am low on health!" );
Action = ActionType.Flee;
@ -102,7 +102,7 @@ namespace Server.Mobiles
}
}
if ( !m_Mobile.Controlled && !m_Mobile.Summoned )
if ( !m_Mobile.Controlled && !m_Mobile.Summoned && m_Mobile.CanFlee )
{
double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax;
@ -120,7 +120,7 @@ namespace Server.Mobiles
{
double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax;
if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 ) // Less than 10% health
if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 && m_Mobile.CanFlee ) // Less than 10% health
{
Action = ActionType.Flee;
}

View file

@ -80,7 +80,7 @@ namespace Server.Mobiles
// At 20% we should check if we must leave
if ( m_Mobile.Hits < m_Mobile.HitsMax*20/100 )
if ( m_Mobile.Hits < m_Mobile.HitsMax*20/100 && m_Mobile.CanFlee )
{
bool bFlee = false;
// if my current hits are more than my opponent, i don't care

View file

@ -633,7 +633,7 @@ namespace Server.Mobiles
}
}
if( !m_Mobile.Controlled && !m_Mobile.Summoned && !m_Mobile.IsParagon )
if( !m_Mobile.Controlled && !m_Mobile.Summoned && m_Mobile.CanFlee )
{
if( m_Mobile.Hits < m_Mobile.HitsMax * 20 / 100 )
{

View file

@ -112,7 +112,7 @@ namespace Server.Mobiles
m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name );
}
if ( !m_Mobile.Controlled && !m_Mobile.Summoned && !m_Mobile.IsParagon )
if ( !m_Mobile.Controlled && !m_Mobile.Summoned && m_Mobile.CanFlee )
{
if ( m_Mobile.Hits < m_Mobile.HitsMax * 20/100 )
{

View file

@ -128,7 +128,7 @@ namespace Server.Mobiles
m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name );
}
if ( m_Mobile.Hits < m_Mobile.HitsMax * 20/100 && !m_Mobile.IsParagon )
if ( m_Mobile.Hits < m_Mobile.HitsMax * 20/100 && m_Mobile.CanFlee )
{
// We are low on health, should we flee?

View file

@ -715,6 +715,8 @@ namespace Server.Mobiles
#endregion
#region Flee!!!
public virtual bool CanFlee{ get{ return ( !m_Paragon && !GivesMLMinorArtifact ); } }
private DateTime m_EndFlee;
public DateTime EndFleeTime
@ -2083,7 +2085,7 @@ namespace Server.Mobiles
public virtual bool CheckFeed( Mobile from, Item dropped )
{
if ( !IsDeadPet && Controlled && (ControlMaster == from || IsPetFriend( from )) && (dropped is Food || dropped is Gold || dropped is CookableFood || dropped is Head || dropped is LeftArm || dropped is LeftLeg || dropped is Torso || dropped is RightArm || dropped is RightLeg) )
if ( !IsDeadPet && Controlled && ( ControlMaster == from || IsPetFriend( from ) ) )
{
Item f = dropped;
@ -2114,7 +2116,7 @@ namespace Server.Mobiles
{
for ( int i = 0; i < amount; ++i )
{
if ( m_Loyalty < MaxLoyalty && 0.5 >= Utility.RandomDouble() )
if ( m_Loyalty < MaxLoyalty && 0.5 >= Utility.RandomDouble() )
{
m_Loyalty += 10;
}

View file

@ -14,6 +14,9 @@ namespace Server.Mobiles
Hue = 0x21;
BaseSoundID = 0x1C3;
AI = AIType.AI_Melee;
FightMode = FightMode.Closest;
SetStr( 319, 324 );
SetDex( 241, 244 );
SetInt( 242, 255 );

View file

@ -16,6 +16,8 @@ namespace Server.Mobiles
Name = "Pyre";
Hue = 0x489;
FightMode = FightMode.Closest;
SetStr( 605, 611 );
SetDex( 391, 519 );
SetInt( 669, 818 );

View file

@ -36,6 +36,9 @@ namespace Server.Mobiles
SetSkill( SkillName.MagicResist, 90.9, 110.0 );
SetSkill( SkillName.Anatomy, 66.6, 72.0 );
Fame = 21000;
Karma = -21000;
Tamable = false;
/*

View file

@ -13,11 +13,13 @@ namespace Server.Mobiles
Name = "Putrefier";
Hue = 63;
SetStr( 1057, 1330 );
SetDex( 232, 450 );
SetInt( 201, 415 );
SetStr( 1057, 1400 );
SetDex( 232, 560 );
SetInt( 201, 440 );
SetHits( 3010, 3778 );
SetHits( 3010, 4092 );
SetDamage( 27, 34 );
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Fire, 0 );
@ -31,12 +33,13 @@ namespace Server.Mobiles
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill( SkillName.Wrestling, 111.2, 128.0 );
SetSkill( SkillName.Tactics, 115.6, 125.2 );
SetSkill( SkillName.MagicResist, 143.4, 163.0 );
SetSkill( SkillName.Tactics, 115.2, 125.2 );
SetSkill( SkillName.MagicResist, 143.4, 170.0 );
SetSkill( SkillName.Anatomy, 44.6, 67.0 );
SetSkill( SkillName.Magery, 117.6, 118.8 );
SetSkill( SkillName.EvalInt, 113.0, 128.8 );
SetSkill( SkillName.Meditation, 41.4, 80.5 );
SetSkill( SkillName.Meditation, 41.4, 85.0 );
SetSkill( SkillName.Poisoning, 45.0, 50.0 );
PackScroll( 4, 7 );
PackScroll( 4, 7 );

View file

@ -62,6 +62,8 @@ namespace Server.Mobiles
PackArcaneScroll( 0, 1 );
}
public override bool ShowFameTitle{ get{ return false; } }
public override void GenerateLoot()
{
AddLoot( LootPack.AosRich, 3 );

View file

@ -14,6 +14,8 @@ namespace Server.Mobiles
Name = "Swoop";
Hue = 0xE0;
AI = AIType.AI_Melee;
SetStr( 100, 150 );
SetDex( 400, 500 );
SetInt( 80, 90 );
@ -35,7 +37,7 @@ namespace Server.Mobiles
SetSkill( SkillName.MagicResist, 95.0, 105.0 );
Fame = 18000;
Karma = -18000;
Karma = 0;
Tamable = false;

View file

@ -141,7 +141,7 @@ namespace Server.Mobiles
if ( Array.IndexOf( Maps, m ) == -1 )
return false;
if ( bc is BaseChampion || bc is Harrower || bc is BaseVendor || bc is BaseEscortable || bc is Clone )
if ( bc is BaseChampion || bc is Harrower || bc is BaseVendor || bc is BaseEscortable || bc is Clone || bc.GivesMLMinorArtifact )
return false;
int fame = bc.Fame;