- Added more future ML craftables that already drop as loot to the special repair lists.

- Fixed Bloodwood Spirit and Totem of the Void sometimes not spawning with a protection attribute. (Prepatch ones are fixed on server start.)
- Fixed crashes in BaseTalisman resulting from setting Summoner to null.
- Paragon perks added to mobs dropping ML artifacts (by making them paragon "under the hood", seems to be the case on OSI as well). This also means the named mobs will now drop paragon chests.
- Poison immunity level is now also increased by 1 for paragons.
- Rend now drops ML minor artifacts.
- ML named mobs no longer use the AoS specific loot packs, but will adjust to the era the server is set in.
- The 'current speed' of paragons is now updated to account for the speed boost after spawning.
This commit is contained in:
eos 2012-03-11 01:43:55 +00:00
parent aacae9f7b8
commit c0206c6f7e
30 changed files with 197 additions and 126 deletions

View file

@ -103,7 +103,7 @@ namespace Server.Engines.Craft
{
// Clothing repairable but not craftable
if( m_CraftSystem is DefTailoring )
if ( m_CraftSystem is DefTailoring )
{
return (clothing is BearMask)
|| (clothing is DeerMask);
@ -128,7 +128,11 @@ namespace Server.Engines.Craft
{
return ( weapon is Club )
|| ( weapon is BlackStaff )
|| ( weapon is MagicWand );
|| ( weapon is MagicWand )
#region Temporary
// TODO: Make these items craftable
|| ( weapon is WildStaff );
#endregion
}
else if ( m_CraftSystem is DefBlacksmithy )
{
@ -146,6 +150,14 @@ namespace Server.Engines.Craft
|| ( weapon is DiamondMace );
#endregion
}
#region Temporary
// TODO: Make these items craftable
else if ( m_CraftSystem is DefBowFletching )
{
return ( weapon is ElvenCompositeLongbow )
|| ( weapon is MagicalShortbow );
}
#endregion
return false;
}
@ -156,7 +168,32 @@ namespace Server.Engines.Craft
#region Temporary
// TODO: Make these items craftable
if ( m_CraftSystem is DefBlacksmithy )
if ( m_CraftSystem is DefTailoring )
{
return ( armor is LeafTonlet )
|| ( armor is LeafArms )
|| ( armor is LeafChest )
|| ( armor is LeafGloves )
|| ( armor is LeafGorget )
|| ( armor is LeafLegs )
|| ( armor is HideChest )
|| ( armor is HideGloves )
|| ( armor is HideGorget )
|| ( armor is HidePants )
|| ( armor is HidePauldrons );
}
else if ( m_CraftSystem is DefCarpentry )
{
return ( armor is WingedHelm )
|| ( armor is RavenHelm )
|| ( armor is VultureHelm )
|| ( armor is WoodlandArms )
|| ( armor is WoodlandChest )
|| ( armor is WoodlandGloves )
|| ( armor is WoodlandGorget )
|| ( armor is WoodlandLegs );
}
else if ( m_CraftSystem is DefBlacksmithy )
{
return ( armor is Circlet )
|| ( armor is RoyalCirclet )
@ -174,7 +211,6 @@ namespace Server.Engines.Craft
if( !CheckDeed( from ) )
return;
bool usingDeed = (m_Deed != null);
bool toDelete = false;

View file

@ -16,7 +16,7 @@ namespace Server.Items
Removal = TalismanRemoval.Damage;
Blessed = GetRandomBlessed();
Protection = GetRandomProtection();
Protection = GetRandomProtection( false );
SkillBonuses.SetValues( 0, SkillName.SpiritSpeak, 10.0 );
SkillBonuses.SetValues( 1, SkillName.Necromancy, 5.0 );
@ -30,7 +30,7 @@ namespace Server.Items
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (int) 1 ); // version
}
public override void Deserialize( GenericReader reader )
@ -38,6 +38,9 @@ namespace Server.Items
base.Deserialize( reader );
int version = reader.ReadInt();
if ( version == 0 && ( Protection == null || Protection.IsEmpty ) )
Protection = GetRandomProtection( false );
}
}
}

View file

