using System; using System.Collections.Generic; using Server.Gumps; using Server.Network; namespace Server.Engines.VeteranRewards { public class RewardChoiceGump : Gump { private Mobile m_From; private void RenderBackground() { AddPage( 0 ); AddBackground( 10, 10, 600, 450, 2600 ); AddButton( 530, 415, 4017, 4019, 0, GumpButtonType.Reply, 0 ); AddButton( 60, 415, 4014, 4016, 0, GumpButtonType.Page, 1 ); AddHtmlLocalized( 95, 415, 200, 20, 1049755, false, false ); // Main Menu } private void RenderCategories() { TimeSpan rewardInterval = RewardSystem.RewardInterval; string intervalAsString; if ( rewardInterval == TimeSpan.FromDays( 30.0 ) ) intervalAsString = "month"; else if ( rewardInterval == TimeSpan.FromDays( 60.0 ) ) intervalAsString = "two months"; else if ( rewardInterval == TimeSpan.FromDays( 90.0 ) ) intervalAsString = "three months"; else if ( rewardInterval == TimeSpan.FromDays( 365.0 ) ) intervalAsString = "year"; else intervalAsString = $"{rewardInterval.TotalDays} day{(rewardInterval.TotalDays == 1 ? "" : "s")}"; AddPage( 1 ); AddHtml( 60, 35, 500, 70, "Ultima Online Rewards Program
" + "Thank you for being a part of the Ultima Online community for a full " + intervalAsString + ". " + "As a token of our appreciation, you may select from the following in-game reward items listed below. " + "The gift items will be attributed to the character you have logged-in with on the shard you are on when you chose the item(s). " + "The number of rewards you are entitled to are listed below and are for your entire account. " + "To read more about these rewards before making a selection, feel free to visit the uo.com site at " + "http://www.uo.com/rewards.", true, true ); int cur, max; RewardSystem.ComputeRewardInfo( m_From, out cur, out max ); AddHtmlLocalized( 60, 105, 300, 35, 1006006, false, false ); // Your current total of rewards to choose: AddLabel( 370, 107, 50, (max - cur).ToString() ); AddHtmlLocalized( 60, 140, 300, 35, 1006007, false, false ); // You have already chosen: AddLabel( 370, 142, 50, cur.ToString() ); RewardCategory[] categories = RewardSystem.Categories; int page = 2; for ( int i = 0; i < categories.Length; ++i ) { if ( !RewardSystem.HasAccess( m_From, categories[i] ) ) { page += 1; continue; } AddButton( 100, 180 + (i * 40), 4005, 4005, 0, GumpButtonType.Page, page ); page += PagesPerCategory( categories[ i ] ); if ( categories[i].NameString != null ) AddHtml( 135, 180 + (i * 40), 300, 20, categories[i].NameString, false, false ); else AddHtmlLocalized( 135, 180 + (i * 40), 300, 20, categories[i].Name, false, false ); } page = 2; for ( int i = 0; i < categories.Length; ++i ) RenderCategory( categories[ i ], i, ref page ); } private int PagesPerCategory( RewardCategory category ) { List entries = category.Entries; int j = 0, i = 0; for ( j = 0; j < entries.Count; j++ ) { if ( RewardSystem.HasAccess( m_From, entries[ j ] ) ) i++; } return (int) Math.Ceiling( i / 24.0 ); } private int GetButtonID( int type, int index ) { return 2 + (index * 20) + type; } private void RenderCategory( RewardCategory category, int index, ref int page ) { AddPage( page ); List entries = category.Entries; int i = 0; for ( int j = 0; j < entries.Count; ++j ) { RewardEntry entry = entries[j]; if ( !RewardSystem.HasAccess( m_From, entry ) ) continue; if ( i == 24 ) { AddButton( 305, 415, 0xFA5, 0xFA7, 0, GumpButtonType.Page, ++page ); AddHtmlLocalized( 340, 415, 200, 20, 1011066, false, false ); // Next page AddPage( page ); AddButton( 270, 415, 0xFAE, 0xFB0, 0, GumpButtonType.Page, page - 1 ); AddHtmlLocalized( 185, 415, 200, 20, 1011067, false, false ); // Previous page i = 0; } AddButton( 55 + ((i / 12) * 250), 80 + ((i % 12) * 25), 5540, 5541, GetButtonID( index, j ), GumpButtonType.Reply, 0 ); if ( entry.NameString != null ) AddHtml( 80 + ((i / 12) * 250), 80 + ((i % 12) * 25), 250, 20, entry.NameString, false, false ); else AddHtmlLocalized( 80 + ((i / 12) * 250), 80 + ((i % 12) * 25), 250, 20, entry.Name, false, false ); ++i; } page += 1; } public RewardChoiceGump( Mobile from ) : base( 0, 0 ) { m_From = from; from.CloseGump( typeof( RewardChoiceGump ) ); RenderBackground(); RenderCategories(); } public override void OnResponse( NetState sender, RelayInfo info ) { int buttonID = info.ButtonID - 1; if ( buttonID == 0 ) { int cur, max; RewardSystem.ComputeRewardInfo( m_From, out cur, out max ); if ( cur < max ) m_From.SendGump( new RewardNoticeGump( m_From ) ); } else { --buttonID; int type = (buttonID % 20); int index = (buttonID / 20); RewardCategory[] categories = RewardSystem.Categories; if ( type >= 0 && type < categories.Length ) { RewardCategory category = categories[type]; if ( index >= 0 && index < category.Entries.Count ) { RewardEntry entry = category.Entries[index]; if ( !RewardSystem.HasAccess( m_From, entry ) ) return; m_From.SendGump( new RewardConfirmGump( m_From, entry ) ); } } } } } }