281 lines
5.8 KiB
C#
281 lines
5.8 KiB
C#
#region References
|
|
using System;
|
|
using System.Collections;
|
|
|
|
using Server;
|
|
using Server.Gumps;
|
|
using Server.Network;
|
|
#endregion
|
|
|
|
namespace Knives.TownHouses
|
|
{
|
|
public delegate void GumpStateCallback(object obj);
|
|
|
|
public delegate void GumpCallback();
|
|
|
|
public abstract class GumpPlusLight : Gump
|
|
{
|
|
public static void RefreshGump(Mobile m, Type type)
|
|
{
|
|
if (m.NetState == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach (var g in m.NetState.Gumps)
|
|
{
|
|
if (g is GumpPlusLight && g.GetType() == type)
|
|
{
|
|
m.CloseGump(type);
|
|
((GumpPlusLight)g).NewGump();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private readonly Mobile c_Owner;
|
|
private readonly Hashtable c_Buttons;
|
|
private readonly Hashtable c_Fields;
|
|
|
|
public Mobile Owner { get { return c_Owner; } }
|
|
|
|
public GumpPlusLight(Mobile m, int x, int y)
|
|
: base(x, y)
|
|
{
|
|
c_Owner = m;
|
|
|
|
c_Buttons = new Hashtable();
|
|
c_Fields = new Hashtable();
|
|
|
|
Timer.DelayCall(TimeSpan.FromSeconds(0), NewGump);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
Entries.Clear();
|
|
c_Buttons.Clear();
|
|
c_Fields.Clear();
|
|
}
|
|
|
|
public virtual void NewGump()
|
|
{
|
|
NewGump(true);
|
|
}
|
|
|
|
public void NewGump(bool clear)
|
|
{
|
|
if (clear)
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
BuildGump();
|
|
|
|
c_Owner.SendGump(this);
|
|
}
|
|
|
|
public void SameGump()
|
|
{
|
|
c_Owner.SendGump(this);
|
|
}
|
|
|
|
protected abstract void BuildGump();
|
|
|
|
private int UniqueButton()
|
|
{
|
|
var random = 0;
|
|
|
|
do
|
|
{
|
|
random = Utility.Random(20000);
|
|
}
|
|
while (c_Buttons[random] != null);
|
|
|
|
return random;
|
|
}
|
|
|
|
private int UniqueTextId()
|
|
{
|
|
var random = 0;
|
|
|
|
do
|
|
{
|
|
random = Utility.Random(20000);
|
|
}
|
|
while (c_Buttons[random] != null);
|
|
|
|
return random;
|
|
}
|
|
|
|
public void AddBackgroundZero(int x, int y, int width, int height, int back)
|
|
{
|
|
AddBackgroundZero(x, y, width, height, back, true);
|
|
}
|
|
|
|
public void AddBackgroundZero(int x, int y, int width, int height, int back, bool over)
|
|
{
|
|
var plus = new BackgroundPlus(x, y, width, height, back, over);
|
|
|
|
Entries.Insert(0, plus);
|
|
}
|
|
|
|
public new void AddBackground(int x, int y, int width, int height, int back)
|
|
{
|
|
AddBackground(x, y, width, height, back, true);
|
|
}
|
|
|
|
public void AddBackground(int x, int y, int width, int height, int back, bool over)
|
|
{
|
|
var plus = new BackgroundPlus(x, y, width, height, back, over);
|
|
|
|
Add(plus);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int id, GumpCallback callback)
|
|
{
|
|
AddButton(x, y, id, id, "None", callback);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int id, GumpStateCallback callback, object arg)
|
|
{
|
|
AddButton(x, y, id, id, "None", callback, arg);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int id, string name, GumpCallback callback)
|
|
{
|
|
AddButton(x, y, id, id, name, callback);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int id, string name, GumpStateCallback callback, object arg)
|
|
{
|
|
AddButton(x, y, id, id, name, callback, arg);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int up, int down, GumpCallback callback)
|
|
{
|
|
AddButton(x, y, up, down, "None", callback);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int up, int down, string name, GumpCallback callback)
|
|
{
|
|
var id = UniqueButton();
|
|
|
|
var button = new ButtonPlus(x, y, up, down, id, name, callback);
|
|
|
|
Add(button);
|
|
|
|
c_Buttons[id] = button;
|
|
}
|
|
|
|
public void AddButton(int x, int y, int up, int down, GumpStateCallback callback, object arg)
|
|
{
|
|
AddButton(x, y, up, down, "None", callback, arg);
|
|
}
|
|
|
|
public void AddButton(int x, int y, int up, int down, string name, GumpStateCallback callback, object arg)
|
|
{
|
|
var id = UniqueButton();
|
|
|
|
var button = new ButtonPlus(x, y, up, down, id, name, callback, arg);
|
|
|
|
Add(button);
|
|
|
|
c_Buttons[id] = button;
|
|
}
|
|
|
|
public void AddHtml(int x, int y, int width, string text)
|
|
{
|
|
AddHtml(x, y, width, 21, HTML.White + text, false, false, true);
|
|
}
|
|
|
|
public void AddHtml(int x, int y, int width, string text, bool over)
|
|
{
|
|
AddHtml(x, y, width, 21, HTML.White + text, false, false, over);
|
|
}
|
|
|
|
public new void AddHtml(int x, int y, int width, int height, string text, bool back, bool scroll)
|
|
{
|
|
AddHtml(x, y, width, height, HTML.White + text, back, scroll, true);
|
|
}
|
|
|
|
public void AddHtml(int x, int y, int width, int height, string text, bool back, bool scroll, bool over)
|
|
{
|
|
var html = new HtmlPlus(x, y, width, height, HTML.White + text, back, scroll, over);
|
|
|
|
Add(html);
|
|
}
|
|
|
|
public void AddTextField(int x, int y, int width, int height, int color, int back, string name, string text)
|
|
{
|
|
var id = UniqueTextId();
|
|
|
|
AddImageTiled(x, y, width, height, back);
|
|
AddTextEntry(x, y, width, height, color, id, text);
|
|
|
|
c_Fields[id] = name;
|
|
c_Fields[name] = text;
|
|
}
|
|
|
|
public string GetTextField(string name)
|
|
{
|
|
if (c_Fields[name] == null)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
return c_Fields[name].ToString();
|
|
}
|
|
|
|
public int GetTextFieldInt(string name)
|
|
{
|
|
return Utility.ToInt32(GetTextField(name));
|
|
}
|
|
|
|
protected virtual void OnClose()
|
|
{ }
|
|
|
|
public override void OnResponse(NetState state, RelayInfo info)
|
|
{
|
|
var name = "";
|
|
|
|
try
|
|
{
|
|
if (info.ButtonID == -5)
|
|
{
|
|
NewGump();
|
|
return;
|
|
}
|
|
|
|
foreach (var t in info.TextEntries)
|
|
{
|
|
c_Fields[c_Fields[t.EntryID].ToString()] = t.Text;
|
|
}
|
|
|
|
if (info.ButtonID == 0)
|
|
{
|
|
OnClose();
|
|
}
|
|
|
|
if (c_Buttons[info.ButtonID] == null || !(c_Buttons[info.ButtonID] is ButtonPlus))
|
|
{
|
|
return;
|
|
}
|
|
|
|
name = ((ButtonPlus)c_Buttons[info.ButtonID]).Name;
|
|
|
|
((ButtonPlus)c_Buttons[info.ButtonID]).Invoke();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Errors.Report("An error occured during a gump response. More information can be found on the console.");
|
|
if (name != "")
|
|
{
|
|
Console.WriteLine("{0} gump name triggered an error.", name);
|
|
}
|
|
Console.WriteLine(e.Message);
|
|
Console.WriteLine(e.Source);
|
|
Console.WriteLine(e.StackTrace);
|
|
}
|
|
}
|
|
}
|
|
} |