@ -16,8 +16,8 @@ namespace Server.Items
MaxChargeTime = 1800;
Blessed = GetRandomBlessed();
Protection = GetRandomProtection();
Protection = GetRandomProtection( false );
Attributes.RegenHits = 2;
Attributes.LowerManaCost = 10;
}
@ -35,7 +35,7 @@ namespace Server.Items
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (int) 1 ); // version
}
public override void Deserialize( GenericReader reader )
@ -43,6 +43,9 @@ namespace Server.Items
base.Deserialize( reader );
int version = reader.ReadInt();
if ( version == 0 && ( Protection == null || Protection.IsEmpty ) )
Protection = GetRandomProtection( false );
}
}
}

View file

@ -345,7 +345,7 @@ namespace Server.Items
from.SendLocalizedMessage(1075001); // You have been given some ingots.
else if (item is Bandage)
from.SendLocalizedMessage(1075002); // You have been given some clean bandages.
else if (m_Summoner.Name != null)
else if (m_Summoner != null && m_Summoner.Name != null)
from.SendLocalizedMessage(1074853, m_Summoner.Name.ToString()); // You have been given ~1_name~
}
else if (obj is BaseCreature)
@ -553,7 +553,7 @@ namespace Server.Items
SetSaveFlag(ref flags, SaveFlag.SkillBonuses, !m_AosSkillBonuses.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Protection, m_Protection != null && !m_Protection.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Killer, m_Killer != null && !m_Killer.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Summoner, !m_Summoner.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Summoner, m_Summoner != null && !m_Summoner.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Removal, m_Removal != TalismanRemoval.None);
SetSaveFlag(ref flags, SaveFlag.KarmaLoss, m_KarmaLoss != 0);
SetSaveFlag(ref flags, SaveFlag.Skill, (int)m_Skill != 0);
@ -894,26 +894,32 @@ namespace Server.Items
public static TalismanAttribute GetRandomKiller()
{
if (0.5 > Utility.RandomDouble())
{
int num = Utility.Random(m_Killers.Length);
return GetRandomKiller( true );
}
return new TalismanAttribute(m_Killers[num], m_KillerLabels[num], Utility.RandomMinMax(10, 100));
}
public static TalismanAttribute GetRandomKiller( bool includingNone )
{
if ( includingNone && Utility.RandomBool() )
return new TalismanAttribute();
return new TalismanAttribute();
int num = Utility.Random(m_Killers.Length);
return new TalismanAttribute(m_Killers[num], m_KillerLabels[num], Utility.RandomMinMax(10, 100));
}
public static TalismanAttribute GetRandomProtection()
{
if (0.5 > Utility.RandomDouble())
{
int num = Utility.Random(m_Killers.Length);
return GetRandomProtection( true );
}
return new TalismanAttribute(m_Killers[num], m_KillerLabels[num], Utility.RandomMinMax(5, 60));
}
public static TalismanAttribute GetRandomProtection( bool includingNone )
{
if ( includingNone && Utility.RandomBool() )
return new TalismanAttribute();
return new TalismanAttribute();
int num = Utility.Random(m_Killers.Length);
return new TalismanAttribute(m_Killers[num], m_KillerLabels[num], Utility.RandomMinMax(5, 60));
}
private static SkillName[] m_Skills = new SkillName[]

View file

