Пример #1
0
        public override bool OnDeath(Mobile mob, Container corpse)
        {
            Mobile killer = mob.FindMostRecentDamager(false);

            if (killer != null && killer.Player)
            {
                DDTeamInfo teamInfo = GetTeamInfo(killer);
                DDTeamInfo victInfo = GetTeamInfo(mob);

                if (teamInfo != null && teamInfo != victInfo)
                {
                    DDPlayerInfo playerInfo = teamInfo[killer];

                    if (playerInfo != null)
                    {
                        playerInfo.Kills += 1;
                        playerInfo.Score += 1; // base frag

                        // extra points for killing someone on the waypoint
                        if (this.Controller.PointA != null)
                        {
                            if (mob.InRange(this.Controller.PointA, 2))
                            {
                                playerInfo.Score += 1;
                            }
                        }

                        if (this.Controller.PointB != null)
                        {
                            if (mob.InRange(this.Controller.PointB, 2))
                            {
                                playerInfo.Score += 1;
                            }
                        }
                    }

                    playerInfo = victInfo[mob];
                    if (playerInfo != null)
                    {
                        playerInfo.Score -= 1;
                    }
                }
            }

            mob.CloseGump(typeof(DDBoardGump));
            mob.SendGump(new DDBoardGump(mob, this));

            m_Context.Requip(mob, corpse);
            DelayBounce(TimeSpan.FromSeconds(30.0), mob, corpse);

            return(false);
        }
Пример #2
0
        public void Reset()
        {
            m_Kills    = 0;
            m_Captures = 0;

            m_Score = 0;

            m_Leader = null;

            m_Players.Clear();

            if (m_Board != null)
            {
                m_Board.m_TeamInfo = this;
            }
        }
Пример #3
0
        public DDPlayerInfo this[Mobile mob]
        {
            get
            {
                if (mob == null)
                {
                    return(null);
                }

                DDPlayerInfo val;

                if (!m_Players.TryGetValue(mob, out val))
                {
                    m_Players[mob] = val = new DDPlayerInfo(this, mob);
                }

                return(val);
            }
        }
Пример #4
0
        private void Finish_Callback()
        {
            List <DDTeamInfo> teams = new List <DDTeamInfo>();

            for (int i = 0; i < m_Context.Participants.Count; ++i)
            {
                DDTeamInfo teamInfo = m_Controller.TeamInfo[i % m_Controller.TeamInfo.Length];

                if (teamInfo != null)
                {
                    teams.Add(teamInfo);
                }
            }

            teams.Sort(delegate(DDTeamInfo a, DDTeamInfo b)
            {
                return(b.Score - a.Score);
            });

            Tournament tourny = m_Context.m_Tournament;

            StringBuilder sb = new StringBuilder();

            if (tourny != null && tourny.TournyType == TournyType.FreeForAll)
            {
                sb.Append(m_Context.Participants.Count * tourny.PlayersPerParticipant);
                sb.Append("-man FFA");
            }
            else if (tourny != null && tourny.TournyType == TournyType.RandomTeam)
            {
                sb.Append(tourny.ParticipantsPerMatch);
                sb.Append("-team");
            }
            else if (tourny != null && tourny.TournyType == TournyType.RedVsBlue)
            {
                sb.Append("Red v Blue");
            }
            else if (tourny != null && tourny.TournyType == TournyType.Faction)
            {
                sb.Append(tourny.ParticipantsPerMatch);
                sb.Append("-team Faction");
            }
            else if (tourny != null)
            {
                for (int i = 0; i < tourny.ParticipantsPerMatch; ++i)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append('v');
                    }

                    sb.Append(tourny.PlayersPerParticipant);
                }
            }

            if (m_Controller != null)
            {
                sb.Append(' ').Append(m_Controller.Title);
            }

            string title = sb.ToString();

            DDTeamInfo winner = (DDTeamInfo)(teams.Count > 0 ? teams[0] : null);

            for (int i = 0; i < teams.Count; ++i)
            {
                TrophyRank rank = TrophyRank.Bronze;

                if (i == 0)
                {
                    rank = TrophyRank.Gold;
                }
                else if (i == 1)
                {
                    rank = TrophyRank.Silver;
                }

                DDPlayerInfo leader = ((DDTeamInfo)teams[i]).Leader;

                foreach (DDPlayerInfo pl in ((DDTeamInfo)teams[i]).Players.Values)
                {
                    Mobile mob = pl.Player;

                    if (mob == null)
                    {
                        continue;
                    }

                    //"Red v Blue DD Champion"

                    sb = new StringBuilder();

                    sb.Append(title);

                    if (pl == leader)
                    {
                        sb.Append(" Leader");
                    }

                    if (pl.Score > 0)
                    {
                        sb.Append(": ");

                        sb.Append(pl.Score.ToString("N0"));
                        sb.Append(pl.Score == 1 ? " point" : " points");

                        if (pl.Kills > 0)
                        {
                            sb.Append(", ");
                            sb.Append(pl.Kills.ToString("N0"));
                            sb.Append(pl.Kills == 1 ? " kill" : " kills");
                        }

                        if (pl.Captures > 0)
                        {
                            sb.Append(", ");
                            sb.Append(pl.Captures.ToString("N0"));
                            sb.Append(pl.Captures == 1 ? " capture" : " captures");
                        }
                    }

                    Item item = new Trophy(sb.ToString(), rank);

                    if (pl == leader)
                    {
                        item.ItemID = 4810;
                    }

                    item.Name = String.Format("{0}, {1} team", item.Name, ((DDTeamInfo)teams[i]).Name.ToLower());

                    if (!mob.PlaceInBackpack(item))
                    {
                        mob.BankBox.DropItem(item);
                    }

                    int cash = pl.Score * 250;

                    if (cash > 0)
                    {
                        item = new BankCheck(cash);

                        if (!mob.PlaceInBackpack(item))
                        {
                            mob.BankBox.DropItem(item);
                        }

                        mob.SendMessage("You have been awarded a {0} trophy and {1:N0}gp for your participation in this tournament.", rank.ToString().ToLower(), cash);
                    }
                    else
                    {
                        mob.SendMessage("You have been awarded a {0} trophy for your participation in this tournament.", rank.ToString().ToLower());
                    }
                }
            }

            for (int i = 0; i < m_Context.Participants.Count; ++i)
            {
                Participant p = m_Context.Participants[i] as Participant;

                for (int j = 0; j < p.Players.Length; ++j)
                {
                    DuelPlayer dp = p.Players[j];

                    if (dp != null && dp.Mobile != null)
                    {
                        dp.Mobile.CloseGump(typeof(DDBoardGump));
                        dp.Mobile.SendGump(new DDBoardGump(dp.Mobile, this));
                    }
                }

                if (i == winner.TeamID)
                {
                    continue;
                }

                for (int j = 0; j < p.Players.Length; ++j)
                {
                    if (p.Players[j] != null)
                    {
                        p.Players[j].Eliminated = true;
                    }
                }
            }

            m_Context.Finish(m_Context.Participants[winner.TeamID] as Participant);
        }
