Example #1
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (m_Player == null)
            {
                return;
            }
            if (!m_Player.Alive)
            {
                return;
            }
            if (m_Player.Backpack == null)
            {
                return;
            }

            bool closeGump = true;

            int totalCategories    = DonationShop.DonationCategories.Count;
            int totalCategoryPages = (int)(Math.Ceiling((double)totalCategories / (double)CategoriesPerPage));

            if (m_CategoryPage >= totalCategoryPages)
            {
                m_CategoryPage = 0;
            }

            if (m_CategoryPage < 0)
            {
                m_CategoryPage = 0;
            }

            int categoryStartIndex = m_CategoryPage * CategoriesPerPage;
            int categoryEndIndex   = (m_CategoryPage * CategoriesPerPage) + (CategoriesPerPage - 1);

            if (categoryEndIndex >= totalCategories)
            {
                categoryEndIndex = totalCategories - 1;
            }

            if (m_CategorySelected >= totalCategories)
            {
                m_CategorySelected = 0;
            }

            if (m_CategorySelected < 0)
            {
                m_CategorySelected = 0;
            }

            DonationCategory donationCategory = DonationShop.DonationCategories[m_CategorySelected];

            if (donationCategory == null)
            {
                return;
            }

            List <DonationItem> itemList = DonationShop.DonationShopList[donationCategory];

            int totalItems     = itemList.Count;
            int totalItemPages = (int)(Math.Ceiling((double)totalItems / (double)ItemsPerPage));

            if (m_ItemPage >= totalItemPages)
            {
                m_ItemPage = 0;
            }

            if (m_ItemPage < 0)
            {
                m_ItemPage = 0;
            }

            int itemStartIndex = m_ItemPage * ItemsPerPage;
            int itemEndIndex   = (m_ItemPage * ItemsPerPage) + (ItemsPerPage - 1);

            if (itemEndIndex >= totalItems)
            {
                itemEndIndex = totalItems - 1;
            }

            int donationCurrencyInBank = Banker.GetUniqueCurrencyBalance(m_Player, DonationShop.DonationCurrencyType);

            switch (info.ButtonID)
            {
            //Guide
            case 1:
                closeGump = false;
                break;

            //Make Donation
            case 2:
                closeGump = false;
                break;

            //Previous Item Page
            case 3:
                if (m_ItemPage > 0)
                {
                    m_ItemPage--;
                    m_Player.SendSound(ChangePageSound);
                }

                closeGump = false;
                break;

            //Next Item Page
            case 4:
                if (m_ItemPage < totalItemPages - 1)
                {
                    m_ItemPage++;
                    m_Player.SendSound(ChangePageSound);
                }

                closeGump = false;
                break;

            //Previous Category Page
            case 5:
                if (m_CategoryPage > 0)
                {
                    m_CategoryPage--;
                    m_Player.SendSound(ChangePageSound);
                }

                closeGump = false;
                break;

            //Next Category Page
            case 6:
                if (m_CategoryPage < totalCategoryPages - 1)
                {
                    m_CategoryPage++;
                    m_Player.SendSound(ChangePageSound);
                }

                closeGump = false;
                break;
            }

            //Item Selection
            if (info.ButtonID >= 20 && info.ButtonID < 40)
            {
                int itemSelectionIndex = info.ButtonID - 20;
                int itemSelected       = (m_ItemPage * ItemsPerPage) + itemSelectionIndex;

                if (itemSelected >= totalItems)
                {
                    itemSelected = 0;
                }

                //Purchase Item
                DonationItem item = itemList[itemSelected];

                if (item == null)
                {
                    return;
                }

                bool purchaseAllowed = true;

                if (!purchaseAllowed)
                {
                    m_Player.SendMessage("Donation shop purchases are not allowed in this area.");

                    m_Player.CloseGump(typeof(DonationShopGump));
                    m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));

                    return;
                }

                if (item.ItemCost > donationCurrencyInBank && m_Player.AccessLevel < AccessLevel.GameMaster)
                {
                    m_Player.SendMessage("You do not have enough " + DonationShop.DonationCurrencyName + " in your bank to purchase this item.");

                    m_Player.CloseGump(typeof(DonationShopGump));
                    m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));

                    return;
                }

                Item donationItem = (Item)Activator.CreateInstance(item.ItemType);

                if (donationItem == null)
                {
                    m_Player.CloseGump(typeof(DonationShopGump));
                    m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));

                    return;
                }

                if (m_Player.Backpack.TotalItems + donationItem.TotalItems > m_Player.Backpack.MaxItems)
                {
                    donationItem.Delete();

                    m_Player.SendMessage("Your backpack contains too many items to purchase this item. Please remove some items and try again.");

                    m_Player.CloseGump(typeof(DonationShopGump));
                    m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));

                    return;
                }

                if (m_Player.Backpack.TotalWeight + donationItem.TotalWeight > m_Player.MaxWeight)
                {
                    donationItem.Delete();

                    m_Player.SendMessage("Your backpack is too heavy to purchase this item. Please remove some items and try again.");

                    m_Player.CloseGump(typeof(DonationShopGump));
                    m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));

                    return;
                }

                m_Player.SendMessage("You purchase the donation item.");

                donationItem.ItemGroup = ItemGroupType.Donation;

                m_Player.Backpack.DropItem(donationItem);

                Banker.WithdrawUniqueCurrency(m_Player, DonationShop.DonationCurrencyType, item.ItemCost, true);

                closeGump = false;
            }

            //Category Selection
            if (info.ButtonID >= 40 && info.ButtonID < 60)
            {
                int categorySelectionIndex = info.ButtonID - 40;
                int categorySelected       = (m_CategoryPage * CategoriesPerPage) + categorySelectionIndex;

                if (categorySelected >= totalCategories)
                {
                    categorySelected = 0;
                }

                m_Player.SendSound(SelectionSound);

                m_CategorySelected = categorySelected;
                m_ItemPage         = 0;

                closeGump = false;
            }

            if (!closeGump)
            {
                m_Player.CloseGump(typeof(DonationShopGump));
                m_Player.SendGump(new DonationShopGump(m_Player, m_CategoryPage, m_CategorySelected, m_ItemPage));
            }

            else
            {
                m_Player.SendSound(CloseGumpSound);
            }
        }
