Files
abysmal-isle/Scripts/Misc/TextDefinition.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

209 lines
5.6 KiB
C#

using System;
using System.Globalization;
using Server.Gumps;
namespace Server
{
[Parsable]
public class TextDefinition
{
private readonly int m_Number;
private readonly string m_String;
public TextDefinition()
: this(0, null)
{
}
public TextDefinition(int number)
: this(number, null)
{
}
public TextDefinition(string text)
: this(0, text)
{
}
public TextDefinition(int number, string text)
{
this.m_Number = number;
this.m_String = text;
}
public int Number
{
get
{
return this.m_Number;
}
}
public string String
{
get
{
return this.m_String;
}
}
public static void Serialize(GenericWriter writer, TextDefinition def)
{
if (def == null)
{
writer.WriteEncodedInt(3);
}
else if (def.m_Number > 0)
{
writer.WriteEncodedInt(1);
writer.WriteEncodedInt(def.m_Number);
}
else if (def.m_String != null)
{
writer.WriteEncodedInt(2);
writer.Write(def.m_String);
}
else
{
writer.WriteEncodedInt(0);
}
}
public static TextDefinition Deserialize(GenericReader reader)
{
int type = reader.ReadEncodedInt();
switch ( type )
{
case 0:
return new TextDefinition();
case 1:
return new TextDefinition(reader.ReadEncodedInt());
case 2:
return new TextDefinition(reader.ReadString());
}
return null;
}
public static void AddTo(ObjectPropertyList list, TextDefinition def)
{
if (def == null)
return;
if (def.m_Number > 0)
list.Add(def.m_Number);
else if (def.m_String != null)
list.Add(def.m_String);
}
public static void AddHtmlText(Gump g, int x, int y, int width, int height, TextDefinition def, bool back, bool scroll, int numberColor, int stringColor)
{
if (def == null)
return;
if (def.m_Number > 0)
{
if (numberColor >= 0)
g.AddHtmlLocalized(x, y, width, height, def.m_Number, numberColor, back, scroll);
else
g.AddHtmlLocalized(x, y, width, height, def.m_Number, back, scroll);
}
else if (def.m_String != null)
{
if (stringColor >= 0)
g.AddHtml(x, y, width, height, String.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", stringColor, def.m_String), back, scroll);
else
g.AddHtml(x, y, width, height, def.m_String, back, scroll);
}
}
public static void AddHtmlText(Gump g, int x, int y, int width, int height, TextDefinition def, bool back, bool scroll)
{
AddHtmlText(g, x, y, width, height, def, back, scroll, -1, -1);
}
public static void SendMessageTo(Mobile m, TextDefinition def)
{
if (def == null)
return;
if (def.m_Number > 0)
m.SendLocalizedMessage(def.m_Number);
else if (def.m_String != null)
m.SendMessage(def.m_String);
}
public static TextDefinition Parse(string value)
{
if (value == null)
return null;
int i;
bool isInteger;
if (value.StartsWith("0x"))
isInteger = int.TryParse(value.Substring(2), NumberStyles.HexNumber, null, out i);
else
isInteger = int.TryParse(value, out i);
if (isInteger)
return new TextDefinition(i);
else
return new TextDefinition(value);
}
public override string ToString()
{
if (this.m_Number > 0)
return String.Concat("#", this.m_Number.ToString());
else if (this.m_String != null)
return this.m_String;
return "";
}
public string Format(bool propsGump)
{
if (this.m_Number > 0)
return String.Format("{0} (0x{0:X})", this.m_Number);
else if (this.m_String != null)
return String.Format("\"{0}\"", this.m_String);
return propsGump ? "-empty-" : "empty";
}
public string GetValue()
{
if (this.m_Number > 0)
return this.m_Number.ToString();
else if (this.m_String != null)
return this.m_String;
return "";
}
public static implicit operator TextDefinition(int v)
{
return new TextDefinition(v);
}
public static implicit operator TextDefinition(string s)
{
return new TextDefinition(s);
}
public static implicit operator int(TextDefinition m)
{
if (m == null)
return 0;
return m.m_Number;
}
public static implicit operator string(TextDefinition m)
{
if (m == null)
return null;
return m.m_String;
}
}
}