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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
}
}
}
}