fix(codegen): Fixes bulk order deed hue and codegens (#647)
- [X] Codegens some Bulk Order stuff - [X] Fixes deserializing with a class that requires the parent as a constructor argument Closes #641 Closes #623
This commit is contained in:
parent
eb4e3ac070
commit
510d2e006b
32 changed files with 185 additions and 378 deletions
|
|
@ -2,18 +2,15 @@ using System.Collections.Generic;
|
|||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public abstract class BaseBOD : Item
|
||||
[Serializable(1)]
|
||||
public abstract partial class BaseBOD : Item
|
||||
{
|
||||
private int m_AmountMax;
|
||||
private BulkMaterialType m_Material;
|
||||
private bool m_RequireExceptional;
|
||||
|
||||
public BaseBOD(int hue, int amountMax, bool requireExeptional, BulkMaterialType material) : this()
|
||||
{
|
||||
Hue = hue;
|
||||
AmountMax = amountMax;
|
||||
RequireExceptional = requireExeptional;
|
||||
Material = material;
|
||||
_amountMax = amountMax;
|
||||
_requireExceptional = requireExeptional;
|
||||
_material = material;
|
||||
}
|
||||
|
||||
public BaseBOD() : base(Core.AOS ? 0x2258 : 0x14EF)
|
||||
|
|
@ -22,47 +19,22 @@ namespace Server.Engines.BulkOrders
|
|||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public BaseBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public abstract bool Complete { get; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public sealed override int Hue { get; set; }
|
||||
[SerializableField(0)]
|
||||
[InvalidateProperties]
|
||||
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
|
||||
private int _amountMax;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int AmountMax
|
||||
{
|
||||
get => m_AmountMax;
|
||||
set
|
||||
{
|
||||
m_AmountMax = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
[SerializableField(1)]
|
||||
[InvalidateProperties]
|
||||
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
|
||||
private bool _requireExceptional;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool RequireExceptional
|
||||
{
|
||||
get => m_RequireExceptional;
|
||||
set
|
||||
{
|
||||
m_RequireExceptional = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public BulkMaterialType Material
|
||||
{
|
||||
get => m_Material;
|
||||
set
|
||||
{
|
||||
m_Material = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
[SerializableField(1)]
|
||||
[InvalidateProperties]
|
||||
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
|
||||
private BulkMaterialType _material;
|
||||
|
||||
public static BulkMaterialType GetRandomMaterial(BulkMaterialType start, double[] chances)
|
||||
{
|
||||
|
|
@ -141,38 +113,22 @@ namespace Server.Engines.BulkOrders
|
|||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
[AfterDeserialization]
|
||||
private void AfterDeserialization()
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.Write(m_AmountMax);
|
||||
writer.Write(m_RequireExceptional);
|
||||
writer.Write((int)m_Material);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_AmountMax = reader.ReadInt();
|
||||
m_RequireExceptional = reader.ReadBool();
|
||||
m_Material = (BulkMaterialType)reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Parent == null && Map == Map.Internal && Location == Point3D.Zero)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
private void Deserialize(IGenericReader reader, int version)
|
||||
{
|
||||
AmountMax = reader.ReadInt();
|
||||
RequireExceptional = reader.ReadBool();
|
||||
Material = (BulkMaterialType)reader.ReadInt();
|
||||
|
||||
Timer.DelayCall(AfterDeserialization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,14 +6,12 @@ namespace Server.Engines.BulkOrders
|
|||
{
|
||||
RequireExceptional = bod.RequireExceptional;
|
||||
|
||||
if (bod is LargeTailorBOD)
|
||||
DeedType = bod switch
|
||||
{
|
||||
DeedType = BODType.Tailor;
|
||||
}
|
||||
else if (bod is LargeSmithBOD)
|
||||
{
|
||||
DeedType = BODType.Smith;
|
||||
}
|
||||
LargeTailorBOD => BODType.Tailor,
|
||||
LargeSmithBOD => BODType.Smith,
|
||||
_ => DeedType
|
||||
};
|
||||
|
||||
Material = bod.Material;
|
||||
AmountMax = bod.AmountMax;
|
||||
|
|
@ -68,16 +66,12 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
public Item Reconstruct()
|
||||
{
|
||||
LargeBOD bod = null;
|
||||
|
||||
if (DeedType == BODType.Smith)
|
||||
LargeBOD bod = DeedType switch
|
||||
{
|
||||
bod = new LargeSmithBOD(AmountMax, RequireExceptional, Material, ReconstructEntries());
|
||||
}
|
||||
else if (DeedType == BODType.Tailor)
|
||||
{
|
||||
bod = new LargeTailorBOD(AmountMax, RequireExceptional, Material, ReconstructEntries());
|
||||
}
|
||||
BODType.Smith => new LargeSmithBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()),
|
||||
BODType.Tailor => new LargeTailorBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()),
|
||||
_ => null
|
||||
};
|
||||
|
||||
for (var i = 0; bod?.Entries.Length >= i; ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,41 +2,30 @@ using Server.Mobiles;
|
|||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public abstract class LargeBOD : BaseBOD
|
||||
[Serializable(0)]
|
||||
public abstract partial class LargeBOD : BaseBOD
|
||||
{
|
||||
private LargeBulkEntry[] m_Entries;
|
||||
[InvalidateProperties]
|
||||
[SerializableField(0)]
|
||||
private LargeBulkEntry[] _entries;
|
||||
|
||||
public LargeBOD(
|
||||
int hue, int amountMax, bool requireExeptional, BulkMaterialType material, LargeBulkEntry[] entries
|
||||
) : base(hue, amountMax, requireExeptional, material) =>
|
||||
m_Entries = entries;
|
||||
_entries = entries;
|
||||
|
||||
public LargeBOD()
|
||||
{
|
||||
}
|
||||
|
||||
public LargeBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public LargeBulkEntry[] Entries
|
||||
{
|
||||
get => m_Entries;
|
||||
set
|
||||
{
|
||||
m_Entries = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public override bool Complete
|
||||
{
|
||||
get
|
||||
{
|
||||
for (var i = 0; i < m_Entries.Length; ++i)
|
||||
for (var i = 0; i < _entries.Length; ++i)
|
||||
{
|
||||
if (m_Entries[i].Amount < AmountMax)
|
||||
if (_entries[i].Amount < AmountMax)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -66,9 +55,9 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
list.Add(1060656, AmountMax.ToString()); // amount to make: ~1_val~
|
||||
|
||||
for (var i = 0; i < m_Entries.Length; ++i)
|
||||
for (var i = 0; i < _entries.Length; ++i)
|
||||
{
|
||||
list.Add(1060658 + i, "#{0}\t{1}", m_Entries[i].Details.Number, m_Entries[i].Amount); // ~1_val~: ~2_val~
|
||||
list.Add(1060658 + i, "#{0}\t{1}", _entries[i].Details.Number, _entries[i].Amount); // ~1_val~: ~2_val~
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -96,7 +85,7 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
public override void EndCombine(Mobile from, Item item)
|
||||
{
|
||||
if (!(item is SmallBOD small))
|
||||
if (item is not SmallBOD small)
|
||||
{
|
||||
from.SendLocalizedMessage(1045159); // That is not a bulk order.
|
||||
return;
|
||||
|
|
@ -104,11 +93,11 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
LargeBulkEntry entry = null;
|
||||
|
||||
for (var i = 0; i < m_Entries.Length; ++i)
|
||||
for (var i = 0; i < _entries.Length; ++i)
|
||||
{
|
||||
if (m_Entries[i].Details.Type == small.Type)
|
||||
if (_entries[i].Details.Type == small.Type)
|
||||
{
|
||||
entry = m_Entries[i];
|
||||
entry = _entries[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -159,41 +148,5 @@ namespace Server.Engines.BulkOrders
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.Write(m_Entries.Length);
|
||||
|
||||
for (var i = 0; i < m_Entries.Length; ++i)
|
||||
{
|
||||
m_Entries[i].Serialize(writer);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_Entries = new LargeBulkEntry[reader.ReadInt()];
|
||||
|
||||
for (var i = 0; i < m_Entries.Length; ++i)
|
||||
{
|
||||
m_Entries[i] = new LargeBulkEntry(this, reader);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ namespace Server.Engines.BulkOrders
|
|||
Details = details;
|
||||
}
|
||||
|
||||
public LargeBulkEntry(LargeBOD owner, IGenericReader reader)
|
||||
public LargeBulkEntry(IGenericReader reader, LargeBOD owner)
|
||||
{
|
||||
Owner = owner;
|
||||
m_Amount = reader.ReadInt();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class LargeSmithBOD : LargeBOD
|
||||
[Serializable(0, false)]
|
||||
public partial class LargeSmithBOD : LargeBOD
|
||||
{
|
||||
public static double[] m_BlacksmithMaterialChances =
|
||||
{
|
||||
|
|
@ -61,29 +62,11 @@ namespace Server.Engines.BulkOrders
|
|||
{
|
||||
}
|
||||
|
||||
public LargeSmithBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int ComputeFame() => SmithRewardCalculator.Instance.ComputeFame(this);
|
||||
|
||||
public override int ComputeGold() => SmithRewardCalculator.Instance.ComputeGold(this);
|
||||
|
||||
public override RewardGroup GetRewardGroup() =>
|
||||
SmithRewardCalculator.Instance.LookupRewards(SmithRewardCalculator.Instance.ComputePoints(this));
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class LargeTailorBOD : LargeBOD
|
||||
[Serializable(0, false)]
|
||||
public partial class LargeTailorBOD : LargeBOD
|
||||
{
|
||||
public static double[] m_TailoringMaterialChances =
|
||||
{
|
||||
|
|
@ -87,29 +88,11 @@ namespace Server.Engines.BulkOrders
|
|||
{
|
||||
}
|
||||
|
||||
public LargeTailorBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int ComputeFame() => TailorRewardCalculator.Instance.ComputeFame(this);
|
||||
|
||||
public override int ComputeGold() => TailorRewardCalculator.Instance.ComputeGold(this);
|
||||
|
||||
public override RewardGroup GetRewardGroup() =>
|
||||
TailorRewardCalculator.Instance.LookupRewards(TailorRewardCalculator.Instance.ComputePoints(this));
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ using Server.Engines.Craft;
|
|||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class SmallSmithBOD : SmallBOD
|
||||
[Serializable(0, false)]
|
||||
public partial class SmallSmithBOD : SmallBOD
|
||||
{
|
||||
public static double[] m_BlacksmithMaterialChances =
|
||||
{
|
||||
|
|
@ -63,10 +64,6 @@ namespace Server.Engines.BulkOrders
|
|||
{
|
||||
}
|
||||
|
||||
public SmallSmithBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int ComputeFame() => SmithRewardCalculator.Instance.ComputeFame(this);
|
||||
|
||||
public override int ComputeGold() => SmithRewardCalculator.Instance.ComputeGold(this);
|
||||
|
|
@ -165,19 +162,5 @@ namespace Server.Engines.BulkOrders
|
|||
var entry = validEntries.RandomElement();
|
||||
return new SmallSmithBOD(entry, material, amountMax, reqExceptional);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ using Server.Engines.Craft;
|
|||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class SmallTailorBOD : SmallBOD
|
||||
[Serializable(0, false)]
|
||||
public partial class SmallTailorBOD : SmallBOD
|
||||
{
|
||||
public static double[] m_TailoringMaterialChances =
|
||||
{
|
||||
|
|
@ -30,7 +31,6 @@ namespace Server.Engines.BulkOrders
|
|||
return;
|
||||
}
|
||||
|
||||
var hue = 0x483;
|
||||
var amountMax = Utility.RandomList(10, 15, 20);
|
||||
|
||||
var material = useMaterials
|
||||
|
|
@ -40,7 +40,7 @@ namespace Server.Engines.BulkOrders
|
|||
var reqExceptional = Utility.RandomBool() || material == BulkMaterialType.None;
|
||||
var entry = entries.RandomElement();
|
||||
|
||||
Hue = hue;
|
||||
Hue = 0x483;
|
||||
AmountMax = amountMax;
|
||||
Type = entry.Type;
|
||||
Number = entry.Number;
|
||||
|
|
@ -56,10 +56,6 @@ namespace Server.Engines.BulkOrders
|
|||
{
|
||||
}
|
||||
|
||||
public SmallTailorBOD(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int ComputeFame() => TailorRewardCalculator.Instance.ComputeFame(this);
|
||||
|
||||
public override int ComputeGold() => TailorRewardCalculator.Instance.ComputeGold(this);
|
||||
|
|
@ -168,19 +164,5 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue