From f35af0de2fbe1e421ef39981e85211166e3d239a Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Mon, 4 Dec 2023 09:11:52 -0800 Subject: [PATCH] fix: Codegens camps (#1628) --- .../Server.Multis.BankerCamp.v0.json | 4 + .../Server.Multis.BrigandCamp.v0.json | 4 + .../Server.Multis.HealerCamp.v0.json | 4 + .../Server.Multis.LizardmenCamp.v0.json | 4 + .../Server.Multis.LockableBarrel.v0.json | 4 + .../Migrations/Server.Multis.MageCamp.v0.json | 4 + .../Migrations/Server.Multis.OrcCamp.v0.json | 4 + .../Migrations/Server.Multis.RatCamp.v0.json | 4 + Projects/UOContent/Multis/Camps/BankerCamp.cs | 55 ++- Projects/UOContent/Multis/Camps/BaseCamp.cs | 351 ++++++++---------- .../UOContent/Multis/Camps/BrigandCamp.cs | 290 +++++++-------- Projects/UOContent/Multis/Camps/HealerCamp.cs | 53 +-- .../UOContent/Multis/Camps/LizardmenCamp.cs | 306 +++++++-------- Projects/UOContent/Multis/Camps/MageCamp.cs | 53 +-- Projects/UOContent/Multis/Camps/OrcCamp.cs | 316 +++++++--------- Projects/UOContent/Multis/Camps/RatCamp.cs | 312 +++++++--------- 16 files changed, 776 insertions(+), 992 deletions(-) create mode 100644 Projects/UOContent/Migrations/Server.Multis.BankerCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.BrigandCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.HealerCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.LizardmenCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.LockableBarrel.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.MageCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.OrcCamp.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Multis.RatCamp.v0.json diff --git a/Projects/UOContent/Migrations/Server.Multis.BankerCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.BankerCamp.v0.json new file mode 100644 index 000000000..c0854518a --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.BankerCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.BankerCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.BrigandCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.BrigandCamp.v0.json new file mode 100644 index 000000000..6421f6026 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.BrigandCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.BrigandCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.HealerCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.HealerCamp.v0.json new file mode 100644 index 000000000..d9f77c578 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.HealerCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.HealerCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.LizardmenCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.LizardmenCamp.v0.json new file mode 100644 index 000000000..d812e02eb --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.LizardmenCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.LizardmenCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.LockableBarrel.v0.json b/Projects/UOContent/Migrations/Server.Multis.LockableBarrel.v0.json new file mode 100644 index 000000000..d21154a5d --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.LockableBarrel.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.LockableBarrel" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.MageCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.MageCamp.v0.json new file mode 100644 index 000000000..b980f4778 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.MageCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.MageCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.OrcCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.OrcCamp.v0.json new file mode 100644 index 000000000..8c71c402b --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.OrcCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.OrcCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Multis.RatCamp.v0.json b/Projects/UOContent/Migrations/Server.Multis.RatCamp.v0.json new file mode 100644 index 000000000..ddd780533 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Multis.RatCamp.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Multis.RatCamp" +} \ No newline at end of file diff --git a/Projects/UOContent/Multis/Camps/BankerCamp.cs b/Projects/UOContent/Multis/Camps/BankerCamp.cs index 3b2666439..b376ee544 100644 --- a/Projects/UOContent/Multis/Camps/BankerCamp.cs +++ b/Projects/UOContent/Multis/Camps/BankerCamp.cs @@ -1,47 +1,34 @@ +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class BankerCamp : BaseCamp { - public class BankerCamp : BaseCamp + [Constructible] + public BankerCamp() : base(0x1F6) { - [Constructible] - public BankerCamp() : base(0x1F6) - { - } + } - public BankerCamp(Serial serial) : base(serial) - { - } + public BankerCamp(Serial serial) : base(serial) + { + } - public override void AddComponents() - { - BaseDoor west, east; + public override void AddComponents() + { + BaseDoor west, east; - AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); - AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); + AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); + AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); - west.Link = east; - east.Link = west; + west.Link = east; + east.Link = west; - AddItem(new Sign(SignType.Bank, SignFacing.West), -5, 5, -4); + AddItem(new Sign(SignType.Bank, SignFacing.West), -5, 5, -4); - AddMobile(new Banker(), 4, -4, 3, 7); - AddMobile(new Banker(), 5, 4, -2, 0); - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - } + AddMobile(new Banker(), 4, -4, 3, 7); + AddMobile(new Banker(), 5, 4, -2, 0); } } diff --git a/Projects/UOContent/Multis/Camps/BaseCamp.cs b/Projects/UOContent/Multis/Camps/BaseCamp.cs index ab07f9373..c6c6e6594 100644 --- a/Projects/UOContent/Multis/Camps/BaseCamp.cs +++ b/Projects/UOContent/Multis/Camps/BaseCamp.cs @@ -1,224 +1,183 @@ using System; using System.Collections.Generic; +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(1, false)] +public abstract partial class BaseCamp : BaseMulti { - public abstract class BaseCamp : BaseMulti + [Tidy] + [SerializableField(0, setter: "private")] + private List _items; + + [Tidy] + [SerializableField(1, setter: "private")] + private List _mobiles; + + [DeltaDateTime] + [SerializableField(2, setter: "private")] + private DateTime _decayTime; + + private TimeSpan m_DecayDelay; + private Timer _decayTimer; + + public BaseCamp(int multiID) : base(multiID) { - private TimeSpan m_DecayDelay; - private DateTime m_DecayTime; - private Timer _decayTimer; - private List m_Items; - private List m_Mobiles; + _items = new List(); + _mobiles = new List(); + m_DecayDelay = TimeSpan.FromMinutes(30.0); + RefreshDecay(true); - public BaseCamp(int multiID) : base(multiID) + Timer.StartTimer(CheckAddComponents); + } + + public virtual int EventRange => 10; + + public virtual TimeSpan DecayDelay + { + get => m_DecayDelay; + set { - m_Items = new List(); - m_Mobiles = new List(); - m_DecayDelay = TimeSpan.FromMinutes(30.0); + m_DecayDelay = value; RefreshDecay(true); - - Timer.StartTimer(CheckAddComponents); - } - - public BaseCamp(Serial serial) : base(serial) - { - } - - public virtual int EventRange => 10; - - public virtual TimeSpan DecayDelay - { - get => m_DecayDelay; - set - { - m_DecayDelay = value; - RefreshDecay(true); - } - } - - public override bool HandlesOnMovement => true; - - public void CheckAddComponents() - { - if (Deleted) - { - return; - } - - AddComponents(); - } - - public virtual void AddComponents() - { - } - - public override void OnDelete() - { - _decayTimer?.Stop(); - _decayTimer = null; - } - - public virtual void RefreshDecay(bool setDecayTime) - { - if (Deleted) - { - return; - } - - if (setDecayTime) - { - m_DecayTime = Core.Now + DecayDelay; - } - - _decayTimer?.Stop(); - _decayTimer = Timer.DelayCall(DecayDelay, Delete); - } - - public virtual void AddItem(Item item, int xOffset, int yOffset, int zOffset) - { - m_Items.Add(item); - - var zavg = Map.GetAverageZ(X + xOffset, Y + yOffset); - item.MoveToWorld(new Point3D(X + xOffset, Y + yOffset, zavg + zOffset), Map); - } - - public virtual void AddMobile(Mobile m, int wanderRange, int xOffset, int yOffset, int zOffset) - { - m_Mobiles.Add(m); - - var zavg = Map.GetAverageZ(X + xOffset, Y + yOffset); - var loc = new Point3D(X + xOffset, Y + yOffset, zavg + zOffset); - - if (m is BaseCreature bc) - { - bc.RangeHome = wanderRange; - bc.Home = loc; - } - - if (m is BaseVendor) - { - m.Direction = Direction.South; - } - - m.MoveToWorld(loc, Map); - } - - public virtual void OnEnter(Mobile m) - { - RefreshDecay(true); - } - - public virtual void OnExit(Mobile m) - { - RefreshDecay(true); - } - - public override void OnMovement(Mobile m, Point3D oldLocation) - { - var inOldRange = Utility.InRange(oldLocation, Location, EventRange); - var inNewRange = Utility.InRange(m.Location, Location, EventRange); - - if (inNewRange && !inOldRange) - { - OnEnter(m); - } - else if (inOldRange && !inNewRange) - { - OnExit(m); - } - } - - public override void OnAfterDelete() - { - base.OnAfterDelete(); - - for (var i = 0; i < m_Items.Count; ++i) - { - m_Items[i].Delete(); - } - - for (var i = 0; i < m_Mobiles.Count; ++i) - { - var bc = (BaseCreature)m_Mobiles[i]; - - if (bc.IsPrisoner == false) - { - m_Mobiles[i].Delete(); - } - else if (m_Mobiles[i].CantWalk) - { - m_Mobiles[i].Delete(); - } - } - - m_Items.Clear(); - m_Mobiles.Clear(); - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - - m_Items.Tidy(); - writer.Write(m_Items); - m_Mobiles.Tidy(); - writer.Write(m_Mobiles); - writer.WriteDeltaTime(m_DecayTime); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 0: - { - m_Items = reader.ReadEntityList(); - m_Mobiles = reader.ReadEntityList(); - m_DecayTime = reader.ReadDeltaTime(); - - RefreshDecay(false); - - break; - } - } } } - public class LockableBarrel : LockableContainer + public override bool HandlesOnMovement => true; + + public void CheckAddComponents() { - [Constructible] - public LockableBarrel() : base(0xE77) => Weight = 1.0; - - public LockableBarrel(Serial serial) : base(serial) + if (Deleted) { + return; } - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); + AddComponents(); + } - writer.Write(0); // version + public virtual void AddComponents() + { + } + + public override void OnDelete() + { + _decayTimer?.Stop(); + _decayTimer = null; + } + + public virtual void RefreshDecay(bool setDecayTime) + { + if (Deleted) + { + return; } - public override void Deserialize(IGenericReader reader) + if (setDecayTime) { - base.Deserialize(reader); + _decayTime = Core.Now + DecayDelay; + } - var version = reader.ReadInt(); + _decayTimer?.Stop(); + _decayTimer = Timer.DelayCall(DecayDelay, Delete); + } - if (Weight == 8.0) + public virtual void AddItem(Item item, int xOffset, int yOffset, int zOffset) + { + AddToItems(item); + + var zavg = Map.GetAverageZ(X + xOffset, Y + yOffset); + item.MoveToWorld(new Point3D(X + xOffset, Y + yOffset, zavg + zOffset), Map); + } + + public virtual void AddMobile(Mobile m, int wanderRange, int xOffset, int yOffset, int zOffset) + { + AddToMobiles(m); + + var zavg = Map.GetAverageZ(X + xOffset, Y + yOffset); + var loc = new Point3D(X + xOffset, Y + yOffset, zavg + zOffset); + + if (m is BaseCreature bc) + { + bc.RangeHome = wanderRange; + bc.Home = loc; + } + + if (m is BaseVendor) + { + m.Direction = Direction.South; + } + + m.MoveToWorld(loc, Map); + } + + public virtual void OnEnter(Mobile m) + { + RefreshDecay(true); + } + + public virtual void OnExit(Mobile m) + { + RefreshDecay(true); + } + + public override void OnMovement(Mobile m, Point3D oldLocation) + { + var inOldRange = Utility.InRange(oldLocation, Location, EventRange); + var inNewRange = Utility.InRange(m.Location, Location, EventRange); + + if (inNewRange && !inOldRange) + { + OnEnter(m); + } + else if (inOldRange && !inNewRange) + { + OnExit(m); + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + for (var i = 0; i < _items.Count; ++i) + { + _items[i].Delete(); + } + + for (var i = 0; i < _mobiles.Count; ++i) + { + var mob = _mobiles[i]; + + if (mob.CantWalk || (mob as BaseCreature)?.IsPrisoner == false) { - Weight = 1.0; + _mobiles[i].Delete(); } } + + ClearItems(); + ClearMobiles(); + } + + private void Deserialize(IGenericReader reader, int version) + { + _items = reader.ReadEntityList(); + _mobiles = reader.ReadEntityList(); + _decayTime = reader.ReadDeltaTime(); + } + + [AfterDeserialization] + private void AfterDeserialization() + { + RefreshDecay(false); } } + +[SerializationGenerator(0, false)] +public partial class LockableBarrel : LockableContainer +{ + [Constructible] + public LockableBarrel() : base(0xE77) => Weight = 1.0; +} diff --git a/Projects/UOContent/Multis/Camps/BrigandCamp.cs b/Projects/UOContent/Multis/Camps/BrigandCamp.cs index 744aaf73f..934d8ccba 100644 --- a/Projects/UOContent/Multis/Camps/BrigandCamp.cs +++ b/Projects/UOContent/Multis/Camps/BrigandCamp.cs @@ -1,185 +1,157 @@ using System; +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class BrigandCamp : BaseCamp { - public class BrigandCamp : BaseCamp + private Mobile _prisoner; + + [Constructible] + public BrigandCamp() : base(0x10EE) // dummy garbage at center { - private Mobile m_Prisoner; + } - [Constructible] - public BrigandCamp() : base(0x10EE) // dummy garbage at center + public virtual Mobile Brigands => new Brigand(); + public virtual Mobile Executioners => new Executioner(); + + public override void AddComponents() + { + Visible = false; + DecayDelay = TimeSpan.FromMinutes(5.0); + + AddItem(new Static(0x10ee), 0, 0, 0); + AddItem(new Static(0xfac), 0, 7, 0); + + switch (Utility.Random(3)) { - } - - public BrigandCamp(Serial serial) : base(serial) - { - } - - public virtual Mobile Brigands => new Brigand(); - public virtual Mobile Executioners => new Executioner(); - - public override void AddComponents() - { - Visible = false; - DecayDelay = TimeSpan.FromMinutes(5.0); - - AddItem(new Static(0x10ee), 0, 0, 0); - AddItem(new Static(0xfac), 0, 7, 0); - - switch (Utility.Random(3)) - { - case 0: - { - AddItem(new Item(0xDE3), 0, 7, 0); // Campfire - AddItem(new Item(0x974), 0, 7, 1); // Cauldron - break; - } - case 1: - { - AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit - break; - } - default: - { - AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit - break; - } - } - - AddCampChests(); - - for (var i = 0; i < 4; i++) - { - AddMobile(Brigands, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); - } - - BaseCreature bc = Utility.Random(2) switch - { - 0 => new Noble(), - _ => new SeekerOfAdventure() - }; - - bc.IsPrisoner = true; - bc.CantWalk = true; - m_Prisoner = bc; - - m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); - AddMobile(m_Prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); - } - - private void AddCampChests() - { - LockableContainer chest = Utility.Random(3) switch - { - 0 => new MetalChest(), - 1 => new MetalGoldenChest(), - _ => new WoodenChest() - }; - - chest.LiftOverride = true; - - TreasureMapChest.Fill(chest, 1); - - AddItem(chest, -2, -2, 0); - - LockableContainer crates = Utility.Random(4) switch - { - 0 => new SmallCrate(), - 1 => new MediumCrate(), - 2 => new LargeCrate(), - _ => new LockableBarrel() - }; - - crates.TrapType = TrapType.ExplosionTrap; - crates.TrapPower = Utility.RandomMinMax(30, 40); - crates.TrapLevel = 2; - - crates.RequiredSkill = 76; - crates.LockLevel = 66; - crates.MaxLockLevel = 116; - crates.Locked = true; - - crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); - crates.DropItem(new Arrow(10)); - crates.DropItem(new Bolt(10)); - - crates.LiftOverride = true; - - crates.DropItem( - Utility.Random(5) switch + case 0: { - 0 => new LesserCurePotion(), - 1 => new LesserExplosionPotion(), - 2 => new LesserHealPotion(), - 3 => new LesserPoisonPotion(), - _ => null // 4 + AddItem(new Item(0xDE3), 0, 7, 0); // Campfire + AddItem(new Item(0x974), 0, 7, 1); // Cauldron + break; } - ); - - AddItem(crates, 2, 2, 0); - } - - // Don't refresh decay timer - public override void OnEnter(Mobile m) - { - if (m.Player && m_Prisoner?.CantWalk == true) - { - var number = Utility.Random(8) switch + case 1: { - 0 => 502261, - 1 => 502262, - 2 => 502263, - 3 => 502264, - 4 => 502265, - 5 => 502266, - 6 => 502267, - _ => 502268 - }; - - m_Prisoner.Yell(number); - } + AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit + break; + } + default: + { + AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit + break; + } } - // Don't refresh decay timer - public override void OnExit(Mobile m) + AddCampChests(); + + for (var i = 0; i < 4; i++) { + AddMobile(Brigands, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); } - public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + BaseCreature bc = Utility.Random(2) switch { - if (item != null) + 0 => new Noble(), + _ => new SeekerOfAdventure() + }; + + bc.IsPrisoner = true; + bc.CantWalk = true; + _prisoner = bc; + + _prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); + AddMobile(_prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); + } + + private void AddCampChests() + { + LockableContainer chest = Utility.Random(3) switch + { + 0 => new MetalChest(), + 1 => new MetalGoldenChest(), + _ => new WoodenChest() + }; + + chest.LiftOverride = true; + + TreasureMapChest.Fill(chest, 1); + + AddItem(chest, -2, -2, 0); + + LockableContainer crates = Utility.Random(4) switch + { + 0 => new SmallCrate(), + 1 => new MediumCrate(), + 2 => new LargeCrate(), + _ => new LockableBarrel() + }; + + crates.TrapType = TrapType.ExplosionTrap; + crates.TrapPower = Utility.RandomMinMax(30, 40); + crates.TrapLevel = 2; + + crates.RequiredSkill = 76; + crates.LockLevel = 66; + crates.MaxLockLevel = 116; + crates.Locked = true; + + crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); + crates.DropItem(new Arrow(10)); + crates.DropItem(new Bolt(10)); + + crates.LiftOverride = true; + + crates.DropItem( + Utility.Random(5) switch { - item.Movable = false; + 0 => new LesserCurePotion(), + 1 => new LesserExplosionPotion(), + 2 => new LesserHealPotion(), + 3 => new LesserPoisonPotion(), + _ => null // 4 } + ); - base.AddItem(item, xOffset, yOffset, zOffset); - } + AddItem(crates, 2, 2, 0); + } - public override void Serialize(IGenericWriter writer) + // Don't refresh decay timer + public override void OnEnter(Mobile m) + { + if (m.Player && _prisoner?.CantWalk == true) { - base.Serialize(writer); - - writer.Write(0); // version - - writer.Write(m_Prisoner); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) + var number = Utility.Random(8) switch { - case 0: - { - m_Prisoner = reader.ReadEntity(); - break; - } - } + 0 => 502261, + 1 => 502262, + 2 => 502263, + 3 => 502264, + 4 => 502265, + 5 => 502266, + 6 => 502267, + _ => 502268 + }; + + _prisoner.Yell(number); } } + + // Don't refresh decay timer + public override void OnExit(Mobile m) + { + } + + public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + { + if (item != null) + { + item.Movable = false; + } + + base.AddItem(item, xOffset, yOffset, zOffset); + } } diff --git a/Projects/UOContent/Multis/Camps/HealerCamp.cs b/Projects/UOContent/Multis/Camps/HealerCamp.cs index 8d461bb0f..8cc6ff15f 100644 --- a/Projects/UOContent/Multis/Camps/HealerCamp.cs +++ b/Projects/UOContent/Multis/Camps/HealerCamp.cs @@ -1,47 +1,30 @@ +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class HealerCamp : BaseCamp { - public class HealerCamp : BaseCamp + [Constructible] + public HealerCamp() : base(0x1F4) { - [Constructible] - public HealerCamp() : base(0x1F4) - { - } + } - public HealerCamp(Serial serial) : base(serial) - { - } + public override void AddComponents() + { + BaseDoor west, east; - public override void AddComponents() - { - BaseDoor west, east; + AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); + AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); - AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); - AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); + west.Link = east; + east.Link = west; - west.Link = east; - east.Link = west; + AddItem(new Sign(SignType.Healer, SignFacing.West), -5, 5, -4); - AddItem(new Sign(SignType.Healer, SignFacing.West), -5, 5, -4); - - AddMobile(new Healer(), 4, -4, 3, 7); - AddMobile(new Healer(), 5, 4, -2, 0); - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - } + AddMobile(new Healer(), 4, -4, 3, 7); + AddMobile(new Healer(), 5, 4, -2, 0); } } diff --git a/Projects/UOContent/Multis/Camps/LizardmenCamp.cs b/Projects/UOContent/Multis/Camps/LizardmenCamp.cs index b0812199a..1ef9b50bc 100644 --- a/Projects/UOContent/Multis/Camps/LizardmenCamp.cs +++ b/Projects/UOContent/Multis/Camps/LizardmenCamp.cs @@ -1,199 +1,159 @@ using System; +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class LizardmenCamp : BaseCamp { - public class LizardmenCamp : BaseCamp + private Mobile _prisoner; + + [Constructible] + public LizardmenCamp() : base(0x10EE) // dummy garbage at center { - private Mobile m_Prisoner; + } - [Constructible] - public LizardmenCamp() : base(0x10EE) // dummy garbage at center + public virtual Mobile Lizardmen => new Lizardman(); + + public override void AddComponents() + { + Visible = false; + DecayDelay = TimeSpan.FromMinutes(5.0); + AddItem(new Static(0x10ee), 0, 0, 0); + AddItem(new Static(0xfac), 0, 7, 0); + + switch (Utility.Random(3)) { - } - - public LizardmenCamp(Serial serial) : base(serial) - { - } - - public virtual Mobile Lizardmen => new Lizardman(); - - public override void AddComponents() - { - BaseCreature bc; - // BaseEscortable be; - - Visible = false; - DecayDelay = TimeSpan.FromMinutes(5.0); - AddItem(new Static(0x10ee), 0, 0, 0); - AddItem(new Static(0xfac), 0, 7, 0); - - switch (Utility.Random(3)) - { - case 0: - { - AddItem(new Item(0xDE3), 0, 7, 0); // Campfire - AddItem(new Item(0x974), 0, 7, 1); // Cauldron - break; - } - case 1: - { - AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit - break; - } - default: - { - AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit - break; - } - } - - AddItem(new Item(0x41F), 4, 4, 0); // Gruesome Standart South - - AddCampChests(); - - for (var i = 0; i < 4; i++) - { - AddMobile(Lizardmen, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); - } - - m_Prisoner = Utility.Random(2) switch - { - 0 => new Noble(), - _ => new SeekerOfAdventure() - }; - - // be = (BaseEscortable)m_Prisoner; - // be.m_Captive = true; - - bc = (BaseCreature)m_Prisoner; - bc.IsPrisoner = true; - bc.CantWalk = true; - - m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); - AddMobile(m_Prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); - } - - private void AddCampChests() - { - var chest = Utility.Random(3) switch - { - 0 => (LockableContainer)new MetalChest(), - 1 => new MetalGoldenChest(), - _ => new WoodenChest() - }; - - chest.LiftOverride = true; - - TreasureMapChest.Fill(chest, 1); - - AddItem(chest, 2, -2, 0); - - var crates = Utility.Random(4) switch - { - 0 => (LockableContainer)new SmallCrate(), - 1 => new MediumCrate(), - 2 => new LargeCrate(), - _ => new LockableBarrel() - }; - - crates.TrapType = TrapType.ExplosionTrap; - crates.TrapPower = Utility.RandomMinMax(30, 40); - crates.TrapLevel = 2; - - crates.RequiredSkill = 76; - crates.LockLevel = 66; - crates.MaxLockLevel = 116; - crates.Locked = true; - - crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); - crates.DropItem(new Arrow(10)); - crates.DropItem(new Bolt(10)); - - crates.LiftOverride = true; - - if (Utility.RandomDouble() < 0.8) - { - switch (Utility.Random(4)) + case 0: { - case 0: - crates.DropItem(new LesserCurePotion()); - break; - case 1: - crates.DropItem(new LesserExplosionPotion()); - break; - case 2: - crates.DropItem(new LesserHealPotion()); - break; - default: - crates.DropItem(new LesserPoisonPotion()); - break; + AddItem(new Item(0xDE3), 0, 7, 0); // Campfire + AddItem(new Item(0x974), 0, 7, 1); // Cauldron + break; } - } - - AddItem(crates, -2, 2, 0); - } - - // Don't refresh decay timer - public override void OnEnter(Mobile m) - { - if (m.Player && m_Prisoner?.CantWalk == true) - { - var number = Utility.Random(8) switch + case 1: { - 0 => 502261, - 1 => 502262, - 2 => 502263, - 3 => 502264, - 4 => 502265, - 5 => 502266, - 6 => 502267, - _ => 502268 - }; - - m_Prisoner.Yell(number); - } + AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit + break; + } + default: + { + AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit + break; + } } - // Don't refresh decay timer - public override void OnExit(Mobile m) + AddItem(new Item(0x41F), 4, 4, 0); // Gruesome Standart South + + AddCampChests(); + + for (var i = 0; i < 4; i++) { + AddMobile(Lizardmen, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); } - public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + _prisoner = Utility.Random(2) switch { - if (item != null) + 0 => new Noble(), + _ => new SeekerOfAdventure() + }; + + var bc = (BaseCreature)_prisoner; + bc.IsPrisoner = true; + bc.CantWalk = true; + + _prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); + AddMobile(_prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); + } + + private void AddCampChests() + { + var chest = Utility.Random(3) switch + { + 0 => (LockableContainer)new MetalChest(), + 1 => new MetalGoldenChest(), + _ => new WoodenChest() + }; + + chest.LiftOverride = true; + + TreasureMapChest.Fill(chest, 1); + + AddItem(chest, 2, -2, 0); + + var crates = Utility.Random(4) switch + { + 0 => (LockableContainer)new SmallCrate(), + 1 => new MediumCrate(), + 2 => new LargeCrate(), + _ => new LockableBarrel() + }; + + crates.TrapType = TrapType.ExplosionTrap; + crates.TrapPower = Utility.RandomMinMax(30, 40); + crates.TrapLevel = 2; + + crates.RequiredSkill = 76; + crates.LockLevel = 66; + crates.MaxLockLevel = 116; + crates.Locked = true; + + crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); + crates.DropItem(new Arrow(10)); + crates.DropItem(new Bolt(10)); + + crates.LiftOverride = true; + + if (Utility.RandomDouble() < 0.8) + { + Item item = Utility.Random(4) switch { - item.Movable = false; - } + 0 => new LesserCurePotion(), + 1 => new LesserExplosionPotion(), + 2 => new LesserHealPotion(), + _ => new LesserPoisonPotion() + }; - base.AddItem(item, xOffset, yOffset, zOffset); + crates.DropItem(item); } - public override void Serialize(IGenericWriter writer) + AddItem(crates, -2, 2, 0); + } + + // Don't refresh decay timer + public override void OnEnter(Mobile m) + { + if (m.Player && _prisoner?.CantWalk == true) { - base.Serialize(writer); - - writer.Write(0); // version - - writer.Write(m_Prisoner); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) + var number = Utility.Random(8) switch { - case 0: - { - m_Prisoner = reader.ReadEntity(); - break; - } - } + 0 => 502261, + 1 => 502262, + 2 => 502263, + 3 => 502264, + 4 => 502265, + 5 => 502266, + 6 => 502267, + _ => 502268 + }; + + _prisoner.Yell(number); } } + + // Don't refresh decay timer + public override void OnExit(Mobile m) + { + } + + public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + { + if (item != null) + { + item.Movable = false; + } + + base.AddItem(item, xOffset, yOffset, zOffset); + } } diff --git a/Projects/UOContent/Multis/Camps/MageCamp.cs b/Projects/UOContent/Multis/Camps/MageCamp.cs index 71ce784cd..739181430 100644 --- a/Projects/UOContent/Multis/Camps/MageCamp.cs +++ b/Projects/UOContent/Multis/Camps/MageCamp.cs @@ -1,47 +1,30 @@ +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class MageCamp : BaseCamp { - public class MageCamp : BaseCamp + [Constructible] + public MageCamp() : base(0x1F5) { - [Constructible] - public MageCamp() : base(0x1F5) - { - } + } - public MageCamp(Serial serial) : base(serial) - { - } + public override void AddComponents() + { + BaseDoor west, east; - public override void AddComponents() - { - BaseDoor west, east; + AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); + AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); - AddItem(west = new LightWoodGate(DoorFacing.WestCW), -4, 4, 7); - AddItem(east = new LightWoodGate(DoorFacing.EastCCW), -3, 4, 7); + west.Link = east; + east.Link = west; - west.Link = east; - east.Link = west; + AddItem(new Sign(SignType.Mage, SignFacing.West), -5, 5, -4); - AddItem(new Sign(SignType.Mage, SignFacing.West), -5, 5, -4); - - AddMobile(new Mage(), 4, -4, 3, 7); - AddMobile(new Mage(), 5, 4, -2, 0); - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - } + AddMobile(new Mage(), 4, -4, 3, 7); + AddMobile(new Mage(), 5, 4, -2, 0); } } diff --git a/Projects/UOContent/Multis/Camps/OrcCamp.cs b/Projects/UOContent/Multis/Camps/OrcCamp.cs index 9504912e6..6f5658b8b 100644 --- a/Projects/UOContent/Multis/Camps/OrcCamp.cs +++ b/Projects/UOContent/Multis/Camps/OrcCamp.cs @@ -1,207 +1,161 @@ using System; +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class OrcCamp : BaseCamp { - public class OrcCamp : BaseCamp + private Mobile _prisoner; + + [Constructible] + public OrcCamp() : base(0x10EE) // dummy garbage at center { - private Mobile m_Prisoner; + } - [Constructible] - public OrcCamp() : base(0x10EE) // dummy garbage at center + public virtual Mobile Orcs => new Orc(); + + public override void AddComponents() + { + Visible = false; + DecayDelay = TimeSpan.FromMinutes(5.0); + AddItem(new Static(0x10ee), 0, 0, 0); + AddItem(new Static(0xfac), 0, 7, 0); + + switch (Utility.Random(3)) { - } - - public OrcCamp(Serial serial) : base(serial) - { - } - - public virtual Mobile Orcs => new Orc(); - - public override void AddComponents() - { - BaseCreature bc; - // BaseEscortable be; - - Visible = false; - DecayDelay = TimeSpan.FromMinutes(5.0); - AddItem(new Static(0x10ee), 0, 0, 0); - AddItem(new Static(0xfac), 0, 7, 0); - - switch (Utility.Random(3)) - { - case 0: - { - AddItem(new Item(0xDE3), 0, 7, 0); // Campfire - AddItem(new Item(0x974), 0, 7, 1); // Cauldron - break; - } - case 1: - { - AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit - break; - } - default: - { - AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit - break; - } - } - - AddItem(new Item(0x428), -5, -4, 0); // Gruesome Standart West - - AddCampChests(); - - for (var i = 0; i < 3; i++) - { - AddMobile(Orcs, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); - } - - AddMobile(new OrcCaptain(), 2, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); - - m_Prisoner = Utility.Random(2) switch - { - 0 => new Noble(), - _ => new SeekerOfAdventure() - }; - - // be = (BaseEscortable)m_Prisoner; - // be.m_Captive = true; - - bc = (BaseCreature)m_Prisoner; - bc.IsPrisoner = true; - bc.CantWalk = true; - - m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); - AddMobile(m_Prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); - } - - private void AddCampChests() - { - var chest = Utility.Random(3) switch - { - 0 => (LockableContainer)new MetalChest(), - 1 => new MetalGoldenChest(), - _ => new WoodenChest() - }; - - chest.LiftOverride = true; - - TreasureMapChest.Fill(chest, 1); - - AddItem(chest, -2, 2, 0); - - var crates = Utility.Random(4) switch - { - 0 => (LockableContainer)new SmallCrate(), - 1 => new MediumCrate(), - 2 => new LargeCrate(), - _ => new LockableBarrel() - }; - - crates.TrapType = TrapType.ExplosionTrap; - crates.TrapPower = Utility.RandomMinMax(30, 40); - crates.TrapLevel = 2; - - crates.RequiredSkill = 76; - crates.LockLevel = 66; - crates.MaxLockLevel = 116; - crates.Locked = true; - - crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); - crates.DropItem(new Arrow(10)); - crates.DropItem(new Bolt(10)); - - crates.LiftOverride = true; - - if (Utility.RandomDouble() < 0.8) - { - switch (Utility.Random(4)) + case 0: { - case 0: - crates.DropItem(new LesserCurePotion()); - break; - case 1: - crates.DropItem(new LesserExplosionPotion()); - break; - case 2: - crates.DropItem(new LesserHealPotion()); - break; - default: - crates.DropItem(new LesserPoisonPotion()); - break; + AddItem(new Item(0xDE3), 0, 7, 0); // Campfire + AddItem(new Item(0x974), 0, 7, 1); // Cauldron + break; } - } - - AddItem(crates, 2, -2, 0); - } - - // Don't refresh decay timer - public override void OnEnter(Mobile m) - { - if (m.Player && m_Prisoner?.CantWalk == true) - { - var number = Utility.Random(8) switch + case 1: { - 0 => 502261, - 1 => 502262, - 2 => 502263, - 3 => 502264, - 4 => 502265, - 5 => 502266, - 6 => 502267, - _ => 502268 - }; - - m_Prisoner.Yell(number); - } + AddItem(new Item(0x1E95), 0, 7, 1); // Rabbit on a spit + break; + } + default: + { + AddItem(new Item(0x1E94), 0, 7, 1); // Chicken on a spit + break; + } } - // Don't refresh decay timer - public override void OnExit(Mobile m) + AddItem(new Item(0x428), -5, -4, 0); // Gruesome Standart West + + AddCampChests(); + + for (var i = 0; i < 3; i++) { + AddMobile(Orcs, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); } - public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + AddMobile(new OrcCaptain(), 2, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); + + _prisoner = Utility.Random(2) switch { - if (item != null) + 0 => new Noble(), + _ => new SeekerOfAdventure() + }; + + var bc = (BaseCreature)_prisoner; + bc.IsPrisoner = true; + bc.CantWalk = true; + + _prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); + AddMobile(_prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); + } + + private void AddCampChests() + { + var chest = Utility.Random(3) switch + { + 0 => (LockableContainer)new MetalChest(), + 1 => new MetalGoldenChest(), + _ => new WoodenChest() + }; + + chest.LiftOverride = true; + + TreasureMapChest.Fill(chest, 1); + + AddItem(chest, -2, 2, 0); + + var crates = Utility.Random(4) switch + { + 0 => (LockableContainer)new SmallCrate(), + 1 => new MediumCrate(), + 2 => new LargeCrate(), + _ => new LockableBarrel() + }; + + crates.TrapType = TrapType.ExplosionTrap; + crates.TrapPower = Utility.RandomMinMax(30, 40); + crates.TrapLevel = 2; + + crates.RequiredSkill = 76; + crates.LockLevel = 66; + crates.MaxLockLevel = 116; + crates.Locked = true; + + crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); + crates.DropItem(new Arrow(10)); + crates.DropItem(new Bolt(10)); + + crates.LiftOverride = true; + + if (Utility.RandomDouble() < 0.8) + { + Item item = Utility.Random(4) switch { - item.Movable = false; - } + 0 => new LesserCurePotion(), + 1 => new LesserExplosionPotion(), + 2 => new LesserHealPotion(), + _ => new LesserPoisonPotion() + }; - base.AddItem(item, xOffset, yOffset, zOffset); + crates.DropItem(item); } - public override void Serialize(IGenericWriter writer) + AddItem(crates, 2, -2, 0); + } + + // Don't refresh decay timer + public override void OnEnter(Mobile m) + { + if (m.Player && _prisoner?.CantWalk == true) { - base.Serialize(writer); - - writer.Write(1); // version - - writer.Write(m_Prisoner); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) + var number = Utility.Random(8) switch { - case 1: - { - m_Prisoner = reader.ReadEntity(); - break; - } - case 0: - { - m_Prisoner = reader.ReadEntity(); - reader.ReadEntity(); - break; - } - } + 0 => 502261, + 1 => 502262, + 2 => 502263, + 3 => 502264, + 4 => 502265, + 5 => 502266, + 6 => 502267, + _ => 502268 + }; + + _prisoner.Yell(number); } } + + // Don't refresh decay timer + public override void OnExit(Mobile m) + { + } + + public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + { + if (item != null) + { + item.Movable = false; + } + + base.AddItem(item, xOffset, yOffset, zOffset); + } } diff --git a/Projects/UOContent/Multis/Camps/RatCamp.cs b/Projects/UOContent/Multis/Camps/RatCamp.cs index 7c759b6a6..d094a1544 100644 --- a/Projects/UOContent/Multis/Camps/RatCamp.cs +++ b/Projects/UOContent/Multis/Camps/RatCamp.cs @@ -1,205 +1,159 @@ using System; +using ModernUO.Serialization; using Server.Items; using Server.Mobiles; -namespace Server.Multis +namespace Server.Multis; + +[SerializationGenerator(0, false)] +public partial class RatCamp : BaseCamp { - public class RatCamp : BaseCamp + private Mobile _prisoner; + + [Constructible] + public RatCamp() : base(0x10EE) // dummy garbage at center { - private Mobile m_Prisoner; + } - [Constructible] - public RatCamp() : base(0x10EE) // dummy garbage at center + public virtual Mobile Ratmen => new Ratman(); + + public override void AddComponents() + { + Visible = false; + DecayDelay = TimeSpan.FromMinutes(5.0); + AddItem(new Static(0x10ee), 0, 0, 0); + AddItem(new Static(0xfac), 0, 6, 0); + + switch (Utility.Random(3)) { - } - - public RatCamp(Serial serial) : base(serial) - { - } - - public virtual Mobile Ratmen => new Ratman(); - - public override void AddComponents() - { - BaseCreature bc; - // BaseEscortable be; - - Visible = false; - DecayDelay = TimeSpan.FromMinutes(5.0); - AddItem(new Static(0x10ee), 0, 0, 0); - AddItem(new Static(0xfac), 0, 6, 0); - - switch (Utility.Random(3)) - { - case 0: - { - AddItem(new Item(0xDE3), 0, 6, 0); // Campfire - AddItem(new Item(0x974), 0, 6, 1); // Cauldron - break; - } - case 1: - { - AddItem(new Item(0x1E95), 0, 6, 1); // Rabbit on a spit - break; - } - default: - { - AddItem(new Item(0x1E94), 0, 6, 1); // Chicken on a spit - break; - } - } - - AddItem(new Item(0x41F), 5, 5, 0); // Gruesome Standart South - - AddCampChests(); - - for (var i = 0; i < 4; i++) - { - AddMobile(Ratmen, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); - } - - m_Prisoner = Utility.Random(2) switch - { - 0 => new Noble(), - _ => new SeekerOfAdventure() - }; - - // be = (BaseEscortable)m_Prisoner; - // be.m_Captive = true; - - bc = (BaseCreature)m_Prisoner; - bc.IsPrisoner = true; - bc.CantWalk = true; - - m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); - AddMobile(m_Prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); - } - - private void AddCampChests() - { - var chest = Utility.Random(3) switch - { - 0 => (LockableContainer)new MetalChest(), - 1 => new MetalGoldenChest(), - _ => new WoodenChest() - }; - - chest.LiftOverride = true; - - TreasureMapChest.Fill(chest, 1); - - AddItem(chest, -2, -2, 0); - - var crates = Utility.Random(4) switch - { - 0 => (LockableContainer)new SmallCrate(), - 1 => new MediumCrate(), - 2 => new LargeCrate(), - _ => new LockableBarrel() - }; - - crates.TrapType = TrapType.ExplosionTrap; - crates.TrapPower = Utility.RandomMinMax(30, 40); - crates.TrapLevel = 2; - - crates.RequiredSkill = 76; - crates.LockLevel = 66; - crates.MaxLockLevel = 116; - crates.Locked = true; - - crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); - crates.DropItem(new Arrow(10)); - crates.DropItem(new Bolt(10)); - - crates.LiftOverride = true; - - if (Utility.RandomDouble() < 0.8) - { - switch (Utility.Random(4)) + case 0: { - case 0: - crates.DropItem(new LesserCurePotion()); - break; - case 1: - crates.DropItem(new LesserExplosionPotion()); - break; - case 2: - crates.DropItem(new LesserHealPotion()); - break; - default: - crates.DropItem(new LesserPoisonPotion()); - break; + AddItem(new Item(0xDE3), 0, 6, 0); // Campfire + AddItem(new Item(0x974), 0, 6, 1); // Cauldron + break; } - } - - AddItem(crates, 2, 2, 0); - } - - // Don't refresh decay timer - public override void OnEnter(Mobile m) - { - if (m.Player && m_Prisoner?.CantWalk == true) - { - var number = Utility.Random(8) switch + case 1: { - 0 => 502261, - 1 => 502262, - 2 => 502263, - 3 => 502264, - 4 => 502265, - 5 => 502266, - 6 => 502267, - _ => 502268 - }; - - m_Prisoner.Yell(number); - } + AddItem(new Item(0x1E95), 0, 6, 1); // Rabbit on a spit + break; + } + default: + { + AddItem(new Item(0x1E94), 0, 6, 1); // Chicken on a spit + break; + } } - // Don't refresh decay timer - public override void OnExit(Mobile m) + AddItem(new Item(0x41F), 5, 5, 0); // Gruesome Standart South + + AddCampChests(); + + for (var i = 0; i < 4; i++) { + AddMobile(Ratmen, 6, Utility.RandomMinMax(-7, 7), Utility.RandomMinMax(-7, 7), 0); } - public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + _prisoner = Utility.Random(2) switch { - if (item != null) + 0 => new Noble(), + _ => new SeekerOfAdventure() + }; + + var bc = (BaseCreature)_prisoner; + bc.IsPrisoner = true; + bc.CantWalk = true; + + _prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117); + AddMobile(_prisoner, 2, Utility.RandomMinMax(-2, 2), Utility.RandomMinMax(-2, 2), 0); + } + + private void AddCampChests() + { + var chest = Utility.Random(3) switch + { + 0 => (LockableContainer)new MetalChest(), + 1 => new MetalGoldenChest(), + _ => new WoodenChest() + }; + + chest.LiftOverride = true; + + TreasureMapChest.Fill(chest, 1); + + AddItem(chest, -2, -2, 0); + + var crates = Utility.Random(4) switch + { + 0 => (LockableContainer)new SmallCrate(), + 1 => new MediumCrate(), + 2 => new LargeCrate(), + _ => new LockableBarrel() + }; + + crates.TrapType = TrapType.ExplosionTrap; + crates.TrapPower = Utility.RandomMinMax(30, 40); + crates.TrapLevel = 2; + + crates.RequiredSkill = 76; + crates.LockLevel = 66; + crates.MaxLockLevel = 116; + crates.Locked = true; + + crates.DropItem(new Gold(Utility.RandomMinMax(100, 400))); + crates.DropItem(new Arrow(10)); + crates.DropItem(new Bolt(10)); + + crates.LiftOverride = true; + + if (Utility.RandomDouble() < 0.8) + { + Item item = Utility.Random(4) switch { - item.Movable = false; - } + 0 => new LesserCurePotion(), + 1 => new LesserExplosionPotion(), + 2 => new LesserHealPotion(), + _ => new LesserPoisonPotion() + }; - base.AddItem(item, xOffset, yOffset, zOffset); + crates.DropItem(item); } - public override void Serialize(IGenericWriter writer) + AddItem(crates, 2, 2, 0); + } + + // Don't refresh decay timer + public override void OnEnter(Mobile m) + { + if (m.Player && _prisoner?.CantWalk == true) { - base.Serialize(writer); - - writer.Write(1); // version - - writer.Write(m_Prisoner); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) + var number = Utility.Random(8) switch { - case 1: - { - m_Prisoner = reader.ReadEntity(); - break; - } - case 0: - { - m_Prisoner = reader.ReadEntity(); - reader.ReadEntity(); - break; - } - } + 0 => 502261, + 1 => 502262, + 2 => 502263, + 3 => 502264, + 4 => 502265, + 5 => 502266, + 6 => 502267, + _ => 502268 + }; + + _prisoner.Yell(number); } } + + // Don't refresh decay timer + public override void OnExit(Mobile m) + { + } + + public override void AddItem(Item item, int xOffset, int yOffset, int zOffset) + { + if (item != null) + { + item.Movable = false; + } + + base.AddItem(item, xOffset, yOffset, zOffset); + } }