Example #2
0
        public DonationShopGump(PlayerMobile player, int categoryPage, int categorySelected, int itemPage) : base(10, 10)
        {
            if (player == null)
            {
                return;
            }

            m_Player           = player;
            m_CategoryPage     = categoryPage;
            m_CategorySelected = categorySelected;
            m_ItemPage         = itemPage;

            if (DonationShop.DonationCategories == null)
            {
                return;
            }
            if (DonationShop.DonationCategories.Count == 0)
            {
                return;
            }

            int totalCategories    = DonationShop.DonationCategories.Count;
            int totalCategoryPages = (int)(Math.Ceiling((double)totalCategories / (double)CategoriesPerPage));

            if (m_CategoryPage >= totalCategoryPages)
            {
                m_CategoryPage = 0;
            }

            if (m_CategoryPage < 0)
            {
                m_CategoryPage = 0;
            }

            int categoryStartIndex = m_CategoryPage * CategoriesPerPage;
            int categoryEndIndex   = (m_CategoryPage * CategoriesPerPage) + (CategoriesPerPage - 1);

            if (categoryEndIndex >= totalCategories)
            {
                categoryEndIndex = totalCategories - 1;
            }

            if (m_CategorySelected >= totalCategories)
            {
                m_CategorySelected = 0;
            }

            if (m_CategorySelected < 0)
            {
                m_CategorySelected = 0;
            }

            DonationCategory donationCategory = DonationShop.DonationCategories[m_CategorySelected];

            if (donationCategory == null)
            {
                return;
            }

            List <DonationItem> itemList = new List <DonationItem>();

            foreach (DonationItem itemListing in DonationShop.DonationShopList[donationCategory])
            {
                itemList.Add(itemListing);
            }

            int totalItems     = itemList.Count;
            int totalItemPages = (int)(Math.Ceiling((double)totalItems / (double)ItemsPerPage));

            if (m_ItemPage >= totalItemPages)
            {
                m_ItemPage = 0;
            }

            if (m_ItemPage < 0)
            {
                m_ItemPage = 0;
            }

            int itemStartIndex = m_ItemPage * ItemsPerPage;
            int itemEndIndex   = (m_ItemPage * ItemsPerPage) + (ItemsPerPage - 1);

            if (itemStartIndex >= totalItems)
            {
                itemStartIndex = totalItems - 1;
            }

            if (itemEndIndex >= totalItems)
            {
                itemEndIndex = totalItems - 1;
            }

            int donationCurrencyInBank = Banker.GetUniqueCurrencyBalance(m_Player, DonationShop.DonationCurrencyType);

            Closable   = true;
            Disposable = true;
            Dragable   = true;
            Resizable  = false;

            int WhiteTextHue = 2036; //2655;

            AddPage(0);

            #region Images

            AddImage(13, 5, 206, 2419);
            AddImage(645, 5, 207, 2419);
            AddImage(13, 169, 202, 2419);
            AddImage(517, 361, 200, 2419);
            AddImage(389, 361, 200, 2419);
            AddImage(312, 361, 200, 2419);
            AddImage(184, 361, 200, 2419);
            AddImage(56, 361, 200, 2419);
            AddImage(518, 240, 200, 2419);
            AddImage(519, 170, 200, 2419);
            AddImage(518, 49, 200, 2419);
            AddImage(395, 240, 200, 2419);
            AddImage(312, 240, 200, 2419);
            AddImage(184, 240, 200, 2419);
            AddImage(56, 240, 200, 2419);
            AddImage(56, 170, 200, 2419);
            AddImage(184, 170, 200, 2419);
            AddImage(312, 170, 200, 2419);
            AddImage(398, 170, 200, 2419);
            AddImage(56, 49, 200, 2419);
            AddImage(184, 49, 200, 2419);
            AddImage(312, 49, 200, 2419);
            AddImage(390, 49, 200, 2419);
            AddImage(57, 485, 233, 2419);
            AddImage(56, 5, 201, 2419);
            AddImage(13, 49, 202, 2419);
            AddImage(646, 49, 203, 2419);
            AddImage(645, 485, 205, 2419);
            AddImage(13, 485, 204, 2419);
            AddImage(218, 5, 201, 2419);
            AddImage(218, 485, 233, 2419);
            AddImage(645, 169, 203, 2419);

            AddImage(31, 22, 9002, 2412);
            AddImage(223, 27, 1143, 2499);

            AddItem(546, 251, 2760);
            AddItem(524, 229, 2760);
            AddItem(545, 208, 2760);
            AddItem(502, 251, 2768);
            AddItem(523, 272, 2768);
            AddItem(566, 198, 2766);
            AddItem(525, 194, 2765);
            AddItem(630, 254, 2764);
            AddItem(590, 252, 2760);
            AddItem(568, 273, 2760);
            AddItem(568, 229, 2760);
            AddItem(589, 218, 2766);
            AddItem(544, 186, 2762);
            AddItem(502, 216, 2765);
            AddItem(608, 237, 2766);
            AddItem(544, 292, 2768);
            AddItem(481, 233, 2763);
            AddItem(611, 271, 2767);
            AddItem(590, 293, 2767);
            AddItem(566, 314, 2761);
            AddItem(505, 149, 3225);
            AddItem(618, 175, 3229);
            AddItem(482, 175, 3228);
            AddItem(475, 218, 555);
            AddItem(484, 166, 9);
            AddItem(605, 241, 3651);
            AddItem(491, 237, 554);
            AddItem(508, 254, 554);
            AddItem(556, 300, 554);
            AddItem(570, 313, 555, 2415);
            AddItem(586, 295, 555);
            AddItem(496, 196, 555);
            AddItem(517, 173, 555);
            AddItem(604, 274, 555);
            AddItem(525, 166, 555);
            AddItem(567, 168, 554);
            AddItem(584, 184, 554);
            AddItem(599, 198, 554);
            AddItem(616, 214, 554);
            AddItem(640, 237, 554);
            AddItem(484, 140, 9);
            AddItem(543, 111, 9);
            AddItem(543, 54, 9);
            AddItem(630, 186, 9);
            AddItem(630, 129, 9);
            AddItem(618, 259, 555);
            AddItem(538, 186, 3644);
            AddItem(540, 178, 3647);
            AddItem(506, 32, 1539, 149);
            AddItem(486, 50, 1561, 149);
            AddItem(467, 80, 1561, 149);
            AddItem(526, 23, 1536, 149);
            AddItem(530, 54, 1539, 2500);
            AddItem(510, 72, 1561, 2500);
            AddItem(491, 102, 1561, 2500);
            AddItem(550, 45, 1536, 2500);
            AddItem(552, 77, 1539, 149);
            AddItem(532, 95, 1561, 149);
            AddItem(513, 125, 1561, 149);
            AddItem(572, 68, 1536, 149);
            AddItem(573, 99, 1539, 2500);
            AddItem(553, 117, 1561, 2500);
            AddItem(534, 147, 1561, 2500);
            AddItem(593, 90, 1536, 2500);
            AddItem(594, 122, 1539, 149);
            AddItem(575, 139, 1561, 149);
            AddItem(614, 113, 1536, 149);
            AddItem(615, 143, 1539, 2500);
            AddItem(595, 161, 1561, 2500);
            AddItem(635, 134, 1536, 2500);
            AddItem(524, 215, 2818);
            AddItem(547, 236, 2817);
            AddItem(568, 258, 2816);
            AddItem(532, 215, 3656);
            AddItem(512, 226, 3628);
            AddItem(557, 279, 5452, 2500);
            AddItem(552, 222, 4644);
            AddItem(538, 238, 5357);
            AddItem(522, 234, 3838);
            AddItem(553, 256, 2886, 2606);
            AddItem(574, 261, 3629, 2500);
            AddItem(552, 244, 2586, 2587);
            AddItem(564, 245, 9);
            AddItem(564, 210, 9);
            AddItem(573, 314, 554);
            AddItem(582, 288, 3228);
            AddItem(555, 170, 1561, 149);
            AddItem(576, 190, 1561, 2500);

            #endregion

            //Header
            AddLabel(314, 29, 149, "Donation Shop");

            //Guide
            AddButton(29, 10, 2094, 2095, 1, GumpButtonType.Reply, 0);
            AddLabel(56, 19, WhiteTextHue, "Guide");

            //Bank Account
            AddItem(467, 337, 3823, 2500);
            AddLabel(Utility.CenteredTextOffset(490, Utility.CreateCurrencyString(donationCurrencyInBank)), 366, WhiteTextHue, Utility.CreateCurrencyString(donationCurrencyInBank));
            AddLabel(440, 386, 149, DonationShop.DonationCurrencyName + " in Bank");

            //Make Donation
            AddLabel(570, 386, 169, "Make Donation");
            AddButton(598, 409, 2152, 2151, 2, GumpButtonType.Reply, 0);

            //Scroll Items
            if (m_ItemPage > 0)
            {
                AddButton(436, 224, 9900, 9900, 3, GumpButtonType.Reply, 0);
            }

            if (m_ItemPage < totalItemPages - 1)
            {
                AddButton(436, 265, 9906, 9906, 4, GumpButtonType.Reply, 0);
            }

            //Item
            int startX      = 75;
            int startY      = 70;
            int itemSpacing = 125;

            int itemCount = itemEndIndex - itemStartIndex;

            for (int a = 0; a < itemCount + 1; a++)
            {
                if (totalItems == 0)
                {
                    continue;
                }

                int itemIndex       = itemStartIndex + a;
                int itemButtonIndex = 20 + a;

                if (itemIndex >= itemList.Count)
                {
                    continue;
                }

                DonationItem item = itemList[itemIndex];

                if (item == null)
                {
                    continue;
                }

                #region Images

                int borderHue      = 2412;
                int innerRegionHue = 2052;

                AddImage(startX + 202, startY + 12, 103, borderHue);
                AddImage(startX + 0, startY + 12, 103, borderHue);
                AddImage(startX + 103, startY + 12, 103, borderHue);
                AddImage(startX + 0, startY + 0, 103, borderHue);
                AddImage(startX + 131, startY + 0, 103, borderHue);
                AddImage(startX + 202, startY + 0, 103, borderHue);

                AddImage(startX + 10, startY + 10, 5104, innerRegionHue);
                AddImage(startX + 89, startY + 10, 5104, innerRegionHue);
                AddImage(startX + 132, startY + 10, 5104, innerRegionHue);
                AddImage(startX + 196, startY + 10, 5104, innerRegionHue);
                AddImage(startX + 245, startY + 10, 5104, innerRegionHue);

                #endregion

                //-32, 6

                //AddItem(startX + 15 + item.ItemIconOffsetX, startY + 30 + item.ItemIconOffsetY, item.ItemIconItemId, item.ItemIconHue);
                AddItem(startX - 26 + item.ItemIconOffsetX, startY + 6 + item.ItemIconOffsetY, item.ItemIconItemId, item.ItemIconHue);
                AddLabel(Utility.CenteredTextOffset(startX + 185, item.ItemName), startY + 8, 149, item.ItemName);

                if (item.ItemDescription != null)
                {
                    for (int b = 0; b < item.ItemDescription.Count; b++)
                    {
                        AddLabel(Utility.CenteredTextOffset(startX + 205, item.ItemDescription[b]), startY + 28 + (b * 20), 2550, item.ItemDescription[b]);
                    }
                }

                AddItem(startX + 75, startY + 91, 3823, 2500);
                AddLabel(startX + 116, startY + 93, 149, Utility.CreateCurrencyString(item.ItemCost));

                AddButton(startX + 196, startY + 90, 2152, 2154, itemButtonIndex, GumpButtonType.Reply, 0);
                AddLabel(startX + 229, startY + 93, 63, "Purchase");

                startY += itemSpacing;
            }

            //Categories
            startX = 120;
            int categorySpacing = 100;

            int categoryCount = categoryEndIndex - categoryStartIndex;

            for (int a = 0; a < categoryCount + 1; a++)
            {
                int categoryIndex       = categoryStartIndex + a;
                int categoryButtonIndex = 40 + categoryIndex;

                if (categoryStartIndex >= totalCategories)
                {
                    continue;
                }

                DonationCategory category = DonationShop.DonationCategories[categoryIndex];

                if (donationCategory == null)
                {
                    continue;
                }

                AddItem(startX + category.CategoryIconOffsetX, 470 + category.CategoryIconOffsetY, category.CategoryIconItemId, category.CategoryIconHue);

                if (categoryIndex == m_CategorySelected)
                {
                    AddLabel(Utility.CenteredTextOffset(startX + 45, category.CategoryName), 445, 149, category.CategoryName);
                    AddButton(startX + 45, 475, 9724, 9721, categoryButtonIndex, GumpButtonType.Reply, 0);
                }

                else
                {
                    AddLabel(Utility.CenteredTextOffset(startX + 45, category.CategoryName), 445, WhiteTextHue, category.CategoryName);
                    AddButton(startX + 45, 475, 9721, 9724, categoryButtonIndex, GumpButtonType.Reply, 0);
                }

                startX += categorySpacing;
            }

            //Previous Category
            if (categoryPage > 0)
            {
                AddButton(77, 475, 4014, 4016, 5, GumpButtonType.Reply, 0);
            }

            //Next Category
            if (categoryPage < totalCategoryPages - 1)
            {
                AddButton(609, 475, 4005, 4007, 6, GumpButtonType.Reply, 0);
            }
        }