Reorganizes Project (#41)
This commit is contained in:
parent
08bf44af9a
commit
3614a66aee
3499 changed files with 79 additions and 55 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/Dragon.cs
Normal file
81
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/Dragon.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
170
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/Leviathan.cs
Normal file
170
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/Leviathan.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/WhiteWyrm.cs
Normal file
81
Projects/Scripts/Mobiles/Monsters/Reptile/Magic/WhiteWyrm.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
80
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Drake.cs
Normal file
80
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Drake.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
namespace Server.Mobiles
|
||||
{
|
||||
public class Drake : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Drake() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 Drake(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a drake corpse";
|
||||
public override string DefaultName => "a drake";
|
||||
|
||||
public override bool ReacquireOnMovement => true;
|
||||
public override bool HasBreath => true; // fire breath enabled
|
||||
public override int TreasureMapLevel => 2;
|
||||
public override int Meat => 10;
|
||||
public override int Hides => 20;
|
||||
public override HideType HideType => HideType.Horned;
|
||||
public override int Scales => 2;
|
||||
public override ScaleType ScaleType => Body == 60 ? ScaleType.Yellow : ScaleType.Red;
|
||||
public override FoodType FavoriteFood => FoodType.Meat | FoodType.Fish;
|
||||
public override bool CanFly => true;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
92
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Harpy.cs
Normal file
92
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Harpy.cs
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
namespace Server.Mobiles
|
||||
{
|
||||
public class Harpy : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Harpy() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 Harpy(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a harpy corpse";
|
||||
public override string DefaultName => "a harpy";
|
||||
|
||||
public override bool CanRummageCorpses => true;
|
||||
public override int Meat => 4;
|
||||
public override MeatType MeatType => MeatType.Bird;
|
||||
public override int Feathers => 50;
|
||||
public override bool CanFly => true;
|
||||
|
||||
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 void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
79
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Kraken.cs
Normal file
79
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Kraken.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Kraken : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Kraken() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 Kraken(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a krakens corpse";
|
||||
public override string DefaultName => "a kraken";
|
||||
|
||||
public override int TreasureMapLevel => 4;
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Lizardman.cs
Normal file
69
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Lizardman.cs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
using Server.Misc;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Lizardman : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
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 Lizardman(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a lizardman corpse";
|
||||
public override InhumanSpeech SpeechType => InhumanSpeech.Lizardman;
|
||||
|
||||
public override bool CanRummageCorpses => true;
|
||||
public override int Meat => 1;
|
||||
public override int Hides => 12;
|
||||
public override HideType HideType => HideType.Spined;
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager);
|
||||
// TODO: weapon
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[TypeAlias("Server.Mobiles.OphidianAvenger")]
|
||||
public class OphidianKnight : BaseCreature
|
||||
{
|
||||
private static string[] m_Names =
|
||||
{
|
||||
"an ophidian knight-errant",
|
||||
"an ophidian avenger"
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
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 OphidianKnight(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "an ophidian corpse";
|
||||
|
||||
public override int Meat => 2;
|
||||
|
||||
public override Poison PoisonImmune => Poison.Lethal;
|
||||
public override Poison HitPoison => Poison.Lethal;
|
||||
public override int TreasureMapLevel => 3;
|
||||
|
||||
public override OppositionGroup OppositionGroup => OppositionGroup.TerathansAndOphidians;
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich, 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
namespace Server.Mobiles
|
||||
{
|
||||
public class OphidianWarrior : BaseCreature
|
||||
{
|
||||
private static string[] m_Names =
|
||||
{
|
||||
"an ophidian warrior",
|
||||
"an ophidian enforcer"
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
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 OphidianWarrior(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "an ophidian corpse";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int TreasureMapLevel => 1;
|
||||
|
||||
public override OppositionGroup OppositionGroup => OppositionGroup.TerathansAndOphidians;
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager);
|
||||
AddLoot(LootPack.Average);
|
||||
AddLoot(LootPack.Gems);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
78
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Scorpion.cs
Normal file
78
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Scorpion.cs
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Scorpion : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Scorpion() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 Scorpion(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a scorpion corpse";
|
||||
public override string DefaultName => "a scorpion";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override FoodType FavoriteFood => FoodType.Meat;
|
||||
public override PackInstinct PackInstinct => PackInstinct.Arachnid;
|
||||
public override Poison PoisonImmune => Poison.Greater;
|
||||
public override Poison HitPoison => 0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
namespace Server.Mobiles
|
||||
{
|
||||
public class StoneHarpy : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public StoneHarpy() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 StoneHarpy(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a stone harpy corpse";
|
||||
public override string DefaultName => "a stone harpy";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int Feathers => 50;
|
||||
public override bool CanFly => true;
|
||||
|
||||
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 void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
105
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Wyvern.cs
Normal file
105
Projects/Scripts/Mobiles/Monsters/Reptile/Melee/Wyvern.cs
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Wyvern : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Wyvern() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
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 Wyvern(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a wyvern corpse";
|
||||
public override string DefaultName => "a wyvern";
|
||||
|
||||
public override bool ReacquireOnMovement => true;
|
||||
|
||||
public override Poison PoisonImmune => Poison.Deadly;
|
||||
public override Poison HitPoison => Poison.Deadly;
|
||||
public override int TreasureMapLevel => 2;
|
||||
|
||||
public override int Meat => 10;
|
||||
public override int Hides => 20;
|
||||
public override HideType HideType => HideType.Horned;
|
||||
public override bool CanFly => true;
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Average);
|
||||
AddLoot(LootPack.Meager);
|
||||
AddLoot(LootPack.MedScrolls);
|
||||
}
|
||||
|
||||
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 override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue