Exemple #1
0
        public override void OnResponse(NetState state, RelayInfo info)
        {
            if (state == null || info == null || state.Mobile == null || this.m_gauntlet == null || this.m_gauntlet.Challenger == null)
            {
                return;
            }

            XmlPoints afrom = (XmlPoints)XmlAttach.FindAttachment(state.Mobile, typeof(XmlPoints));

            switch (info.ButtonID)
            {
            case 1:
                // refresh

                //m_gauntlet.CheckForDisqualification();

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                break;

            case 10:
                // Entry fee
                int       val = 0;
                TextRelay tr  = info.GetTextEntry(10);
                if (tr != null)
                {
                    try
                    {
                        val = int.Parse(tr.Text);
                    }
                    catch
                    {
                    }
                }
                this.m_gauntlet.EntryFee = val;

                this.m_gauntlet.ResetAcceptance();

                // update all the gumps
                RefreshAllGumps(this.m_gauntlet, true);

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                break;

            case 11:
                // update teams
                if (this.m_WorkingList != null)
                {
                    for (int i = 0; i < this.m_WorkingList.Count; i++)
                    {
                        // is this on the visible page?
                        if ((int)(i / this.PlayersPerPage) != this.viewpage)
                        {
                            continue;
                        }

                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[i];
                        if (entry != null)
                        {
                            int tval = 0;
                            tr = info.GetTextEntry(500 + i);
                            if (tr != null)
                            {
                                try
                                {
                                    tval = int.Parse(tr.Text);
                                }
                                catch
                                {
                                }
                            }
                            entry.Team = tval;
                        }
                    }
                }

                this.m_gauntlet.ResetAcceptance();
                // update all the gumps
                RefreshAllGumps(this.m_gauntlet, true);

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                break;

            case 12:
                // page up
                // try doing the default for non-participants
                int nplayers = 0;
                if (this.m_gauntlet.Participants != null)
                {
                    nplayers = this.m_gauntlet.Participants.Count;
                }

                int page = this.viewpage + 1;
                if (page > (int)(nplayers / this.PlayersPerPage))
                {
                    page = (int)(nplayers / this.PlayersPerPage);
                }

                if (this.m_WorkingList != null)
                {
                    for (int i = 0; i < this.m_WorkingList.Count; i++)
                    {
                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[i];
                        if (entry != null)
                        {
                            if (entry.Participant == state.Mobile)
                            {
                                entry.PageBeingViewed++;

                                if (entry.PageBeingViewed > (int)(nplayers / this.PlayersPerPage))
                                {
                                    entry.PageBeingViewed = (int)(nplayers / this.PlayersPerPage);
                                }

                                page = entry.PageBeingViewed;
                                //break;
                            }
                        }
                    }
                }

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, page));
                break;

            case 13:
                // page down
                // try doing the default for non-participants
                page = this.viewpage - 1;
                if (page < 0)
                {
                    page = 0;
                }
                if (this.m_WorkingList != null)
                {
                    for (int i = 0; i < this.m_WorkingList.Count; i++)
                    {
                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[i];
                        if (entry != null)
                        {
                            if (entry.Participant == state.Mobile)
                            {
                                entry.PageBeingViewed--;

                                if (entry.PageBeingViewed < 0)
                                {
                                    entry.PageBeingViewed = 0;
                                }

                                page = entry.PageBeingViewed;
                                //break;
                            }
                        }
                    }
                }

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, page));
                break;

            case 20:
                // arena size
                val = 0;
                tr  = info.GetTextEntry(20);
                if (tr != null)
                {
                    try
                    {
                        val = int.Parse(tr.Text);
                    }
                    catch
                    {
                    }
                }
                this.m_gauntlet.ArenaSize = val;

                this.m_gauntlet.ResetAcceptance();

                // update all the gumps
                RefreshAllGumps(this.m_gauntlet, true);

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                break;

            case 100:

                // add to Participants
                if (this.m_gauntlet.Participants == null)
                {
                    this.m_gauntlet.Participants = new ArrayList();
                }

                if (this.MaxTeamSize > 0 && this.m_gauntlet.Participants.Count >= this.MaxTeamSize)
                {
                    XmlPoints.SendText(state.Mobile, 100535);         // "Challenge is full!"
                }
                else
                {
                    state.Mobile.Target = new MemberTarget(this.m_gauntlet, this.m_gauntlet.Participants);
                }

                state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                break;

            case 300:
                // Start game
                if (this.m_WorkingList == null)
                {
                    return;
                }

                bool complete = true;
                foreach (TeamLMSGauntlet.ChallengeEntry entry in this.m_WorkingList)
                {
                    if (entry != null)
                    {
                        Mobile m = entry.Participant;

                        if (m == null)
                        {
                            continue;
                        }

                        if (!this.m_gauntlet.CheckQualify(m))
                        {
                            complete = false;
                            break;
                        }

                        if (!entry.Accepted)
                        {
                            XmlPoints.SendText(this.m_gauntlet.Challenger, 100539, m.Name);      // "{0} has not accepted yet."
                            complete = false;
                            break;
                        }

                        // and they have a team
                        if (entry.Team <= 0)
                        {
                            XmlPoints.SendText(this.m_gauntlet.Challenger, 100594, m.Name);     // "{0} has not been assigned a team."
                            complete = false;
                        }
                    }
                }

                if (this.m_WorkingList.Count < 2)
                {
                    XmlPoints.SendText(this.m_gauntlet.Challenger, 100540);      // "Insufficient number of players."
                    complete = false;
                }
                // copy all of the accepted entries to the final participants list

                if (complete)
                {
                    this.m_gauntlet.Participants = new ArrayList();

                    foreach (TeamLMSGauntlet.ChallengeEntry entry in this.m_WorkingList)
                    {
                        if (entry != null)
                        {
                            Mobile m = entry.Participant;

                            if (m == null)
                            {
                                continue;
                            }

                            // try to collect any entry fee
                            if (!this.m_gauntlet.CollectEntryFee(m, this.m_gauntlet.EntryFee))
                            {
                                continue;
                            }

                            // set up the challenge on each player
                            XmlPoints a = (XmlPoints)XmlAttach.FindAttachment(m, typeof(XmlPoints));
                            if (a != null)
                            {
                                a.ChallengeGame = this.m_gauntlet;
                            }

                            entry.Status = ChallengeStatus.Active;

                            this.m_gauntlet.Participants.Add(entry);
                        }
                    }

                    // and lock the game
                    this.m_gauntlet.StartGame();

                    // refresh all gumps
                    RefreshAllGumps(this.m_gauntlet, true);
                }
                else
                {
                    state.Mobile.SendGump(new TeamLMSGump(this.m_gauntlet, state.Mobile, this.viewpage));
                }

                break;

            default:
            {
                // forfeit buttons
                if (info.ButtonID >= 4000)
                {
                    int selection = info.ButtonID - 4000;

                    if (selection < this.m_WorkingList.Count)
                    {
                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[selection];

                        // find the master participants list entry with the same participant
                        if (this.m_gauntlet.Participants != null)
                        {
                            TeamLMSGauntlet.ChallengeEntry forfeitentry = null;

                            foreach (TeamLMSGauntlet.ChallengeEntry masterentry in this.m_gauntlet.Participants)
                            {
                                if (entry == masterentry)
                                {
                                    forfeitentry = masterentry;
                                    break;
                                }
                            }

                            // and remove it
                            if (forfeitentry != null)
                            {
                                forfeitentry.Status = ChallengeStatus.Forfeit;

                                // inform him that he has been kicked
                                this.m_gauntlet.Forfeit(forfeitentry.Participant);
                            }
                        }
                    }
                }
                // kick buttons
                if (info.ButtonID >= 2000)
                {
                    int selection = info.ButtonID - 2000;

                    if (selection < this.m_WorkingList.Count)
                    {
                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[selection];
                        // find the master participants list entry with the same participant
                        if (this.m_gauntlet.Participants != null)
                        {
                            TeamLMSGauntlet.ChallengeEntry kickentry = null;

                            foreach (TeamLMSGauntlet.ChallengeEntry masterentry in this.m_gauntlet.Participants)
                            {
                                if (entry == masterentry)
                                {
                                    kickentry = masterentry;
                                    break;
                                }
                            }

                            // and remove it
                            if (kickentry != null)
                            {
                                this.m_gauntlet.Participants.Remove(kickentry);

                                // refresh his gump and inform him that he has been kicked
                                if (kickentry.Participant != null)
                                {
                                    XmlPoints.SendText(kickentry.Participant, 100545, this.m_gauntlet.ChallengeName);         // "You have been kicked from {0}"
                                    kickentry.Participant.SendGump(new TeamLMSGump(this.m_gauntlet, kickentry.Participant, this.viewpage));
                                }
                            }
                        }

                        this.m_gauntlet.ResetAcceptance();
                    }

                    // refresh all gumps
                    RefreshAllGumps(this.m_gauntlet, true);
                    //state.Mobile.SendGump( new TeamLMSGump( m_gauntlet, state.Mobile));
                }
                else if (info.ButtonID >= 1000)
                {
                    int selection = info.ButtonID - 1000;
                    // set the acceptance flag of the participant
                    if (selection < this.m_WorkingList.Count)
                    {
                        TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[selection];

                        entry.Accepted = !entry.Accepted;
                    }

                    // refresh all gumps
                    RefreshAllGumps(this.m_gauntlet, true);
                    //state.Mobile.SendGump( new TeamLMSGump( m_gauntlet, state.Mobile));
                }

                break;
            }
            }
        }
