using Server.ContextMenus; using Server.Engines.CannedEvil; using Server.Engines.CityLoyalty; using Server.Guilds; using Server.Misc; using Server.Mobiles; using Server.Spells.SkillMasteries; using System; using System.Collections.Generic; using System.Linq; namespace Server.Gumps { public class TitlesMenuEntry : ContextMenuEntry { private readonly 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> 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>(); AddGumpLayout(); } public void AddCallbackButton(int x, int y, int buttonIDnormal, int buttonIDpushed, int id, GumpButtonType type, int page, Action 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); //
TITLES MENU
AddHtmlLocalized(10, 50, 220, 16, 1115024, 0xFFFF, false, false); //
TYPES
AddHtmlLocalized(10, 170, 220, 16, 1044010, 0xFFFF, false, false); //
CATEGORIES
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); //
DESCRIPTION
else AddHtmlLocalized(215, 50, 315, 16, 1044011, 0xFFFF, false, false); //
SELECTIONS
} 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 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 = 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 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, 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 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(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 = 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 GetCityTitles() { IEnumerable list = User.RewardTitles.OfType().Where(i => IsCityTitle(i)); return list.ToList(); } public void Refresh(bool recompile = true) { if (recompile) { Entries.Clear(); Entries.TrimExcess(); AddGumpLayout(); } User.CloseGump(GetType()); User.SendGump(this, false); } private string Color(string color, string str) { return string.Format("{1}", color, str); } } }