Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a mongbat corpse")]
|
||||
public class DaemonMongbat : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public DaemonMongbat()
|
||||
: base(AIType.AI_Necro)
|
||||
{
|
||||
Name = "a dameon mongbat";
|
||||
Body = 39;
|
||||
BaseSoundID = 422;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public DaemonMongbat(int level, bool voidSpawn)
|
||||
: base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a dameon mongbat";
|
||||
Body = 39;
|
||||
BaseSoundID = 422;
|
||||
}
|
||||
|
||||
public DaemonMongbat(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a gargoyle corpse")]
|
||||
public class GargoyleAssassin : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GargoyleAssassin()
|
||||
: base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a gargoyle assassin";
|
||||
Body = 0x4;
|
||||
BaseSoundID = 0x174;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public GargoyleAssassin(int level, bool voidSpawn)
|
||||
: base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a gargoyle assassin";
|
||||
Body = 0x4;
|
||||
BaseSoundID = 0x174;
|
||||
}
|
||||
|
||||
public GargoyleAssassin(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a doppleganger corpse")]
|
||||
public class CovetousDoppleganger : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CovetousDoppleganger()
|
||||
: base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a doppleganger";
|
||||
Body = 0x309;
|
||||
BaseSoundID = 0x451;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousDoppleganger(int level, bool voidSpawn)
|
||||
: base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a doppleganger";
|
||||
Body = 0x309;
|
||||
BaseSoundID = 0x451;
|
||||
}
|
||||
|
||||
public CovetousDoppleganger(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("an oni corpse")]
|
||||
public class LesserOni : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public LesserOni()
|
||||
: base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a lesser oni";
|
||||
Body = 241;
|
||||
|
||||
SetSpecialAbility(SpecialAbility.AngryFire);
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public LesserOni(int level, bool voidSpawn)
|
||||
: base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a lesser oni";
|
||||
Body = 241;
|
||||
}
|
||||
|
||||
public override int GetAngerSound() { return 0x4E3; }
|
||||
public override int GetIdleSound() { return 0x4E2; }
|
||||
public override int GetAttackSound() { return 0x4E1; }
|
||||
public override int GetHurtSound() { return 0x4E4; }
|
||||
public override int GetDeathSound() { return 0x4E0; }
|
||||
|
||||
public LesserOni(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a fire daemon corpse")]
|
||||
public class CovetousFireDaemon : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CovetousFireDaemon()
|
||||
: base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a fire daemon";
|
||||
Body = 9;
|
||||
BaseSoundID = 357;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousFireDaemon(int level, bool voidSpawn)
|
||||
: base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a fire daemon";
|
||||
Body = 9;
|
||||
BaseSoundID = 357;
|
||||
}
|
||||
|
||||
public CovetousFireDaemon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,186 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class DazzledHarpy : Harpy
|
||||
{
|
||||
[Constructable]
|
||||
public DazzledHarpy()
|
||||
{
|
||||
Name = "a dazzled harpy";
|
||||
FightMode = FightMode.Aggressor;
|
||||
|
||||
SetHits(120, 140);
|
||||
SetStam(90, 110);
|
||||
SetMana(50, 80);
|
||||
|
||||
SetDamage(5, 7);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 50, 65);
|
||||
SetSkill(SkillName.Tactics, 70, 100);
|
||||
SetSkill(SkillName.Wrestling, 60, 90);
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public DazzledHarpy(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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 class VampireMongbat : Mongbat
|
||||
{
|
||||
[Constructable]
|
||||
public VampireMongbat()
|
||||
{
|
||||
Name = "a vampire mongbat";
|
||||
FightMode = FightMode.Aggressor;
|
||||
Hue = 1461;
|
||||
|
||||
SetHits(76, 171);
|
||||
|
||||
SetStr(60, 100);
|
||||
SetDex(60, 80);
|
||||
SetInt(10, 30);
|
||||
|
||||
SetHits(70, 170);
|
||||
SetStam(60, 80);
|
||||
SetMana(10, 30);
|
||||
|
||||
SetDamage(5, 10);
|
||||
|
||||
SetSkill(SkillName.Wrestling, 10, 20);
|
||||
SetSkill(SkillName.Tactics, 10, 20);
|
||||
SetSkill(SkillName.MagicResist, 25, 40);
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public VampireMongbat(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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 class HeadlessMiner : HeadlessOne
|
||||
{
|
||||
[Constructable]
|
||||
public HeadlessMiner()
|
||||
{
|
||||
Name = "headless miner";
|
||||
FightMode = FightMode.Aggressor;
|
||||
|
||||
SetStr(60, 100);
|
||||
SetDex(40, 60);
|
||||
SetInt(10, 30);
|
||||
|
||||
SetHits(10, 40);
|
||||
SetStam(40, 60);
|
||||
SetMana(10, 35);
|
||||
|
||||
SetDamage(7, 12);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 30, 40);
|
||||
SetSkill(SkillName.Tactics, 40, 60);
|
||||
SetSkill(SkillName.Wrestling, 40, 60);
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public HeadlessMiner(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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 class StrangeGazer : Gazer
|
||||
{
|
||||
[Constructable]
|
||||
public StrangeGazer()
|
||||
{
|
||||
Name = "a strange gazer";
|
||||
|
||||
SetStr(100, 130);
|
||||
SetDex(90, 120);
|
||||
SetInt(150, 160);
|
||||
|
||||
SetHits(60, 90);
|
||||
SetStam(90, 120);
|
||||
SetMana(153, 158);
|
||||
|
||||
SetDamage(5, 10);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 60, 80);
|
||||
SetSkill(SkillName.Tactics, 50, 70);
|
||||
SetSkill(SkillName.Wrestling, 50, 70);
|
||||
SetSkill(SkillName.Magery, 50, 70);
|
||||
SetSkill(SkillName.EvalInt, 50, 70);
|
||||
SetSkill(SkillName.Meditation, 50, 100);
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Meager, 2);
|
||||
}
|
||||
|
||||
public StrangeGazer(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,362 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Engines.VoidPool;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class CoraTheSorceress : BaseCreature, IElementalCreature, IAuraCreature
|
||||
{
|
||||
public ElementType ElementType { get { return ElementType.Chaos; } }
|
||||
|
||||
public DateTime NextManaDrain { get; set; }
|
||||
|
||||
public TimeSpan ManaDrainInterval { get { return TimeSpan.FromSeconds(Utility.RandomMinMax(15, 120)); } }
|
||||
|
||||
[Constructable]
|
||||
public CoraTheSorceress() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.1)
|
||||
{
|
||||
Body = 0x191;
|
||||
Name = "Cora";
|
||||
Title = "the sorceress";
|
||||
|
||||
HairItemID = 0x2045;
|
||||
HairHue = 452;
|
||||
|
||||
SetStr(909, 949);
|
||||
SetDex(125);
|
||||
SetInt(903, 947);
|
||||
|
||||
SetHits(35000);
|
||||
|
||||
SetDamage(17, 25);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 50);
|
||||
SetDamageType(ResistanceType.Energy, 50);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 52, 67);
|
||||
SetResistance(ResistanceType.Fire, 51, 68);
|
||||
SetResistance(ResistanceType.Cold, 51, 69);
|
||||
SetResistance(ResistanceType.Poison, 51, 70);
|
||||
SetResistance(ResistanceType.Energy, 50, 68);
|
||||
|
||||
SetSkill(SkillName.Wrestling, 100.1, 119.7);
|
||||
SetSkill(SkillName.Tactics, 102.3, 118.5);
|
||||
SetSkill(SkillName.MagicResist, 101.2, 119.6);
|
||||
SetSkill(SkillName.Anatomy, 100.1, 117.5);
|
||||
SetSkill(SkillName.Magery, 100.1, 117.5);
|
||||
SetSkill(SkillName.EvalInt, 100.1, 117.5);
|
||||
|
||||
Fame = 32000;
|
||||
Karma = -32000;
|
||||
|
||||
AddAndEquip(new WildStaff(), 1971);
|
||||
AddAndEquip(new ThighBoots(), 1910);
|
||||
AddAndEquip(new ChainLegs(), 1936);
|
||||
AddAndEquip(new LeatherGloves(), 1910);
|
||||
AddAndEquip(new LeatherBustierArms(), 1947);
|
||||
|
||||
SetSpecialAbility(SpecialAbility.DragonBreath);
|
||||
SetAreaEffect(AreaEffect.AuraDamage);
|
||||
}
|
||||
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
public override bool ClickTitle { get { return false; } }
|
||||
public override bool ShowFameTitle { get { return false; } }
|
||||
|
||||
public void AuraEffect(Mobile m)
|
||||
{
|
||||
int mana = Utility.Random(1, m.Mana);
|
||||
m.Mana -= mana;
|
||||
m.SendLocalizedMessage(1153114, mana.ToString()); // Cora drains ~1_VAL~ points of your mana!
|
||||
}
|
||||
|
||||
public override bool TeleportsTo { get { return true; } }
|
||||
public override TimeSpan TeleportDuration { get { return TimeSpan.FromSeconds(Utility.RandomMinMax(30, 60)); } }
|
||||
public override double TeleportProb { get { return 1.0; } }
|
||||
public override bool TeleportsPets { get { return true; } }
|
||||
|
||||
public override int GetDeathSound() { return 0x316; }
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.UltraRich, 3);
|
||||
AddLoot(LootPack.SuperBoss, 3);
|
||||
}
|
||||
|
||||
private void AddAndEquip(Item item, int hue = 0)
|
||||
{
|
||||
item.Movable = false;
|
||||
item.Hue = hue;
|
||||
AddItem(item);
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if (NextManaDrain < DateTime.UtcNow)
|
||||
DoManaDrain();
|
||||
}
|
||||
|
||||
public void DoManaDrain()
|
||||
{
|
||||
Animate(AnimationType.Spell, 1);
|
||||
|
||||
DoEffects(Direction.North);
|
||||
DoEffects(Direction.West);
|
||||
DoEffects(Direction.South);
|
||||
DoEffects(Direction.East);
|
||||
|
||||
NextManaDrain = DateTime.UtcNow + ManaDrainInterval;
|
||||
}
|
||||
|
||||
private bool DoEffects(Direction d)
|
||||
{
|
||||
int x = this.X;
|
||||
int y = this.Y;
|
||||
int z = this.Z;
|
||||
int range = 10;
|
||||
int offset = 8;
|
||||
|
||||
switch (d)
|
||||
{
|
||||
case Direction.North:
|
||||
x = this.X + Utility.RandomMinMax(-offset, offset);
|
||||
y = this.Y - range;
|
||||
break;
|
||||
case Direction.West:
|
||||
x = this.X - range;
|
||||
y = this.Y + Utility.RandomMinMax(-offset, offset);
|
||||
break;
|
||||
case Direction.South:
|
||||
x = this.X + Utility.RandomMinMax(-offset, offset);
|
||||
y = this.Y + range;
|
||||
break;
|
||||
case Direction.East:
|
||||
x = this.X + range;
|
||||
y = this.Y + Utility.RandomMinMax(-offset, offset);
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < range; i++)
|
||||
{
|
||||
switch (d)
|
||||
{
|
||||
case Direction.North: y += i; break;
|
||||
case Direction.West: x += i; break;
|
||||
case Direction.South: y -= i; break;
|
||||
case Direction.East: x -= i; break;
|
||||
}
|
||||
|
||||
z = this.Map.GetAverageZ(x, y);
|
||||
Point3D p = new Point3D(x, y, z);
|
||||
|
||||
if (Server.Spells.SpellHelper.AdjustField(ref p, this.Map, 12, false))/*this.Map.CanFit(x, y, z, 16, false, false, true))/*this.Map.CanSpawnMobile(x, y, z)*/
|
||||
{
|
||||
MovementPath path = new MovementPath(this, p);
|
||||
|
||||
if (path.Success)
|
||||
{
|
||||
DropCrack(path);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void DropCrack(MovementPath path)
|
||||
{
|
||||
int time = 10;
|
||||
int x = this.X;
|
||||
int y = this.Y;
|
||||
|
||||
for (int i = 0; i < path.Directions.Length; ++i)
|
||||
{
|
||||
Movement.Movement.Offset(path.Directions[i], ref x, ref y);
|
||||
IPoint3D p = new Point3D(x, y, this.Map.GetAverageZ(x, y)) as IPoint3D;
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromMilliseconds(time), new TimerStateCallback(ManaDrainEffects_Callback), new object[] { p, this.Map });
|
||||
|
||||
time += 200;
|
||||
}
|
||||
}
|
||||
|
||||
private void ManaDrainEffects_Callback(object o)
|
||||
{
|
||||
object[] objs = o as object[];
|
||||
IPoint3D p = objs[0] as IPoint3D;
|
||||
Map map = objs[1] as Map;
|
||||
|
||||
var item = new ManaDrainItem(Utility.RandomList(6913, 6915, 6917, 6919), this);
|
||||
Spells.SpellHelper.GetSurfaceTop(ref p);
|
||||
|
||||
item.MoveToWorld(new Point3D(p), this.Map);
|
||||
}
|
||||
|
||||
private class ManaDrainItem : Item
|
||||
{
|
||||
public Item Static { get; private set; }
|
||||
public Mobile Owner { get; private set; }
|
||||
|
||||
public ManaDrainItem(int id, Mobile owner) : base(id)
|
||||
{
|
||||
Owner = owner;
|
||||
|
||||
Movable = false;
|
||||
Hue = 1152;
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(5), ChangeHue);
|
||||
}
|
||||
|
||||
private void ChangeHue()
|
||||
{
|
||||
Hue = 1153;
|
||||
Static.Hue = 1153;
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(0.5), Delete);
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
if (Static != null)
|
||||
Static.Delete();
|
||||
|
||||
Static = null;
|
||||
base.Delete();
|
||||
}
|
||||
|
||||
public override void OnLocationChange(Point3D oldLocation)
|
||||
{
|
||||
Static = new Static(this.ItemID + 1);
|
||||
Static.MoveToWorld(this.Location, this.Map);
|
||||
|
||||
IPooledEnumerable eable = this.Map.GetMobilesInRange(this.Location, 0);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
OnMoveOver(m);
|
||||
}
|
||||
eable.Free();
|
||||
}
|
||||
|
||||
public override bool OnMoveOver(Mobile m)
|
||||
{
|
||||
if ((m is PlayerMobile || (m is BaseCreature && !((BaseCreature)m).IsMonster)) && m.CanBeHarmful(Owner, false))
|
||||
{
|
||||
if (m is PlayerMobile && Services.TownCryer.TownCryerSystem.UnderMysteriousPotionEffects((PlayerMobile)m, true))
|
||||
{
|
||||
m.SayTo(m, 1158288, 1154); // *You resist Cora's attack!*
|
||||
}
|
||||
else
|
||||
{
|
||||
m.FixedParticles(0x3779, 10, 25, 5002, EffectLayer.Head);
|
||||
m.Mana = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public ManaDrainItem(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Static);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Static = reader.ReadItem();
|
||||
|
||||
if (Static != null)
|
||||
Static.Delete();
|
||||
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDeath(Container c)
|
||||
{
|
||||
base.OnDeath(c);
|
||||
|
||||
if (0.30 > Utility.RandomDouble())
|
||||
{
|
||||
Mobile m = DemonKnight.FindRandomPlayer(this);
|
||||
|
||||
if (m != null)
|
||||
{
|
||||
Item artifact = VoidPoolRewards.DropRandomArtifact();
|
||||
|
||||
if (artifact != null)
|
||||
{
|
||||
Container pack = m.Backpack;
|
||||
|
||||
if (pack == null || !pack.TryDropItem(m, artifact, false))
|
||||
m.BankBox.DropItem(artifact);
|
||||
|
||||
m.SendLocalizedMessage(1062317); // For your valor in combating the fallen beast, a special artifact has been bestowed on you.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnKilledBy(Mobile mob)
|
||||
{
|
||||
if (Siege.SiegeShard && mob is PlayerMobile)
|
||||
{
|
||||
int chance = Server.Engines.Despise.DespiseBoss.ArtifactChance + (int)Math.Min(10, ((PlayerMobile)mob).Luck / 180);
|
||||
|
||||
if (chance >= Utility.Random(100))
|
||||
{
|
||||
Type t = Server.Engines.Despise.DespiseBoss.Artifacts[Utility.Random(Server.Engines.Despise.DespiseBoss.Artifacts.Length)];
|
||||
|
||||
if (t != null)
|
||||
{
|
||||
Item arty = Loot.Construct(t);
|
||||
|
||||
if (arty != null)
|
||||
{
|
||||
Container pack = mob.Backpack;
|
||||
|
||||
if (pack == null || !pack.TryDropItem(mob, arty, false))
|
||||
{
|
||||
mob.BankBox.DropItem(arty);
|
||||
mob.SendMessage("An artifact has been placed in your bankbox!");
|
||||
}
|
||||
else
|
||||
mob.SendLocalizedMessage(1153440); // An artifact has been placed in your backpack!
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CoraTheSorceress(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,251 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class CovetousCreature : BaseCreature
|
||||
{
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool VoidSpawn { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Level { get; set; }
|
||||
|
||||
public virtual int Stage { get { return Math.Max(1, Level / 5); } }
|
||||
public virtual int MaxStage { get { return 15; } }
|
||||
|
||||
public virtual int StatRatio { get { return Utility.RandomMinMax(35, 60); } }
|
||||
|
||||
public virtual double SkillStart { get { return Utility.RandomMinMax(35, 50); } }
|
||||
public virtual double SkillMax { get { return 160.0; } }
|
||||
|
||||
public virtual int StrStart { get { return Utility.RandomMinMax(91, 100); } }
|
||||
public virtual int DexStart { get { return Utility.RandomMinMax(91, 100); } }
|
||||
public virtual int IntStart { get { return IsMagical ? Utility.RandomMinMax(91, 100) : 1; } }
|
||||
|
||||
public virtual int StrMax { get { return 410; } }
|
||||
public virtual int DexMax { get { return 422; } }
|
||||
public virtual int IntMax { get { return 250; } }
|
||||
|
||||
public virtual int MaxHits { get { return 2400; } }
|
||||
public virtual int MaxStam { get { return 3000; } }
|
||||
public virtual int MaxMana { get { return IsMagical ? 8500 : 1500; } }
|
||||
|
||||
public virtual int MinDamMax { get { return 5; } }
|
||||
public virtual int MaxDamMax { get { return 12; } }
|
||||
|
||||
public virtual int MinDamStart { get { return 5; } }
|
||||
public virtual int MaxDamStart { get { return 15; } }
|
||||
|
||||
public virtual int HitsStart { get { return StrStart + (int)((double)StrStart * ((double)StatRatio / 100.0)); } }
|
||||
public virtual int StamStart { get { return DexStart + (int)((double)DexStart * ((double)StatRatio / 100.0)); } }
|
||||
public virtual int ManaStart { get { return IntStart + (int)((double)IntStart * ((double)StatRatio / 100.0)); } }
|
||||
|
||||
public virtual bool RaiseDamage { get { return true; } }
|
||||
public virtual double RaiseDamageFactor { get { return 0.33; } }
|
||||
|
||||
public virtual int ResistStart { get { return 25; } }
|
||||
public virtual int ResistMax { get { return 95; } }
|
||||
|
||||
public virtual bool IsMagical { get { return AIObject is MageAI; } }
|
||||
|
||||
public override bool GivesFameAndKarmaAward { get { return false; } }
|
||||
public override bool PlayerRangeSensitive { get { return false; } }
|
||||
public override bool CanDestroyObstacles { get { return true; } }
|
||||
|
||||
private Tuple<WayPoint, DateTime> TimeOnWayPoint;
|
||||
|
||||
public CovetousCreature(AIType ai, int level = 60, bool voidspawn = false)
|
||||
: base(ai, FightMode.Closest, 10, 1, 0.2, 0.1)
|
||||
{
|
||||
Level = level;
|
||||
VoidSpawn = voidspawn;
|
||||
|
||||
SetSkill(SkillName.MagicResist, SkillStart);
|
||||
SetSkill(SkillName.Tactics, SkillStart);
|
||||
SetSkill(SkillName.Wrestling, SkillStart);
|
||||
SetSkill(SkillName.Anatomy, SkillStart);
|
||||
|
||||
switch (ai)
|
||||
{
|
||||
default: break;
|
||||
case AIType.AI_Mage:
|
||||
SetSkill(SkillName.Magery, SkillStart);
|
||||
SetSkill(SkillName.EvalInt, SkillStart);
|
||||
SetSkill(SkillName.Meditation, SkillStart);
|
||||
break;
|
||||
}
|
||||
|
||||
SetStr(StrStart);
|
||||
SetDex(DexStart);
|
||||
SetInt(IntStart);
|
||||
|
||||
SetHits(HitsStart);
|
||||
SetStam(StamStart);
|
||||
SetMana(ManaStart);
|
||||
|
||||
SetDamage(MinDamStart, MaxDamStart);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, ResistStart - 5, ResistStart + 5);
|
||||
SetResistance(ResistanceType.Fire, ResistStart - 5, ResistStart + 5);
|
||||
SetResistance(ResistanceType.Cold, ResistStart - 5, ResistStart + 5);
|
||||
SetResistance(ResistanceType.Poison, ResistStart - 5, ResistStart + 5);
|
||||
SetResistance(ResistanceType.Energy, ResistStart - 5, ResistStart + 5);
|
||||
|
||||
if (Stage > 1)
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(.5), SetPower);
|
||||
|
||||
Fame = Math.Min(8500, Level * 142);
|
||||
Karma = Math.Min(8500, Level * 142) * -1;
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if (!Alive)
|
||||
return;
|
||||
|
||||
if (TimeOnWayPoint == null && CurrentWayPoint != null)
|
||||
{
|
||||
TimeOnWayPoint = new Tuple<WayPoint, DateTime>(CurrentWayPoint, DateTime.UtcNow + TimeSpan.FromMinutes(2));
|
||||
}
|
||||
else if (TimeOnWayPoint != null && TimeOnWayPoint.Item1 == CurrentWayPoint && TimeOnWayPoint.Item2 < DateTime.UtcNow)
|
||||
{
|
||||
if (CheckCanTeleport())
|
||||
MoveToWorld(CurrentWayPoint.Location, this.Map);
|
||||
}
|
||||
else if (TimeOnWayPoint != null && TimeOnWayPoint.Item1 != CurrentWayPoint)
|
||||
{
|
||||
TimeOnWayPoint = new Tuple<WayPoint, DateTime>(CurrentWayPoint, DateTime.UtcNow + TimeSpan.FromMinutes(2));
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual bool CheckCanTeleport()
|
||||
{
|
||||
if (CurrentWayPoint == null || Frozen || Paralyzed || (Combatant is Mobile && ((Mobile)Combatant).InLOS(this)))
|
||||
return false;
|
||||
|
||||
bool canTeleport = true;
|
||||
|
||||
IPooledEnumerable eable = this.Map.GetMobilesInRange(this.Location, 10);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m is PlayerMobile && m.AccessLevel == AccessLevel.Player)
|
||||
{
|
||||
canTeleport = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (canTeleport)
|
||||
{
|
||||
eable = this.Map.GetItemsInRange(this.Location, 8);
|
||||
|
||||
foreach (Item item in eable)
|
||||
{
|
||||
int id = item.ItemID;
|
||||
|
||||
if (id == 0x82 || id == 0x3946 || id == 0x3956 || id == 0x3967 || id == 0x3979)
|
||||
{
|
||||
canTeleport = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
return canTeleport;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
if(!VoidSpawn)
|
||||
AddLoot(LootPack.Rich, Math.Max(1, Stage / 2));
|
||||
}
|
||||
|
||||
public virtual void SetPower()
|
||||
{
|
||||
foreach (Skill skill in Skills)
|
||||
{
|
||||
if (skill != null && skill.Base > 0 && skill.Base < SkillMax)
|
||||
{
|
||||
double toRaise = ((SkillMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5);
|
||||
|
||||
if (toRaise > skill.Base)
|
||||
skill.Base = Math.Min(SkillMax, toRaise);
|
||||
}
|
||||
}
|
||||
|
||||
SetResistance(ResistanceType.Physical, ((ResistMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5));
|
||||
SetResistance(ResistanceType.Fire, ((ResistMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5));
|
||||
SetResistance(ResistanceType.Cold, ((ResistMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5));
|
||||
SetResistance(ResistanceType.Poison, ((ResistMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5));
|
||||
SetResistance(ResistanceType.Energy, ((ResistMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5));
|
||||
|
||||
int strRaise = ((StrMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5);
|
||||
int dexRaise = ((DexMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5);
|
||||
int intRaise = ((IntMax / MaxStage) * Stage) + Utility.RandomMinMax(-5, 5);
|
||||
|
||||
if (strRaise > RawStr)
|
||||
SetStr(Math.Min(StrMax, strRaise));
|
||||
|
||||
if (dexRaise > RawDex)
|
||||
SetDex(Math.Min(DexMax, dexRaise));
|
||||
|
||||
if (intRaise > RawInt)
|
||||
SetInt(Math.Min(IntMax, intRaise));
|
||||
|
||||
int hitsRaise = ((MaxHits / 60) * Level) + Utility.RandomMinMax(-5, 5);
|
||||
int stamRaise = ((MaxStam / 60) * Level) + Utility.RandomMinMax(-5, 5);
|
||||
int manaRaise = ((MaxMana / 60) * Level) + Utility.RandomMinMax(-5, 5);
|
||||
|
||||
if (hitsRaise > HitsMax)
|
||||
SetHits(Math.Min(MaxHits, hitsRaise));
|
||||
|
||||
if (stamRaise > StamMax)
|
||||
SetStam(Math.Min(MaxStam, stamRaise));
|
||||
|
||||
if (manaRaise > ManaMax)
|
||||
SetMana(Math.Min(MaxMana, manaRaise));
|
||||
|
||||
if (RaiseDamage && Utility.RandomDouble() < RaiseDamageFactor)
|
||||
{
|
||||
DamageMin = Math.Min(MinDamMax, DamageMin + 1);
|
||||
DamageMax = Math.Min(MaxDamMax, DamageMax + 1);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDeath(Container c)
|
||||
{
|
||||
base.OnDeath(c);
|
||||
}
|
||||
|
||||
public CovetousCreature(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Level);
|
||||
writer.Write(VoidSpawn);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Level = reader.ReadInt();
|
||||
VoidSpawn = reader.ReadBool();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an earth elemental corpse")]
|
||||
public class CovetousEarthElemental : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CovetousEarthElemental() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "an earth elemental";
|
||||
Body = 14;
|
||||
BaseSoundID = 268;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousEarthElemental(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "an earth elemental";
|
||||
Body = 14;
|
||||
BaseSoundID = 268;
|
||||
}
|
||||
|
||||
public CovetousEarthElemental(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a water elemental corpse")]
|
||||
public class CovetousWaterElemental : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CovetousWaterElemental() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a water elemental";
|
||||
Body = 16;
|
||||
BaseSoundID = 278;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousWaterElemental(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a water elemental";
|
||||
Body = 16;
|
||||
BaseSoundID = 278;
|
||||
}
|
||||
|
||||
public CovetousWaterElemental(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a vortex elemental corpse")]
|
||||
public class VortexElemental : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public VortexElemental() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a vortex elemental";
|
||||
Body = 13;
|
||||
Hue = 0x4001;
|
||||
BaseSoundID = 655;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public VortexElemental(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a vortex elemental";
|
||||
Body = 13;
|
||||
Hue = 0x4001;
|
||||
BaseSoundID = 655;
|
||||
}
|
||||
|
||||
public VortexElemental(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a searing elemental corpse")]
|
||||
public class SearingElemental : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public SearingElemental() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a searing elemental";
|
||||
Body = 15;
|
||||
BaseSoundID = 838;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SearingElemental(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a searing elemental";
|
||||
Body = 15;
|
||||
BaseSoundID = 838;
|
||||
}
|
||||
|
||||
public SearingElemental(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a venom elemental corpse")]
|
||||
public class VenomElemental : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public VenomElemental() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a venom elemental";
|
||||
Body = 162;
|
||||
BaseSoundID = 263;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public VenomElemental(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a venom elemental";
|
||||
Body = 162;
|
||||
BaseSoundID = 263;
|
||||
}
|
||||
|
||||
public override bool BleedImmune { get { return true; } }
|
||||
public override Poison PoisonImmune { get { return Poison.Lethal; } }
|
||||
public override Poison HitPoison { get { return Poison.Lethal; } }
|
||||
public override double HitPoisonChance { get { return 0.75; } }
|
||||
public override int TreasureMapLevel { get { return 5; } }
|
||||
|
||||
public VenomElemental(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,185 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a lizardman corpse")]
|
||||
public class LizardmanWitchdoctor : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public LizardmanWitchdoctor() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a lizardman witchdoctor";
|
||||
Body = Utility.RandomList(35, 36);
|
||||
BaseSoundID = 417;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public LizardmanWitchdoctor(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a lizardman witchdoctor";
|
||||
Body = Utility.RandomList(35, 36);
|
||||
BaseSoundID = 417;
|
||||
}
|
||||
|
||||
public LizardmanWitchdoctor(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("an orcish corpse")]
|
||||
public class OrcFootSoldier : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public OrcFootSoldier() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "an orc foot soldier";
|
||||
Body = 17;
|
||||
BaseSoundID = 0x45A;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public OrcFootSoldier(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "an orc foot soldier";
|
||||
Body = 17;
|
||||
BaseSoundID = 0x45A;
|
||||
}
|
||||
|
||||
public OrcFootSoldier(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a ratman corpse")]
|
||||
public class RatmanAssassin : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public RatmanAssassin() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "ratman assassin";
|
||||
Body = 42;
|
||||
BaseSoundID = 437;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public RatmanAssassin(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "ratman assassin";
|
||||
Body = 42;
|
||||
BaseSoundID = 437;
|
||||
}
|
||||
|
||||
public RatmanAssassin(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("an ogre corpse")]
|
||||
public class OgreBoneCrusher : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public OgreBoneCrusher() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "an ogre bone crusher";
|
||||
Body = 1;
|
||||
BaseSoundID = 427;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public OgreBoneCrusher(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "an ogre bone crusher";
|
||||
Body = 1;
|
||||
BaseSoundID = 427;
|
||||
}
|
||||
|
||||
public OgreBoneCrusher(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a titan corpse")]
|
||||
public class TitanRockHunter : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public TitanRockHunter() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a titan rockhurler";
|
||||
Body = 76;
|
||||
BaseSoundID = 609;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public TitanRockHunter(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a titan rockhurler";
|
||||
Body = 76;
|
||||
BaseSoundID = 609;
|
||||
}
|
||||
|
||||
public TitanRockHunter(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,188 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an alligator corpse")]
|
||||
public class WarAlligator : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public WarAlligator() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a war alligator";
|
||||
Body = 0xCA;
|
||||
BaseSoundID = 660;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public WarAlligator(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a war alligator";
|
||||
Body = 0xCA;
|
||||
BaseSoundID = 660;
|
||||
}
|
||||
|
||||
public WarAlligator(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a magma lizard corpse")]
|
||||
public class MagmaLizard : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public MagmaLizard() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a magma lizard";
|
||||
Body = 0xCE;
|
||||
Hue = Utility.RandomList(0x647, 0x650, 0x659, 0x662, 0x66B, 0x674);
|
||||
BaseSoundID = 0x5A;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MagmaLizard(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a magma lizard";
|
||||
Body = 0xCE;
|
||||
Hue = Utility.RandomList(0x647, 0x650, 0x659, 0x662, 0x66B, 0x674);
|
||||
BaseSoundID = 0x5A;
|
||||
}
|
||||
|
||||
public MagmaLizard(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a drake corpse")]
|
||||
public class ViciousDrake : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public ViciousDrake() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a vicious drake";
|
||||
Body = Utility.RandomList(60, 61);
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ViciousDrake(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a vicious drake";
|
||||
Body = Utility.RandomList(60, 61);
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
public ViciousDrake(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a wyvern corpse")]
|
||||
public class CorruptedWyvern : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CorruptedWyvern() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a corrupted wyvern";
|
||||
Body = 62;
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CorruptedWyvern(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a corrupted wyvern";
|
||||
Body = 62;
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
public CorruptedWyvern(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a covetous wyrm corpse")]
|
||||
public class CovetousWyrm : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CovetousWyrm()
|
||||
: base(AIType.AI_Necro)
|
||||
{
|
||||
Name = "a covetous wyrm";
|
||||
Body = 106;
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousWyrm(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a covetous wyrm";
|
||||
Body = 106;
|
||||
BaseSoundID = 362;
|
||||
}
|
||||
|
||||
public CovetousWyrm(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,199 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an angered spirit corpse")]
|
||||
public class AngeredSpirit : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public AngeredSpirit() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "an angered spirit";
|
||||
Body = 3;
|
||||
BaseSoundID = 471;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public AngeredSpirit(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "an angered spirit";
|
||||
Body = 3;
|
||||
BaseSoundID = 471;
|
||||
}
|
||||
|
||||
public AngeredSpirit(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a bone swordslinger corpse")]
|
||||
public class BoneSwordSlinger : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public BoneSwordSlinger() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a bone swordslinger";
|
||||
Body = 147;
|
||||
BaseSoundID = 451;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public BoneSwordSlinger(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a bone sword slinger";
|
||||
Body = 147;
|
||||
BaseSoundID = 451;
|
||||
}
|
||||
|
||||
public BoneSwordSlinger(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a vile cadaver")]
|
||||
public class VileCadaver : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public VileCadaver() : base(AIType.AI_Melee)
|
||||
{
|
||||
Name = "a vile cadaver";
|
||||
Body = 154;
|
||||
BaseSoundID = 471;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public VileCadaver(int level, bool voidSpawn) : base(AIType.AI_Melee, level, voidSpawn)
|
||||
{
|
||||
Name = "a vile cadaver";
|
||||
Body = 154;
|
||||
BaseSoundID = 471;
|
||||
}
|
||||
|
||||
public VileCadaver(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a liche's corpse")]
|
||||
public class DiseasedLich : CovetousCreature
|
||||
{
|
||||
[Constructable]
|
||||
public DiseasedLich() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a diseased lich";
|
||||
Body = 24;
|
||||
BaseSoundID = 0x3E9;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public DiseasedLich(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a diseased lich";
|
||||
Body = 24;
|
||||
BaseSoundID = 0x3E9;
|
||||
}
|
||||
|
||||
public DiseasedLich(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName("a revenant corpse")]
|
||||
public class CovetousRevenant : CovetousCreature
|
||||
{
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public CovetousRevenant() : base(AIType.AI_Mage)
|
||||
{
|
||||
Name = "a covetous revenant";
|
||||
Body = 400;
|
||||
Hue = 0x847E;
|
||||
|
||||
var shroud = new Server.Items.Robe();
|
||||
shroud.ItemID = 0x2683;
|
||||
shroud.Hue = 0x4001;
|
||||
shroud.Movable = false;
|
||||
SetWearable(shroud);
|
||||
|
||||
var boots = new Server.Items.Boots();
|
||||
boots.Hue = 0x4001;
|
||||
boots.Movable = false;
|
||||
SetWearable(boots);
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CovetousRevenant(int level, bool voidSpawn) : base(AIType.AI_Mage, level, voidSpawn)
|
||||
{
|
||||
Name = "a covetous revenant";
|
||||
Body = 400;
|
||||
//BaseSoundID = 609;
|
||||
//TODO: Soundid
|
||||
}
|
||||
|
||||
public CovetousRevenant(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
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,106 @@
|
||||
using Server;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Engines.VoidPool
|
||||
{
|
||||
public class VelaTheSorceress : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public VelaTheSorceress()
|
||||
: base(AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2)
|
||||
{
|
||||
Name = "Vela";
|
||||
Title = "the sorceress";
|
||||
Blessed = true;
|
||||
|
||||
SetStr(110);
|
||||
SetDex(100);
|
||||
SetInt(1000);
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x191;
|
||||
HairItemID = 0x203C;
|
||||
HairHue = 0x46D;
|
||||
|
||||
SetWearable(new FancyShirt(), 1928);
|
||||
SetWearable(new LeatherLegs(), 1928);
|
||||
SetWearable(new ThighBoots(), 1917);
|
||||
|
||||
Item item = new BraceletOfProtection();
|
||||
item.Movable = false;
|
||||
PackItem(item);
|
||||
|
||||
item = new Hephaestus();
|
||||
item.Movable = false;
|
||||
PackItem(item);
|
||||
|
||||
item = new GargishHephaestus();
|
||||
item.Movable = false;
|
||||
PackItem(item);
|
||||
|
||||
item = new BlightOfTheTundra();
|
||||
item.Movable = false;
|
||||
PackItem(item);
|
||||
|
||||
item = new GargishBlightOfTheTundra();
|
||||
item.Movable = false;
|
||||
PackItem(item);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (from is PlayerMobile && from.InRange(this.Location, 5))
|
||||
from.SendGump(new VoidPoolRewardGump(this, from as PlayerMobile));
|
||||
}
|
||||
|
||||
public VelaTheSorceress(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1152664); // Covetous Void Pool Reward Vendor
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(1);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (version == 0)
|
||||
{
|
||||
Blessed = true;
|
||||
|
||||
Item item = FindItemOnLayer(Layer.Shirt);
|
||||
if (item != null)
|
||||
item.Delete();
|
||||
|
||||
item = FindItemOnLayer(Layer.Pants);
|
||||
if (item != null)
|
||||
item.Delete();
|
||||
|
||||
item = FindItemOnLayer(Layer.Shoes);
|
||||
if (item != null)
|
||||
item.Delete();
|
||||
|
||||
SetWearable(new FancyShirt(), 1928);
|
||||
SetWearable(new LeatherLegs(), 1928);
|
||||
SetWearable(new ThighBoots(), 1917);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user