@ -119,7 +119,17 @@ namespace Server
typeof( DemonKnight ), typeof( GiantBlackWidow ), typeof( SummonedAirElemental ),
typeof( LesserHiryu ), typeof( Hiryu ), typeof( LadyOfTheSnow ),
typeof( RaiJu ), typeof( Ronin ), typeof( RuneBeetle ),
typeof( Changeling )
typeof( Changeling ),
#region ML named mobs - before Paragon speedboost
typeof( LadyJennifyr ), typeof( LadyMarai ), typeof( MasterJonath ),
typeof( MasterMikael ), typeof( MasterTheophilus ), typeof( RedDeath ),
typeof( SirPatrick ), typeof( Miasma ), typeof( Rend ),
typeof( Grobu ), typeof( Gnaw ), typeof( Guile ),
typeof( Irk ), typeof( Spite ), typeof( LadyLissith ),
typeof( LadySabrix ), typeof( Malefic ), typeof( Silk ),
typeof( Virulent )
// TODO: Where to put Lurg, Putrefier, Swoop and Pyre? They seem slower.
#endregion
} ),
/* Very Fast */
new SpeedInfo( 0.175, 0.350, new Type[]
@ -132,21 +142,7 @@ namespace Server
typeof( FactionHenchman ), typeof( FactionMercenary ), typeof( FactionNecromancer ),
typeof( FactionSorceress ), typeof( FactionWizard ), typeof( FactionBerserker ),
typeof( FactionPaladin ), typeof( Leviathan ), typeof( FireBeetle ),
typeof( FanDancer ),
#region ML named mobs
typeof( LadyJennifyr ), typeof( LadyMarai ), typeof( MasterJonath ),
typeof( MasterMikael ), typeof( MasterTheophilus ), typeof( RedDeath ),
typeof( SirPatrick ), typeof( Miasma ), typeof( Rend ),
typeof( Grobu ), typeof( Gnaw ), typeof( Guile ),
typeof( Irk ), typeof( Spite ), typeof( LadyLissith ),
typeof( LadySabrix ), typeof( Malefic ), typeof( Silk ),
typeof( Virulent )
/*
// These don't seem to be fast?
typeof( Lurg ), typeof( Putrefier ), typeof( Swoop),
typeof( Pyre )
*/
#endregion
typeof( FanDancer )
} ),
/* Medium */
new SpeedInfo( 0.25, 0.5, new Type[]

View file

@ -715,7 +715,7 @@ namespace Server.Mobiles
#endregion
#region Flee!!!
public virtual bool CanFlee{ get{ return ( !m_Paragon && !GivesMLMinorArtifact ); } }
public virtual bool CanFlee{ get{ return !m_Paragon; } }
private DateTime m_EndFlee;
@ -880,7 +880,7 @@ namespace Server.Mobiles
public override string ApplyNameSuffix( string suffix )
{
if ( IsParagon )
if ( IsParagon && !GivesMLMinorArtifact )
{
if ( suffix.Length == 0 )
suffix = "(Paragon)";
@ -1088,7 +1088,10 @@ namespace Server.Mobiles
if ( base.CheckPoisonImmunity( from, poison ) )
return true;
Poison p = this.PoisonImmune;
Poison p = PoisonImmune;
if ( m_Paragon )
p = PoisonImpl.IncreaseLevel( p );
return ( p != null && p.Level >= poison.Level );
}
@ -2780,13 +2783,15 @@ namespace Server.Mobiles
if ( m_Paragon )
p = PoisonImpl.IncreaseLevel( p );
if ( p != null && HitPoisonChance >= Utility.RandomDouble() ) {
if ( p != null && HitPoisonChance >= Utility.RandomDouble() )
{
defender.ApplyPoison( this, p );
if ( this.Controlled )
this.CheckSkill(SkillName.Poisoning, 0, this.Skills[SkillName.Poisoning].Cap);
if ( Controlled )
CheckSkill( SkillName.Poisoning, 0, Skills[SkillName.Poisoning].Cap );
}
if( AutoDispel && defender is BaseCreature && ((BaseCreature)defender).IsDispellable && AutoDispelChance > Utility.RandomDouble() )
if ( AutoDispel && defender is BaseCreature && ((BaseCreature)defender).IsDispellable && AutoDispelChance > Utility.RandomDouble() )
Dispel( defender );
}
@ -4493,13 +4498,18 @@ namespace Server.Mobiles
public virtual void OnKilledBy( Mobile mob )
{
if ( m_Paragon && Paragon.CheckArtifactChance( mob, this ) )
Paragon.GiveArtifactTo( mob );
#region Mondain's Legacy
if ( GivesMLMinorArtifact && MondainsLegacy.CheckArtifactChance( mob, this ) )
MondainsLegacy.GiveArtifactTo( mob );
if ( GivesMLMinorArtifact )
{
if ( MondainsLegacy.CheckArtifactChance( mob, this ) )
MondainsLegacy.GiveArtifactTo( mob );
}
#endregion
else if ( m_Paragon )
{
if ( Paragon.CheckArtifactChance( mob, this ) )
Paragon.GiveArtifactTo( mob );
}
}
public override void OnDeath( Container c )

View file

@ -11,6 +11,8 @@ namespace Server.Mobiles
[Constructable]
public LadyJennifyr()
{
IsParagon = true;
Name = "Lady Jennifyr";
Hue = 0x76D;
@ -42,7 +44,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override void OnGaveMeleeAttack( Mobile defender )

View file

@ -11,6 +11,8 @@ namespace Server.Mobiles
[Constructable]
public LadyMarai()
{
IsParagon = true;
Name = "Lady Marai";
Hue = 0x21;
@ -42,7 +44,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public MasterJonath()
{
IsParagon = true;
Name = "Master Jonath";
Hue = 0x455;
@ -52,7 +54,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
// TODO: Special move?

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public MasterMikael()
{
IsParagon = true;
Name = "Master Mikael";
Hue = 0x8FD;
@ -51,7 +53,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
// TODO: Special move?

View file

@ -10,8 +10,11 @@ namespace Server.Mobiles
[Constructable]
public MasterTheophilus()
{
IsParagon = true;
Name = "Master Theophilus";
Title = "the necromancer";
Hue = 0;
SetStr( 137, 187 );
SetDex( 253, 301 );
@ -59,7 +62,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()
@ -67,17 +70,6 @@ namespace Server.Mobiles
return WeaponAbility.ParalyzingBlow;
}
/*
// TODO: Needs verification
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Paragon.ChestChance > Utility.RandomDouble() )
c.DropItem( new ParagonChest( Name, TreasureMapLevel ) );
}
*/
public override bool GivesMLMinorArtifact{ get{ return true; } }
public override int TreasureMapLevel{ get{ return 5; } }

View file

@ -11,6 +11,8 @@ namespace Server.Mobiles
public RedDeath()
: base( "Red Death" )
{
IsParagon = true;
Hue = 0x21;
BaseSoundID = 0x1C3;
@ -51,7 +53,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -12,6 +12,8 @@ namespace Server.Mobiles
[Constructable]
public SirPatrick()
{
IsParagon = true;
Name = "Sir Patrick";
Hue = 0x47E;
@ -43,7 +45,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override void OnGaveMeleeAttack( Mobile defender )

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Miasma()
{
IsParagon = true;
Name = "Miasma";
Hue = 0x8FD;
@ -38,13 +40,11 @@ namespace Server.Mobiles
Fame = 21000;
Karma = -21000;
Tamable = false;
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override WeaponAbility GetWeaponAbility()
@ -80,16 +80,11 @@ namespace Server.Mobiles
case 15: c.DropItem( new HunterLegs() ); break;
}
}
if ( Paragon.ChestChance > Utility.RandomDouble() )
c.DropItem( new ParagonChest( Name, TreasureMapLevel ) );
}
*/
public override bool GivesMLMinorArtifact{ get{ return true; } }
public override int TreasureMapLevel{ get{ return 5; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override Poison HitPoison{ get{ return Poison.Lethal; } }
public Miasma( Serial serial )
: base( serial )

View file

@ -13,6 +13,8 @@ namespace Server.Mobiles
[Constructable]
public Pyre()
{
IsParagon = true;
Name = "Pyre";
Hue = 0x489;
@ -48,7 +50,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Rend()
{
IsParagon = true;
Name = "Rend";
Hue = 0x455;
@ -38,19 +40,11 @@ namespace Server.Mobiles
Fame = 21000;
Karma = -21000;
Tamable = false;
/*
// TODO: Needs verification
if ( Paragon.ChestChance > Utility.RandomDouble() )
PackItem( new ParagonChest( Name, TreasureMapLevel ) );
*/
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()
@ -61,6 +55,8 @@ namespace Server.Mobiles
return WeaponAbility.BleedAttack;
}
public override bool GivesMLMinorArtifact{ get{ return true; } }
public Rend( Serial serial )
: base( serial )
{

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Grobu()
{
IsParagon = true;
Name = "Grobu";
Hue = 0x455;
@ -40,13 +42,11 @@ namespace Server.Mobiles
Fame = 1000;
Karma = 1000;
Tamable = false;
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosFilthyRich, 3 );
AddLoot( LootPack.FilthyRich, 2 );
}
/*

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Lurg()
{
IsParagon = true;
Name = "Lurg";
Hue = 0x455;
@ -39,16 +41,11 @@ namespace Server.Mobiles
Fame = 10000;
Karma = -10000;
/*
if ( Paragon.ChestChance > Utility.RandomDouble() ) // TODO: Needs verification
PackItem( new ParagonChest( Name, TreasureMapLevel ) );
*/
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Putrefier()
{
IsParagon = true;
Name = "Putrefier";
Hue = 63;
@ -41,13 +43,16 @@ namespace Server.Mobiles
SetSkill( SkillName.Meditation, 41.4, 85.0 );
SetSkill( SkillName.Poisoning, 45.0, 50.0 );
Fame = 24000;
Karma = -24000;
PackScroll( 4, 7 );
PackScroll( 4, 7 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
/*
@ -60,15 +65,11 @@ namespace Server.Mobiles
if ( Utility.RandomDouble() < 0.6 )
c.DropItem( new ParrotItem() );
if ( Paragon.ChestChance > Utility.RandomDouble() )
c.DropItem( new ParagonChest( Name, TreasureMapLevel ) );
}
*/
public override bool GivesMLMinorArtifact{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override Poison HitPoison{ get{ return Poison.Lethal; } }
public override Poison HitPoison{ get{ return Poison.Deadly; } } // Becomes Lethal with Paragon bonus
public override int TreasureMapLevel{ get{ return 5; } }
public Putrefier( Serial serial )

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Gnaw()
{
IsParagon = true;
Name = "Gnaw";
Hue = 0x130;
@ -37,13 +39,11 @@ namespace Server.Mobiles
Fame = 17500;
Karma = -17500;
Tamable = false;
}
public override void GenerateLoot()
{
AddLoot( LootPack.AosFilthyRich, 3 );
AddLoot( LootPack.FilthyRich, 2 );
}
public override bool GivesMLMinorArtifact{ get{ return true; } }

View file

@ -13,6 +13,10 @@ namespace Server.Mobiles
[Constructable]
public Guile()
{
IsParagon = true;
Hue = DefaultHue;
SetStr( 53, 214 );
SetDex( 243, 367 );
SetInt( 369, 586 );
@ -61,7 +65,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public Guile( Serial serial )

View file

@ -13,6 +13,10 @@ namespace Server.Mobiles
[Constructable]
public Irk()
{
IsParagon = true;
Hue = DefaultHue;
SetStr( 23, 183 );
SetDex( 259, 360 );
SetInt( 374, 600 );
@ -46,7 +50,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
/*

View file

@ -11,6 +11,8 @@ namespace Server.Mobiles
[Constructable]
public LadyLissith()
{
IsParagon = true;
Name = "Lady Lissith";
Hue = 0x452;
@ -44,7 +46,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public LadySabrix()
{
IsParagon = true;
Name = "Lady Sabrix";
Hue = 0x497;
@ -43,7 +45,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Malefic()
{
IsParagon = true;
Name = "Malefic";
Hue = 0x455;
@ -51,7 +53,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Silk()
{
IsParagon = true;
Name = "Silk";
Hue = 0x47E;
@ -43,7 +45,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override WeaponAbility GetWeaponAbility()
@ -52,8 +54,6 @@ namespace Server.Mobiles
}
public override bool GivesMLMinorArtifact{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override Poison HitPoison{ get{ return Poison.Lethal; } }
public Silk( Serial serial )
: base( serial )

View file

@ -13,6 +13,10 @@ namespace Server.Mobiles
[Constructable]
public Spite()
{
IsParagon = true;
Hue = DefaultHue;
SetStr( 53, 214 );
SetDex( 243, 367 );
SetInt( 369, 586 );
@ -44,7 +48,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
public override bool GivesMLMinorArtifact{ get{ return true; } }

View file

@ -11,6 +11,8 @@ namespace Server.Mobiles
[Constructable]
public Swoop()
{
IsParagon = true;
Name = "Swoop";
Hue = 0xE0;
@ -39,15 +41,13 @@ namespace Server.Mobiles
Fame = 18000;
Karma = 0;
Tamable = false;
PackReg( 4 );
PackArcaneScroll( 0, 1 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 3 );
AddLoot( LootPack.UltraRich, 2 );
}
// TODO: Put this attack shared with Hiryu and Lesser Hiryu in one place

View file

@ -10,6 +10,8 @@ namespace Server.Mobiles
[Constructable]
public Virulent()
{
IsParagon = true;
Name = "Virulent";
Hue = 0x8FD;
@ -45,7 +47,7 @@ namespace Server.Mobiles
public override void GenerateLoot()
{
AddLoot( LootPack.AosUltraRich, 4 );
AddLoot( LootPack.UltraRich, 3 );
}
public override WeaponAbility GetWeaponAbility()

View file

@ -14,7 +14,7 @@ namespace Server.Mobiles
public static Type[] Artifacts = new Type[]
{
typeof( GoldBricks ), typeof( PhillipsWoodenSteed ),
typeof( GoldBricks ), typeof( PhillipsWoodenSteed ),
typeof( AlchemistsBauble ), typeof( ArcticDeathDealer ),
typeof( BlazeOfDeath ), typeof( BowOfTheJukaKing ),
typeof( BurglarsBandana ), typeof( CavortingClub ),
@ -23,13 +23,13 @@ namespace Server.Mobiles
typeof( NightsKiss ), typeof( NoxRangersHeavyCrossbow ),
typeof( OrcishVisage ), typeof( PolarBearMask ),
typeof( ShieldOfInvulnerability ), typeof( StaffOfPower ),
typeof( VioletCourage ), typeof( HeartOfTheLion ),
typeof( WrathOfTheDryad ), typeof( PixieSwatter ),
typeof( VioletCourage ), typeof( HeartOfTheLion ),
typeof( WrathOfTheDryad ), typeof( PixieSwatter ),
typeof( GlovesOfThePugilist )
};
public static int Hue = 0x501; // Paragon hue
// Buffs
public static double HitsBuff = 5.0;
public static double StrBuff = 1.05;
@ -50,7 +50,7 @@ namespace Server.Mobiles
if ( bc.HitsMaxSeed >= 0 )
bc.HitsMaxSeed = (int)( bc.HitsMaxSeed * HitsBuff );
bc.RawStr = (int)( bc.RawStr * StrBuff );
bc.RawInt = (int)( bc.RawInt * IntBuff );
bc.RawDex = (int)( bc.RawDex * DexBuff );
@ -69,6 +69,7 @@ namespace Server.Mobiles
bc.PassiveSpeed /= SpeedBuff;
bc.ActiveSpeed /= SpeedBuff;
bc.CurrentSpeed = bc.PassiveSpeed;
bc.DamageMin += DamageBuff;
bc.DamageMax += DamageBuff;
@ -99,7 +100,7 @@ namespace Server.Mobiles
if ( bc.HitsMaxSeed >= 0 )
bc.HitsMaxSeed = (int)( bc.HitsMaxSeed / HitsBuff );
bc.RawStr = (int)( bc.RawStr / StrBuff );
bc.RawInt = (int)( bc.RawInt / IntBuff );
bc.RawDex = (int)( bc.RawDex / DexBuff );
@ -115,9 +116,10 @@ namespace Server.Mobiles
if ( skill.Base > 0.0 )
skill.Base /= SkillsBuff;
}
bc.PassiveSpeed *= SpeedBuff;
bc.ActiveSpeed *= SpeedBuff;
bc.CurrentSpeed = bc.PassiveSpeed;
bc.DamageMin -= DamageBuff;
bc.DamageMax -= DamageBuff;
@ -141,7 +143,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 || bc.GivesMLMinorArtifact )
if ( bc is BaseChampion || bc is Harrower || bc is BaseVendor || bc is BaseEscortable || bc is Clone || bc.IsParagon )
return false;
int fame = bc.Fame;