Exemple #2
0
        public TeamLMSGump(TeamLMSGauntlet gauntlet, Mobile from, int page)
            : base(20, 30)
        {
            if (from == null || gauntlet == null || gauntlet.Deleted || gauntlet.Challenger == null)
            {
                return;
            }

            from.CloseGump(typeof(TeamLMSGump));

            this.m_gauntlet = gauntlet;

            this.viewpage = page;

            int height = 500;

            this.AddBackground(0, 0, 350, height, 0xDAC);
            //AddAlphaRegion( 0, 0, 340, height );

            this.AddLabel(100, 10, 0, XmlPoints.GetText(from, 200610));                                          // "Team LMS Challenge"
            this.AddLabel(20, 30, 0, String.Format(XmlPoints.GetText(from, 200501), gauntlet.Challenger.Name));  // "Organized by: {0}"
            this.AddLabel(20, 50, 0, String.Format(XmlPoints.GetText(from, 200502), this.m_gauntlet.EntryFee));  // "Entry Fee: {0}"
            this.AddLabel(20, 70, 0, String.Format(XmlPoints.GetText(from, 200503), this.m_gauntlet.ArenaSize)); // "Arena Size: {0}"

            this.AddImageTiled(15, 110, 320, 20, 0xdb3);

            // display all of the current team members
            if (gauntlet.Participants != null)
            {
                // copy the master list to a temporary working list
                this.m_WorkingList = (ArrayList)gauntlet.Participants.Clone();

                this.AddLabel(150, 50, 0, String.Format(XmlPoints.GetText(from, 200504), this.m_WorkingList.Count * this.m_gauntlet.EntryFee)); // "Total Purse: {0}"

                this.AddLabel(150, 70, 0, String.Format(XmlPoints.GetText(from, 200505), this.m_gauntlet.Location, this.m_gauntlet.Map));       // "Loc: {0} {1}"

                this.AddLabel(20, 90, 0, String.Format(XmlPoints.GetText(from, 200506), gauntlet.Participants.Count));                          // "Players: {0}"

                this.AddLabel(150, 90, 0, String.Format(XmlPoints.GetText(from, 200507), gauntlet.ActivePlayers()));                            // "Active: {0}"

                int yoffset = 135;

                // page up and down buttons
                this.AddButton(300, 110, 0x15E0, 0x15E4, 13, GumpButtonType.Reply, 0);
                this.AddButton(320, 110, 0x15E2, 0x15E6, 12, GumpButtonType.Reply, 0);

                // find the players entry to determine the viewing page
                for (int i = 0; i < this.m_WorkingList.Count; i++)
                {
                    TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[i];

                    if (entry == null)
                    {
                        continue;
                    }

                    if (entry.Participant == from)
                    {
                        this.viewpage = entry.PageBeingViewed;
                        break;
                    }
                }

                this.AddLabel(220, 110, 0, String.Format(XmlPoints.GetText(from, 200508), this.viewpage + 1, (int)(this.m_WorkingList.Count / this.PlayersPerPage) + 1)); // "Page: {0}/{1}"

                this.AddLabel(155, 110, 0, XmlPoints.GetText(from, 200591));                                                                                              // "Team"

                for (int i = 0; i < this.m_WorkingList.Count; i++)
                {
                    // determine which page is being viewed
                    if ((int)(i / this.PlayersPerPage) != this.viewpage)
                    {
                        continue;
                    }

                    TeamLMSGauntlet.ChallengeEntry entry = (TeamLMSGauntlet.ChallengeEntry) this.m_WorkingList[i];

                    if (entry == null)
                    {
                        continue;
                    }

                    // display the entry with a color indicating whether they have accepted or not
                    Mobile m = entry.Participant;

                    string statusmsg = XmlPoints.GetText(from, 200509);   // "Waiting"
                    int    texthue   = 0;

                    // this section is available during game setup
                    if (!this.m_gauntlet.GameLocked)
                    {
                        statusmsg = XmlPoints.GetText(from, 200509);  // "Waiting"
                        if (entry.Accepted)
                        {
                            texthue   = 68;
                            statusmsg = XmlPoints.GetText(from, 200510);    // "Accepted"
                        }

                        // check to see if they have the Entry fee
                        if (!this.m_gauntlet.HasEntryFee(m))
                        {
                            texthue   = 33;
                            statusmsg = XmlPoints.GetText(from, 200511);   // "Insufficient funds"
                        }

                        // if the game is still open then enable these buttons

                        // if this is the participant then add the accept button to the entry
                        if (m == from)
                        {
                            this.AddButton(15, yoffset, entry.Accepted ? 0xd1 : 0xd0, entry.Accepted ? 0xd0 : 0xd1, 1000 + i, GumpButtonType.Reply, 0);
                        }
                        // if this is the organizer then add the kick button and the team assignment to each entry
                        if (from == this.m_gauntlet.Challenger)
                        {
                            this.AddImageTiled(223, yoffset, 20, 19, textentrybackground);
                            this.AddTextEntry(225, yoffset, 20, 19, 0, 500 + i, entry.Team.ToString());
                        }
                        if (from == this.m_gauntlet.Challenger || from == entry.Participant)
                        {
                            this.AddButton(190, yoffset, 0xFB1, 0xFB3, 2000 + i, GumpButtonType.Reply, 0);
                        }
                    }
                    else
                    {
                        // this section is active after the game has started
                        // enable the forfeit button
                        if (m == from && entry.Status == ChallengeStatus.Active && !this.m_gauntlet.GameCompleted)
                        {
                            this.AddButton(190, yoffset, 0xFB1, 0xFB3, 4000 + i, GumpButtonType.Reply, 0);
                        }

                        if (entry.Status == ChallengeStatus.Forfeit)
                        {
                            texthue   = 33;
                            statusmsg = XmlPoints.GetText(from, 200520);  // "Forfeit"
                        }
                        else if (entry.Caution == ChallengeStatus.Hidden && entry.Status == ChallengeStatus.Active)
                        {
                            texthue   = 53;
                            statusmsg = XmlPoints.GetText(from, 200521);   // "Hidden"
                        }
                        else if (entry.Caution == ChallengeStatus.OutOfBounds && entry.Status == ChallengeStatus.Active)
                        {
                            texthue   = 53;
                            statusmsg = XmlPoints.GetText(from, 200522);  // "Out of Bounds"
                        }
                        else if (entry.Caution == ChallengeStatus.Offline && entry.Status == ChallengeStatus.Active)
                        {
                            texthue   = 53;
                            statusmsg = XmlPoints.GetText(from, 200523);    // "Offline"
                        }
                        else if (entry.Status == ChallengeStatus.Active)
                        {
                            texthue = 68;
                            if (gauntlet.Winner == entry.Team)
                            {
                                statusmsg = XmlPoints.GetText(from, 200524);      // "Winner"
                            }
                            else
                            {
                                statusmsg = XmlPoints.GetText(from, 200525);      // "Active"
                            }
                        }
                        else if (entry.Status == ChallengeStatus.Dead)
                        {
                            texthue   = 33;
                            statusmsg = XmlPoints.GetText(from, 200526);            // "Dead"
                        }
                        else if (entry.Status == ChallengeStatus.Disqualified)
                        {
                            texthue   = 33;
                            statusmsg = XmlPoints.GetText(from, 200527);     // "Disqualified"
                        }
                    }

                    if (m != null)
                    {
                        int teamhue = 0;
                        if (entry.Team > 0)
                        {
                            teamhue = BaseChallengeGame.TeamColor(entry.Team);
                        }
                        this.AddLabel(40, yoffset, teamhue, m.Name);
                        this.AddLabel(165, yoffset, teamhue, entry.Team.ToString());
                        this.AddLabel(255, yoffset, texthue, statusmsg);
                    }

                    yoffset += this.y_inc;
                }
            }

            // the challenger gets additional options
            if (from == gauntlet.Challenger && !this.m_gauntlet.GameLocked)
            {
                this.AddImageTiled(15, height - 110, 320, 20, 0xdb3);

                this.AddButton(130, height - 35, 0xFA8, 0xFAA, 100, GumpButtonType.Reply, 0);
                this.AddLabel(170, height - 35, 0, XmlPoints.GetText(from, 200528));      // "Add"

                this.AddButton(230, height - 35, 0xFB7, 0xFB9, 300, GumpButtonType.Reply, 0);
                this.AddLabel(270, height - 35, 0, XmlPoints.GetText(from, 200529));     // "Start"

                // set teams
                this.AddButton(230, height - 85, 0xFAE, 0xFAF, 11, GumpButtonType.Reply, 0);
                this.AddLabel(270, height - 85, 0, XmlPoints.GetText(from, 200592));   // "Set Teams"

                // set entry fee
                this.AddButton(20, height - 85, 0xFAE, 0xFAF, 10, GumpButtonType.Reply, 0);
                this.AddImageTiled(160, height - 85, 60, 19, textentrybackground);
                this.AddTextEntry(160, height - 85, 60, 25, 0, 10, this.m_gauntlet.EntryFee.ToString());
                this.AddLabel(60, height - 85, 0, XmlPoints.GetText(from, 200530));    // "Set Entry Fee: "

                // set arena size
                this.AddButton(20, height - 60, 0xFAE, 0xFAF, 20, GumpButtonType.Reply, 0);
                this.AddImageTiled(160, height - 60, 30, 19, textentrybackground);
                this.AddTextEntry(160, height - 60, 30, 25, 0, 20, this.m_gauntlet.ArenaSize.ToString());
                this.AddLabel(60, height - 60, 0, XmlPoints.GetText(from, 200531));  // "Set Arena Size: "
            }
            else
            {
                this.AddImageTiled(15, height - 60, 320, 20, 0xdb3);
            }

            this.AddButton(20, height - 35, 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0);
            this.AddLabel(60, height - 35, 0, XmlPoints.GetText(from, 200532));  // "Refresh"

            if (gauntlet.GameInProgress)
            {
                this.AddLabel(150, height - 35, 68, XmlPoints.GetText(from, 200533));  // "Game is in progress!"
            }
            else if (gauntlet.Winner != 0)
            {
                this.AddLabel(130, height - 35, 68, String.Format(XmlPoints.GetText(from, 200593), gauntlet.Winner));   // "Team {0} is the winner!"
            }

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

            // display the teams gump
            from.CloseGump(typeof(TeamsGump));
            from.SendGump(new TeamsGump(this.m_gauntlet, from));
        }