Files
abysmal-isle/Scripts/Services/BulkOrders/Books/BOBLargeEntry.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

179 lines
5.5 KiB
C#

using System;
using Server.Items;
namespace Server.Engines.BulkOrders
{
public class BOBLargeEntry
{
private readonly bool m_RequireExceptional;
private readonly BODType m_DeedType;
private readonly BulkMaterialType m_Material;
private readonly int m_AmountMax;
private readonly BOBLargeSubEntry[] m_Entries;
private int m_Price;
private GemType m_GemType;
public BOBLargeEntry(LargeBOD bod)
{
m_RequireExceptional = bod.RequireExceptional;
m_DeedType = bod.BODType;
m_Material = bod.Material;
m_AmountMax = bod.AmountMax;
m_Entries = new BOBLargeSubEntry[bod.Entries.Length];
for (int i = 0; i < m_Entries.Length; ++i)
m_Entries[i] = new BOBLargeSubEntry(bod.Entries[i]);
if (bod is LargeTinkerBOD)
{
m_GemType = ((LargeTinkerBOD)bod).GemType;
}
}
public BOBLargeEntry(GenericReader reader)
{
int version = reader.ReadEncodedInt();
switch ( version )
{
case 1:
{
m_GemType = (GemType)reader.ReadInt();
goto case 0;
}
case 0:
{
m_RequireExceptional = reader.ReadBool();
m_DeedType = (BODType)reader.ReadEncodedInt();
m_Material = (BulkMaterialType)reader.ReadEncodedInt();
m_AmountMax = reader.ReadEncodedInt();
m_Price = reader.ReadEncodedInt();
m_Entries = new BOBLargeSubEntry[reader.ReadEncodedInt()];
for (int i = 0; i < m_Entries.Length; ++i)
m_Entries[i] = new BOBLargeSubEntry(reader);
break;
}
}
}
public bool RequireExceptional
{
get
{
return m_RequireExceptional;
}
}
public BODType DeedType
{
get
{
return m_DeedType;
}
}
public BulkMaterialType Material
{
get
{
return m_Material;
}
}
public int AmountMax
{
get
{
return m_AmountMax;
}
}
public int Price
{
get
{
return m_Price;
}
set
{
m_Price = value;
}
}
public GemType GemType
{
get
{
return m_GemType;
}
set
{
m_GemType = value;
}
}
public BOBLargeSubEntry[] Entries
{
get
{
return m_Entries;
}
}
public Item Reconstruct()
{
LargeBOD bod = null;
switch (m_DeedType)
{
case BODType.Smith: bod = new LargeSmithBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Tailor: bod = new LargeTailorBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Inscription: bod = new LargeInscriptionBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Alchemy: bod = new LargeAlchemyBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Carpentry: bod = new LargeCarpentryBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Fletching: bod = new LargeFletchingBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
case BODType.Tinkering: bod = new LargeTinkerBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries(), m_GemType); break;
case BODType.Cooking: bod = new LargeCookingBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
}
for (int i = 0; bod != null && i < bod.Entries.Length; ++i)
bod.Entries[i].Owner = bod;
return bod;
}
public void Serialize(GenericWriter writer)
{
writer.WriteEncodedInt(1); // version
writer.Write((int)m_GemType);
writer.Write((bool)m_RequireExceptional);
writer.WriteEncodedInt((int)m_DeedType);
writer.WriteEncodedInt((int)m_Material);
writer.WriteEncodedInt((int)m_AmountMax);
writer.WriteEncodedInt((int)m_Price);
writer.WriteEncodedInt((int)m_Entries.Length);
for (int i = 0; i < m_Entries.Length; ++i)
m_Entries[i].Serialize(writer);
}
private LargeBulkEntry[] ReconstructEntries()
{
LargeBulkEntry[] entries = new LargeBulkEntry[m_Entries.Length];
for (int i = 0; i < m_Entries.Length; ++i)
{
entries[i] = new LargeBulkEntry(null, new SmallBulkEntry(m_Entries[i].ItemType, m_Entries[i].Number, m_Entries[i].Graphic, m_Entries[i].Hue));
entries[i].Amount = m_Entries[i].AmountCur;
}
return entries;
}
}
}