Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,109 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("an Anlorlem corpse")]
public class Anlorlem : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Grouping; } }
public override int Stage { get { return 2; } }
[Constructable]
public Anlorlem()
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = "an Anlorlem";
Body = 72;
Hue = 2071;
BaseSoundID = 644;
SetStr(900, 1000);
SetDex(1000, 1200);
SetInt(900, 950);
SetHits(500, 650);
SetDamage(18, 22);
SetDamageType(ResistanceType.Physical, 50);
SetDamageType(ResistanceType.Poison, 50);
SetResistance(ResistanceType.Physical, 45, 55);
SetResistance(ResistanceType.Fire, 30, 40);
SetResistance(ResistanceType.Cold, 35, 45);
SetResistance(ResistanceType.Poison, 90, 100);
SetResistance(ResistanceType.Energy, 35, 45);
SetSkill(SkillName.MagicResist, 40.1, 70.0);
SetSkill(SkillName.Tactics, 90.1, 100.0);
SetSkill(SkillName.Wrestling, 90.1, 100.0);
Fame = 16000;
Karma = -16000;
VirtualArmor = 50;
PackItem(new DaemonBone(15));
}
public Anlorlem(Serial serial)
: base(serial)
{
}
public override int TreasureMapLevel
{
get
{
return 3;
}
}
public override bool BardImmune
{
get
{
return !Core.AOS;
}
}
public override bool Unprovokable
{
get
{
return true;
}
}
public override bool ReacquireOnMovement
{
get
{
return true;
}
}
public override Poison PoisonImmune
{
get
{
return Poison.Greater;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.FilthyRich);
this.AddLoot(LootPack.Average, 2);
this.AddLoot(LootPack.MedScrolls, 2);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,104 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("an anlorvaglem corpse")]
public class Anlorvaglem : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Grouping; } }
public override int Stage { get { return 3; } }
[Constructable]
public Anlorvaglem()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.6, 1.2)
{
Name = "anlorvaglem";
Hue = 2071;
Body = 152;
SetStr(1000, 1200);
SetDex(1000, 1200);
SetInt(100, 1200);
SetHits(3205);
SetDamage(11, 13);
SetDamageType(ResistanceType.Physical, 20);
SetDamageType(ResistanceType.Fire, 20);
SetDamageType(ResistanceType.Cold, 20);
SetDamageType(ResistanceType.Poison, 20);
SetDamageType(ResistanceType.Energy, 20);
SetResistance(ResistanceType.Physical, 20, 50);
SetResistance(ResistanceType.Fire, 20, 60);
SetResistance(ResistanceType.Cold, 20, 58);
SetResistance(ResistanceType.Poison, 80, 100);
SetResistance(ResistanceType.Energy, 30, 50);
SetSkill(SkillName.Wrestling, 75.8, 100.0);
SetSkill(SkillName.Tactics, 50.0, 100.0);
SetSkill(SkillName.MagicResist, 50.9, 90.0);
Fame = 8000;
Karma = -8000;
VirtualArmor = 48;
PackItem(new DaemonBone(30));
}
public Anlorvaglem(Serial serial)
: base(serial)
{
}
public override Poison PoisonImmune
{
get
{
return Poison.Lethal;
}
}
public override bool Unprovokable
{
get
{
return true;
}
}
public override bool BardImmune
{
get
{
return true;
}
}
public override bool ReacquireOnMovement
{
get
{
return true;
}
}
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,105 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("an anlorzen corpse")]
public class Anlorzen : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Grouping; } }
public override int Stage { get { return 1; } }
[Constructable]
public Anlorzen()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "an anlorzen";
this.Body = 11;
this.BaseSoundID = 1170;
this.SetStr(600, 750);
this.SetDex(666, 800);
this.SetInt(850, 1000);
this.SetHits(300, 400);
this.SetDamage(15, 18);
this.SetDamageType(ResistanceType.Physical, 20);
this.SetDamageType(ResistanceType.Fire, 20);
this.SetDamageType(ResistanceType.Cold, 20);
this.SetDamageType(ResistanceType.Poison, 20);
this.SetDamageType(ResistanceType.Energy, 20);
this.SetResistance(ResistanceType.Physical, 40, 50);
this.SetResistance(ResistanceType.Fire, 40, 50);
this.SetResistance(ResistanceType.Cold, 30, 50);
this.SetResistance(ResistanceType.Poison, 100);
this.SetResistance(ResistanceType.Energy, 40, 60);
this.SetSkill(SkillName.MagicResist, 30.1, 60.0);
this.SetSkill(SkillName.Tactics, 30.1, 70.0);
this.SetSkill(SkillName.Wrestling, 50.1, 70.0);
this.Fame = 5000;
this.Karma = -5000;
this.VirtualArmor = 56;
this.PackItem(new DaemonBone(5));
}
public Anlorzen(Serial serial)
: base(serial)
{
}
public override Poison PoisonImmune
{
get
{
return Poison.Lethal;
}
}
public override Poison HitPoison
{
get
{
return Poison.Lethal;
}
}
public override bool AlwaysMurderer
{
get
{
return true;
}
}
public override bool BardImmune
{
get
{
return true;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.FilthyRich);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (this.BaseSoundID == 263)
this.BaseSoundID = 1170;
}
}
}

