625 lines
24 KiB
C#
625 lines
24 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Network;
|
|
using Server.Engines.Quests;
|
|
|
|
namespace Server.Gumps
|
|
{
|
|
[Flags]
|
|
public enum ReforgingOption
|
|
{
|
|
None = 0x00000000,
|
|
Powerful = 0x00000001,
|
|
Structural = 0x00000002,
|
|
Fortified = 0x00000004,
|
|
Fundamental = 0x00000008,
|
|
Integral = 0x00000010,
|
|
GrandArtifice = 0x00000020,
|
|
InspiredArtifice = 0x00000040,
|
|
ExaltedArtifice = 0x00000080,
|
|
SublimeArtifice = 0x00000100,
|
|
|
|
PowerfulAndStructural = Powerful | Structural,
|
|
PowerfulAndFundamental = Powerful | Fundamental,
|
|
StructuralAndFundamental = Structural | Fundamental,
|
|
PowerfulStructuralAndFundamental = PowerfulAndStructural | Fundamental
|
|
}
|
|
|
|
public class RunicReforgingGump : Gump
|
|
{
|
|
private BaseRunicTool m_Tool;
|
|
private Item m_ToReforge;
|
|
private ReforgingOption m_Options;
|
|
private ReforgedPrefix m_Prefix;
|
|
private ReforgedSuffix m_Suffix;
|
|
|
|
private ReforgingContext m_Context;
|
|
|
|
private ReforgingOption[] Options =
|
|
{
|
|
ReforgingOption.Powerful,
|
|
ReforgingOption.Structural,
|
|
ReforgingOption.Fortified,
|
|
ReforgingOption.Fundamental,
|
|
ReforgingOption.Integral,
|
|
ReforgingOption.GrandArtifice,
|
|
ReforgingOption.InspiredArtifice,
|
|
ReforgingOption.ExaltedArtifice,
|
|
ReforgingOption.SublimeArtifice,
|
|
};
|
|
|
|
public RunicReforgingGump(Mobile from, Item toReforge, BaseRunicTool tool)
|
|
: base(100, 100)
|
|
{
|
|
from.CloseGump(typeof(RunicReforgingGump));
|
|
from.CloseGump(typeof(ImbueGump));
|
|
|
|
m_Context = ReforgingContext.GetContext(from);
|
|
|
|
if (!m_Context.Contexts.ContainsKey(tool))
|
|
m_Context.Contexts[tool] = ReforgingOption.None;
|
|
|
|
m_Tool = tool;
|
|
m_ToReforge = toReforge;
|
|
m_Options = m_Context.Contexts[tool];
|
|
|
|
m_Prefix = m_Context.Prefix;
|
|
m_Suffix = m_Context.Suffix;
|
|
|
|
AddBackground(0, 0, 370, 440, 83);
|
|
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1151952", 0x4BB7, false, false); // Runic Crafting Options
|
|
|
|
int buttonHue = 0x4BB2;
|
|
int buttonID = 0x4005;
|
|
int y = 40;
|
|
int idx = 0;
|
|
|
|
for(int i = 0; i < Options.Length; i++)
|
|
{
|
|
ReforgingOption option = Options[i];
|
|
|
|
if ((m_Options & option) != 0)
|
|
{
|
|
if (CanReforge(from, option) && HasMetPrerequisite(option))
|
|
{
|
|
buttonHue = 0x4BB2;
|
|
buttonID = 4006;
|
|
}
|
|
else
|
|
{
|
|
buttonHue = 0x7652;
|
|
buttonID = 4006;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (CanReforge(from, option) && HasMetPrerequisite(option))
|
|
{
|
|
buttonHue = 0x6F7B;
|
|
buttonID = 4005;
|
|
}
|
|
else
|
|
{
|
|
buttonHue = 0x7652;
|
|
buttonID = 4006;
|
|
}
|
|
}
|
|
|
|
if(HasMetPrerequisite(option) && CanReforge(from, option))
|
|
AddButton(15, y, buttonID, buttonID, i + 100, GumpButtonType.Reply, 0);
|
|
|
|
AddHtmlLocalized(55, y, 250, 20, GetCliloc(option), buttonHue, false, false);
|
|
|
|
y += 25;
|
|
idx++;
|
|
}
|
|
|
|
int totalCharges = GetTotalCharges();
|
|
|
|
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
|
{
|
|
AddButton(15, 305, 4005, 4007, 1, GumpButtonType.Reply, 0);
|
|
AddHtmlLocalized(55, 305, 250, 20, 1152087, 0x6F7B, false, false);
|
|
AddHtmlLocalized(190, 305, 250, 20, RunicReforging.GetName((int)m_Prefix), 0x5757, false, false);
|
|
}
|
|
|
|
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
|
{
|
|
AddButton(15, 330, 4005, 4007, 2, GumpButtonType.Reply, 0);
|
|
AddHtmlLocalized(55, 330, 250, 20, 1152088, 0x6F7B, false, false);
|
|
AddHtmlLocalized(190, 330, 250, 20, RunicReforging.GetName((int)m_Suffix), 0x5757, false, false);
|
|
}
|
|
|
|
AddHtmlLocalized(10, 363, 140, 22, 1114514, "#1152078", 0x4BB2, false, false); // CHARGES NEEDED:
|
|
AddLabel(160, 363, 0x113, totalCharges.ToString());
|
|
|
|
AddHtmlLocalized(10, 385, 140, 22, 1114514, "#1152077", 0x6F7B, false, false); // TOOL CHARGES:
|
|
AddLabel(160, 385, 0x44E, m_Tool.UsesRemaining.ToString());
|
|
|
|
AddButton(10, 412, 4017, 4018, 0, GumpButtonType.Reply, 0);
|
|
AddHtmlLocalized(45, 410, 200, 20, 1060675, 0x6F7B, false, false); // CLOSE
|
|
|
|
AddButton(330, 363, 4014, 4016, 3, GumpButtonType.Reply, 0);
|
|
AddHtmlLocalized(190, 363, 135, 22, 1114514, "#1152080", 0x6F7B, false, false); // REFORGE ITEM
|
|
|
|
AddButton(330, 412, 4011, 4013, 4, GumpButtonType.Reply, 0);
|
|
AddHtmlLocalized(185, 412, 140, 18, 1114514, "#1149735", 0x6F7B, false, false); // HELP
|
|
}
|
|
|
|
private bool HasMetPrerequisite(ReforgingOption option)
|
|
{
|
|
switch (option)
|
|
{
|
|
case ReforgingOption.None: return true;
|
|
case ReforgingOption.Powerful: return true;
|
|
case ReforgingOption.Structural: return true;
|
|
case ReforgingOption.Fortified: return (m_Options & ReforgingOption.Structural) != 0;
|
|
case ReforgingOption.Fundamental: return true;
|
|
case ReforgingOption.Integral: return (m_Options & ReforgingOption.Fundamental) != 0;
|
|
case ReforgingOption.GrandArtifice: return true;
|
|
case ReforgingOption.InspiredArtifice: return (m_Options & ReforgingOption.GrandArtifice) != 0;
|
|
case ReforgingOption.ExaltedArtifice: return (m_Options & ReforgingOption.GrandArtifice) != 0;
|
|
case ReforgingOption.SublimeArtifice: return (m_Options & ReforgingOption.ExaltedArtifice) != 0 && (m_Options & ReforgingOption.GrandArtifice) != 0;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private void InvalidatePrerequisite(ReforgingOption option)
|
|
{
|
|
switch (option)
|
|
{
|
|
case ReforgingOption.None:
|
|
case ReforgingOption.Powerful: break;
|
|
case ReforgingOption.Structural:
|
|
if ((m_Options & ReforgingOption.Fortified) != 0)
|
|
m_Options ^= ReforgingOption.Fortified;
|
|
break;
|
|
case ReforgingOption.Fortified: break;
|
|
case ReforgingOption.Fundamental:
|
|
if ((m_Options & ReforgingOption.Integral) != 0)
|
|
m_Options ^= ReforgingOption.Integral;
|
|
break;
|
|
case ReforgingOption.Integral: break;
|
|
case ReforgingOption.GrandArtifice:
|
|
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
|
m_Options ^= ReforgingOption.InspiredArtifice;
|
|
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
|
m_Options ^= ReforgingOption.ExaltedArtifice;
|
|
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
|
m_Options ^= ReforgingOption.SublimeArtifice;
|
|
break;
|
|
case ReforgingOption.InspiredArtifice: break;
|
|
case ReforgingOption.ExaltedArtifice:
|
|
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
|
m_Options ^= ReforgingOption.SublimeArtifice;
|
|
break;
|
|
case ReforgingOption.SublimeArtifice: break;
|
|
}
|
|
}
|
|
|
|
private bool CanReforge(Mobile from, ReforgingOption option)
|
|
{
|
|
double skill = from.Skills[SkillName.Imbuing].Value;
|
|
|
|
switch (option)
|
|
{
|
|
default:
|
|
case ReforgingOption.None:
|
|
case ReforgingOption.Powerful: return skill >= 65.0;
|
|
case ReforgingOption.Structural:
|
|
case ReforgingOption.Fortified: return skill >= 85.0;
|
|
case ReforgingOption.Fundamental:
|
|
case ReforgingOption.Integral: return skill >= 97.0;
|
|
case ReforgingOption.GrandArtifice:
|
|
case ReforgingOption.InspiredArtifice: return skill >= 100.1;
|
|
case ReforgingOption.ExaltedArtifice:
|
|
case ReforgingOption.SublimeArtifice: return skill >= 110.1;
|
|
}
|
|
}
|
|
|
|
private int GetCliloc(ReforgingOption option)
|
|
{
|
|
switch (option)
|
|
{
|
|
default:
|
|
case ReforgingOption.None: return 0;
|
|
case ReforgingOption.Powerful: return 1151954;
|
|
case ReforgingOption.Structural: return 1151955;
|
|
case ReforgingOption.Fortified: return 1151956;
|
|
case ReforgingOption.Fundamental: return 1151957;
|
|
case ReforgingOption.Integral: return 1151958;
|
|
case ReforgingOption.GrandArtifice: return 1151961;
|
|
case ReforgingOption.InspiredArtifice: return 1151962;
|
|
case ReforgingOption.ExaltedArtifice: return 1151963;
|
|
case ReforgingOption.SublimeArtifice: return 1151964;
|
|
}
|
|
}
|
|
|
|
private int GetTotalCharges()
|
|
{
|
|
int count = 1;
|
|
|
|
foreach (var option in Options)
|
|
{
|
|
if ((m_Options & option) != 0)
|
|
count++;
|
|
}
|
|
|
|
return Math.Min(10, count);
|
|
}
|
|
|
|
public override void OnResponse(NetState state, RelayInfo info)
|
|
{
|
|
Mobile from = state.Mobile;
|
|
|
|
if (!BaseTool.CheckAccessible(m_Tool, from, true))
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (info.ButtonID)
|
|
{
|
|
case 0: break;
|
|
case 1: // prefix
|
|
from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, true));
|
|
break;
|
|
case 2: // suffix
|
|
from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, false));
|
|
break;
|
|
case 3: // Reforge Item
|
|
{
|
|
if (!RunicReforging.CanReforge(from, m_ToReforge, m_Tool.CraftSystem))
|
|
{
|
|
return;
|
|
}
|
|
|
|
int totalCharges = GetTotalCharges();
|
|
|
|
if (m_Tool.UsesRemaining >= totalCharges)
|
|
{
|
|
CraftResourceInfo resInfo = CraftResources.GetInfo(m_Tool.Resource);
|
|
|
|
if (resInfo == null)
|
|
return;
|
|
|
|
CraftAttributeInfo attrs = resInfo.AttributeInfo;
|
|
|
|
int min = 10;
|
|
int max = 80;
|
|
|
|
if (min < 10) min = 10;
|
|
if (max > 100) max = 100;
|
|
|
|
int budget = GetBudget();
|
|
|
|
ReforgedPrefix prefix = ReforgedPrefix.None;
|
|
ReforgedSuffix suffix = ReforgedSuffix.None;
|
|
|
|
if ((m_Options & ReforgingOption.GrandArtifice) != 0)
|
|
{
|
|
// choosing name 1
|
|
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
|
{
|
|
prefix = m_Prefix;
|
|
|
|
if (prefix == ReforgedPrefix.None)
|
|
{
|
|
from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again.
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Not choosing name 1 or 2
|
|
if ((m_Options & ReforgingOption.SublimeArtifice) == 0)
|
|
{
|
|
// random prefix AND suffix
|
|
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
|
{
|
|
prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget);
|
|
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
|
}
|
|
else // random prefix OR suffix
|
|
{
|
|
if (0.5 > Utility.RandomDouble())
|
|
{
|
|
prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget);
|
|
}
|
|
else
|
|
{
|
|
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
|
{
|
|
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
|
{
|
|
suffix = m_Suffix;
|
|
|
|
if (suffix == ReforgedSuffix.None)
|
|
{
|
|
from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again.
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
|
budget = Math.Min(800, budget + 50);
|
|
}
|
|
}
|
|
|
|
// 50% chance to switch prefix/suffix around
|
|
if ((prefix != ReforgedPrefix.None || suffix != ReforgedSuffix.None) && 0.5 > Utility.RandomDouble())
|
|
{
|
|
int pre = (int)prefix;
|
|
int suf = (int)suffix;
|
|
|
|
prefix = (ReforgedPrefix)suf;
|
|
suffix = (ReforgedSuffix)pre;
|
|
}
|
|
|
|
RunicReforging.ApplyReforgedProperties(m_ToReforge, prefix, suffix, budget, min, max, RunicReforging.GetPropertyCount(m_Tool), 0, m_Tool, m_Options);
|
|
|
|
OnAfterReforged(m_ToReforge);
|
|
from.SendLocalizedMessage(1152286); // You re-forge the item!
|
|
|
|
from.PlaySound(0x665);
|
|
|
|
m_Tool.UsesRemaining -= totalCharges;
|
|
|
|
if (m_Tool.UsesRemaining <= 0)
|
|
{
|
|
m_Tool.Delete();
|
|
from.SendLocalizedMessage(1044038); // You have worn out your tool!
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 4:
|
|
from.SendGump(new ReforgingHelpGump());
|
|
break;
|
|
default: // Option
|
|
{
|
|
ReforgingOption option = Options[info.ButtonID - 100];
|
|
|
|
if (HasMetPrerequisite(option))
|
|
{
|
|
if ((m_Options & option) == 0)
|
|
{
|
|
m_Options |= option;
|
|
|
|
if (m_Prefix != ReforgedPrefix.None && !RunicReforging.HasSelection((int)m_Prefix, m_ToReforge, m_Tool, m_Options, -1, -1))
|
|
{
|
|
m_Prefix = ReforgedPrefix.None;
|
|
m_Context.Prefix = ReforgedPrefix.None;
|
|
}
|
|
|
|
if (m_Suffix != ReforgedSuffix.None && !RunicReforging.HasSelection((int)m_Suffix, m_ToReforge, m_Tool, m_Options, -1, -1))
|
|
{
|
|
m_Suffix = ReforgedSuffix.None;
|
|
m_Context.Suffix = ReforgedSuffix.None;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Options ^= option;
|
|
InvalidatePrerequisite(option);
|
|
}
|
|
|
|
m_Context.Contexts[m_Tool] = m_Options;
|
|
}
|
|
|
|
from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private int GetBudget()
|
|
{
|
|
int budget;
|
|
|
|
switch (m_Tool.Resource)
|
|
{
|
|
default:
|
|
case CraftResource.DullCopper:
|
|
case CraftResource.ShadowIron:
|
|
case CraftResource.SpinedLeather:
|
|
case CraftResource.OakWood:
|
|
budget = 140; break;
|
|
case CraftResource.Copper:
|
|
case CraftResource.AshWood:
|
|
budget = 350; break;
|
|
case CraftResource.Bronze:
|
|
case CraftResource.YewWood:
|
|
case CraftResource.HornedLeather:
|
|
budget = 500; break;
|
|
case CraftResource.Gold:
|
|
case CraftResource.Agapite:
|
|
case CraftResource.Heartwood:
|
|
case CraftResource.Bloodwood:
|
|
budget = 600; break;
|
|
case CraftResource.Verite:
|
|
case CraftResource.Frostwood:
|
|
case CraftResource.BarbedLeather:
|
|
budget = 700; break;
|
|
case CraftResource.Valorite:
|
|
budget = 750; break;
|
|
}
|
|
|
|
if ((m_Options & ReforgingOption.Powerful) != 0)
|
|
budget += 60;
|
|
|
|
if ((m_Options & ReforgingOption.Structural) != 0)
|
|
budget += 60;
|
|
|
|
if ((m_Options & ReforgingOption.Fundamental) != 0)
|
|
budget += 100;
|
|
|
|
return budget;
|
|
}
|
|
|
|
public void OnAfterReforged(Item item)
|
|
{
|
|
AosAttributes attr = RunicReforging.GetAosAttributes(item);
|
|
NegativeAttributes neg = RunicReforging.GetNegativeAttributes(item);
|
|
|
|
int durability = 0;
|
|
|
|
if (item is BaseWeapon)
|
|
attr = ((BaseWeapon)item).Attributes;
|
|
|
|
else if (item is BaseArmor)
|
|
attr = ((BaseArmor)item).Attributes;
|
|
|
|
if (attr != null && (m_Options & ReforgingOption.Structural) != 0)
|
|
{
|
|
if(neg != null)
|
|
neg.Brittle = 1;
|
|
|
|
if ((m_Options & ReforgingOption.Fortified) != 0)
|
|
durability = 150;
|
|
|
|
if (item is BaseArmor || item is BaseClothing)
|
|
item.Hue = 2500;
|
|
}
|
|
|
|
if ((m_Options & ReforgingOption.Fundamental) != 0)
|
|
{
|
|
if (neg != null)
|
|
neg.NoRepair = 1;
|
|
|
|
durability = (m_Options & ReforgingOption.Integral) != 0 ? 255 : 200;
|
|
|
|
if (item.Hue == 0 && (item is BaseArmor || item is BaseClothing))
|
|
item.Hue = 2500;
|
|
}
|
|
|
|
if (durability > 0 && item is IDurability)
|
|
{
|
|
((IDurability)item).MaxHitPoints = durability;
|
|
((IDurability)item).HitPoints = durability;
|
|
}
|
|
|
|
RunicReforging.ApplyItemPower(item, true);
|
|
}
|
|
|
|
public class ItemNameGump : Gump
|
|
{
|
|
private BaseRunicTool m_Tool;
|
|
private Item m_ToReforge;
|
|
private ReforgingOption m_Options;
|
|
private ReforgedPrefix m_Prefix;
|
|
private ReforgedSuffix m_Suffix;
|
|
private bool m_IsPrefix;
|
|
|
|
private static int White = 0x6F7B;
|
|
private static int Green = 0x4BB2;
|
|
private static int Yellow = 0x6B55;
|
|
|
|
public ItemNameGump(Item toreforge, BaseRunicTool tool, ReforgingOption options, ReforgedPrefix prefix, ReforgedSuffix suffix, bool isprefix)
|
|
: base(100, 100)
|
|
{
|
|
m_Tool = tool;
|
|
m_ToReforge = toreforge;
|
|
m_Options = options;
|
|
m_Prefix = prefix;
|
|
m_Suffix = suffix;
|
|
m_IsPrefix = isprefix;
|
|
|
|
AddBackground(0, 0, 370, 440, 83);
|
|
|
|
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1152089", 0x4BB7, false, false); // Runic Crafting - Item Name Selection
|
|
|
|
int buttonID = 4005;
|
|
int buttonHue = 0x4BB2;
|
|
int y = 50;
|
|
|
|
foreach (int i in Enum.GetValues(typeof(ReforgedPrefix)))
|
|
{
|
|
if (i == 0)
|
|
continue;
|
|
|
|
if ((isprefix && prefix == (ReforgedPrefix)i) || (!isprefix && suffix == (ReforgedSuffix)i))
|
|
{
|
|
buttonID = 4006;
|
|
buttonHue = Green;
|
|
}
|
|
else
|
|
{
|
|
buttonID = 4005;
|
|
buttonHue = White;
|
|
}
|
|
|
|
if (RunicReforging.HasSelection(i, toreforge, tool, m_Options, (int)m_Prefix, (int)m_Suffix))
|
|
{
|
|
AddButton(15, y, buttonID, buttonID, 100 + i, GumpButtonType.Reply, 0);
|
|
}
|
|
else
|
|
{
|
|
buttonHue = Yellow;
|
|
}
|
|
|
|
AddHtmlLocalized(55, y, 250, 20, RunicReforging.GetName(i), buttonHue, false, false);
|
|
|
|
y += 25;
|
|
}
|
|
|
|
AddHtmlLocalized(45, 412, 100, 20, 1060675, White, false, false);
|
|
AddButton(10, 412, 4017, 4019, 0, GumpButtonType.Reply, 0);
|
|
}
|
|
|
|
public override void OnResponse(NetState state, RelayInfo info)
|
|
{
|
|
Mobile from = state.Mobile;
|
|
|
|
if (info.ButtonID == 0)
|
|
return;
|
|
|
|
int index = info.ButtonID - 100;
|
|
|
|
if (index >= 0 && index <= 12 && RunicReforging.HasSelection(index, m_ToReforge, m_Tool, m_Options, (int)m_Prefix, (int)m_Suffix))
|
|
{
|
|
var context = ReforgingContext.GetContext(from);
|
|
|
|
if (m_IsPrefix)
|
|
{
|
|
context.Prefix = (ReforgedPrefix)index;
|
|
m_Prefix = (ReforgedPrefix)index;
|
|
}
|
|
else
|
|
{
|
|
context.Suffix = (ReforgedSuffix)index;
|
|
m_Suffix = (ReforgedSuffix)index;
|
|
}
|
|
}
|
|
|
|
from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool));
|
|
}
|
|
}
|
|
|
|
private class ReforgingHelpGump : Gump
|
|
{
|
|
public ReforgingHelpGump()
|
|
: base(100, 100)
|
|
{
|
|
AddBackground(0, 0, 370, 440, 83);
|
|
|
|
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1151966", 0x4BB7, false, false); // Runc Crafting Help
|
|
AddHtmlLocalized(10, 40, 353, 365, 1151965, 0xFFE0, false, true);
|
|
|
|
AddHtmlLocalized(45, 412, 100, 20, 1060675, 0x6F7B, false, false);
|
|
AddButton(10, 412, 4017, 4019, 0, GumpButtonType.Reply, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|