#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();
}
}
}

View file

@ -0,0 +1,83 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a drake corpse" )]
public class Drake : BaseCreature
{
[Constructable]
public Drake () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a drake";
Body = Utility.RandomList( 60, 61 );
BaseSoundID = 362;
SetStr( 401, 430 );
SetDex( 133, 152 );
SetInt( 101, 140 );
SetHits( 241, 258 );
SetDamage( 11, 17 );
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Fire, 20 );
SetResistance( ResistanceType.Physical, 45, 50 );
SetResistance( ResistanceType.Fire, 50, 60 );
SetResistance( ResistanceType.Cold, 40, 50 );
SetResistance( ResistanceType.Poison, 20, 30 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill( SkillName.MagicResist, 65.1, 80.0 );
SetSkill( SkillName.Tactics, 65.1, 90.0 );
SetSkill( SkillName.Wrestling, 65.1, 80.0 );
Fame = 5500;
Karma = -5500;
VirtualArmor = 46;
Tamable = true;
ControlSlots = 2;
MinTameSkill = 84.3;
PackReg( 3 );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.MedScrolls, 2 );
}
public override bool ReacquireOnMovement{ get{ return true; } }
public override bool HasBreath{ get{ return true; } } // fire breath enabled
public override int TreasureMapLevel{ get{ return 2; } }
public override int Meat{ get{ return 10; } }
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Horned; } }
public override int Scales{ get{ return 2; } }
public override ScaleType ScaleType{ get{ return ( Body == 60 ? ScaleType.Yellow : ScaleType.Red ); } }
public override FoodType FavoriteFood{ get{ return FoodType.Meat | FoodType.Fish; } }
public override bool CanFly { get { return true; } }
public Drake( 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,96 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a harpy corpse" )]
public class Harpy : BaseCreature
{
[Constructable]
public Harpy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a harpy";
Body = 30;
BaseSoundID = 402;
SetStr( 96, 120 );
SetDex( 86, 110 );
SetInt( 51, 75 );
SetHits( 58, 72 );
SetDamage( 5, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 30 );
SetResistance( ResistanceType.Fire, 10, 20 );
SetResistance( ResistanceType.Cold, 10, 30 );
SetResistance( ResistanceType.Poison, 20, 30 );
SetResistance( ResistanceType.Energy, 10, 20 );
SetSkill( SkillName.MagicResist, 50.1, 65.0 );
SetSkill( SkillName.Tactics, 70.1, 100.0 );
SetSkill( SkillName.Wrestling, 60.1, 90.0 );
Fame = 2500;
Karma = -2500;
VirtualArmor = 28;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager, 2 );
}
public override int GetAttackSound()
{
return 916;
}
public override int GetAngerSound()
{
return 916;
}
public override int GetDeathSound()
{
return 917;
}
public override int GetHurtSound()
{
return 919;
}
public override int GetIdleSound()
{
return 918;
}
public override bool CanRummageCorpses{ get{ return true; } }
public override int Meat{ get{ return 4; } }
public override MeatType MeatType{ get{ return MeatType.Bird; } }
public override int Feathers{ get{ return 50; } }
public override bool CanFly { get { return true; } }
public Harpy( 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,81 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a krakens corpse" )]
public class Kraken : BaseCreature
{
[Constructable]
public Kraken() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a kraken";
Body = 77;
BaseSoundID = 353;
SetStr( 756, 780 );
SetDex( 226, 245 );
SetInt( 26, 40 );
SetHits( 454, 468 );
SetMana( 0 );
SetDamage( 19, 33 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Cold, 30 );
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 30, 40 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 20, 30 );
SetResistance( ResistanceType.Energy, 10, 20 );
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
SetSkill( SkillName.Tactics, 45.1, 60.0 );
SetSkill( SkillName.Wrestling, 45.1, 60.0 );
Fame = 11000;
Karma = -11000;
VirtualArmor = 50;
CanSwim = true;
CantWalk = true;
Rope rope = new Rope();
rope.ItemID = 0x14F8;
PackItem( rope );
if( Utility.RandomDouble() < .05 )
PackItem( new MessageInABottle() );
PackItem( new SpecialFishingNet() ); //Confirm?
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override int TreasureMapLevel{ get{ return 4; } }
public Kraken( 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,73 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Misc;
namespace Server.Mobiles
{
[CorpseName( "a lizardman corpse" )]
public class Lizardman : BaseCreature
{
public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Lizardman; } }
[Constructable]
public Lizardman() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = NameList.RandomName( "lizardman" );
Body = Utility.RandomList( 35, 36 );
BaseSoundID = 417;
SetStr( 96, 120 );
SetDex( 86, 105 );
SetInt( 36, 60 );
SetHits( 58, 72 );
SetDamage( 5, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 30 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Cold, 5, 10 );
SetResistance( ResistanceType.Poison, 10, 20 );
SetSkill( SkillName.MagicResist, 35.1, 60.0 );
SetSkill( SkillName.Tactics, 55.1, 80.0 );
SetSkill( SkillName.Wrestling, 50.1, 70.0 );
Fame = 1500;
Karma = -1500;
VirtualArmor = 28;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
// TODO: weapon
}
public override bool CanRummageCorpses{ get{ return true; } }
public override int Meat{ get{ return 1; } }
public override int Hides{ get{ return 12; } }
public override HideType HideType{ get{ return HideType.Spined; } }
public Lizardman( 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,87 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "an ophidian corpse" )]
[TypeAlias( "Server.Mobiles.OphidianAvenger" )]
public class OphidianKnight : BaseCreature
{
private static string[] m_Names = new string[]
{
"an ophidian knight-errant",
"an ophidian avenger"
};
[Constructable]
public OphidianKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = m_Names[Utility.Random( m_Names.Length )];
Body = 86;
BaseSoundID = 634;
SetStr( 417, 595 );
SetDex( 166, 175 );
SetInt( 46, 70 );
SetHits( 266, 342 );
SetMana( 0 );
SetDamage( 16, 19 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 35, 40 );
SetResistance( ResistanceType.Fire, 30, 40 );
SetResistance( ResistanceType.Cold, 35, 45 );
SetResistance( ResistanceType.Poison, 90, 100 );
SetResistance( ResistanceType.Energy, 35, 45 );
SetSkill( SkillName.Poisoning, 60.1, 80.0 );
SetSkill( SkillName.MagicResist, 65.1, 80.0 );
SetSkill( SkillName.Tactics, 90.1, 100.0 );
SetSkill( SkillName.Wrestling, 90.1, 100.0 );
Fame = 10000;
Karma = -10000;
VirtualArmor = 40;
PackItem( new LesserPoisonPotion() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich, 2 );
}
public override int Meat{ get{ return 2; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override Poison HitPoison{ get{ return Poison.Lethal; } }
public override int TreasureMapLevel{ get{ return 3; } }
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.TerathansAndOphidians; }
}
public OphidianKnight( 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,82 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "an ophidian corpse" )]
public class OphidianWarrior : BaseCreature
{
private static string[] m_Names = new string[]
{
"an ophidian warrior",
"an ophidian enforcer"
};
[Constructable]
public OphidianWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = m_Names[Utility.Random( m_Names.Length )];
Body = 86;
BaseSoundID = 634;
SetStr( 150, 320 );
SetDex( 94, 190 );
SetInt( 64, 160 );
SetHits( 128, 155 );
SetMana( 0 );
SetDamage( 5, 11 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 35, 40 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 25, 35 );
SetSkill( SkillName.MagicResist, 70.1, 85.0 );
SetSkill( SkillName.Swords, 60.1, 85.0 );
SetSkill( SkillName.Tactics, 75.1, 90.0 );
Fame = 4500;
Karma = -4500;
VirtualArmor = 36;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
AddLoot( LootPack.Average );
AddLoot( LootPack.Gems );
}
public override int Meat{ get{ return 1; } }
public override int TreasureMapLevel{ get{ return 1; } }
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.TerathansAndOphidians; }
}
public OphidianWarrior( 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 System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a scorpion corpse" )]
public class Scorpion : BaseCreature
{
[Constructable]
public Scorpion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a scorpion";
Body = 48;
BaseSoundID = 397;
SetStr( 73, 115 );
SetDex( 76, 95 );
SetInt( 16, 30 );
SetHits( 50, 63 );
SetMana( 0 );
SetDamage( 5, 10 );
SetDamageType( ResistanceType.Physical, 60 );
SetDamageType( ResistanceType.Poison, 40 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Fire, 10, 15 );
SetResistance( ResistanceType.Cold, 20, 25 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 10, 15 );
SetSkill( SkillName.Poisoning, 80.1, 100.0 );
SetSkill( SkillName.MagicResist, 30.1, 35.0 );
SetSkill( SkillName.Tactics, 60.3, 75.0 );
SetSkill( SkillName.Wrestling, 50.3, 65.0 );
Fame = 2000;
Karma = -2000;
VirtualArmor = 28;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 47.1;
PackItem( new LesserPoisonPotion() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Meager );
}
public override int Meat{ get{ return 1; } }
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
public override PackInstinct PackInstinct{ get{ return PackInstinct.Arachnid; } }
public override Poison PoisonImmune{ get{ return Poison.Greater; } }
public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } }
public Scorpion( 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,97 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a stone harpy corpse" )]
public class StoneHarpy : BaseCreature
{
[Constructable]
public StoneHarpy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a stone harpy";
Body = 73;
BaseSoundID = 402;
SetStr( 296, 320 );
SetDex( 86, 110 );
SetInt( 51, 75 );
SetHits( 178, 192 );
SetMana( 0 );
SetDamage( 8, 16 );
SetDamageType( ResistanceType.Physical, 75 );
SetDamageType( ResistanceType.Poison, 25 );
SetResistance( ResistanceType.Physical, 45, 55 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Poison, 30, 40 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill( SkillName.MagicResist, 50.1, 65.0 );
SetSkill( SkillName.Tactics, 70.1, 100.0 );
SetSkill( SkillName.Wrestling, 70.1, 100.0 );
Fame = 4500;
Karma = -4500;
VirtualArmor = 50;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average, 2 );
AddLoot( LootPack.Gems, 2 );
}
public override int GetAttackSound()
{
return 916;
}
public override int GetAngerSound()
{
return 916;
}
public override int GetDeathSound()
{
return 917;
}
public override int GetHurtSound()
{
return 919;
}
public override int GetIdleSound()
{
return 918;
}
public override int Meat{ get{ return 1; } }
public override int Feathers{ get{ return 50; } }
public override bool CanFly { get { return true; } }
public StoneHarpy( 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,105 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a wyvern corpse" )]
public class Wyvern : BaseCreature
{
[Constructable]
public Wyvern () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a wyvern";
Body = 62;
BaseSoundID = 362;
SetStr( 202, 240 );
SetDex( 153, 172 );
SetInt( 51, 90 );
SetHits( 125, 141 );
SetDamage( 8, 19 );
SetDamageType( ResistanceType.Physical, 50 );
SetDamageType( ResistanceType.Poison, 50 );
SetResistance( ResistanceType.Physical, 35, 45 );
SetResistance( ResistanceType.Fire, 30, 40 );
SetResistance( ResistanceType.Cold, 20, 30 );
SetResistance( ResistanceType.Poison, 90, 100 );
SetResistance( ResistanceType.Energy, 30, 40 );
SetSkill( SkillName.Poisoning, 60.1, 80.0 );
SetSkill( SkillName.MagicResist, 65.1, 80.0 );
SetSkill( SkillName.Tactics, 65.1, 90.0 );
SetSkill( SkillName.Wrestling, 65.1, 80.0 );
Fame = 4000;
Karma = -4000;
VirtualArmor = 40;
PackItem( new LesserPoisonPotion() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
AddLoot( LootPack.Meager );
AddLoot( LootPack.MedScrolls );
}
public override bool ReacquireOnMovement{ 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 2; } }
public override int Meat{ get{ return 10; } }
public override int Hides{ get{ return 20; } }
public override HideType HideType{ get{ return HideType.Horned; } }
public override bool CanFly { get { return true; } }
public override int GetAttackSound()
{
return 713;
}
public override int GetAngerSound()
{
return 718;
}
public override int GetDeathSound()
{
return 716;
}
public override int GetHurtSound()
{
return 721;
}
public override int GetIdleSound()
{
return 725;
}
public Wyvern( 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();
}
}
}