Exemplo n.º 1
0
        public ArenaTeam GetPlayerTeam()
        {
            if (m_Player == null)
            {
                return(null);
            }

            ArenaTeam arenaTeam = null;

            if (!ArenaMatch.IsValidArenaMatch(m_ArenaMatch, null, false))
            {
                return(null);
            }

            foreach (ArenaTeam team in m_ArenaMatch.m_Teams)
            {
                if (team == null)
                {
                    continue;
                }
                if (team.Deleted)
                {
                    continue;
                }

                if (team.GetPlayerParticipant(m_Player) != null)
                {
                    return(team);
                }
            }

            return(arenaTeam);
        }
Exemplo n.º 2
0
            protected override void OnTick()
            {
                if (m_ArenaGroupController == null)
                {
                    Stop();
                    return;
                }

                if (m_ArenaGroupController.Deleted)
                {
                    Stop();
                    return;
                }

                if (!m_ArenaGroupController.Enabled)
                {
                    Stop();
                    return;
                }

                if (DateTime.UtcNow >= m_ArenaGroupController.m_NextListingAudit)
                {
                    m_ArenaGroupController.AuditListings();
                }

                ArenaController emptyArena = m_ArenaGroupController.GetAvailableArena();

                if (emptyArena != null)
                {
                    foreach (ArenaMatch arenaMatch in m_ArenaGroupController.m_MatchListings)
                    {
                        if (!ArenaMatch.IsValidArenaMatch(arenaMatch, null, false))
                        {
                            continue;
                        }
                        if (DateTime.UtcNow < arenaMatch.m_NextReadyCheck)
                        {
                            continue;
                        }
                        if (!arenaMatch.IsReadyToStart())
                        {
                            continue;
                        }

                        List <KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> > m_RulesetViolations = new List <KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> >();

                        bool rulesetViolationExists = false;

                        foreach (ArenaTeam arenaTeam in arenaMatch.m_Teams)
                        {
                            if (arenaTeam == null)
                            {
                                continue;
                            }
                            if (arenaTeam.Deleted)
                            {
                                continue;
                            }

                            foreach (ArenaParticipant arenaParticipant in arenaTeam.m_Participants)
                            {
                                if (arenaParticipant == null)
                                {
                                    continue;
                                }
                                if (arenaParticipant.Deleted)
                                {
                                    continue;
                                }
                                if (arenaParticipant.m_Player == null)
                                {
                                    continue;
                                }
                                if (arenaParticipant.Deleted == null)
                                {
                                    continue;
                                }

                                if (arenaMatch.m_Ruleset == null)
                                {
                                    continue;
                                }

                                ArenaRuleset.ArenaRulesetFailureType rulesetFailure = arenaMatch.m_Ruleset.CheckForRulesetViolations(arenaMatch, arenaParticipant.m_Player);

                                m_RulesetViolations.Add(new KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType>(arenaParticipant.m_Player, rulesetFailure));

                                if (rulesetFailure != ArenaRuleset.ArenaRulesetFailureType.None)
                                {
                                    rulesetViolationExists = true;
                                }
                            }
                        }

                        if (rulesetViolationExists)
                        {
                            arenaMatch.BroadcastMessage("Unable to start match due to the following ruleset violations:", 0);

                            bool arenaError = false;

                            foreach (KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> rulesetViolation in m_RulesetViolations)
                            {
                                string message = "";

                                PlayerMobile player = rulesetViolation.Key;
                                ArenaRuleset.ArenaRulesetFailureType rule = rulesetViolation.Value;

                                if (player == null)
                                {
                                    continue;
                                }

                                switch (rulesetViolation.Value)
                                {
                                case ArenaRuleset.ArenaRulesetFailureType.ArenaInvalid: arenaError = true; break;

                                case ArenaRuleset.ArenaRulesetFailureType.Dead: message = player.RawName + ": Not Alive"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.EquipmentAllowed: message = player.RawName + ": Has Restricted Equipment (worn or in backpack)"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.Follower: message = player.RawName + ": Exceeds Follower Control Slots Allowed"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.PackAnimal: message = player.RawName + ": Pack Animals Not Allowed"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.Mount: message = player.RawName + ": Mounts Not Allowed"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.NotInArenaRegion: message = player.RawName + ": Outside of Arena Region"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.NotOnline: message = player.RawName + ": Not Online"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.PoisonedWeapon: message = player.RawName + ": Exceeds Allowed Number of Poisoned Weapons"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.Transformed: message = player.RawName + ": Transformed or Disguised"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.Young: message = player.RawName + ": Young Status"; break;

                                case ArenaRuleset.ArenaRulesetFailureType.NotEnoughArenaCredits: message = player.RawName + ": Insufficient Arena Credits"; break;
                                }

                                if (message != "")
                                {
                                    arenaMatch.BroadcastMessage(message, 1256);
                                }
                            }

                            if (arenaError)
                            {
                                arenaMatch.BroadcastMessage("Arena Configuration Error", 1256);
                            }

                            arenaMatch.m_NextReadyCheck = DateTime.UtcNow + ArenaMatch.ReadyCheckInterval;

                            string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, arenaMatch.m_NextReadyCheck, false, true, true, true, true);

                            arenaMatch.BroadcastMessage("Match will re-attempt to start in " + timeRemaining + ".", 0);
                        }

                        else
                        {
                            arenaMatch.m_MatchStatus = ArenaMatch.MatchStatusType.Fighting;

                            ArenaFight arenaFight = new ArenaFight();

                            arenaFight.m_ArenaController = emptyArena;
                            arenaFight.m_ArenaMatch      = arenaMatch;

                            arenaMatch.m_ArenaFight = arenaFight;

                            emptyArena.m_ArenaFight = arenaFight;

                            arenaFight.Initialize();
                        }
                    }
                }
            }