View File

@@ -0,0 +1,122 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("an anzuanord corpse")]
public class Anzuanord : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Survival; } }
public override int Stage { get { return 1; } }
[Constructable]
public Anzuanord()
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "an Anzuanord";
this.Body = 74;
this.Hue = 2071;
this.BaseSoundID = 422;
this.SetStr(705);
this.SetDex(900, 910);
this.SetInt(900, 1000);
this.SetHits(180);
this.SetDamage(8, 10);
this.SetDamageType(ResistanceType.Physical, 20);
this.SetDamageType(ResistanceType.Fire, 20);
this.SetDamageType(ResistanceType.Cold, 20);
this.SetDamageType(ResistanceType.Poison, 20);
this.SetDamageType(ResistanceType.Energy, 20);
this.SetResistance(ResistanceType.Physical, 0, 10);
this.SetResistance(ResistanceType.Poison, 15, 20);
this.SetResistance(ResistanceType.Physical, 15, 10);
this.SetResistance(ResistanceType.Poison, 0, 20);
this.SetResistance(ResistanceType.Physical, 100);
this.SetSkill(SkillName.Anatomy, 5.0, 10.0);
this.SetSkill(SkillName.MagicResist, 40.0, 50.0);
this.SetSkill(SkillName.Tactics, 40.0, 50.0);
this.SetSkill(SkillName.Wrestling, 40.0, 50.0);
this.SetSkill(SkillName.Magery, 70.0, 80.0);
this.SetSkill(SkillName.EvalInt, 80.0, 90.0);
this.SetSkill(SkillName.Meditation, 50.0, 60.0);
this.Fame = 2500;
this.Karma = -2500;
this.PackItem(new DaemonBone(5));
this.VirtualArmor = 50;
}
public Anzuanord(Serial serial)
: base(serial)
{
}
public override bool BardImmune
{
get
{
return true;
}
}
public override int Meat
{
get
{
return 1;
}
}
public override int Hides
{
get
{
return 7;
}
}
public override HideType HideType
{
get
{
return HideType.Spined;
}
}
public override FoodType FavoriteFood
{
get
{
return FoodType.Meat;
}
}
public override PackInstinct PackInstinct
{
get
{
return PackInstinct.Daemon;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.Meager);
this.AddLoot(LootPack.MedScrolls, 2);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,126 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("a Ballem corpse")]
public class Ballem : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Killing; } }
public override int Stage { get { return 2; } }
[Constructable]
public Ballem()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = "a Ballem";
Body = 304;
Hue = 2071;
BaseSoundID = 684;
SetStr(991);
SetDex(1001);
SetInt(243);
SetHits(500, 600);
SetDamage(10, 15);
SetDamageType(ResistanceType.Physical, 20);
SetDamageType(ResistanceType.Fire, 20);
SetDamageType(ResistanceType.Cold, 20);
SetDamageType(ResistanceType.Poison, 20);
SetDamageType(ResistanceType.Energy, 20);
SetResistance(ResistanceType.Physical, 30, 50);
SetResistance(ResistanceType.Fire, 40, 50);
SetResistance(ResistanceType.Cold, 20, 30);
SetResistance(ResistanceType.Poison, 100);
SetResistance(ResistanceType.Energy, 30, 40);
SetSkill(SkillName.MagicResist, 70.0, 80.0);
SetSkill(SkillName.Tactics, 50.1, 60.0);
SetSkill(SkillName.Wrestling, 70.1, 80.0);
SetSkill(SkillName.Anatomy, 0.0, 10.0);
Fame = 1800;
Karma = -1800;
VirtualArmor = 54;
PackItem(new DaemonBone(15));
SetWeaponAbility(WeaponAbility.CrushingBlow);
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Utility.RandomDouble() < 0.10)
{
c.DropItem(new AncientPotteryFragments());
}
}
public Ballem(Serial serial)
: base(serial)
{
}
public override Poison PoisonImmune
{
get
{
return Poison.Lethal;
}
}
public override bool Unprovokable
{
get
{
return true;
}
}
public override bool BardImmune
{
get
{
return true;
}
}
public override bool CanRummageCorpses
{
get
{
return true;
}
}
public override bool BleedImmune
{
get
{
return true;
}
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.Average);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,290 @@
using System;
using Server.Items;
using System.Collections.Generic;
using System.Linq;
namespace Server.Mobiles
{
public enum VoidEvolution
{
None = 0,
Killing = 1,
Grouping = 2,
Survival = 3
}
public class BaseVoidCreature : BaseCreature
{
public static int MutateCheck { get { return Utility.RandomMinMax(30, 120); } }
public static bool RemoveFromSpawners { get { return true; } }
private DateTime m_NextMutate;
private bool m_BuddyMutate;
public virtual int GroupAmount { get { return 2; } }
public virtual VoidEvolution Evolution { get { return VoidEvolution.None; } }
public virtual int Stage { get { return 0; } }
[CommandProperty(AccessLevel.GameMaster)]
public bool BuddyMutate { get { return m_BuddyMutate; } set { m_BuddyMutate = value; } }
[CommandProperty(AccessLevel.GameMaster)]
public DateTime NextMutate { get { return m_NextMutate; } set { m_NextMutate = value; } }
public override bool PlayerRangeSensitive { get { return Evolution != VoidEvolution.Killing && Stage < 3; } }
public override bool AlwaysMurderer { get { return true; } }
public BaseVoidCreature(AIType aiType, FightMode fightMode, int perception, int range, double passive, double active)
: base(aiType, FightMode.Good, perception, range, passive, active)
{
m_NextMutate = DateTime.UtcNow + TimeSpan.FromMinutes(MutateCheck);
m_BuddyMutate = true;
}
public override void OnThink()
{
base.OnThink();
if (Stage >= 3 || m_NextMutate > DateTime.UtcNow)
return;
if (!MutateGrouped() && Alive && !Deleted)
{
Mutate(VoidEvolution.Survival);
}
}
public bool MutateGrouped()
{
if (!m_BuddyMutate)
return false;
List<BaseVoidCreature> buddies = new List<BaseVoidCreature>();
IPooledEnumerable eable = this.GetMobilesInRange(12);
foreach (Mobile m in eable)
{
if (m != this && IsEvolutionType(m) && !m.Deleted && m.Alive && !buddies.Contains((BaseVoidCreature)m))
{
if (m is BaseVoidCreature && ((BaseVoidCreature)m).BuddyMutate)
buddies.Add((BaseVoidCreature)m);
}
}
eable.Free();
if (buddies.Count >= GroupAmount)
{
Mutate(VoidEvolution.Grouping);
foreach (BaseVoidCreature k in buddies)
k.Mutate(VoidEvolution.Grouping);
ColUtility.Free(buddies);
return true;
}
ColUtility.Free(buddies);
return false;
}
public bool IsEvolutionType(Mobile from)
{
if (Stage == 0 && from.GetType() != this.GetType())
return false;
return from is BaseVoidCreature;
}
public Type[][] m_EvolutionCycle = new Type[][]
{
new Type[] { typeof(Betballem), typeof(Ballem), typeof(UsagralemBallem) },
new Type[] { typeof(Anlorzen), typeof(Anlorlem), typeof(Anlorvaglem) },
new Type[] { typeof(Anzuanord), typeof(Relanord), typeof(Vasanord) }
};
private BaseCreature _MutateTo;
public void Mutate(VoidEvolution evolution)
{
if (!Alive || Deleted || Stage == 3)
return;
VoidEvolution evo = evolution;
if (Stage > 0)
evo = this.Evolution;
if (0.05 > Utility.RandomDouble())
{
SpawnOrtanords();
}
Type type = m_EvolutionCycle[(int)evo - 1][Stage];
BaseCreature bc = (BaseCreature)Activator.CreateInstance(type);
_MutateTo = bc;
if (bc != null)
{
//TODO: Effents/message?
bc.MoveToWorld(this.Location, this.Map);
bc.Home = this.Home;
bc.RangeHome = this.RangeHome;
if (0.05 > Utility.RandomDouble())
SpawnOrtanords();
if (bc is BaseVoidCreature)
((BaseVoidCreature)bc).BuddyMutate = m_BuddyMutate;
this.Delete();
}
}
public void SpawnOrtanords()
{
BaseCreature ortanords = new Ortanord();
Point3D spawnLoc = this.Location;
for (int i = 0; i < 25; i++)
{
int x = Utility.RandomMinMax(this.X - 5, this.X + 5);
int y = Utility.RandomMinMax(this.Y - 5, this.Y + 5);
int z = this.Map.GetAverageZ(x, y);
Point3D p = new Point3D(x, y, z);
if (this.Map.CanSpawnMobile(p))
{
spawnLoc = p;
break;
}
}
ortanords.MoveToWorld(spawnLoc, this.Map);
ortanords.BoltEffect(0);
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
double baseChance = 0.02;
double chance = 0.0;
if (Stage > 0)
chance = baseChance * (Stage + 3);
if (Stage > 0 && Utility.RandomDouble() < chance)
c.DropItem(new VoidEssence());
if (Stage == 3 && Utility.RandomDouble() < 0.12)
c.DropItem(new VoidCore());
}
public override void Delete()
{
if (_MutateTo != null)
{
ISpawner s = Spawner;
if (s is XmlSpawner)
{
XmlSpawner xml = (XmlSpawner)s;
if (xml.SpawnObjects == null)
return;
foreach (XmlSpawner.SpawnObject so in xml.SpawnObjects)
{
for (int i = 0; i < so.SpawnedObjects.Count; ++i)
{
if (so.SpawnedObjects[i] == this)
{
//so.SpawnedObjects.Remove(spawn);
so.SpawnedObjects[i] = _MutateTo;
Spawner = null;
base.Delete();
return;
}
}
}
}
}
base.Delete();
}
public BaseVoidCreature(Serial serial) : base(serial)
{
}
private static bool _CheckSpawners;
public static void RemoveVoidSpawners()
{
List<XmlSpawner> list = new List<XmlSpawner>();
foreach (XmlSpawner spawner in World.Items.Values.OfType<XmlSpawner>())
{
if (list.Contains(spawner))
break;
foreach (XmlSpawner.SpawnObject obj in spawner.SpawnObjects)
{
if(obj == null || obj.TypeName == null)
continue;
Type t = ScriptCompiler.FindTypeByName(obj.TypeName, true);
if (t != null && t.IsSubclassOf(typeof(BaseVoidCreature)) || obj.TypeName.ToLower().StartsWith("korpre"))
{
list.Add(spawner);
break;
}
}
}
list.ForEach(spawner => spawner.DoReset = true);
Console.WriteLine("Reset {0} Void Spawn Spawners.", list.Count);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1);
writer.Write(m_NextMutate);
writer.Write(m_BuddyMutate);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version == 0 && !_CheckSpawners && RemoveFromSpawners)
{
Console.WriteLine("Removing Spawners...");
Timer.DelayCall(TimeSpan.FromSeconds(30), RemoveVoidSpawners);
_CheckSpawners = true;
}
m_NextMutate = reader.ReadDateTime();
if (version > 0)
m_BuddyMutate = reader.ReadBool();
else
m_BuddyMutate = true;
}
}
}

