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.
This commit is contained in:
xavier 2011-07-17 03:32:28 +00:00
parent c57b83289e
commit 8adee67ccc
8 changed files with 39 additions and 89 deletions

View file

@ -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 ) }
} )
};

View file

@ -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 )
{

View file

@ -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 )
{

View file

@ -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()
{

View file

@ -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
/*

View file

@ -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()
{

View file

@ -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()
{

View file

@ -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 ); } }