Files
abysmal-isle/Scripts/Items/Consumables/SkinTingeingTincture.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

237 lines
6.5 KiB
C#

using System;
using Server.Gumps;
using Server.Mobiles;
namespace Server.Items
{
public class SkinTingeingTincture : Item
{
public override int LabelNumber { get { return 1114770; } } //Skin Tingeing Tincture
[Constructable]
public SkinTingeingTincture()
: base(0xEFF)
{
Hue = 90;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1114771); // Apply Directly to Forehead
}
public override void OnDoubleClick(Mobile m)
{
if (IsChildOf(m.Backpack) && m is PlayerMobile)
{
if (!m.HasGump(typeof(InternalGump)))
{
BaseGump.SendGump(new InternalGump((PlayerMobile)m, this));
}
}
}
public SkinTingeingTincture(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
private class InternalGump : BaseGump
{
public override int GetTypeID()
{
return 0xF3EA1;
}
public SkinTingeingTincture Item { get; set; }
public int SelectedHue { get; set; }
public InternalGump(PlayerMobile pm, SkinTingeingTincture item)
: base(pm, 50, 50)
{
Item = item;
}
public override void AddGumpLayout()
{
AddBackground(0, 0, 460, 300, 2620);
int[] list = GetHueList();
int rows = User.Race == Race.Human ? 8 : 6;
int start = User.Race == Race.Human ? 40 : 80;
bool elf = User.Race == Race.Elf;
int x = start;
int y = start;
int displayHue;
for (int i = 0; i < list.Length; i++)
{
if (i > 0 && i % rows == 0)
{
x = start;
y += 22;
}
displayHue = elf ? list[i] - 1 : list[i];
AddImage(x, y, 210, displayHue);
AddButton(x, y, 212, 212, i + 100, GumpButtonType.Reply, 0);
x += 21;
}
displayHue = SelectedHue != 0 ? SelectedHue : User.Hue ^ 0x8000;
if (elf)
displayHue--;
AddImage(240, 0, GetPaperdollImage(), displayHue);
AddButton(250, 260, 239, 238, 1, GumpButtonType.Reply, 0);
AddButton(50, 260, 242, 241, 0, GumpButtonType.Reply, 0);
}
public override void OnResponse(RelayInfo info)
{
int button = info.ButtonID;
if (button >= 100)
{
button -= 100;
int[] list = GetHueList();
if (button >= 0 && button < list.Length)
{
SelectedHue = list[button];
Refresh(true, false);
}
}
else if (button == 1 && Item != null)
{
if (SelectedHue != 0)
{
User.Hue = User.Race.ClipSkinHue(SelectedHue & 0x3FFF) | 0x8000;
Item.Delete();
}
}
}
private int GetPaperdollImage()
{
if (User.Race == Race.Human)
{
return User.Female ? 13 : 12;
}
if (User.Race == Race.Elf)
{
return User.Female ? 15: 14;
}
if (User.Race == Race.Gargoyle)
{
return User.Female ? 665 : 666;
}
return 0;
}
private int[] GetHueList()
{
if (User.Race == Race.Human)
{
return HumanSkinHues;
}
if (User.Race == Race.Elf)
{
return ElfSkinHues;
}
if (User.Race == Race.Gargoyle)
{
return GargoyleSkinHues;
}
return new int[0];
}
private static int[] _HumanSkinHues;
private static int[] _ElfSkinHues;
private static int[] _GargoyleSkinHues;
public static int[] HumanSkinHues
{
get
{
if (_HumanSkinHues == null)
{
_HumanSkinHues = new int[57];
for (int i = 0; i < _HumanSkinHues.Length; i++)
{
_HumanSkinHues[i] = i + 1001;
}
}
return _HumanSkinHues;
}
}
public static int[] ElfSkinHues
{
get
{
if (_ElfSkinHues == null)
{
_ElfSkinHues = new int[]
{
0x4DE, 0x76C, 0x835, 0x430, 0x24D, 0x24E, 0x24F, 0x0BF,
0x4A7, 0x361, 0x375, 0x367, 0x3E8, 0x3DE, 0x353, 0x903,
0x76D, 0x384, 0x579, 0x3E9, 0x374, 0x389, 0x385, 0x376,
0x53F, 0x381, 0x382, 0x383, 0x76B, 0x3E5, 0x51D, 0x3E6
};
}
return _ElfSkinHues;
}
}
public static int[] GargoyleSkinHues
{
get
{
if (_GargoyleSkinHues == null)
{
_GargoyleSkinHues = new int[25];
for (int i = 0; i < _GargoyleSkinHues.Length; i++)
{
_GargoyleSkinHues[i] = i + 1754;
}
}
return _GargoyleSkinHues;
}
}
}
}
}