Example #1
0
        public MobFactionsRewardGump(Mobile from, int page) : base(20, 30)
        {
            from.CloseGump(typeof(MobFactionsRewardGump));

            // determine the gump size based on the number of rewards

            Rewards = XmlMobFactionsRewards.RewardsList;

            viewpage = page;

            int height = maxItemsPerPage * y_inc + 120;
            int width  = x_factionoffset + 180;

            /*
             * if(Rewards != null && Rewards.Count > 0)
             * {
             *  height = Rewards.Count*y_inc + 120;
             * }
             */

            AddBackground(0, 0, width, height, 0xDAC);

            AddHtml(30, 20, 350, 50, "Rewards Available for Purchase with Mob Faction Credits", false, false);

            AddLabel(440, 20, 0, String.Format("Available Credits: {0}", XmlMobFactions.GetCredits(from)));

            //AddButton( 30, height - 35, 0xFB7, 0xFB9, 0, GumpButtonType.Reply, 0 );
            //AddLabel( 70, height - 35, 0, "Close" );

            // put the page buttons in the lower right corner
            if (Rewards != null && Rewards.Count > 0)
            {
                AddLabel(width - 165, height - 35, 0, String.Format("Page: {0}/{1}", viewpage + 1, (int)(Rewards.Count / maxItemsPerPage) + 1));

                // page up and down buttons
                AddButton(width - 55, height - 35, 0x15E0, 0x15E4, 13, GumpButtonType.Reply, 0);
                AddButton(width - 35, height - 35, 0x15E2, 0x15E6, 12, GumpButtonType.Reply, 0);
            }


            AddLabel(70, 50, 40, "Reward");
            AddLabel(x_creditoffset, 50, 40, "Credits");

            AddLabel(x_factionoffset, 50, 40, "Minimum Required Faction");

            // display the items with their selection buttons
            if (Rewards != null)
            {
                int y = 50;
                for (int i = 0; i < Rewards.Count; i++)
                {
                    if ((int)(i / maxItemsPerPage) != viewpage)
                    {
                        continue;
                    }

                    XmlMobFactionsRewards r = Rewards[i] as XmlMobFactionsRewards;
                    if (r == null)
                    {
                        continue;
                    }

                    y += y_inc;

                    int texthue = 0;

                    bool meetsrequirement = true;

                    // display the item
                    if (r.RequiredFaction != XmlMobFactions.GroupTypes.End_Unused)
                    {
                        if (XmlMobFactions.GetFactionLevel(from, r.RequiredFaction) > r.MinFaction)
                        {
                            meetsrequirement = true;
                        }
                        else
                        {
                            meetsrequirement = false;
                            texthue          = 33;
                        }

                        // display the faction requirement
                        AddLabel(x_factionoffset, y + 3, texthue, r.RequiredFaction.ToString());
                        AddLabel(x_factionoffset + 110, y + 3, texthue, r.MinFaction.ToString());
                    }

                    // display the name
                    AddLabel(70, y + 3, texthue, r.Name);

                    // display the cost
                    AddLabel(x_creditoffset, y + 3, texthue, r.Cost.ToString());

                    // display the item
                    if (r.ItemID > 0)
                    {
                        AddItem(x_creditoffset + 60, y, r.ItemID);
                    }

                    if (meetsrequirement)
                    {
                        // add the selection button
                        AddButton(30, y, 0xFA5, 0xFA7, 1000 + i, GumpButtonType.Reply, 0);
                    }
                }
            }
        }
Example #2
0
        public override void OnResponse(NetState state, RelayInfo info)
        {
            if (info == null || state == null || state.Mobile == null || Rewards == null)
            {
                return;
            }

            Mobile from = state.Mobile;

            switch (info.ButtonID)
            {
            case 12:
                // page up
                int nitems = 0;
                if (Rewards != null)
                {
                    nitems = Rewards.Count;
                }

                int page = viewpage + 1;
                if (page > (int)(nitems / maxItemsPerPage))
                {
                    page = (int)(nitems / maxItemsPerPage);
                }
                state.Mobile.SendGump(new MobFactionsRewardGump(state.Mobile, page));
                break;

            case 13:
                // page down
                page = viewpage - 1;
                if (page < 0)
                {
                    page = 0;
                }
                state.Mobile.SendGump(new MobFactionsRewardGump(state.Mobile, page));
                break;

            default:
            {
                if (info.ButtonID >= 1000)
                {
                    int selection = info.ButtonID - 1000;
                    if (selection < Rewards.Count)
                    {
                        XmlMobFactionsRewards r = Rewards[selection] as XmlMobFactionsRewards;

                        // check the price
                        if (XmlMobFactions.HasCredits(from, r.Cost))
                        {
                            // create an instance of the reward type
                            object o = null;

                            try{
                                o = Activator.CreateInstance(r.RewardType, r.RewardArgs);
                            } catch {}

                            bool received = true;

                            if (o is Item)
                            {
                                // and give them the item
                                from.AddToBackpack((Item)o);
                            }
                            else
                            if (o is Mobile)
                            {
                                // if it is controllable then set the buyer as master.  Note this does not check for control slot limits.
                                if (o is BaseCreature)
                                {
                                    BaseCreature b = o as BaseCreature;
                                    b.Controlled    = true;
                                    b.ControlMaster = from;
                                }

                                ((Mobile)o).MoveToWorld(from.Location, from.Map);
                            }
                            else
                            if (o is XmlAttachment)
                            {
                                XmlAttachment a = o as XmlAttachment;

                                XmlAttach.AttachTo(from, a);
                            }
                            else
                            {
                                from.SendMessage(33, "unable to create {0}.", r.RewardType.Name);
                                received = false;
                            }

                            // complete the transaction
                            if (received)
                            {
                                // charge them
                                XmlMobFactions.TakeCredits(from, r.Cost);
                                from.SendMessage("You have purchased {0} for {1} credits.", r.Name, r.Cost);
                            }
                        }
                        else
                        {
                            from.SendMessage("Insufficient Credits for {0}.", r.Name);
                        }
                        from.SendGump(new MobFactionsRewardGump(from, viewpage));
                    }
                }
                break;
            }
            }
        }