Files
abysmal-isle/Scripts/Gumps/TitlesMenu.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

1172 lines
48 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Server;
using Server.Mobiles;
using Server.Misc;
using Server.Engines.CannedEvil;
using Server.Guilds;
using Server.ContextMenus;
using Server.Engines.CityLoyalty;
using Server.Spells.SkillMasteries;
namespace Server.Gumps
{
public class TitlesMenuEntry : ContextMenuEntry
{
private PlayerMobile _From;
public TitlesMenuEntry(PlayerMobile from)
: base(1115022, -1) // Open Titles Menu
{
_From = from;
}
public override void OnClick()
{
_From.CloseGump(typeof(TitlesGump));
_From.SendGump(new TitlesGump(_From));
}
}
public enum TitleType
{
None,
PaperdollPrefix,
PaperdollSuffix,
OverheadName,
SubTitles
}
public enum TitleCategory
{
None,
FameKarma,
Skills,
Guild,
Champion,
RewardTitles,
Veteran
}
public class TitlesGump : Gump
{
public TitleType TitleType { get; set; }
public TitleCategory Category { get; set; }
public bool ShowingDescription { get; set; }
public bool TitleCleared { get; set; }
public bool TitleClearing { get; set; }
public int TitleSelected { get; set; }
public PlayerMobile User { get; set; }
public Dictionary<GumpButton, Action<GumpButton>> ButtonCallbacks { get; set; }
public TitlesGump(PlayerMobile pm, TitleType type = TitleType.None, TitleCategory cat = TitleCategory.None, bool description = false)
: base(50, 50)
{
User = pm;
TitleType = type;
Category = cat;
AddPage(0);
ButtonCallbacks = new Dictionary<GumpButton, Action<GumpButton>>();
AddGumpLayout();
}
public void AddCallbackButton(int x, int y, int buttonIDnormal, int buttonIDpushed, int id, GumpButtonType type, int page, Action<GumpButton> callback)
{
GumpButton b = new GumpButton(x, y, buttonIDnormal, buttonIDpushed, id, type, page);
ButtonCallbacks[b] = callback;
Add(b);
}
protected void AddGumpLayout()
{
AddBackground(0, 0, 540, 350, 9200);
AddImageTiled(10, 10, 520, 30, 2624);
AddImageTiled(10, 45, 200, 115, 2624);
AddImageTiled(10, 165, 200, 175, 2624);
AddImageTiled(215, 45, 315, 260, 2624);
AddImageTiled(215, 310, 315, 30, 2624);
AddAlphaRegion(10, 10, 520, 30);
AddAlphaRegion(10, 45, 200, 115);
AddAlphaRegion(10, 165, 200, 175);
AddAlphaRegion(215, 45, 315, 260);
AddAlphaRegion(215, 310, 290, 30);
AddHtmlLocalized(0, 15, 540, 16, 1115023, 0xFFFF, false, false); // <CENTER>TITLES MENU</CENTER>
AddHtmlLocalized(10, 50, 220, 16, 1115024, 0xFFFF, false, false); // <CENTER>TYPES</CENTER>
AddHtmlLocalized(10, 170, 220, 16, 1044010, 0xFFFF, false, false); // <CENTER>CATEGORIES</CENTER>
AddHtmlLocalized(480, 315, 80, 16, 1060675, 0xFFFF, false, false); // CLOSE
AddCallbackButton(445, 315, 4005, 4007, 0, GumpButtonType.Reply, 0, b => { });
AddHtmlLocalized(55, 70, 160, 16, 1115026, 0xFFFF, false, false); // Paperdoll Name (Prefix)
AddCallbackButton(20, 70, 4005, 4007, 10001, GumpButtonType.Reply, 0, b =>
{
TitleType = TitleType.PaperdollPrefix;
Reset();
Category = TitleCategory.None;
Refresh();
});
AddHtmlLocalized(55, 92, 160, 16, 1115027, 0xFFFF, false, false); // Paperdoll Name (Suffix)
AddCallbackButton(20, 92, 4005, 4007, 10002, GumpButtonType.Reply, 0, b =>
{
TitleType = TitleType.PaperdollSuffix;
Reset();
Category = TitleCategory.None;
Refresh();
});
AddHtmlLocalized(55, 114, 160, 16, 1115028, 0xFFFF, false, false); // Overhead Name
AddCallbackButton(20, 114, 4005, 4007, 10003, GumpButtonType.Reply, 0, b =>
{
TitleType = TitleType.OverheadName;
Reset();
Category = TitleCategory.None;
Refresh();
});
AddHtmlLocalized(55, 136, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
AddCallbackButton(20, 136, 4005, 4007, 10004, GumpButtonType.Reply, 0, b =>
{
TitleType = TitleType.SubTitles;
Reset();
Category = TitleCategory.None;
Refresh();
});
if (TitleType > TitleType.PaperdollPrefix && HasTitle())
{
if (!TitleClearing)
{
AddHtmlLocalized(55, 315, 80, 16, 1062141, 0xFFFF, false, false); // CLEAR
AddCallbackButton(20, 315, 4005, 4007, 10005, GumpButtonType.Reply, 0, b =>
{
TitleClearing = true;
Category = TitleCategory.None;
Refresh();
});
}
else
{
AddHtmlLocalized(225, 275, 200, 16, 1115038, 0xFFFF, false, false); // Do you wish to clear your title?
AddHtmlLocalized(480, 275, 80, 16, 1062141, 0xFFFF, false, false); // CLEAR
AddCallbackButton(445, 275, 4005, 4007, 10006, GumpButtonType.Reply, 0, but =>
{
if (TitleType > TitleType.PaperdollPrefix && ClearTitle())
{
TitleClearing = false;
TitleCleared = true;
Refresh();
}
});
}
}
if (Category != TitleCategory.None)
{
if(ShowingDescription)
AddHtmlLocalized(215, 50, 315, 16, 1115025, 0xFFFF, false, false); // <CENTER>DESCRIPTION</CENTER>
else
AddHtmlLocalized(215, 50, 315, 16, 1044011, 0xFFFF, false, false); // <CENTER>SELECTIONS</CENTER>
}
if (TitleCleared)
{
AddHtmlLocalized(225, 315, 200, 16, 1115037, 0xFFFF, false, false); // TITLE CLEARED
TitleCleared = false;
}
switch (TitleType)
{
case TitleType.None: break;
case TitleType.PaperdollPrefix: BuildPaperdollPrefix(); break;
case TitleType.PaperdollSuffix: BuildPaperdollSuffix(); break;
case TitleType.OverheadName: BuildOverheadName(); break;
case TitleType.SubTitles: BuildSubtitle(); break;
}
}
private void Reset()
{
ShowingDescription = false;
TitleSelected = -1;
TitleClearing = false;
TitleCleared = false;
}
private void BuildPaperdollPrefix()
{
List<string> fameKarma = Titles.GetFameKarmaEntries(User);
AddHtmlLocalized(55, 190, 160, 16, 1115031, 0xFFFF, false, false); // Fame/Karma
AddCallbackButton(20, 190, 4005, 4007, 1, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.FameKarma;
Reset();
Refresh();
});
if (Category == TitleCategory.FameKarma)
{
if (!ShowingDescription)
{
int index = 0;
int page = 1;
AddPage(page);
AddHtmlLocalized(260, 70, 160, 16, 1154764, 0xFFFF, false, false); // (DEFAULT)
AddCallbackButton(225, 70, 4005, 4007, 2, GumpButtonType.Reply, 0, b =>
{
ShowingDescription = true;
TitleSelected = 1500;
Refresh();
});
for (int i = 0; i < fameKarma.Count; i++)
{
AddHtml(260, 92 + (index * 22), 245, 16, Color("#FFFFFF", fameKarma[i]), false, false);
AddCallbackButton(225, 92 + (index * 22), 4005, 4007, 3 + i, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 3;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page, 8);
}
}
else
{
string title = null;
if (fameKarma.Count == 0 || TitleSelected == 1500)
AddHtmlLocalized(275, 240, 160, 32, 1154764, 0xFFFF, false, false); // (DEFAULT)
else
{
if (TitleSelected >= 0 && TitleSelected < fameKarma.Count)
{
title = fameKarma[TitleSelected];
AddHtml(275, 240, 245, 16, Color("#FFFFFF", title), false, false);
}
}
AddHtmlLocalized(225, 70, 270, 200, 1115128, 0xFFFF, false, false); // This option will update your Fame/Karma title automatically during progression.
AddHtmlLocalized(225, 220, 160, 16, 1115026, 0xFFFF, false, false); // Paperdoll Name (Prefix)
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 99, GumpButtonType.Reply, 0, b =>
{
if (TitleSelected >= 0 && TitleSelected < fameKarma.Count)
title = fameKarma[TitleSelected];
if (title != null)
User.FameKarmaTitle = title;
else
User.FameKarmaTitle = null;
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
Refresh(false);
});
}
}
}
private void BuildPaperdollSuffix()
{
AddHtmlLocalized(55, 190, 160, 16, 1115030, 0xFFFF, false, false); // Skills
AddCallbackButton(20, 190, 4005, 4007, 100, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Skills;
Reset();
Refresh();
});
PlayerMobile.ChampionTitleInfo info = User.ChampionTitles;
if (info != null && info.HasChampionTitle(User))
{
AddHtmlLocalized(55, 212, 160, 16, 1115032, 0xFFFF, false, false); // Monster
AddCallbackButton(20, 212, 4005, 4007, 101, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Champion;
Reset();
Refresh();
});
}
if (Category == TitleCategory.Skills)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
foreach (Skill sk in User.Skills)
{
if (sk.Base < 30)
continue;
string title = Titles.GetSkillTitle(User, sk);
if (title != null)
{
AddHtml(260, 70 + (index * 22), 245, 16, Color("#FFFFFF", title), false, false);
}
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, sk.Info.SkillID + 102, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 102;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else
{
string str = Titles.GetSkillTitle(User, User.Skills[(SkillName)TitleSelected]);
AddHtmlLocalized(225, 70, 270, 200, 1115056 + TitleSelected, 0xFFFF, false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115027, 0xFFFF, false, false); // Paperdoll Name (Suffix)
if (str != null)
{
AddHtml(275, 240, 245, 16, Color("#FFFFFF", str), false, false);
}
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 199, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
str = Titles.GetSkillTitle(User, User.Skills[(SkillName)TitleSelected]);
Refresh(false);
User.PaperdollSkillTitle = str;
});
}
}
else if (Category == TitleCategory.Champion && info != null)
{
if (!ShowingDescription || TitleSelected == -1)
{
int y = 70;
int page = 1;
int index = 0;
AddPage(page);
if (info.Harrower > 0)
{
AddHtml(260, y, 245, 16, Color("#FFFFFF", String.Format(": {0} of Evil", Titles.HarrowerTitles[Math.Min(Titles.HarrowerTitles.Length, info.Harrower) - 1])), false, false);
AddCallbackButton(225, y, 4005, 4007, 295, GumpButtonType.Reply, 0, b =>
{
TitleSelected = 295;
ShowingDescription = true;
Refresh();
});
index++;
}
for (int i = 0; i < ChampionSpawnInfo.Table.Length; i++)
{
int v = info.GetValue(i);
if (v == 0)
continue;
int offset = 0;
if (v > 800)
offset = 3;
else if (v > 300)
offset = (int)(v / 300);
if (offset <= 0)
continue;
ChampionSpawnInfo champInfo = ChampionSpawnInfo.GetInfo((ChampionSpawnType)i);
AddHtml(260, y + (index * 22), 245, 16, Color("#FFFFFF", String.Format(": {0} of the {1}", champInfo.LevelNames[Math.Min(offset, champInfo.LevelNames.Length) - 1], champInfo.Name)), false, false);
AddCallbackButton(225, y + (index * 22), 4005, 4007, i + 251, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 251;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else
{
string str = GetChampionTitle();
object description = GetChampInfo();
if (description is int)
AddHtmlLocalized(225, 70, 270, 140, (int)description, 0xFFFF, false, false);
else if (description is string)
AddHtml(250, 70, 270, 140, Color("#FFFFFF", (string)description), false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115027, 0xFFFF, false, false); // Paperdoll Name (Suffix)
AddHtml(275, 240, 245, 16, Color("#FFFFFF", str), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 299, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
str = GetChampionTitle();
User.DisplayChampionTitle = true;
User.CurrentChampTitle = str;
Refresh(false);
});
}
}
}
private void BuildOverheadName()
{
int y = 190;
AddHtmlLocalized(55, y, 160, 16, 1115030, 0xFFFF, false, false); // Skills
AddCallbackButton(20, y, 4005, 4007, 300, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Skills;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
y += 22;
List<int> rewards = GetCityTitles();
if (rewards != null && rewards.Count > 0)
{
AddHtmlLocalized(55, y, 160, 16, 1115034, 0xFFFF, false, false); // Rewards
AddCallbackButton(20, y, 4005, 4007, 5435, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.RewardTitles;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
y += 22;
}
Guild g = User.Guild as Guild;
if (g != null)
{
AddHtmlLocalized(55, y, 160, 16, 1115033, 0xFFFF, false, false); // GUILD
AddCallbackButton(20, y, 4005, 4007, 301, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Guild;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
}
if (Category == TitleCategory.Skills)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
foreach (Skill sk in User.Skills)
{
if (sk.Base < 30)
continue;
AddHtml(260, 70 + (index * 22), 245, 16, Color("#FFFFFF", "the " + sk.Info.Title), false, false);
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, sk.Info.SkillID + 45000, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 45000;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
if ((SkillName)sk.Info.SkillID == User.Skills.CurrentMastery && User.Skills.CurrentMastery != SkillName.Alchemy)
{
AddHtml(260, 70 + (index * 22), 160, 16, Color("#FFFFFF", MasteryInfo.GetTitle(User)), false, false);
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, 999999, GumpButtonType.Reply, 0, b =>
{
TitleSelected = 999999;
ShowingDescription = true;
Refresh();
});
index++;
}
CheckPage(ref index, ref page);
}
}
else
{
string title;
int desc;
if (TitleSelected == 999999)
{
title = MasteryInfo.GetTitle(User);
desc = MasteryInfo.GetDescription(User);
}
else
{
title = "the " + User.Skills[(SkillName)TitleSelected].Info.Title;
desc = 1115056 + TitleSelected;
}
AddHtmlLocalized(225, 70, 270, 140, desc, 0xFFFF, false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115028, 0xFFFF, false, false); // Overhead Name
AddHtml(275, 240, 245, 16, Color("#FFFFFF", title), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 399, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
User.OverheadTitle = TitleSelected == 999999 ? MasteryInfo.GetTitle(User) : "the " + User.Skills[(SkillName)TitleSelected].Info.Title;
Refresh(false);
});
}
}
else if (Category == TitleCategory.Guild && g != null)
{
if (!ShowingDescription || TitleSelected == -1)
{
AddHtml(260, 70, 160, 16, Color("#FFFFFF", String.Format("[{0}]", g.Abbreviation)), false, false);
AddCallbackButton(225, 70, 4005, 4007, 397, GumpButtonType.Reply, 0, b =>
{
ShowingDescription = true;
TitleSelected = 351;
Refresh();
});
}
else
{
AddHtmlLocalized(225, 65, 270, 140, 1115040, 0xFFFF, false, false); // This is your guild's abbreviation.
AddHtmlLocalized(225, 220, 160, 16, 1115028, 0xFFFF, false, false); // Overhead Name
AddHtml(275, 240, 245, 16, Color("#FFFFFF", String.Format("[{0}]", g.Abbreviation)), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 398, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
Refresh(false);
User.OverheadTitle = null;
User.DisplayGuildAbbr = true;
});
}
}
else if (Category == TitleCategory.RewardTitles && rewards != null && rewards.Count > 0)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
for (int i = 0; i < rewards.Count; i++)
{
int title = rewards[i];
if (title == 1154017)
continue;
AddHtmlLocalized(260, 70 + (index * 22), 245, 16, (int)title, 0xFFFF, false, false);
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, i + 2550, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 2550;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else if (TitleSelected >= 0 && TitleSelected < rewards.Count)
{
int title = rewards[TitleSelected];
object description = GetRewardTitleInfo(title);
if (description is int)
AddHtmlLocalized(225, 70, 270, 140, (int)description, 0xFFFF, false, false);
else if (description is string)
AddHtml(225, 70, 270, 140, Color("#FFFFFF", (string)description), false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
string cust;
if (title == 1154017 && CityLoyaltySystem.HasCustomTitle(User, out cust))
AddHtmlLocalized(275, 240, 245, 16, title, cust, 0xFFFF, false, false);
else if(title != 1154017)
AddHtmlLocalized(275, 240, 160, 32, title, 0xFFFF, false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 5789, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
Refresh(false);
title = rewards[TitleSelected];
User.OverheadTitle = title.ToString();
});
}
}
}
private void BuildSubtitle()
{
int y = 190;
Guild guild = User.Guild as Guild;
AddHtmlLocalized(55, y, 160, 16, 1115030, 0xFFFF, false, false); // Skills
AddCallbackButton(20, y, 4005, 4007, 400, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Skills;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
y += 22;
if (guild != null && User.GuildTitle != null)
{
AddHtmlLocalized(55, y, 160, 16, 1115033, 0xFFFF, false, false); // GUILD
AddCallbackButton(20, y, 4005, 4007, 401, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Guild;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
y += 22;
}
if (User.RewardTitles != null && User.RewardTitles.Count > 0)
{
AddHtmlLocalized(55, y, 160, 16, 1115034, 0xFFFF, false, false); // Rewards
AddCallbackButton(20, y, 4005, 4007, 402, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.RewardTitles;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
y += 22;
}
List<VeteranTitle> vetTitles = Titles.GetVeteranTitles(User);
if (vetTitles != null && vetTitles.Count > 0)
{
AddHtml(55, y, 160, 16, Color("#FFFFFF", "Veterans"), false, false); // Rewards
AddCallbackButton(20, y, 4005, 4007, 403, GumpButtonType.Reply, 0, b =>
{
Category = TitleCategory.Veteran;
ShowingDescription = false;
TitleClearing = false;
Refresh();
});
}
if (Category == TitleCategory.Skills)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
foreach (Skill sk in User.Skills)
{
if (sk.Base < 30)
continue;
string title = Titles.GetSkillTitle(User, sk);
if (title != null)
{
AddHtml(260, 70 + (index * 22), 245, 16, Color("#FFFFFF", title), false, false);
}
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, sk.Info.SkillID + 404, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 404;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else
{
string title = Titles.GetSkillTitle(User, User.Skills[(SkillName)TitleSelected]);
AddHtmlLocalized(225, 70, 270, 140, 1115056 + TitleSelected, 0xFFFF, false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
AddHtml(275, 240, 245, 16, Color("#FFFFFF", title), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 102, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
title = Titles.GetSkillTitle(User, User.Skills[(SkillName)TitleSelected]);
if (title != null)
{
User.SubtitleSkillTitle = title;
User.CurrentVeteranTitle = -1;
User.SelectRewardTitle(-1, true);
User.DisplayGuildTitle = false;
}
Refresh(false);
});
}
}
else if (Category == TitleCategory.Guild && guild != null && User.GuildTitle != null)
{
if (!ShowingDescription || TitleSelected == -1)
{
AddHtml(260, 70, 245, 16, Color("#FFFFFF", String.Format("{0}, {1}", Utility.FixHtml(User.GuildTitle), Utility.FixHtml(guild.Name))), false, false);
AddCallbackButton(225, 70, 4005, 4007, 500, GumpButtonType.Reply, 0, b =>
{
TitleSelected = 1;
ShowingDescription = true;
Refresh();
});
}
else
{
AddHtmlLocalized(225, 70, 270, 140, 1115039, 0xFFFF, false, false); // This is a custom guild title assigned by your guild leader.
AddHtmlLocalized(225, 220, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
AddHtml(275, 240, 245, 16, Color("#FFFFFF", String.Format("{0}, {1}", Utility.FixHtml(User.GuildTitle), Utility.FixHtml(guild.Name))), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 599, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
User.DisplayGuildTitle = true;
User.SubtitleSkillTitle = null;
User.CurrentVeteranTitle = -1;
User.SelectRewardTitle(-1, true);
Refresh(false);
});
}
}
else if (Category == TitleCategory.RewardTitles && User.RewardTitles != null && User.RewardTitles.Count > 0)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
for (int i = 0; i < User.RewardTitles.Count; i++)
{
object title = User.RewardTitles[i];
if (title is int)
{
string cust = null;
if ((int)title == 1154017 && CityLoyaltySystem.HasCustomTitle(User, out cust))
{
AddHtmlLocalized(260, 70 + (index * 22), 245, 16, 1154017, cust, 0xFFFF, false, false);
}
else
AddHtmlLocalized(260, 70 + (index * 22), 245, 16, (int)title, 0xFFFF, false, false);
}
else if (title is string)
AddHtml(260, 70 + (index * 22), 245, 16, Color("#FFFFFF", (string)title), false, false);
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, i + 600, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 600;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else if (TitleSelected >= 0 && User.RewardTitles != null && TitleSelected < User.RewardTitles.Count)
{
object title = User.RewardTitles[TitleSelected];
object description = GetRewardTitleInfo(title);
if (description is int)
AddHtmlLocalized(225, 70, 270, 140, (int)description, 0xFFFF, false, false);
else if (description is string)
AddHtml(225, 70, 270, 140, Color("#FFFFFF", (string)description), false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
if (title is int)
{
string cust = null;
if ((int)title == 1154017 && CityLoyaltySystem.HasCustomTitle(User, out cust))
{
AddHtmlLocalized(275, 240, 245, 16, 1154017, cust, 0xFFFF, false, false);
}
else
AddHtmlLocalized(275, 240, 160, 32, (int)title, 0xFFFF, false, false);
}
else
AddHtml(275, 240, 245, 16, Color("#FFFFFF", (string)title), false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 699, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
Refresh(false);
User.SelectRewardTitle(TitleSelected, true);
User.SubtitleSkillTitle = null;
User.CurrentVeteranTitle = -1;
User.DisplayGuildTitle = false;
});
}
}
else if (Category == TitleCategory.Veteran && vetTitles != null && vetTitles.Count > 0)
{
if (!ShowingDescription || TitleSelected == -1)
{
int index = 0;
int page = 1;
AddPage(page);
for (int i = 0; i < vetTitles.Count; i++)
{
AddHtmlLocalized(260, 70 + (index * 22), 245, 16, vetTitles[i].Title, 0xFFFF, false, false);
AddCallbackButton(225, 70 + (index * 22), 4005, 4007, i + 700, GumpButtonType.Reply, 0, b =>
{
TitleSelected = b.ButtonID - 700;
ShowingDescription = true;
Refresh();
});
index++;
CheckPage(ref index, ref page);
}
}
else if(TitleSelected >= 0 && TitleSelected < vetTitles.Count)
{
VeteranTitle title = vetTitles[TitleSelected];
AddHtmlLocalized(225, 70, 270, 200, title.Title + 410, 0xFFFF, false, false);
AddHtmlLocalized(225, 220, 160, 16, 1115029, 0xFFFF, false, false); // Subtitle
AddHtmlLocalized(275, 240, 160, 32, title.Title, 0xFFFF, false, false);
AddHtmlLocalized(225, 275, 200, 16, 1115035, 0xFFFF, false, false); // Do you wish to apply this title?
AddHtmlLocalized(480, 275, 80, 16, 1011046, 0xFFFF, false, false); // APPLY
AddCallbackButton(445, 275, 4005, 4007, 799, GumpButtonType.Reply, 0, b =>
{
AddHtmlLocalized(225, 315, 200, 16, 1115036, 0xFFFF, false, false); // TITLE APPLIED
title = vetTitles[TitleSelected];
User.CurrentVeteranTitle = title.Title;
User.SelectRewardTitle(-1, true);
User.SubtitleSkillTitle = null;
User.DisplayGuildTitle = false;
Refresh(false);
});
}
}
}
public override void OnResponse(Server.Network.NetState state, RelayInfo info)
{
GumpButton button = ButtonCallbacks.Keys.FirstOrDefault(b => b.ButtonID == info.ButtonID);
if (ButtonCallbacks.ContainsKey(button) && ButtonCallbacks[button] != null)
ButtonCallbacks[button](button);
}
public void CheckPage(ref int index, ref int page, int perpage = 9)
{
if (index >= perpage)
{
AddHtmlLocalized(415, 275, 100, 16, 1044045, 0xFFFF, false, false); // NEXT PAGE
AddCallbackButton(380, 275, 4005, 4007, 0, GumpButtonType.Page, page + 1, b => { });
page++;
index = 0;
AddPage(page);
AddHtmlLocalized(265, 275, 100, 16, 1044044, 0xFFFF, false, false); // PREV PAGE
AddCallbackButton(225, 275, 4014, 4016, 0, GumpButtonType.Page, page - 1, b => { });
}
}
private bool HasTitle()
{
switch (TitleType)
{
case TitleType.PaperdollSuffix:
return User.PaperdollSkillTitle != null || User.CurrentChampTitle != null;
case TitleType.OverheadName:
return User.OverheadTitle != null || User.DisplayGuildAbbr;
case TitleType.SubTitles:
return User.SubtitleSkillTitle != null || User.SelectedTitle > -1 || User.CurrentVeteranTitle > 0 || User.DisplayGuildTitle;
}
return false;
}
private bool ClearTitle()
{
switch (TitleType)
{
case TitleType.PaperdollSuffix:
User.PaperdollSkillTitle = null;
User.CurrentChampTitle = null;
break;
case TitleType.OverheadName:
User.OverheadTitle = null;
User.DisplayGuildAbbr = false;
break;
case TitleType.SubTitles:
User.SubtitleSkillTitle = null;
User.SelectRewardTitle(-1, true);
User.CurrentVeteranTitle = -1;
User.DisplayGuildTitle = false;
break;
}
return true;
}
private string GetChampionTitle()
{
PlayerMobile.ChampionTitleInfo info = User.ChampionTitles;
int v;
string str = null;
if (TitleSelected == 295)
{
v = info.Harrower;
if (v > 0)
str = String.Format(": {0} of Evil", Titles.HarrowerTitles[Math.Min(Titles.HarrowerTitles.Length, info.Harrower) - 1]);
}
else
{
v = info.GetValue(TitleSelected);
ChampionSpawnInfo champInfo = ChampionSpawnInfo.GetInfo((ChampionSpawnType)TitleSelected);
int offset = 0;
if (v > 800)
offset = 3;
else if (v > 300)
offset = (int)(v / 300);
if (offset > 0)
{
str = String.Format(": {0} of the {1}", champInfo.LevelNames[Math.Min(offset, champInfo.LevelNames.Length) - 1], champInfo.Name);
}
}
return str;
}
private object GetChampInfo()
{
int index = TitleSelected;
switch (index)
{
default: return "Unknown Champion";
case 0: return 1115047; // This title is gained from battling against the minions of Semidar.
case 1: return 1115046; // This title is gained from battling against the minions of Mephitis.
case 2: return 1115044; // This title is gained from battling against the minions of Rikktor.
case 3: return 1115045; // This title is gained from battling against the minions of Lord Oaks.
case 4: return 1115048; // This title is gained from battling against the minions of Barracoon the Piper.
case 5: return 1115049; // This title is gained from battling against the minions of Neira the Necromancer.
case 6: return 1115050; // This title is gained from battling against the minions of Serado the Awakened.
case 7: return 1115052; // This title is gained from battling against the minions of Twaulo of the Glade.
case 8: return 1115051; // This title is gained from battling against the minions of Ilhenir the Stained.
case 12: return 1115054; // This title is gained from battling against the minions of the Abyssal Inferno.
case 13: return 1115053; // This title is gained from battling against the minions of the Primeval Lich.
case 14: return "This title is gained from battling against the minions of the Dragon Turtle."; // Dragon Turtle, no cliloc???
case 295: return 1115055; // This title is gained from battling against the Harrower and the Champions.
}
}
private object GetRewardTitleInfo(object title)
{
if (!(title is int))
{
if (title is string)
return title;
return null;
}
if (title is int)
{
int id = (int)title;
if ((id >= 1152739 && id <= 1152893) || id == 1154017)
return 1152893; // This title is gained through city loyalty.
if ((id >= 1151739 && id <= 1151747) || id == 1155481 || id == 1154505)
return id + 1;
if (id >= 1157181 && id <= 1157203)
return 1157180; // This title is obtained from turning in Bulk Order Deeds.
if (id >= 1156985 && id <= 1156987)
return 1156984; // This title is obtained from the Halloween Treasures of the Kotl City Event.
if (id >= 1152068 && id <= 1152073)
return 1152075; // This is a reward title given for your valorous fights in arenas.
if (id >= 1155600 && id <= 1155603)
return 1155601; // This title is obtained from the Halloween Treasures of Doom Event.
if (id >= 1157649 && id <= 1157651)
return 1157648; // This title is obtained from the Halloween Treasures of the Sorcerer's Dungeon Event.
switch (id)
{
default: return "This reward title has no desciption.";
case 1073235:
case 1073236:
case 1073237:
case 1073238:
case 1073239: return 1115115; // This is a reward title given for contributing to the Vesper Museum.
case 1073201:
case 1073202:
case 1073203:
case 1073204:
case 1073205:
case 1073206: return 1115116; // This is a reward title given for contributing to the Britannia Royal Zoo.
case 1073341:
case 1073342:
case 1073343:
case 1073344:
case 1073345: return 1115117; // This is a reward title given for contributing to the Britain Public Library.
case 1156477: return 1156476; // This title is obtained by completing the Valley of One Quest in the Valley of Eodon.
case 1155727: return 1155728; // This title is obtained from the Huntmaster's Challenge at the Ranger's Guild in Skara Brae.
case 1156318: return 1156319; // This is a reward title given for completing Shadowguard.
case 1157594: return 1157595; // This title is obtained by completing the "Discovering Animal Training" quest.
case 1158140: return 1158141; // This title is obtained by completing the Huntmaster's Challenge Quest.
case 1158090: return 1158087; // This title is obtained by completing the Paladins of Trinsic Quest.
case 1158161: return 1158162; // This title is obtained by completing the Righting Wrong Quest.
case 1158389: return 1158248; // This title is obtained by completing the Treasure Chase Quest.
case 1158278: return 1158279; // This title is obtained by completing the "A Forced Sacrifice" quest.
case 1158303: return 1158324; // This title is obtained by completing the "Whispering with Wisps" quest.
case 1154505: return 1154506; // This is a reward title given for completing the Exploring the Deep Quest.
case 1158523: return 1158537; // This title is obtained by discovering a constellation using the telescope.
}
}
//Future: 1156717 This title is obtained by completing the Myrmidex Threat quest in the Valley of Eodon.
return "This reward title has no desciption.";
}
private bool IsCityTitle(int id)
{
return (id >= 1152739 && id <= 1152893) || (id >= 1151739 && id <= 1151747) || id == 1155481 || id == 1154017;
}
public List<int> GetCityTitles()
{
IEnumerable<int> list = User.RewardTitles.OfType<int>().Where(i => IsCityTitle(i));
return list.ToList();
}
public void Refresh(bool recompile = true)
{
if (recompile)
{
Entries.Clear();
Entries.TrimExcess();
AddGumpLayout();
}
User.CloseGump(this.GetType());
User.SendGump(this, false);
}
private string Color(string color, string str)
{
return String.Format("<basefont color={0}>{1}", color, str);
}
}
}