Files
abysmal-isle/Scripts/Mobiles/NPCs/Mannequin/Gumps.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

367 lines
13 KiB
C#

using System;
using Server.Mobiles;
using System.Linq;
using System.Collections.Generic;
using Server.Network;
namespace Server.Gumps
{
public class MannequinCompareGump : Gump
{
private readonly Item _SameItem;
public MannequinCompareGump(Mannequin mann, Item item)
: base(100, 100)
{
_SameItem = mann.Items.Where(x => mann.LayerValidation(x, item)).FirstOrDefault();
if (_SameItem == null)
return;
AddPage(0);
AddBackground(0, 0, 560, 720, 0x6DB);
AddImageTiled(270, 5, 6, 710, 0x6DE);
AddHtmlLocalized(5, 5, 270, 18, 1114513, "#1159291", 0x42FF, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
AddAlphaRegion(5, 5, 550, 710);
AddHtmlLocalized(0, 23, 270, 18, 1114513, string.Format("#{0}", _SameItem.LabelNumber), 0x7FFF, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
AddImageTiled(4, 80, 550, 5, 0x6DC);
List<ValuedProperty> EquipmentItem = Mannequin.FindItemProperty(_SameItem);
int si = 0;
for (int i = 0; i < EquipmentItem.Count; i++)
{
if (EquipmentItem[i].LabelNumber == 1159280) // Medable Armor - not appear
continue;
if (EquipmentItem[i].IsSpriteGraph)
{
AddSpriteImage(5 + (35 * si), 41, 0x9D3B, EquipmentItem[i].SpriteW, EquipmentItem[i].SpriteH, 30, 30);
AddTooltip(EquipmentItem[i].LabelNumber);
si++;
}
else
{
AddHtmlLocalized(45, 94 + (18 * i), 140, 18, EquipmentItem[i].LabelNumber, EquipmentItem[i].Hue, false, false);
AddTooltip(EquipmentItem[i].Description);
if (!EquipmentItem[i].IsBoolen)
AddHtml(190, 94 + (18 * i), 100, 18, Color(EquipmentItem[i].Value, EquipmentItem[i].Cap), false, false);
}
}
AddHtmlLocalized(270, 23, 270, 18, 1114513, string.Format("#{0}", item.LabelNumber), 0x7FFF, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
List<ValuedProperty> SelectItem = Mannequin.FindItemProperty(item);
si = 0;
for (int i = 0; i < SelectItem.Count; i++)
{
if (SelectItem[i].LabelNumber == 1159280) // Medable Armor - not appear
continue;
if (SelectItem[i].IsSpriteGraph)
{
AddSpriteImage(275 + (35 * si), 41, 0x9D3B, SelectItem[i].SpriteW, SelectItem[i].SpriteH, 30, 30);
AddTooltip(SelectItem[i].LabelNumber);
si++;
}
else
{
AddHtmlLocalized(315, 94 + (18 * i), 140, 18, SelectItem[i].LabelNumber, SelectItem[i].Hue, false, false);
AddTooltip(SelectItem[i].Description);
if (!SelectItem[i].IsBoolen)
{
double ev = 0;
if (EquipmentItem.Any(a => a.LabelNumber == SelectItem[i].LabelNumber))
{
ev = EquipmentItem.Find(a => a.LabelNumber == SelectItem[i].LabelNumber).Value;
}
AddHtml(460, 94 + (18 * i), 100, 18, Color(SelectItem[i].Value, SelectItem[i].Cap, ev), false, false);
}
}
}
}
public string Color(double v1, double v2, double ev = 0)
{
string name;
double diffv = v1 - ev;
if (v2 == 0)
{
if (v1 == diffv || diffv == 0)
{
name = string.Format("<BASEFONT COLOR=#FFFFFF>{0}</BASEFONT>", v1);
}
else if (v1 > ev)
{
name = string.Format("<BASEFONT COLOR=#008000>{0} (+{1})</BASEFONT>", v1, diffv);
}
else
{
name = string.Format("<BASEFONT COLOR=#800000>{0} ({1})</BASEFONT>", v1, diffv);
}
}
else
{
if (v1 == diffv || diffv == 0)
{
name = string.Format("<BASEFONT COLOR=#FFFFFF>{0}/{1}</BASEFONT>", v1, v2);
}
else if (v1 > ev)
{
name = string.Format("<BASEFONT COLOR=#008000>{0}/{1} (+{2})</BASEFONT>", v1, v2, diffv);
}
else
{
name = string.Format("<BASEFONT COLOR=#800000>{0}/{1} ({2})</BASEFONT>", v1, v2, diffv);
}
}
return name;
}
}
public class MannequinStatsGump : Gump
{
private readonly Mannequin _Mannequin;
private readonly Item _SameItem;
private readonly Item _Item;
public LabelDefinition[] Page1 = new LabelDefinition[]
{
new LabelDefinition(1049593, Catalog.Attributes, 5), // Attributes
new LabelDefinition(1061645, Catalog.Resistances, 5), // Resistances
new LabelDefinition(1077417, Catalog.Combat1, 8), // Combat
};
public LabelDefinition[] Page2 = new LabelDefinition[]
{
new LabelDefinition(1077417, Catalog.Combat2, 3), // Combat
new LabelDefinition(1076209, Catalog.Casting), // Casting
new LabelDefinition(1044050, Catalog.Misc), // Miscellaneous
new LabelDefinition(1114251, Catalog.HitEffects), // Hit Effects
new LabelDefinition(1155065, Catalog.SkillBonusGear), // Skill Bonus Gear
};
public class ItemPropDefinition
{
public List<ValuedProperty> SelectItem { get; set; }
public List<ValuedProperty> EquipmentItem { get; set; }
public ItemPropDefinition(Item tl, Item ctlg)
{
SelectItem = Mannequin.GetProperty(tl);
EquipmentItem = Mannequin.GetProperty(ctlg);
}
}
public MannequinStatsGump(Mannequin mann)
: this(mann, null)
{ }
public MannequinStatsGump(Mannequin mann, Item item)
: this(mann, item, 0)
{ }
public MannequinStatsGump(Mannequin mann, Item item, int page)
: base(100, 100)
{
_Mannequin = mann;
_Item = item;
AddPage(0);
AddBackground(0, 0, 604, 820, 0x6DB);
AddAlphaRegion(5, 5, 594, 810);
AddHtmlLocalized(10, 10, 584, 18, 1114513, "#1159279", 0x43F7, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
List<ValuedProperty> lm = Mannequin.GetProperty(_Mannequin.Items);
List<ItemPropDefinition> CompareItem = null;
if (_Item != null)
{
_SameItem = _Mannequin.Items.Where(x => _Mannequin.LayerValidation(x, item)).FirstOrDefault();
if (_SameItem != null)
{
CompareItem = new List<ItemPropDefinition>
{
new ItemPropDefinition(_Item, _SameItem)
};
List<Item> list = _Mannequin.Items.Where(x => x != _SameItem).ToList();
list.Add(_Item);
lm = Mannequin.GetProperty(list);
}
}
AddHtmlLocalized(479, 10, 75, 18, 1114514, "#1158215", 0x42FF, false, false); // <DIV ALIGN=RIGHT>~1_TOKEN~</DIV>
if (page > 0)
AddButton(554, 10, 0x15E3, 0x15E7, 1000, GumpButtonType.Reply, 0); // Next Page Button
else
AddButton(554, 10, 0x15E1, 0x15E5, 1001, GumpButtonType.Reply, 0); // Previous Page Button
int y = 0;
LabelDefinition[] pages = page > 0 ? Page2 : Page1;
pages.ToList().ForEach(x =>
{
y += 28;
if (lm.Any(l => l.Catalog == x.Catalog))
{
AddHtmlLocalized(10, y, 150, 18, x.TitleLabel, 0x6A05, false, false);
AddImageTiled(10, y + 18, 584, 5, 0x6DC);
y += 32;
List<ValuedProperty> cataloglist = lm.Where(i => i.Catalog == x.Catalog).OrderBy(ii => ii.Order).ToList();
int columncount = x.ColumnLeftCount == 0 ? (int)Math.Ceiling(cataloglist.Count / (decimal)2) : x.ColumnLeftCount;
for (int i = 0; i < cataloglist.Count; i++)
{
int label = cataloglist[i].LabelNumber;
if (i < columncount)
{
AddHtmlLocalized(45, y, 200, 18, label, 0x560A, false, false);
AddSpriteImage(10, y - 5, 0x9D3B, cataloglist[i].SpriteW, cataloglist[i].SpriteH, 30, 30);
AddTooltip(cataloglist[i].Description);
if (cataloglist[i].IsBoolen)
{
if (cataloglist[i].BoolenValue)
{
if (cataloglist[i].Value > 0)
AddHtmlLocalized(195, y, 100, 18, 1046362, 0x42FF, false, false); // Yes
else
AddHtmlLocalized(195, y, 100, 18, 1046363, 0x42FF, false, false); // No
}
}
else
{
AddHtml(195, y, 100, 18, Color(cataloglist[i].Value, GetItemValue(CompareItem, label), cataloglist[i].Cap), false, false);
}
}
else
{
if (i == columncount)
y -= i * 30;
AddHtmlLocalized(342, y, 200, 18, label, 0x560A, false, false);
AddSpriteImage(307, y - 5, 0x9D3B, cataloglist[i].SpriteW, cataloglist[i].SpriteH, 30, 30);
AddTooltip(cataloglist[i].Description);
if (!cataloglist[i].IsBoolen)
AddHtml(492, y, 100, 18, Color(cataloglist[i].Value, GetItemValue(CompareItem, label), cataloglist[i].Cap), false, false);
}
y += 30;
}
y += 3;
}
});
}
public double GetItemValue(List<ItemPropDefinition> list, int label)
{
if (list == null)
return 0;
var l = list.FirstOrDefault();
double v1 = 0;
double v2 = 0;
if (l.EquipmentItem.Any(r => r.LabelNumber == label))
v1 = l.EquipmentItem.Where(r => r.LabelNumber == label).FirstOrDefault().Value;
if (l.SelectItem.Any(r => r.LabelNumber == label))
v2 = l.SelectItem.Where(r => r.LabelNumber == label).FirstOrDefault().Value;
return v2 - v1;
}
public string Color(double ev, double diff, int parmv)
{
string name;
if (_SameItem == null || diff == 0)
{
if (parmv == 0)
{
name = string.Format("<BASEFONT COLOR=#80BFFF>{0}</BASEFONT>", ev);
}
else
{
name = string.Format("<BASEFONT COLOR=#80BFFF>{0}/{1}</BASEFONT>", ev, parmv);
}
}
else if (diff < 0)
{
if (parmv == 0)
{
name = string.Format("<BASEFONT COLOR=#800000>{0} (-{1})</BASEFONT>", ev, Math.Abs(diff));
}
else
{
name = string.Format("<BASEFONT COLOR=#800000>{0}/{1} (-{2})</BASEFONT>", ev, parmv, Math.Abs(diff));
}
}
else
{
if (parmv == 0)
{
name = string.Format("<BASEFONT COLOR=#008000>{0} (+{1})</BASEFONT>", ev, diff);
}
else
{
name = string.Format("<BASEFONT COLOR=#008000>{0}/{1} (+{2})</BASEFONT>", ev, parmv, diff);
}
}
return name;
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (_Mannequin == null)
return;
Mobile from = sender.Mobile;
switch (info.ButtonID)
{
case 0: { break; }
case 1000:
{
from.SendGump(new MannequinStatsGump(_Mannequin, _Item, 0));
break;
}
case 1001:
{
from.SendGump(new MannequinStatsGump(_Mannequin, _Item, 1));
break;
}
}
}
}
}