#region References
using System;
using System.Drawing;
using Server.Accounting;
using Server.Gumps;
using Server.Network;
#endregion
namespace Server
{
public sealed class VirtualCheck : Item
{
public static bool UseEditGump = false;
public override bool IsVirtualItem => true;
public override bool DisplayWeight => false;
public override bool DisplayLootType => false;
public override double DefaultWeight => 0;
public override string DefaultName => "Offer Of Currency";
public EditGump Editor { get; private set; }
private int _Plat;
[CommandProperty(AccessLevel.Administrator)]
public int Plat
{
get => _Plat;
set
{
_Plat = value;
InvalidateProperties();
}
}
private int _Gold;
[CommandProperty(AccessLevel.Administrator)]
public int Gold
{
get => _Gold;
set
{
_Gold = value;
InvalidateProperties();
}
}
public VirtualCheck()
: this(0, 0)
{ }
public VirtualCheck(int plat, int gold)
: base(0x14F0)
{
Plat = plat;
Gold = gold;
Movable = false;
}
public VirtualCheck(Serial serial)
: base(serial)
{ }
public override bool IsAccessibleTo(Mobile check)
{
var c = GetSecureTradeCont();
if (check == null || c == null)
{
return base.IsAccessibleTo(check);
}
return c.RootParent == check && IsChildOf(c);
}
public override void OnDoubleClickSecureTrade(Mobile from)
{
if (UseEditGump && IsAccessibleTo(from))
{
if (Editor == null || Editor.Check == null || Editor.Check.Deleted)
{
Editor = new EditGump(from, this);
Editor.Send();
}
else
{
Editor.Refresh(true);
}
}
else
{
if (Editor != null)
{
Editor.Close();
Editor = null;
}
base.OnDoubleClickSecureTrade(from);
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1060738, String.Format("{0:#,0} platinum, {1:#,0} gold", Plat, Gold)); // value: ~1_val~
}
public void UpdateTrade(Mobile user)
{
var c = GetSecureTradeCont();
if (c == null || c.Trade == null)
{
return;
}
if (user == c.Trade.From.Mobile)
{
c.Trade.UpdateFromCurrency();
}
else if (user == c.Trade.To.Mobile)
{
c.Trade.UpdateToCurrency();
}
c.ClearChecks();
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if (Editor != null)
{
Editor.Close();
Editor = null;
}
}
public override void Serialize(GenericWriter writer)
{ }
public override void Deserialize(GenericReader reader)
{
Delete();
}
public class EditGump : Gump
{
public enum Buttons
{
Close,
Clear,
Accept,
AllPlat,
AllGold
}
private int _Plat, _Gold;
public Mobile User { get; private set; }
public VirtualCheck Check { get; private set; }
public EditGump(Mobile user, VirtualCheck check)
: base(50, 50)
{
User = user;
Check = check;
_Plat = Check.Plat;
_Gold = Check.Gold;
Closable = true;
Disposable = true;
Dragable = true;
Resizable = false;
User.CloseGump(GetType());
CompileLayout();
}
public override void OnServerClose(NetState owner)
{
base.OnServerClose(owner);
if (Check != null && !Check.Deleted)
{
Check.UpdateTrade(User);
}
}
public void Close()
{
User.CloseGump(GetType());
if (Check != null && !Check.Deleted)
{
Check.UpdateTrade(User);
}
else
{
Check = null;
}
}
public void Send()
{
if (Check != null && !Check.Deleted)
{
User.SendGump(this);
}
else
{
Close();
}
}
public void Refresh(bool recompile)
{
if (Check == null || Check.Deleted)
{
Close();
return;
}
if (recompile)
{
CompileLayout();
}
Close();
Send();
}
private void CompileLayout()
{
if (Check == null || Check.Deleted)
{
return;
}
Entries.ForEach(e => e.Parent = null);
Entries.Clear();
AddPage(0);
AddBackground(0, 0, 400, 160, 3500);
// Title
AddImageTiled(25, 35, 350, 3, 96);
AddImage(10, 8, 113);
AddImage(360, 8, 113);
var title = String.Format(
"