Files
abysmal-isle/Scripts/Services/UltimaStore/StoreEntry.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

96 lines
3.6 KiB
C#

using System;
using Server.Items;
namespace Server.Engines.UOStore
{
public class StoreEntry
{
public Type ItemType { get; private set; }
public TextDefinition[] Name { get; private set; }
public int Tooltip { get; private set; }
public int GumpID { get; private set; }
public int ItemID { get; private set; }
public int Hue { get; private set; }
public int Price { get; private set; }
public StoreCategory Category { get; private set; }
public Func<Mobile, StoreEntry, Item> Constructor { get; private set; }
public int Cost { get { return (int)Math.Ceiling(Price * Configuration.CostMultiplier); } }
public StoreEntry(Type itemType, TextDefinition name, int tooltip, int itemID, int gumpID, int hue, int cost, StoreCategory cat, Func<Mobile, StoreEntry, Item> constructor = null)
: this(itemType, new[] { name }, tooltip, itemID, gumpID, hue, cost, cat, constructor)
{ }
public StoreEntry(Type itemType, TextDefinition[] name, int tooltip, int itemID, int gumpID, int hue, int cost, StoreCategory cat, Func<Mobile, StoreEntry, Item> constructor = null)
{
ItemType = itemType;
Name = name;
Tooltip = tooltip;
ItemID = itemID;
GumpID = gumpID;
Hue = hue;
Price = cost;
Category = cat;
Constructor = constructor;
}
public bool Construct(Mobile m, bool test = false)
{
Item item;
if (Constructor != null)
{
item = Constructor(m, this);
}
else
{
item = Activator.CreateInstance(ItemType) as Item;
}
if (item != null)
{
if (item is IAccountRestricted)
{
((IAccountRestricted)item).Account = m.Account.Username;
}
if (m.Backpack == null || !m.Alive || !m.Backpack.TryDropItem(m, item, false))
{
UltimaStore.AddPendingItem(m, item);
// Your purchased will be delivered to you once you free up room in your backpack.
// Your purchased item will be delivered to you once you are resurrected.
m.SendLocalizedMessage(m.Alive ? 1156846 : 1156848);
}
else if (item is IPromotionalToken && ((IPromotionalToken)item).ItemName != null)
{
// A token has been placed in your backpack. Double-click it to redeem your ~1_PROMO~.
m.SendLocalizedMessage(1075248, ((IPromotionalToken)item).ItemName.ToString());
}
else if (item.LabelNumber > 0 || item.Name != null)
{
var name = item.LabelNumber > 0 ? ("#" + item.LabelNumber) : item.Name;
// Your purchase of ~1_ITEM~ has been placed in your backpack.
m.SendLocalizedMessage(1156844, name);
}
else
{
// Your purchased item has been placed in your backpack.
m.SendLocalizedMessage(1156843);
}
if (test)
{
item.Delete();
}
return true;
}
Utility.WriteConsoleColor(ConsoleColor.Red, String.Format("[Ultima Store Warning]: {0} failed to construct.", ItemType.Name));
return false;
}
}
}