View File

@@ -0,0 +1,144 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("a betballem corpse")]
public class Betballem : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Killing; } }
public override int Stage { get { return 1; } }
[Constructable]
public Betballem()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "a betballem";
this.Body = 776;
this.Hue = 2071;
this.BaseSoundID = 357;
this.SetStr(270);
this.SetDex(890);
this.SetInt(80);
this.SetHits(90, 100);
this.SetDamage(5, 10);
this.SetDamageType(ResistanceType.Physical, 20);
this.SetDamageType(ResistanceType.Fire, 20);
this.SetDamageType(ResistanceType.Cold, 20);
this.SetDamageType(ResistanceType.Poison, 20);
this.SetDamageType(ResistanceType.Energy, 20);
this.SetResistance(ResistanceType.Physical, 30, 40);
this.SetResistance(ResistanceType.Fire, 30, 40);
this.SetResistance(ResistanceType.Fire, 10, 20);
this.SetResistance(ResistanceType.Fire, 10, 20);
this.SetResistance(ResistanceType.Fire, 100);
this.SetSkill(SkillName.MagicResist, 40.0, 50.0);
this.SetSkill(SkillName.Tactics, 20.1, 30.0);
this.SetSkill(SkillName.Wrestling, 30.1, 40.0);
this.SetSkill(SkillName.Anatomy, 0.0, 10.0);
this.Fame = 500;
this.Karma = -500;
this.VirtualArmor = 38;
this.AddItem(new LightSource());
this.PackItem(new FertileDirt(Utility.RandomMinMax(1, 4)));
this.PackItem(new DaemonBone(5));
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Utility.RandomDouble() < 0.10)
{
c.DropItem(new AncientPotteryFragments());
}
}
public Betballem(Serial serial)
: base(serial)
{
}
public override bool Unprovokable
{
get
{
return true;
}
}
public override bool BardImmune
{
get
{
return true;
}
}
public override bool CanRummageCorpses
{
get
{
return true;
}
}
public override bool BleedImmune
{
get
{
return true;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.Rich);
this.AddLoot(LootPack.Meager);
this.AddLoot(LootPack.Gems);
}
public override int GetIdleSound()
{
return 338;
}
public override int GetAngerSound()
{
return 338;
}
public override int GetDeathSound()
{
return 338;
}
public override int GetAttackSound()
{
return 406;
}
public override int GetHurtSound()
{
return 194;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,93 @@
using System;
using Server.Items;
using System.Collections.Generic;
namespace Server.Mobiles
{
[CorpseName("a korpre corpse")]
public class Korpre : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.None; } }
public override int Stage { get { return 0; } }
[Constructable]
public Korpre()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "Korpre";
this.Body = 51;
this.BaseSoundID = 456;
this.Hue = 2071;
this.SetStr(22, 34);
this.SetDex(16, 21);
this.SetInt(16, 20);
this.SetHits(50, 60);
this.SetDamage(1, 5);
this.SetDamageType(ResistanceType.Physical, 100);
this.SetResistance(ResistanceType.Physical, 5, 10);
this.SetResistance(ResistanceType.Poison, 15, 20);
this.SetSkill(SkillName.Poisoning, 36.0, 49.1);
this.SetSkill(SkillName.Anatomy, 0);
this.SetSkill(SkillName.MagicResist, 15.9, 18.9);
this.SetSkill(SkillName.Tactics, 24.6, 26.1);
this.SetSkill(SkillName.Wrestling, 24.9, 26.1);
this.Fame = 300;
this.Karma = -300;
this.VirtualArmor = 8;
}
public Korpre(Serial serial)
: base(serial)
{
}
public override Poison PoisonImmune
{
get
{
return Poison.Regular;
}
}
public override Poison HitPoison
{
get
{
return Poison.Regular;
}
}
public override FoodType FavoriteFood
{
get
{
return FoodType.Fish;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.Poor);
this.AddLoot(LootPack.Gems);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,119 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("a relanord corpse")]
public class Relanord : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Survival; } }
public override int Stage { get { return 2; } }
[Constructable]
public Relanord()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "a relanord";
this.Body = 0x2F4;
this.Hue = 2071;
this.SetStr(700, 800);
this.SetDex(60, 100);
this.SetInt(60, 100);
this.SetHits(400, 500);
this.SetDamage(10, 15);
this.SetDamageType(ResistanceType.Physical, 20);
this.SetDamageType(ResistanceType.Fire, 20);
this.SetDamageType(ResistanceType.Cold, 20);
this.SetDamageType(ResistanceType.Poison, 20);
this.SetDamageType(ResistanceType.Energy, 20);
this.SetResistance(ResistanceType.Physical, 45, 60);
this.SetResistance(ResistanceType.Fire, 40, 60);
this.SetResistance(ResistanceType.Cold, 25, 35);
this.SetResistance(ResistanceType.Poison, 100);
this.SetResistance(ResistanceType.Energy, 30, 60);
this.SetSkill(SkillName.MagicResist, 30.2, 50.0);
this.SetSkill(SkillName.Tactics, 40.2, 60.0);
this.SetSkill(SkillName.Wrestling, 50.2, 70.0);
this.Fame = 10000;
this.Karma = -10000;
this.VirtualArmor = 50;
this.PackItem(new DaemonBone(15));
}
public Relanord(Serial serial)
: base(serial)
{
}
public override bool AutoDispel
{
get
{
return true;
}
}
public override bool BardImmune
{
get
{
return true;
}
}
public override Poison PoisonImmune
{
get
{
return Poison.Lethal;
}
}
public override void GenerateLoot()
{
this.AddLoot(LootPack.FilthyRich, 1);
}
public override int GetIdleSound()
{
return 0xFD;
}
public override int GetAngerSound()
{
return 0x26C;
}
public override int GetDeathSound()
{
return 0x211;
}
public override int GetAttackSound()
{
return 0x23B;
}
public override int GetHurtSound()
{
return 0x140;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,127 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName("an usagralem ballem corpse")]
public class UsagralemBallem : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Killing; } }
public override int Stage { get { return 3; } }
[Constructable]
public UsagralemBallem()
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
{
this.Name = "an Usagrallem Ballem";
this.Hue = 2071;
this.Body = 318;
this.BaseSoundID = 0x165;
this.SetStr(900, 1000);
this.SetDex(1028);
this.SetInt(1000, 1100);
this.SetHits(2000, 2200);
this.SetMana(5000);
this.SetDamage(17, 21);
this.SetDamageType(ResistanceType.Physical, 20);
this.SetDamageType(ResistanceType.Fire, 20);
this.SetDamageType(ResistanceType.Cold, 20);
this.SetDamageType(ResistanceType.Poison, 20);
this.SetDamageType(ResistanceType.Energy, 20);
this.SetResistance(ResistanceType.Physical, 30, 40);
this.SetResistance(ResistanceType.Fire, 40, 60);
this.SetResistance(ResistanceType.Cold, 40, 60);
this.SetResistance(ResistanceType.Poison, 40, 60);
this.SetResistance(ResistanceType.Energy, 40, 60);
this.SetSkill(SkillName.MagicResist, 80.0, 90.0);
this.SetSkill(SkillName.Tactics, 80.0, 90.0);
this.SetSkill(SkillName.Wrestling, 80.0, 90.0);
this.Fame = 18000;
this.Karma = -18000;
this.VirtualArmor = 64;
this.PackItem(new DaemonBone(30));
SetWeaponAbility(WeaponAbility.DoubleStrike);
SetWeaponAbility(WeaponAbility.WhirlwindAttack);
SetWeaponAbility(WeaponAbility.CrushingBlow);
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Utility.RandomDouble() < 0.30)
{
c.DropItem(new AncientPotteryFragments());
}
}
public UsagralemBallem(Serial serial)
: base(serial)
{
}
public override bool IgnoreYoungProtection
{
get
{
return Core.ML;
}
}
public override bool BardImmune
{
get
{
return !Core.SE;
}
}
public override bool Unprovokable
{
get
{
return Core.SE;
}
}
public override bool AreaPeaceImmune
{
get
{
return Core.SE;
}
}
public override Poison PoisonImmune
{
get
{
return Poison.Lethal;
}
}
public override void GenerateLoot()
{
AddLoot(LootPack.UltraRich, 1);
AddLoot(LootPack.FilthyRich, 2);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,87 @@
using System;
using System.Collections;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a plant corpse" )]
public class Vasanord : BaseVoidCreature
{
public override VoidEvolution Evolution { get { return VoidEvolution.Survival; } }
public override int Stage { get { return 3; } }
[Constructable]
public Vasanord() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.6, 1.2 )
{
Name = "vasanord";
Body = 780;
SetStr( 805, 869 );
SetDex( 51, 64 );
SetInt( 38, 48 );
SetHits( 5000, 5200 );
SetMana( 40, 70 );
SetStam( 50, 80 );
SetDamage( 10, 23 );
SetDamageType( ResistanceType.Physical, 20 );
SetDamageType( ResistanceType.Fire, 20 );
SetDamageType( ResistanceType.Cold, 20 );
SetDamageType( ResistanceType.Poison, 20 );
SetDamageType( ResistanceType.Energy, 20 );
SetResistance( ResistanceType.Physical, 30, 50 );
SetResistance( ResistanceType.Fire, 20, 50 );
SetResistance( ResistanceType.Cold, 20, 40 );
SetResistance( ResistanceType.Poison, 100 );
SetResistance( ResistanceType.Energy, 20, 50 );
SetSkill( SkillName.MagicResist, 72.8, 77.7 );
SetSkill( SkillName.Tactics, 50.7, 110.0 );
SetSkill( SkillName.EvalInt, 99.5, 120.0 );
SetSkill( SkillName.Magery, 95.5, 106.9 );
SetSkill( SkillName.Wrestling, 53.6, 98.6 );
Fame = 15000;
Karma = -15000;
VirtualArmor = 28;
PackItem( new DaemonBone( 30 ) );
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Utility.RandomDouble() < 0.6)
c.DropItem(new TaintedSeeds(2));
}
public override void GenerateLoot()
{
AddLoot( LootPack.UltraRich, 2 );
}
public override bool BardImmune{ get{ return !Core.AOS; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public Vasanord( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}