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,212 @@
using System;
using System.Collections.Generic;
using Server.Multis;
using Server.Accounting;
namespace Server.Mobiles
{
public class VendorInventory
{
public static readonly TimeSpan GracePeriod = TimeSpan.FromDays(7.0);
private readonly List<Item> m_Items;
private readonly DateTime m_ExpireTime;
private readonly Timer m_ExpireTimer;
private BaseHouse m_House;
private string m_VendorName;
private string m_ShopName;
private Mobile m_Owner;
private int m_Gold;
public VendorInventory(BaseHouse house, Mobile owner, string vendorName, string shopName)
{
m_House = house;
m_Owner = owner;
m_VendorName = vendorName;
m_ShopName = shopName;
m_Items = new List<Item>();
m_ExpireTime = DateTime.UtcNow + GracePeriod;
m_ExpireTimer = new ExpireTimer(this, GracePeriod);
m_ExpireTimer.Start();
}
public VendorInventory(BaseHouse house, GenericReader reader)
{
m_House = house;
int version = reader.ReadEncodedInt();
m_Owner = reader.ReadMobile();
m_VendorName = reader.ReadString();
m_ShopName = reader.ReadString();
m_Items = reader.ReadStrongItemList();
m_Gold = reader.ReadInt();
m_ExpireTime = reader.ReadDeltaTime();
if (m_Items.Count == 0 && m_Gold == 0)
{
Timer.DelayCall(TimeSpan.Zero, new TimerCallback(Delete));
}
else
{
TimeSpan delay = m_ExpireTime - DateTime.UtcNow;
m_ExpireTimer = new ExpireTimer(this, delay > TimeSpan.Zero ? delay : TimeSpan.Zero);
m_ExpireTimer.Start();
}
}
public BaseHouse House
{
get
{
return m_House;
}
set
{
m_House = value;
}
}
public string VendorName
{
get
{
return m_VendorName;
}
set
{
m_VendorName = value;
}
}
public string ShopName
{
get
{
return m_ShopName;
}
set
{
m_ShopName = value;
}
}
public Mobile Owner
{
get
{
return m_Owner;
}
set
{
m_Owner = value;
}
}
public List<Item> Items
{
get
{
return m_Items;
}
}
public int Gold
{
get
{
return m_Gold;
}
set
{
m_Gold = value;
}
}
public DateTime ExpireTime
{
get
{
return m_ExpireTime;
}
}
public void AddItem(Item item)
{
item.Internalize();
m_Items.Add(item);
}
public void Delete()
{
foreach (Item item in Items)
{
item.Delete();
}
Items.Clear();
Gold = 0;
if (House != null)
House.VendorInventories.Remove(this);
m_ExpireTimer.Stop();
}
public void Serialize(GenericWriter writer)
{
writer.WriteEncodedInt(0); // version
writer.Write((Mobile)m_Owner);
writer.Write((string)m_VendorName);
writer.Write((string)m_ShopName);
writer.Write(m_Items, true);
writer.Write((int)m_Gold);
writer.WriteDeltaTime(m_ExpireTime);
}
private class ExpireTimer : Timer
{
private readonly VendorInventory m_Inventory;
public ExpireTimer(VendorInventory inventory, TimeSpan delay)
: base(delay)
{
m_Inventory = inventory;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
BaseHouse house = m_Inventory.House;
if (house != null)
{
if (m_Inventory.Gold > 0)
{
if (AccountGold.Enabled && m_Inventory.Owner != null)
{
Banker.Deposit(house.Owner, m_Inventory.Gold, true);
}
else
{
if (house.MovingCrate == null)
house.MovingCrate = new MovingCrate(house);
Banker.Deposit(house.MovingCrate, m_Inventory.Gold);
}
}
foreach (Item item in m_Inventory.Items)
{
if (!item.Deleted)
house.DropToMovingCrate(item);
}
m_Inventory.Gold = 0;
m_Inventory.Items.Clear();
}
m_Inventory.Delete();
}
}
}
}