v0.0.1-Alpha (#42)

This commit is contained in:
Kamron Batman 2019-08-02 18:16:11 -07:00 • committed by GitHub
parent d30f93c454
commit a36796c2c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3552 changed files with 2476 additions and 15223 deletions

View file

@ -0,0 +1,89 @@
namespace Server.Mobiles
{
public class AncientWyrm : BaseCreature
{
[Constructible]
public AncientWyrm() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 AncientWyrm(Serial serial) : base(serial)
{
}
public override string CorpseName => "a dragon corpse";
public override string DefaultName => "an ancient wyrm";
public override bool ReacquireOnMovement => true;
public override bool HasBreath => true; // fire breath enabled
public override bool AutoDispel => true;
public override HideType HideType => HideType.Barbed;
public override int Hides => 40;
public override int Meat => 19;
public override int Scales => 12;
public override ScaleType ScaleType => (ScaleType)Utility.Random(4);
public override Poison PoisonImmune => Poison.Regular;
public override Poison HitPoison => Utility.RandomBool() ? Poison.Lesser : Poison.Regular;
public override int TreasureMapLevel => 5;
public override bool CanFly => true;
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 void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,79 @@
using Server.Items;
namespace Server.Mobiles
{
public class DeepSeaSerpent : BaseCreature
{
[Constructible]
public DeepSeaSerpent() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 DeepSeaSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "a deep sea serpents corpse";
public override string DefaultName => "a deep sea serpent";
public override bool HasBreath => true;
public override int Meat => 1;
public override int Scales => 8;
public override ScaleType ScaleType => ScaleType.Blue;
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,81 @@
namespace Server.Mobiles
{
public class Dragon : BaseCreature
{
[Constructible]
public Dragon() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 Dragon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a dragon corpse";
public override string DefaultName => "a dragon";
public override bool ReacquireOnMovement => !Controlled;
public override bool HasBreath => true; // fire breath enabled
public override bool AutoDispel => !Controlled;
public override int TreasureMapLevel => 4;
public override int Meat => 19;
public override int Hides => 20;
public override HideType HideType => HideType.Barbed;
public override int Scales => 7;
public override ScaleType ScaleType => Body == 12 ? ScaleType.Yellow : ScaleType.Red;
public override FoodType FavoriteFood => FoodType.Meat;
public override bool CanAngerOnTame => true;
public override bool CanFly => true;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 2);
AddLoot(LootPack.Gems, 8);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,170 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
public class Leviathan : BaseCreature
{
[Constructible]
public Leviathan(Mobile fisher = null) :
base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Fisher = fisher;
// May not be OSI accurate; mostly copied from krakens
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 Leviathan(Serial serial) : base(serial)
{
}
public override string CorpseName => "a leviathan corpse";
public Mobile Fisher{ get; set; }
public override string DefaultName => "a leviathan";
public override bool HasBreath => true;
public override int BreathPhysicalDamage => 70; // TODO: Verify damage type
public override int BreathColdDamage => 30;
public override int BreathFireDamage => 0;
public override int BreathEffectHue => 0x1ED;
public override double BreathDamageScalar => 0.05;
public override double BreathMinDelay => 5.0;
public override double BreathMaxDelay => 7.5;
public override int TreasureMapLevel => 5;
public static Type[] Artifacts{ get; } =
{
// 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 override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 5);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public static void GiveArtifactTo(Mobile m)
{
Item item = Loot.Construct(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 == Fisher)
Fisher = null;
}
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Fisher != null && 25 > Utility.Random(100))
GiveArtifactTo(Fisher);
Fisher = null;
}
}
}

View file

@ -0,0 +1,79 @@
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.OphidianJusticar", "Server.Mobiles.OphidianZealot")]
public class OphidianArchmage : BaseCreature
{
private static string[] m_Names =
{
"an ophidian justicar",
"an ophidian zealot"
};
[Constructible]
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 OphidianArchmage(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ophidian corpse";
public override int Meat => 1;
public override OppositionGroup OppositionGroup => OppositionGroup.TerathansAndOphidians;
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.MedScrolls, 2);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,80 @@
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.OphidianShaman")]
public class OphidianMage : BaseCreature
{
private static string[] m_Names =
{
"an ophidian apprentice mage",
"an ophidian shaman"
};
[Constructible]
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 OphidianMage(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ophidian corpse";
public override int Meat => 1;
public override int TreasureMapLevel => 2;
public override OppositionGroup OppositionGroup => OppositionGroup.TerathansAndOphidians;
public override void GenerateLoot()
{
AddLoot(LootPack.Average);
AddLoot(LootPack.LowScrolls);
AddLoot(LootPack.MedScrolls);
AddLoot(LootPack.Potions);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,71 @@
namespace Server.Mobiles
{
public class OphidianMatriarch : BaseCreature
{
[Constructible]
public OphidianMatriarch() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 OphidianMatriarch(Serial serial) : base(serial)
{
}
public override string CorpseName => "an ophidian corpse";
public override string DefaultName => "an ophidian matriarch";
public override Poison PoisonImmune => Poison.Greater;
public override int TreasureMapLevel => 4;
public override OppositionGroup OppositionGroup => OppositionGroup.TerathansAndOphidians;
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Average, 2);
AddLoot(LootPack.MedScrolls, 2);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,85 @@
using Server.Items;
namespace Server.Mobiles
{
[TypeAlias("Server.Mobiles.Seaserpant")]
public class SeaSerpent : BaseCreature
{
[Constructible]
public SeaSerpent() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 SeaSerpent(Serial serial) : base(serial)
{
}
public override string CorpseName => "a sea serpents corpse";
public override string DefaultName => "a sea serpent";
public override bool HasBreath => true;
public override int TreasureMapLevel => 2;
public override int Hides => 10;
public override HideType HideType => HideType.Horned;
public override int Scales => 8;
public override ScaleType ScaleType => ScaleType.Blue;
public override void GenerateLoot()
{
AddLoot(LootPack.Meager);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,121 @@
using Server.Engines.Plants;
namespace Server.Mobiles
{
public class SerpentineDragon : BaseCreature
{
[Constructible]
public SerpentineDragon() : base(AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4)
{
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(Seed.RandomPeculiarSeed(2));
}
public SerpentineDragon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a dragon corpse";
public override string DefaultName => "a serpentine dragon";
public override bool ReacquireOnMovement => true;
public override bool HasBreath => true; // fire breath enabled
public override double BonusPetDamageScalar => Core.SE ? 3.0 : 1.0;
public override bool AutoDispel => true;
public override HideType HideType => HideType.Barbed;
public override int Hides => 20;
public override int Meat => 19;
public override int Scales => 6;
public override ScaleType ScaleType => Utility.RandomBool() ? ScaleType.Black : ScaleType.White;
public override int TreasureMapLevel => 4;
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 void OnGotMeleeAttack(Mobile attacker)
{
base.OnGotMeleeAttack(attacker);
if (!Core.SE && 0.2 > Utility.RandomDouble() && attacker is BaseCreature c && 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(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,90 @@
namespace Server.Mobiles
{
public class ShadowWyrm : BaseCreature
{
[Constructible]
public ShadowWyrm() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 ShadowWyrm(Serial serial) : base(serial)
{
}
public override string CorpseName => "a shadow wyrm corpse";
public override string DefaultName => "a shadow wyrm";
public override bool ReacquireOnMovement => true;
public override bool HasBreath => true; // fire breath enabled
public override bool AutoDispel => true;
public override Poison PoisonImmune => Poison.Deadly;
public override Poison HitPoison => Poison.Deadly;
public override int TreasureMapLevel => 5;
public override int Meat => 19;
public override int Hides => 20;
public override int Scales => 10;
public override ScaleType ScaleType => ScaleType.Black;
public override HideType HideType => HideType.Barbed;
public override bool CanFly => true;
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 void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,83 @@
namespace Server.Mobiles
{
public class SkeletalDragon : BaseCreature
{
[Constructible]
public SkeletalDragon() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
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 SkeletalDragon(Serial serial) : base(serial)
{
}
public override string CorpseName => "a skeletal dragon corpse";
public override string DefaultName => "a skeletal dragon";
public override bool ReacquireOnMovement => true;
public override bool HasBreath => true; // fire breath enabled
public override int BreathFireDamage => 0;
public override int BreathColdDamage => 100;
public override int BreathEffectHue => 0x480;
public override double BonusPetDamageScalar => Core.SE ? 3.0 : 1.0;
// TODO: Undead summoning?
public override bool AutoDispel => true;
public override Poison PoisonImmune => Poison.Lethal;
public override bool BleedImmune => true;
public override int Meat => 19; // where's it hiding these? :)
public override int Hides => 20;
public override HideType HideType => HideType.Barbed;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 4);
AddLoot(LootPack.Gems, 5);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,81 @@
namespace Server.Mobiles
{
public class WhiteWyrm : BaseCreature
{
[Constructible]
public WhiteWyrm() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Body = Utility.RandomBool() ? 180 : 49;
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 WhiteWyrm(Serial serial) : base(serial)
{
}
public override string CorpseName => "a white wyrm corpse";
public override string DefaultName => "a white wyrm";
public override bool ReacquireOnMovement => true;
public override int TreasureMapLevel => 4;
public override int Meat => 19;
public override int Hides => 20;
public override HideType HideType => HideType.Barbed;
public override int Scales => 9;
public override ScaleType ScaleType => ScaleType.White;
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Gold;
public override bool CanAngerOnTame => true;
public override bool CanFly => true;
public override void GenerateLoot()
{
AddLoot(LootPack.FilthyRich, 2);
AddLoot(LootPack.Average);
AddLoot(LootPack.Gems, Utility.Random(1, 5));
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}