From 8adee67ccca02cd67069626598f60da71e13327c Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 17 Jul 2011 03:32:28 +0000 Subject: [PATCH] Updates to the canned evil system for the ML Pestilence spawn. Pigments of Tokuno have also have heritage items and special material "baseclothing" added. Bag of Sending was corrected for a client change that broke the localization FetidEssence, InterredGrizzle, PerstilentBandage corrected in prep for ML champ spawns. Ilhenir corrected in various ways, imcluding unique drop added to replace the "undiscovered" unique its suppoed to drop. Pestilence added to the spawn types for champs. PlayerMobile modified to reflect new champ spawn titles. --- .../Engines/CannedEvil/ChampionSpawnType.cs | 10 ++- .../BasePigmentsOfTokuno.cs | 14 +++- .../Items/Special/Solen Items/BagOfSending.cs | 6 +- .../ML/Humanoid/Magic/FetidEssence.cs | 7 +- .../ML/Humanoid/Magic/InterredGrizzle .cs | 7 +- .../ML/Humanoid/Melee/PestilentBandage.cs | 73 +------------------ .../Mobiles/Monsters/ML/Special/Ilhenir.cs | 8 +- Scripts/Mobiles/PlayerMobile.cs | 3 + 8 files changed, 39 insertions(+), 89 deletions(-) diff --git a/Scripts/Engines/CannedEvil/ChampionSpawnType.cs b/Scripts/Engines/CannedEvil/ChampionSpawnType.cs index ac3b5f46a..217cb1ebe 100644 --- a/Scripts/Engines/CannedEvil/ChampionSpawnType.cs +++ b/Scripts/Engines/CannedEvil/ChampionSpawnType.cs @@ -12,7 +12,8 @@ namespace Server.Engines.CannedEvil ForestLord, VerminHorde, UnholyTerror, - SleepingDragon + SleepingDragon, + Pestilence } public class ChampionSpawnInfo @@ -90,6 +91,13 @@ namespace Server.Engines.CannedEvil new Type[]{ typeof( DeathwatchBeetle ), typeof( Kappa ) }, new Type[]{ typeof( LesserHiryu ), typeof( RevenantLion ) }, new Type[]{ typeof( Hiryu ), typeof( Oni ) } + } ), + new ChampionSpawnInfo( "The Corrupt", typeof( Ilhenir ), new string[]{ "Cleanser", "Expunger", "Depurator" } , new Type[][] + { // Unholy Terror + new Type[]{ typeof( PlagueSpawn ), typeof( Bogling ) }, + new Type[]{ typeof( PlagueBeast ), typeof( BogThing ) }, + new Type[]{ typeof( PlagueBeastLord ), typeof( InterredGrizzle ) }, + new Type[]{ typeof( FetidEssence ), typeof( PestilentBandage ) } } ) }; diff --git a/Scripts/Engines/Treasures of Tokuno/BasePigmentsOfTokuno.cs b/Scripts/Engines/Treasures of Tokuno/BasePigmentsOfTokuno.cs index 4d3372643..f920f3fa0 100644 --- a/Scripts/Engines/Treasures of Tokuno/BasePigmentsOfTokuno.cs +++ b/Scripts/Engines/Treasures of Tokuno/BasePigmentsOfTokuno.cs @@ -34,6 +34,15 @@ namespace Server.Items typeof( Subdue ) }; + private static Type[] m_DyableHeritageItems = new Type[] + { + typeof( ChargerOfTheFallen ), + typeof( SamuraiHelm ), + typeof( HolySword ), + typeof( LeggingsOfEmbers ), + typeof( ShaminoCrossbow ) + }; + public override int LabelNumber { get { return 1070933; } } // Pigments of Tokuno private int m_UsesRemaining; @@ -142,6 +151,8 @@ namespace Server.Items resource = ((BaseWeapon)i).Resource; else if( i is BaseArmor ) resource = ((BaseArmor)i).Resource; + else if (i is BaseClothing) + resource = ((BaseClothing)i).Resource; if( !CraftResources.IsStandard( resource ) ) return true; @@ -157,8 +168,9 @@ namespace Server.Items || IsInTypeList( t, Leviathan.Artifacts ) || IsInTypeList( t, TreasureMapChest.Artifacts ) || IsInTypeList( t, m_Replicas ) + || IsInTypeList( t, m_DyableHeritageItems ) ); - } + } private static bool IsInTypeList( Type t, Type[] list ) { diff --git a/Scripts/Items/Special/Solen Items/BagOfSending.cs b/Scripts/Items/Special/Solen Items/BagOfSending.cs index 0eb6706d3..06599434e 100644 --- a/Scripts/Items/Special/Solen Items/BagOfSending.cs +++ b/Scripts/Items/Special/Solen Items/BagOfSending.cs @@ -161,7 +161,7 @@ namespace Server.Items } else if( !this.IsChildOf( from.Backpack ) ) { - MessageHelper.SendLocalizedMessageTo( this, from, 1054107, 0x59 ); // The bag of sending must be in your backpack. + MessageHelper.SendLocalizedMessageTo(this, from, 1062334, 0x59); // The bag of sending must be in your backpack. } else if( this.Charges == 0 ) { @@ -193,7 +193,7 @@ namespace Server.Items } else if( !m_Bag.IsChildOf( from.Backpack ) ) { - MessageHelper.SendLocalizedMessageTo( m_Bag, from, 1054107, 0x59 ); // The bag of sending must be in your backpack. + MessageHelper.SendLocalizedMessageTo(m_Bag, from, 1062334, 0x59); // The bag of sending must be in your backpack. 1054107 is gone from client, using generic response } else if ( m_Bag.Charges == 0 ) { @@ -206,7 +206,7 @@ namespace Server.Items if ( !item.IsChildOf( from.Backpack ) ) { - MessageHelper.SendLocalizedMessageTo( m_Bag, from, 1054152, 0x59 ); // You may only send items from your backpack to your bank box. + MessageHelper.SendLocalizedMessageTo(m_Bag, from, 1054152, 0x59); // You may only send items from your backpack to your bank box. } else if ( item is BagOfSending || item is Container ) { diff --git a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs index 1eef4f036..a405c61d2 100644 --- a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs +++ b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs @@ -44,11 +44,10 @@ namespace Server.Mobiles Karma = -3700; // Guessed } - /*public override void GenerateLoot() -- Need to verify + public override void GenerateLoot() // Need to verify { - AddLoot( LootPack.Meager ); - AddLoot( LootPack.Average ); - }*/ + AddLoot( LootPack.FilthyRich ); + } public override int GetAngerSound() { diff --git a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs index 300d0c4b1..2a635b0b2 100644 --- a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs +++ b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs @@ -45,11 +45,10 @@ namespace Server.Mobiles Karma = -3700; // Guessed } - /*public override void GenerateLoot() -- Need to verify + public override void GenerateLoot() // -- Need to verify { - AddLoot( LootPack.Meager ); - AddLoot( LootPack.Average ); - }*/ + AddLoot( LootPack.FilthyRich ); + } // TODO: Acid Blood /* diff --git a/Scripts/Mobiles/Monsters/ML/Humanoid/Melee/PestilentBandage.cs b/Scripts/Mobiles/Monsters/ML/Humanoid/Melee/PestilentBandage.cs index cd2a87940..de549b3aa 100644 --- a/Scripts/Mobiles/Monsters/ML/Humanoid/Melee/PestilentBandage.cs +++ b/Scripts/Mobiles/Monsters/ML/Humanoid/Melee/PestilentBandage.cs @@ -56,78 +56,7 @@ namespace Server.Mobiles } - public override void OnDamagedBySpell(Mobile attacker) - { - base.OnDamagedBySpell(attacker); - - DoCounter(attacker); - } - - public override void OnGotMeleeAttack(Mobile attacker) - { - base.OnGotMeleeAttack(attacker); - - DoCounter(attacker); - } - - private void DoCounter(Mobile attacker) - { - if (this.Map == null) - return; - - if (attacker is BaseCreature && ((BaseCreature)attacker).BardProvoked) - return; - - if (0.2 > Utility.RandomDouble()) - { - /* Counterattack with Hit Poison Area - * 20-25 damage, unresistable - * Lethal poison, 100% of the time - * Particle effect: Type: "2" From: "0x4061A107" To: "0x0" ItemId: "0x36BD" ItemIdName: "explosion" FromLocation: "(296 615, 17)" ToLocation: "(296 615, 17)" Speed: "1" Duration: "10" FixedDirection: "True" Explode: "False" Hue: "0xA6" RenderMode: "0x0" Effect: "0x1F78" ExplodeEffect: "0x1" ExplodeSound: "0x0" Serial: "0x4061A107" Layer: "255" Unknown: "0x0" - * Doesn't work on provoked monsters - */ - - Mobile target = null; - - if (attacker is BaseCreature) - { - Mobile m = ((BaseCreature)attacker).GetMaster(); - - if (m != null) - target = m; - } - - if (target == null || !target.InRange(this, 18)) - target = attacker; - - this.Animate(10, 4, 1, true, false, 0); - - ArrayList targets = new ArrayList(); - - foreach (Mobile m in target.GetMobilesInRange(8)) - { - if (m == this || !CanBeHarmful(m)) - continue; - - if (m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team)) - targets.Add(m); - else if (m.Player && m.Alive) - targets.Add(m); - } - - for (int i = 0; i < targets.Count; ++i) - { - Mobile m = (Mobile)targets[i]; - - DoHarmful(m); - - AOS.Damage(m, this, Utility.RandomMinMax(20, 25), true, 0, 0, 0, 100, 0); - - m.FixedParticles(0x36BD, 1, 10, 0x1F78, 0xA6, 0, (EffectLayer)255); - m.ApplyPoison(this, Poison.Lethal); - } - } - } + public override Poison HitPoison{ get{ return Poison.Lethal; } } public override bool CanHeal { get { return true; } } public override void GenerateLoot() { diff --git a/Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs b/Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs index 31a6ccec2..c50dda324 100644 --- a/Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs +++ b/Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs @@ -10,7 +10,7 @@ namespace Server.Mobiles { public override ChampionSkullType SkullType{ get{ return ChampionSkullType.Pain; } } - public override Type[] UniqueList{ get{ return new Type[] { }; } } + public override Type[] UniqueList{ get{ return new Type[] { typeof( Pacify ) }; } } public override Type[] SharedList{ get{ return new Type[] { typeof( ANecromancerShroud ), typeof( LieutenantOfTheBritannianRoyalGuard ), typeof( OblivionsNeedle ), @@ -55,8 +55,8 @@ namespace Server.Mobiles SetSkill(SkillName.Tactics, 119.9); SetSkill(SkillName.Wrestling, 119.9); - Fame = 50000; - Karma = -50000; + Fame = 22500; + Karma = -22500; VirtualArmor = 44; } @@ -69,7 +69,7 @@ namespace Server.Mobiles public override bool Unprovokable { get { return true; } } public override bool Uncalmable { get { return true; } } public override Poison PoisonImmune { get { return Poison.Lethal; } } - public override int TreasureMapLevel { get { return 1; } } + //public override int TreasureMapLevel { get { return 1; } } public override int GetAngerSound() { diff --git a/Scripts/Mobiles/PlayerMobile.cs b/Scripts/Mobiles/PlayerMobile.cs index 72c9f01bd..ca3b27fee 100644 --- a/Scripts/Mobiles/PlayerMobile.cs +++ b/Scripts/Mobiles/PlayerMobile.cs @@ -4057,6 +4057,9 @@ namespace Server.Mobiles return "..."; } + [CommandProperty(AccessLevel.GameMaster)] + public int Pestilence { get { return GetValue(ChampionSpawnType.Pestilence); } set { SetValue(ChampionSpawnType.Pestilence, value); } } + [CommandProperty( AccessLevel.GameMaster )] public int Abyss { get { return GetValue( ChampionSpawnType.Abyss ); } set { SetValue( ChampionSpawnType.Abyss, value ); } }