Пример #5
0
        public DDBoardGump(Mobile mob, DDGame game, DDTeamInfo section)
            : base(60, 60)
        {
            m_Game = game;

            DDTeamInfo ourTeam = game.GetTeamInfo(mob);

            List <IRankedCTF> entries = new List <IRankedCTF>();

            if (section == null)
            {
                for (int i = 0; i < game.Context.Participants.Count; ++i)
                {
                    DDTeamInfo teamInfo = game.Controller.TeamInfo[i % game.Controller.TeamInfo.Length];

                    if (teamInfo != null)
                    {
                        entries.Add(teamInfo);
                    }
                }
            }
            else
            {
                foreach (DDPlayerInfo player in section.Players.Values)
                {
                    if (player.Score > 0)
                    {
                        entries.Add(player);
                    }
                }
            }

            entries.Sort(delegate(IRankedCTF a, IRankedCTF b)
            {
                return(b.Score - a.Score);
            });

            int height = 0;

            if (section == null)
            {
                height = 73 + (entries.Count * 75) + 28;
            }

            Closable = false;

            AddPage(0);

            AddBackground(1, 1, 398, height, 3600);

            AddImageTiled(16, 15, 369, height - 29, 3604);

            for (int i = 0; i < entries.Count; i += 1)
            {
                AddImageTiled(22, 58 + (i * 75), 357, 70, 0x2430);
            }

            AddAlphaRegion(16, 15, 369, height - 29);

            AddImage(215, -45, 0xEE40);
            //AddImage( 330, 141, 0x8BA );

            AddBorderedText(22, 22, 294, 20, Center("DD Scoreboard"), LabelColor32, BlackColor32);

            AddImageTiled(32, 50, 264, 1, 9107);
            AddImageTiled(42, 52, 264, 1, 9157);

            if (section == null)
            {
                for (int i = 0; i < entries.Count; ++i)
                {
                    DDTeamInfo teamInfo = entries[i] as DDTeamInfo;

                    AddImage(30, 70 + (i * 75), 10152);
                    AddImage(30, 85 + (i * 75), 10151);
                    AddImage(30, 100 + (i * 75), 10151);
                    AddImage(30, 106 + (i * 75), 10154);

                    AddImage(24, 60 + (i * 75), teamInfo == ourTeam ? 9730 : 9727, teamInfo.Color - 1);

                    int nameColor   = LabelColor32;
                    int borderColor = BlackColor32;

                    switch (teamInfo.Color)
                    {
                    case 0x47E:
                        nameColor = 0xFFFFFF;
                        break;

                    case 0x4F2:
                        nameColor = 0x3399FF;
                        break;

                    case 0x4F7:
                        nameColor = 0x33FF33;
                        break;

                    case 0x4FC:
                        nameColor = 0xFF00FF;
                        break;

                    case 0x021:
                        nameColor = 0xFF3333;
                        break;

                    case 0x01A:
                        nameColor = 0xFF66FF;
                        break;

                    case 0x455:
                        nameColor   = 0x333333;
                        borderColor = 0xFFFFFF;
                        break;
                    }

                    AddBorderedText(60, 65 + (i * 75), 250, 20, String.Format("{0}: {1}", LadderGump.Rank(1 + i), teamInfo.Name), nameColor, borderColor);

                    AddBorderedText(50 + 10, 85 + (i * 75), 100, 20, "Score:", 0xFFC000, BlackColor32);
                    AddBorderedText(50 + 15, 105 + (i * 75), 100, 20, teamInfo.Score.ToString("N0"), 0xFFC000, BlackColor32);

                    AddBorderedText(110 + 10, 85 + (i * 75), 100, 20, "Kills:", 0xFFC000, BlackColor32);
                    AddBorderedText(110 + 15, 105 + (i * 75), 100, 20, teamInfo.Kills.ToString("N0"), 0xFFC000, BlackColor32);

                    AddBorderedText(160 + 10, 85 + (i * 75), 100, 20, "Captures:", 0xFFC000, BlackColor32);
                    AddBorderedText(160 + 15, 105 + (i * 75), 100, 20, teamInfo.Captures.ToString("N0"), 0xFFC000, BlackColor32);

                    DDPlayerInfo pl = teamInfo.Leader;

                    AddBorderedText(235 + 10, 85 + (i * 75), 250, 20, "Leader:", 0xFFC000, BlackColor32);

                    if (pl != null)
                    {
                        AddBorderedText(235 + 15, 105 + (i * 75), 250, 20, pl.Player.Name, 0xFFC000, BlackColor32);
                    }
                }
            }
            else
            {
            }

            AddButton(314, height - 42, 247, 248, 1, GumpButtonType.Reply, 0);
        }