Files
abysmal-isle/Scripts/Services/New Magincia/Distillation/Items/LiquorBarrel.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

214 lines
8.0 KiB
C#

using Server;
using System;
using Server.Engines.Distillation;
using Server.Mobiles;
using Server.Engines.Craft;
namespace Server.Items
{
public class LiquorBarrel : Item, ICraftable
{
private Liquor m_Liquor;
private DateTime m_MaturationBegin;
private TimeSpan m_MaturationDuration;
private string m_Label;
private bool m_IsStrong;
private int m_UsesRemaining;
private bool m_Exceptional;
private Mobile m_Crafter;
private Mobile m_Distiller;
[CommandProperty(AccessLevel.GameMaster)]
public Liquor Liquor { get { return m_Liquor; } set { BeginDistillation(value); InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public DateTime MaturationBegin { get { return m_MaturationBegin; } set { m_MaturationBegin = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan MutrationDuration { get { return m_MaturationDuration; } }
[CommandProperty(AccessLevel.GameMaster)]
public string Label { get { return m_Label; } set { m_Label = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public bool IsStrong { get { return m_IsStrong; } set { m_IsStrong = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public bool Exceptional { get { return m_Exceptional; } set { m_Exceptional = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Crafter { get { return m_Crafter; } set { m_Crafter = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Distiller { get { return m_Distiller; } set { m_Distiller = value; InvalidateProperties(); } }
[CommandProperty(AccessLevel.GameMaster)]
public virtual bool IsMature { get { return m_Liquor != Liquor.None && (m_MaturationDuration == TimeSpan.MinValue || m_MaturationBegin + m_MaturationDuration < DateTime.UtcNow); } }
[CommandProperty(AccessLevel.GameMaster)]
public bool IsEmpty { get { return m_Liquor == Liquor.None; } }
public override int LabelNumber { get { return m_UsesRemaining == 0 || m_Liquor == Liquor.None ? 1150816 : 1150807; } } // liquor barrel
public override double DefaultWeight { get { return 5.0; } }
[Constructable]
public LiquorBarrel()
: base(4014)
{
m_Liquor = Liquor.None;
m_UsesRemaining = 0;
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack) && m_UsesRemaining > 0)
{
if (IsMature)
{
BottleOfLiquor bottle = new BottleOfLiquor(m_Liquor, m_Label, m_IsStrong, m_Distiller);
if (from.Backpack == null || !from.Backpack.TryDropItem(from, bottle, false))
{
bottle.Delete();
from.SendLocalizedMessage(500720); // You don't have enough room in your backpack!
}
else
{
from.PlaySound(0x240);
from.SendMessage("You pour the liquior into a bottle and place it in your backpack.");
m_UsesRemaining--;
}
}
else
{
from.SendLocalizedMessage(1150806); // You need to wait until the liquor in the barrel has matured.
if (DateTime.UtcNow < m_MaturationBegin + m_MaturationDuration)
{
TimeSpan remaining = (m_MaturationBegin + m_MaturationDuration) - DateTime.UtcNow;
if (remaining.TotalDays > 0)
from.SendLocalizedMessage(1150814, String.Format("{0}\t{1}", remaining.Days.ToString(), remaining.Hours.ToString()));
else
from.SendLocalizedMessage(1150813, remaining.TotalHours.ToString());
}
}
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Crafter != null)
list.Add(1050043, m_Crafter.Name); // Crafted By: ~1_Name~
if (m_Exceptional)
list.Add(1018303); // Exceptional
if (!IsEmpty)
{
if (IsMature)
list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
list.Add(1150805, m_MaturationBegin.ToShortDateString()); // start date: ~1_NAME~
int cliloc = IsMature ? 1150804 : 1150812; // maturing: ~1_NAME~ / // matured: ~1_NAME~
if (m_Label == null)
list.Add(cliloc, String.Format("#{0}", DistillationSystem.GetLabel(m_Liquor, m_IsStrong)));
else
list.Add(cliloc, m_Label);
list.Add(1150454, String.Format("#{0}", DistillationSystem.GetLabel(m_Liquor, m_IsStrong))); // Liquor Type: ~1_TYPE~
if (m_Distiller != null)
list.Add(1150679, m_Distiller.Name); // Distiller: ~1_NAME~
}
}
public void BeginDistillation(Liquor liquor)
{
TimeSpan ts;
if (liquor == Liquor.Spirytus || liquor == Liquor.Akvavit)
ts = TimeSpan.MinValue;
else
ts = DistillationSystem.MaturationPeriod;
BeginDistillation(liquor, ts, m_Label, m_IsStrong, m_Distiller);
}
public void BeginDistillation(Liquor liquor, TimeSpan duration, string label, bool isStrong, Mobile distiller)
{
m_Liquor = liquor;
m_MaturationDuration = duration;
m_Label = label;
m_IsStrong = isStrong;
m_Distiller = distiller;
m_MaturationBegin = DateTime.UtcNow;
m_UsesRemaining = m_Exceptional ? 20 : 10;
InvalidateProperties();
}
public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, ITool tool, CraftItem craftItem, int resHue)
{
if (quality >= 2)
{
m_Exceptional = true;
if (makersMark)
m_Crafter = from;
}
if (typeRes == null)
typeRes = craftItem.Resources.GetAt(0).ItemType;
CraftResource resource = CraftResources.GetFromType(typeRes);
Hue = CraftResources.GetHue(resource);
return quality;
}
public LiquorBarrel(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
writer.Write((int)m_Liquor);
writer.Write(m_MaturationBegin);
writer.Write(m_MaturationDuration);
writer.Write(m_Label);
writer.Write(m_IsStrong);
writer.Write(m_UsesRemaining);
writer.Write(m_Exceptional);
writer.Write(m_Crafter);
writer.Write(m_Distiller);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Liquor = (Liquor)reader.ReadInt();
m_MaturationBegin = reader.ReadDateTime();
m_MaturationDuration = reader.ReadTimeSpan();
m_Label = reader.ReadString();
m_IsStrong = reader.ReadBool();
m_UsesRemaining = reader.ReadInt();
m_Exceptional = reader.ReadBool();
m_Crafter = reader.ReadMobile();
m_Distiller = reader.ReadMobile();
}
}
}