Ejemplo n.º 1
0
 public CTFFlag(CTFBase homebase, int team)
     : base(0x161D)
 {
     this.Hue      = BaseChallengeGame.TeamColor(team);
     this.Name     = String.Format("Team {0} Flag", team);
     this.HomeBase = homebase;
 }
Ejemplo n.º 2
0
        public override void OnTick()
        {
            this.CheckForDisqualification();

            // check for anyone carrying flags
            if (this.HomeBases != null)
            {
                ArrayList dlist = null;

                foreach (CTFBase b in this.HomeBases)
                {
                    if (b == null || b.Deleted)
                    {
                        if (dlist == null)
                        {
                            dlist = new ArrayList();
                        }
                        dlist.Add(b);
                        continue;
                    }

                    if (!b.Deleted && b.Flag != null && !b.Flag.Deleted)
                    {
                        if (b.Flag.RootParent is Mobile)
                        {
                            Mobile m = b.Flag.RootParent as Mobile;

                            // make sure a participant has it
                            IChallengeEntry entry = this.GetParticipant(m);

                            if (entry != null)
                            {
                                // display the flag
                                //m.PublicOverheadMessage( MessageType.Regular, BaseChallengeGame.TeamColor(b.Team), false, b.Team.ToString());
                                Effects.SendTargetParticles(m, 0x375A, 35, 10, BaseChallengeGame.TeamColor(b.Team), 0x00, 9502,
                                                            (EffectLayer)255, 0x100);
                            }
                            else
                            {
                                b.ReturnFlag();
                            }
                        }
                        else if (!b.HasFlag)
                        {
                            b.ReturnFlag();
                        }
                    }
                }

                if (dlist != null)
                {
                    foreach (CTFBase b in dlist)
                    {
                        this.HomeBases.Remove(b);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public CTFBase(CTFGauntlet gauntlet, int team) : base(0x1183)
        {
            Movable    = false;
            Hue        = BaseChallengeGame.TeamColor(team);
            Team       = team;
            Name       = String.Format("Team {0} Base", team);
            m_gauntlet = gauntlet;

            // add the flag

            Flag          = new CTFFlag(this, team);
            Flag.HomeBase = this;
            HasFlag       = true;
        }
Ejemplo n.º 4
0
            public TeamsGump(TeamDeathmatchGauntlet gauntlet, Mobile from)
                : base(350, 30)
            {
                if (gauntlet == null || from == null)
                {
                    return;
                }

                int yinc = 25;

                ArrayList Teams = gauntlet.GetTeams();

                // gump height determined by number of teams
                int height = Teams.Count * yinc + 80;

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

                this.AddLabel(60, 10, 0, XmlPoints.GetText(from, 200595));   // "Deathmatch Team Status"

                this.AddLabel(20, 40, 0, XmlPoints.GetText(from, 200591));   // "Team"
                this.AddLabel(75, 40, 0, XmlPoints.GetText(from, 200596));   // "Members"
                this.AddLabel(135, 40, 0, XmlPoints.GetText(from, 200597));  // "Active"
                this.AddLabel(185, 40, 0, XmlPoints.GetText(from, 200598));  // "Score"

                int yoffset = 60;

                // list all of the teams and their status
                foreach (TeamInfo t in Teams)
                {
                    int teamhue = 0;
                    if (t.ID > 0)
                    {
                        teamhue = BaseChallengeGame.TeamColor(t.ID);
                    }
                    this.AddLabel(20, yoffset, teamhue, t.ID.ToString());
                    this.AddLabel(75, yoffset, teamhue, t.Members.Count.ToString());
                    this.AddLabel(135, yoffset, teamhue, t.NActive.ToString());
                    this.AddLabel(185, yoffset, teamhue, t.Score.ToString());

                    yoffset += yinc;
                }
            }
Ejemplo n.º 5
0
        public TeamDeathballGump(TeamDeathballGauntlet gauntlet, Mobile from, int page) : base(20, 30)
        {
            if (from == null || gauntlet == null || gauntlet.Deleted || gauntlet.Challenger == null)
            {
                return;
            }

            from.CloseGump(typeof(TeamDeathballGump));

            m_gauntlet = gauntlet;

            viewpage = page;

            int height = 525;

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

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

            AddImageTiled(15, 130, 320, 20, 0xdb3);


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

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

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

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

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

                if (gauntlet.TargetScore > 0)
                {
                    AddLabel(20, 110, 0, String.Format(XmlPoints.GetText(from, 200561), gauntlet.TargetScore));   // "Target Score: {0}"
                }
                else
                {
                    AddLabel(20, 110, 0, XmlPoints.GetText(from, 200562));  // "Target Score: None"
                }
                int yoffset = 155;

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


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

                    if (entry == null)
                    {
                        continue;
                    }

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

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

                AddLabel(160, 130, 0, XmlPoints.GetText(from, 200591));                                                                               // "Team"

                for (int i = 0; i < m_WorkingList.Count; i++)
                {
                    // determine which page is being viewed

                    if ((int)(i / PlayersPerPage) != viewpage)
                    {
                        continue;
                    }

                    TeamDeathballGauntlet.ChallengeEntry entry = (TeamDeathballGauntlet.ChallengeEntry)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 (!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 (!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)
                        {
                            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 == m_gauntlet.Challenger)
                        {
                            AddImageTiled(223, yoffset, 20, 19, textentrybackground);
                            AddTextEntry(225, yoffset, 20, 19, 0, 500 + i, entry.Team.ToString());
                        }
                        if (from == m_gauntlet.Challenger || from == entry.Participant)
                        {
                            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 && !m_gauntlet.GameCompleted)
                        {
                            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 (entry.Winner)
                            {
                                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);
                        }
                        AddLabel(40, yoffset, teamhue, m.Name);
                        AddLabel(165, yoffset, teamhue, entry.Team.ToString());
                        AddLabel(255, yoffset, texthue, statusmsg);

                        if (m_gauntlet.GameInProgress || m_gauntlet.GameCompleted)
                        {
                            AddLabel(13, yoffset, 0, entry.Score.ToString());
                        }
                    }

                    yoffset += y_inc;
                }
            }


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

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

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

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

                // set arena size
                AddButton(20, height - 60, 0xFAE, 0xFAF, 20, GumpButtonType.Reply, 0);
                AddImageTiled(130, height - 60, 30, 19, textentrybackground);
                AddTextEntry(130, height - 60, 30, 25, 0, 20, m_gauntlet.ArenaSize.ToString());
                AddLabel(55, height - 60, 0, XmlPoints.GetText(from, 200573));      //  "Arena Size: "

                // set target score
                AddButton(200, height - 85, 0xFAE, 0xFAF, 30, GumpButtonType.Reply, 0);
                AddImageTiled(275, height - 85, 30, 19, textentrybackground);
                AddTextEntry(275, height - 85, 30, 25, 0, 30, m_gauntlet.TargetScore.ToString());
                AddLabel(235, height - 85, 0, XmlPoints.GetText(from, 200566));      //  "Score: "

                // set teams
                AddButton(200, height - 60, 0xFAE, 0xFAF, 11, GumpButtonType.Reply, 0);
                AddLabel(240, height - 60, 0, XmlPoints.GetText(from, 200592));    // "Set Teams"
            }
            else
            {
                AddImageTiled(15, height - 60, 320, 20, 0xdb3);
            }

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

            if (gauntlet.GameInProgress)
            {
                AddLabel(150, height - 35, 68, XmlPoints.GetText(from, 200533));   // "Game is in progress!"
            }
            else
            if (gauntlet.Winner != 0)
            {
                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(m_gauntlet, from));
        }
Ejemplo n.º 6
0
            public TeamsGump(CTFGauntlet gauntlet, Mobile from)
                : base(350, 30)
            {
                this.m_gauntlet = gauntlet;

                int yinc = 25;

                if (gauntlet == null)
                {
                    return;
                }

                ArrayList Teams = gauntlet.GetTeams();

                // make sure that all bases have teams defined
                ArrayList dlist = new ArrayList();

                foreach (CTFBase b in gauntlet.HomeBases)
                {
                    bool hasteam = false;
                    if (Teams != null)
                    {
                        foreach (TeamInfo t in Teams)
                        {
                            if (t.ID == b.Team)
                            {
                                hasteam = true;
                                break;
                            }
                        }
                    }

                    if (!hasteam)
                    {
                        // delete it
                        dlist.Add(b);
                    }
                }

                foreach (CTFBase b in dlist)
                {
                    gauntlet.HomeBases.Remove(b);
                    if (b != null)
                    {
                        b.Delete();
                    }
                }

                // gump height determined by number of teams
                int height = Teams.Count * yinc + 80;

                if (from == this.m_gauntlet.Challenger && !this.m_gauntlet.GameLocked)
                {
                    this.AddBackground(0, 0, 290, height, 0xDAC);
                    this.AddLabel(240, 40, 0, XmlPoints.GetText(from, 200622));    // "Base"
                }
                else
                {
                    this.AddBackground(0, 0, 260, height, 0xDAC);
                }
                //AddAlphaRegion( 0, 0, 340, height );

                this.AddLabel(60, 10, 0, XmlPoints.GetText(from, 200623));    // "CTF Team Status"

                this.AddLabel(20, 40, 0, XmlPoints.GetText(from, 200591));    // "Team"
                this.AddLabel(75, 40, 0, XmlPoints.GetText(from, 200596));    // "Members"
                this.AddLabel(135, 40, 0, XmlPoints.GetText(from, 200597));   // "Active"
                this.AddLabel(185, 40, 0, XmlPoints.GetText(from, 200598));   // "Score"

                int yoffset = 60;

                // list all of the teams and their status
                foreach (TeamInfo t in Teams)
                {
                    int teamhue = 0;
                    if (t.ID > 0)
                    {
                        teamhue = BaseChallengeGame.TeamColor(t.ID);
                    }
                    this.AddLabel(20, yoffset, teamhue, t.ID.ToString());
                    this.AddLabel(75, yoffset, teamhue, t.Members.Count.ToString());
                    this.AddLabel(135, yoffset, teamhue, t.NActive.ToString());
                    this.AddLabel(185, yoffset, teamhue, t.Score.ToString());

                    // organizer gets the base placement buttons
                    if (from == this.m_gauntlet.Challenger && !this.m_gauntlet.GameLocked && t.ID > 0)
                    {
                        this.AddButton(240, yoffset, 0xFAE, 0xFAF, 1000 + t.ID, GumpButtonType.Reply, 0);
                    }

                    yoffset += yinc;
                }
            }
Ejemplo n.º 7
0
        public override void OnMovement(Mobile m, Point3D oldLocation)
        {
            if (m == null || this.m_gauntlet == null)
            {
                return;
            }

            if (m == null || m.AccessLevel > AccessLevel.Player)
            {
                return;
            }

            // look for players within range of the base
            // check to see if player is within range of the spawner
            if ((this.Parent == null) && Utility.InRange(m.Location, this.Location, this.m_ProximityRange))
            {
                CTFGauntlet.ChallengeEntry entry = this.m_gauntlet.GetParticipant(m) as CTFGauntlet.ChallengeEntry;

                if (entry == null)
                {
                    return;
                }

                bool carryingflag = false;
                // is the player carrying a flag?
                foreach (CTFBase b in this.m_gauntlet.HomeBases)
                {
                    if (b != null && !b.Deleted && b.Flag != null && b.Flag.RootParent == m)
                    {
                        carryingflag = true;
                        break;
                    }
                }

                // if the player is on an opposing team and the flag is at the base and the player doesnt already
                // have a flag then give them the flag
                if (entry.Team != this.Team && this.HasFlag && !carryingflag)
                {
                    m.AddToBackpack(this.m_Flag);
                    this.HasFlag = false;
                    this.m_gauntlet.GameBroadcast(100420, entry.Team, this.Team); // "Team {0} has the Team {1} flag"
                    this.m_gauntlet.GameBroadcastSound(513);
                }
                else if (entry.Team == this.Team)
                {
                    // if the player has an opposing teams flag then give them a point and return the flag
                    foreach (CTFBase b in this.m_gauntlet.HomeBases)
                    {
                        if (b != null && !b.Deleted && b.Flag != null && b.Flag.RootParent == m && b.Team != entry.Team)
                        {
                            this.m_gauntlet.GameBroadcast(100421, entry.Team);  // "Team {0} has scored"
                            this.m_gauntlet.AddScore(entry);

                            Effects.SendTargetParticles(entry.Participant, 0x375A, 35, 20, BaseChallengeGame.TeamColor(entry.Team), 0x00, 9502,
                                                        (EffectLayer)255, 0x100);
                            // play the score sound
                            this.m_gauntlet.ScoreSound(entry.Team);

                            b.ReturnFlag(false);
                            break;
                        }
                    }
                }
            }
        }