#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.

This commit is contained in:
WarrentyExpired 2026-08-06 11:06:05 -04:00
parent b51c58f514
commit 3045c83799
3512 changed files with 627673 additions and 0 deletions

View file

@ -0,0 +1,92 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class AncientWyrm : BaseCreature
{
[Constructable]
public AncientWyrm () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "an ancient wyrm";
Body = 46;
BaseSoundID = 362;
SetStr( 1096, 1185 );
SetDex( 86, 175 );
SetInt( 686, 775 );
SetHits( 658, 711 );
SetDamage( 29, 35 );
SetDamageType( ResistanceType.Physical, 75 );
SetDamageType( ResistanceType.Fire, 25 );
SetResistance( ResistanceType.Physical, 65, 75 );
SetResistance( ResistanceType.Fire, 80, 90 );
SetResistance( ResistanceType.Cold, 70, 80 );
SetResistance( ResistanceType.Poison, 60, 70 );
SetResistance( ResistanceType.Energy, 60, 70 );
SetSkill( SkillName.EvalInt, 80.1, 100.0 );
SetSkill( SkillName.Magery, 80.1, 100.0 );
SetSkill( SkillName.Meditation, 52.5, 75.0 );
SetSkill( SkillName.MagicResist, 100.5, 150.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 97.6, 100.0 );
Fame = 22500;
Karma = -22500;
VirtualArmor = 70;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 3 );
AddLoot( LootPack.Gems, 5 );
}
public override int GetIdleSound()
{
return 0x2D3;
}
public override int GetHurtSound()
{
return 0x2D1;
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override bool AutoDispel{ get{ return true; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override int Hides{ get{ return 40; } }
public override int Meat{ get{ return 19; } }
public override int Scales{ get{ return 12; } }
public override ScaleType ScaleType{ get{ return (ScaleType)Utility.Random( 4 ); } }
public override Poison PoisonImmune{ get{ return Poison.Regular; } }
public override Poison HitPoison{ get{ return Utility.RandomBool() ? Poison.Lesser : Poison.Regular; } }
public override int TreasureMapLevel{ get{ return 5; } }
public override bool CanFly { get { return true; } }
public AncientWyrm( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,80 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a deep sea serpents corpse" )]
public class DeepSeaSerpent : BaseCreature
{
[Constructable]
public DeepSeaSerpent() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a deep sea serpent";
Body = 150;
BaseSoundID = 447;
Hue = Utility.Random( 0x8A0, 5 );
SetStr( 251, 425 );
SetDex( 87, 135 );
SetInt( 87, 155 );
SetHits( 151, 255 );
SetDamage( 6, 14 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 30, 40 );
SetResistance( ResistanceType.Fire, 70, 80 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 15, 20 );
SetSkill( SkillName.MagicResist, 60.1, 75.0 );
SetSkill( SkillName.Tactics, 60.1, 70.0 );
SetSkill( SkillName.Wrestling, 60.1, 70.0 );
Fame = 6000;
Karma = -6000;
VirtualArmor = 60;
CanSwim = true;
CantWalk = true;
if ( Utility.RandomBool() )
PackItem( new SulfurousAsh( 4 ) );
else
PackItem( new BlackPearl( 4 ) );
//PackItem( new SpecialFishingNet() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override bool HasBreath{ get{ return true; } }
public override int Meat{ get{ return 1; } }
public override int Scales{ get{ return 8; } }
public override ScaleType ScaleType{ get{ return ScaleType.Blue; } }
public DeepSeaSerpent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,84 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class Dragon : BaseCreature
{
[Constructable]
public Dragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a dragon";
Body = Utility.RandomList( 12, 59 );
BaseSoundID = 362;
SetStr( 796, 825 );
SetDex( 86, 105 );
SetInt( 436, 475 );
SetHits( 478, 495 );
SetDamage( 16, 22 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 60, 70 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 25, 35 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.EvalInt, 30.1, 40.0 );
SetSkill( SkillName.Magery, 30.1, 40.0 );
SetSkill( SkillName.MagicResist, 99.1, 100.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 92.5 );
Fame = 15000;
Karma = -15000;
VirtualArmor = 60;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 93.9;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
AddLoot( LootPack.Gems, 8 );
}
public override bool ReacquireOnMovement{ get{ return !Controlled; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override bool AutoDispel{ get{ return !Controlled; } }
public override int TreasureMapLevel{ get{ return 4; } }
public override int Meat{ get{ return 19; } }
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override int Scales{ get{ return 7; } }
public override ScaleType ScaleType{ get{ return ( Body == 12 ? ScaleType.Yellow : ScaleType.Red ); } }
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
public override bool CanAngerOnTame { get { return true; } }
public override bool CanFly { get { return true; } }
public Dragon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,182 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a leviathan corpse" )]
public class Leviathan : BaseCreature
{
private Mobile m_Fisher;
public Mobile Fisher
{
get{ return m_Fisher; }
set{ m_Fisher = value; }
}
[Constructable]
public Leviathan() : this( null )
{
}
[Constructable]
public Leviathan( Mobile fisher ) : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
m_Fisher = fisher;
// May not be OSI accurate; mostly copied from krakens
Name = "a leviathan";
Body = 77;
BaseSoundID = 353;
Hue = 0x481;
SetStr( 1000 );
SetDex( 501, 520 );
SetInt( 501, 515 );
SetHits( 1500 );
SetDamage( 25, 33 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Cold, 30 );
SetResistance( ResistanceType.Physical, 55, 65 );
SetResistance( ResistanceType.Fire, 45, 55 );
SetResistance( ResistanceType.Cold, 45, 55 );
SetResistance( ResistanceType.Poison, 35, 45 );
SetResistance( ResistanceType.Energy, 25, 35 );
SetSkill( SkillName.EvalInt, 97.6, 107.5 );
SetSkill( SkillName.Magery, 97.6, 107.5 );
SetSkill( SkillName.MagicResist, 97.6, 107.5 );
SetSkill( SkillName.Meditation, 97.6, 107.5 );
SetSkill( SkillName.Tactics, 97.6, 107.5 );
SetSkill( SkillName.Wrestling, 97.6, 107.5 );
Fame = 24000;
Karma = -24000;
VirtualArmor = 50;
CanSwim = true;
CantWalk = true;
PackItem( new MessageInABottle() );
Rope rope = new Rope();
rope.ItemID = 0x14F8;
PackItem( rope );
rope = new Rope();
rope.ItemID = 0x14FA;
PackItem( rope );
}
public override bool HasBreath{ get{ return true; } }
public override int BreathPhysicalDamage{ get{ return 70; } } // TODO: Verify damage type
public override int BreathColdDamage{ get{ return 30; } }
public override int BreathFireDamage{ get{ return 0; } }
public override int BreathEffectHue{ get{ return 0x1ED; } }
public override double BreathDamageScalar{ get{ return 0.05; } }
public override double BreathMinDelay{ get{ return 5.0; } }
public override double BreathMaxDelay{ get{ return 7.5; } }
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 5 );
}
public override double TreasureMapChance{ get{ return 0.25; } }
public override int TreasureMapLevel{ get{ return 5; } }
public Leviathan( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
public static Type[] Artifacts { get { return m_Artifacts; } }
private static Type[] m_Artifacts = new Type[]
{
// Decorations
typeof( CandelabraOfSouls ),
typeof( GhostShipAnchor ),
typeof( GoldBricks ),
typeof( PhillipsWoodenSteed ),
typeof( SeahorseStatuette ),
typeof( ShipModelOfTheHMSCape ),
typeof( AdmiralsHeartyRum ),
// Equipment
typeof( AlchemistsBauble ),
typeof( ArcticDeathDealer ),
typeof( BlazeOfDeath ),
typeof( BurglarsBandana ),
typeof( CaptainQuacklebushsCutlass ),
typeof( CavortingClub ),
typeof( DreadPirateHat ),
typeof( EnchantedTitanLegBone ),
typeof( GwennosHarp ),
typeof( IolosLute ),
typeof( LunaLance ),
typeof( NightsKiss ),
typeof( NoxRangersHeavyCrossbow ),
typeof( PolarBearMask ),
typeof( VioletCourage )
};
public static void GiveArtifactTo( Mobile m )
{
Item item = Loot.Construct( m_Artifacts );
if ( item == null )
return;
// TODO: Confirm messages
if ( m.AddToBackpack( item ) )
m.SendMessage( "As a reward for slaying the mighty leviathan, an artifact has been placed in your backpack." );
else
m.SendMessage( "As your backpack is full, your reward for destroying the legendary leviathan has been placed at your feet." );
}
public override void OnKilledBy( Mobile mob )
{
base.OnKilledBy( mob );
if ( Paragon.CheckArtifactChance( mob, this ) )
{
GiveArtifactTo( mob );
if ( mob == m_Fisher )
m_Fisher = null;
}
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( m_Fisher != null && 25 > Utility.Random( 100 ) )
GiveArtifactTo( m_Fisher );
m_Fisher = null;
}
}
}

View file

@ -0,0 +1,85 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "an ophidian corpse" )]
[TypeAlias( "Server.Mobiles.OphidianJusticar", "Server.Mobiles.OphidianZealot" )]
public class OphidianArchmage : BaseCreature
{
private static string[] m_Names = new string[]
{
"an ophidian justicar",
"an ophidian zealot"
};
[Constructable]
public OphidianArchmage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = m_Names[Utility.Random( m_Names.Length )];
Body = 85;
BaseSoundID = 639;
SetStr( 281, 305 );
SetDex( 191, 215 );
SetInt( 226, 250 );
SetHits( 169, 183 );
SetStam( 36, 45 );
SetDamage( 5, 10 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 40, 45 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 35, 40 );
SetResistance( ResistanceType.Energy, 25, 35 );
SetSkill( SkillName.EvalInt, 95.1, 100.0 );
SetSkill( SkillName.Magery, 95.1, 100.0 );
SetSkill( SkillName.MagicResist, 75.0, 97.5 );
SetSkill( SkillName.Tactics, 65.0, 87.5 );
SetSkill( SkillName.Wrestling, 20.2, 60.0 );
Fame = 11500;
Karma = -11500;
VirtualArmor = 44;
PackReg( 5, 15 );
PackNecroReg( 5, 15 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.MedScrolls, 2 );
}
public override int Meat{ get{ return 1; } }
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.TerathansAndOphidians; }
}
public OphidianArchmage( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,86 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "an ophidian corpse" )]
[TypeAlias( "Server.Mobiles.OphidianShaman" )]
public class OphidianMage : BaseCreature
{
private static string[] m_Names = new string[]
{
"an ophidian apprentice mage",
"an ophidian shaman"
};
[Constructable]
public OphidianMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = m_Names[Utility.Random( m_Names.Length )];
Body = 85;
BaseSoundID = 639;
SetStr( 181, 205 );
SetDex( 191, 215 );
SetInt( 96, 120 );
SetHits( 109, 123 );
SetDamage( 5, 10 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 35 );
SetResistance( ResistanceType.Fire, 30, 40 );
SetResistance( ResistanceType.Cold, 35, 45 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.EvalInt, 85.1, 100.0 );
SetSkill( SkillName.Magery, 85.1, 100.0 );
SetSkill( SkillName.MagicResist, 75.0, 97.5 );
SetSkill( SkillName.Tactics, 65.0, 87.5 );
SetSkill( SkillName.Wrestling, 20.2, 60.0 );
Fame = 4000;
Karma = -4000;
VirtualArmor = 30;
PackReg( 10 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
AddLoot( LootPack.LowScrolls );
AddLoot( LootPack.MedScrolls );
AddLoot( LootPack.Potions );
}
public override int Meat{ get{ return 1; } }
public override int TreasureMapLevel{ get{ return 2; } }
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.TerathansAndOphidians; }
}
public OphidianMage( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,77 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "an ophidian corpse" )]
public class OphidianMatriarch : BaseCreature
{
[Constructable]
public OphidianMatriarch() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "an ophidian matriarch";
Body = 87;
BaseSoundID = 644;
SetStr( 416, 505 );
SetDex( 96, 115 );
SetInt( 366, 455 );
SetHits( 250, 303 );
SetDamage( 11, 13 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 30, 40 );
SetResistance( ResistanceType.Cold, 35, 45 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.EvalInt, 90.1, 100.0 );
SetSkill( SkillName.Magery, 90.1, 100.0 );
SetSkill( SkillName.Meditation, 5.4, 25.0 );
SetSkill( SkillName.MagicResist, 90.1, 100.0 );
SetSkill( SkillName.Tactics, 50.1, 70.0 );
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
Fame = 16000;
Karma = -16000;
VirtualArmor = 50;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.Average, 2 );
AddLoot( LootPack.MedScrolls, 2 );
}
public override Poison PoisonImmune{ get{ return Poison.Greater; } }
public override int TreasureMapLevel{ get{ return 4; } }
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.TerathansAndOphidians; }
}
public OphidianMatriarch( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,86 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a sea serpents corpse" )]
[TypeAlias( "Server.Mobiles.Seaserpant" )]
public class SeaSerpent : BaseCreature
{
[Constructable]
public SeaSerpent() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a sea serpent";
Body = 150;
BaseSoundID = 447;
Hue = Utility.Random( 0x530, 9 );
SetStr( 168, 225 );
SetDex( 58, 85 );
SetInt( 53, 95 );
SetHits( 110, 127 );
SetDamage( 7, 13 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 35 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 15, 20 );
SetSkill( SkillName.MagicResist, 60.1, 75.0 );
SetSkill( SkillName.Tactics, 60.1, 70.0 );
SetSkill( SkillName.Wrestling, 60.1, 70.0 );
Fame = 6000;
Karma = -6000;
VirtualArmor = 30;
CanSwim = true;
CantWalk = true;
if ( Utility.RandomBool() )
PackItem( new SulfurousAsh( 4 ) );
else
PackItem( new BlackPearl( 4 ) );
PackItem( new RawFishSteak() );
//PackItem( new SpecialFishingNet() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override bool HasBreath{ get{ return true; } }
public override int TreasureMapLevel{ get{ return 2; } }
public override int Hides{ get{ return 10; } }
public override HideType HideType{ get{ return HideType.Horned; } }
public override int Scales{ get{ return 8; } }
public override ScaleType ScaleType{ get{ return ScaleType.Blue; } }
public SeaSerpent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,126 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a dragon corpse" )]
public class SerpentineDragon : BaseCreature
{
[Constructable]
public SerpentineDragon() : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 )
{
Name = "a serpentine dragon";
Body = 103;
BaseSoundID = 362;
SetStr( 111, 140 );
SetDex( 201, 220 );
SetInt( 1001, 1040 );
SetHits( 480 );
SetDamage( 5, 12 );
SetDamageType( ResistanceType.Physical, 75 );
SetDamageType( ResistanceType.Poison, 25 );
SetResistance( ResistanceType.Physical, 35, 40 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 25, 35 );
SetResistance( ResistanceType.Energy, 25, 35 );
SetSkill( SkillName.EvalInt, 100.1, 110.0 );
SetSkill( SkillName.Magery, 110.1, 120.0 );
SetSkill( SkillName.Meditation, 100.0 );
SetSkill( SkillName.MagicResist, 100.0 );
SetSkill( SkillName.Tactics, 50.1, 60.0 );
SetSkill( SkillName.Wrestling, 30.1, 100.0 );
Fame = 15000;
Karma = 15000;
VirtualArmor = 36;
if ( Core.ML && Utility.RandomDouble() < .33 )
PackItem( Engines.Plants.Seed.RandomPeculiarSeed(2) );
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
AddLoot( LootPack.Gems, 2 );
}
public override int GetIdleSound()
{
return 0x2C4;
}
public override int GetAttackSound()
{
return 0x2C0;
}
public override int GetDeathSound()
{
return 0x2C1;
}
public override int GetAngerSound()
{
return 0x2C4;
}
public override int GetHurtSound()
{
return 0x2C3;
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override double BonusPetDamageScalar{ get{ return (Core.SE) ? 3.0 : 1.0; } }
public override bool AutoDispel{ get{ return true; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override int Hides{ get{ return 20; } }
public override int Meat{ get{ return 19; } }
public override int Scales{ get{ return 6; } }
public override ScaleType ScaleType{ get{ return ( Utility.RandomBool() ? ScaleType.Black : ScaleType.White ); } }
public override int TreasureMapLevel{ get{ return 4; } }
public SerpentineDragon( Serial serial ) : base( serial )
{
}
public override void OnGotMeleeAttack( Mobile attacker )
{
base.OnGotMeleeAttack( attacker );
if ( !Core.SE && 0.2 > Utility.RandomDouble() && attacker is BaseCreature )
{
BaseCreature c = (BaseCreature)attacker;
if ( c.Controlled && c.ControlMaster != null )
{
c.ControlTarget = c.ControlMaster;
c.ControlOrder = OrderType.Attack;
c.Combatant = c.ControlMaster;
}
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,93 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a shadow wyrm corpse" )]
public class ShadowWyrm : BaseCreature
{
[Constructable]
public ShadowWyrm() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a shadow wyrm";
Body = 106;
BaseSoundID = 362;
SetStr( 898, 1030 );
SetDex( 68, 200 );
SetInt( 488, 620 );
SetHits( 558, 599 );
SetDamage( 29, 35 );
SetDamageType( ResistanceType.Physical, 75 );
SetDamageType( ResistanceType.Cold, 25 );
SetResistance( ResistanceType.Physical, 65, 75 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 45, 55 );
SetResistance( ResistanceType.Poison, 20, 30 );
SetResistance( ResistanceType.Energy, 50, 60 );
SetSkill( SkillName.EvalInt, 80.1, 100.0 );
SetSkill( SkillName.Magery, 80.1, 100.0 );
SetSkill( SkillName.Meditation, 52.5, 75.0 );
SetSkill( SkillName.MagicResist, 100.3, 130.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 97.6, 100.0 );
Fame = 22500;
Karma = -22500;
VirtualArmor = 70;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 3 );
AddLoot( LootPack.Gems, 5 );
}
public override int GetIdleSound()
{
return 0x2D5;
}
public override int GetHurtSound()
{
return 0x2D1;
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override bool AutoDispel{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Deadly; } }
public override Poison HitPoison{ get{ return Poison.Deadly; } }
public override int TreasureMapLevel{ get{ return 5; } }
public override int Meat{ get{ return 19; } }
public override int Hides{ get{ return 20; } }
public override int Scales{ get{ return 10; } }
public override ScaleType ScaleType{ get{ return ScaleType.Black; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override bool CanFly { get { return true; } }
public ShadowWyrm( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,85 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a skeletal dragon corpse" )]
public class SkeletalDragon : BaseCreature
{
[Constructable]
public SkeletalDragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a skeletal dragon";
Body = 104;
BaseSoundID = 0x488;
SetStr( 898, 1030 );
SetDex( 68, 200 );
SetInt( 488, 620 );
SetHits( 558, 599 );
SetDamage( 29, 35 );
SetDamageType( ResistanceType.Physical, 75 );
SetDamageType( ResistanceType.Fire, 25 );
SetResistance( ResistanceType.Physical, 75, 80 );
SetResistance( ResistanceType.Fire, 40, 60 );
SetResistance( ResistanceType.Cold, 40, 60 );
SetResistance( ResistanceType.Poison, 70, 80 );
SetResistance( ResistanceType.Energy, 40, 60 );
SetSkill( SkillName.EvalInt, 80.1, 100.0 );
SetSkill( SkillName.Magery, 80.1, 100.0 );
SetSkill( SkillName.MagicResist, 100.3, 130.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 97.6, 100.0 );
SetSkill( SkillName.Necromancy, 120.1, 130.0 );
SetSkill( SkillName.SpiritSpeak, 120.1, 130.0 );
Fame = 22500;
Karma = -22500;
VirtualArmor = 80;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 4 );
AddLoot( LootPack.Gems, 5 );
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override int BreathFireDamage{ get{ return 0; } }
public override int BreathColdDamage{ get{ return 100; } }
public override int BreathEffectHue{ get{ return 0x480; } }
public override double BonusPetDamageScalar{ get{ return (Core.SE)? 3.0 : 1.0; } }
// TODO: Undead summoning?
public override bool AutoDispel{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override bool BleedImmune{ get{ return true; } }
public override int Meat{ get{ return 19; } } // where's it hiding these? :)
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public SkeletalDragon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,84 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a white wyrm corpse" )]
public class WhiteWyrm : BaseCreature
{
[Constructable]
public WhiteWyrm() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Body = Utility.RandomBool() ? 180 : 49;
Name = "a white wyrm";
BaseSoundID = 362;
SetStr( 721, 760 );
SetDex( 101, 130 );
SetInt( 386, 425 );
SetHits( 433, 456 );
SetDamage( 17, 25 );
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Cold, 50 );
SetResistance( ResistanceType.Physical, 55, 70 );
SetResistance( ResistanceType.Fire, 15, 25 );
SetResistance( ResistanceType.Cold, 80, 90 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 40, 50 );
SetSkill( SkillName.EvalInt, 99.1, 100.0 );
SetSkill( SkillName.Magery, 99.1, 100.0 );
SetSkill( SkillName.MagicResist, 99.1, 100.0 );
SetSkill( SkillName.Tactics, 97.6, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 100.0 );
Fame = 18000;
Karma = -18000;
VirtualArmor = 64;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 96.3;
}
public override void GenerateLoot()
{
AddLoot( LootPack.FilthyRich, 2 );
AddLoot( LootPack.Average );
AddLoot( LootPack.Gems, Utility.Random( 1, 5 ) );
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override int TreasureMapLevel{ get{ return 4; } }
public override int Meat{ get{ return 19; } }
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Barbed; } }
public override int Scales{ get{ return 9; } }
public override ScaleType ScaleType{ get{ return ScaleType.White; } }
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Gold; } }
public override bool CanAngerOnTame { get { return true; } }
public override bool CanFly { get { return true; } }
public WhiteWyrm( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}