- 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:
parent
aacae9f7b8
commit
c0206c6f7e
30 changed files with 197 additions and 126 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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[]
|
||||
|
|
|
|||
|
|
@ -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[]
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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; } }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue