Пример #1
0
        protected override List <IFightResult> GetResults()
        {
            var challengersRank =
                (int)ChallengersTeam.GetAllFightersWithLeavers().OfType <CharacterFighter>().Average(x => x.Character.ArenaRank);
            var defendersRank =
                (int)DefendersTeam.GetAllFightersWithLeavers().OfType <CharacterFighter>().Average(x => x.Character.ArenaRank);

            var results = (from fighter in GetFightersAndLeavers().OfType <CharacterFighter>()
                           let outcome = fighter.GetFighterOutcome()
                                         select new ArenaFightResult(fighter, outcome, fighter.Loot,
                                                                     ArenaRankFormulas.AdjustRank(fighter.Character.ArenaRank,
                                                                                                  fighter.Team == ChallengersTeam ? defendersRank : challengersRank,
                                                                                                  outcome == FightOutcomeEnum.RESULT_VICTORY)) as IFightResult).ToList();

            foreach (var playerResult in results.OfType <FightPlayerResult>())
            {
                var document = new BsonDocument
                {
                    { "FightId", UniqueId.ToString() },
                    { "FightType", Enum.GetName(typeof(FightTypeEnum), FightType) },
                    { "Duration", GetFightDuration().TotalMilliseconds },
                    { "Team", Enum.GetName(typeof(TeamEnum), playerResult.Fighter.Team.Id) },
                    { "Win", Winners.Id == playerResult.Fighter.Team.Id },
                    { "AcctId", playerResult.Character.Account.Id },
                    { "AcctName", playerResult.Character.Account.Login },
                    { "CharacterId", playerResult.Character.Id },
                    { "CharacterName", playerResult.Character.Name },
                    { "IPAddress", playerResult.Character.Client.IP },
                    { "ClientKey", playerResult.Character.Account.LastHardwareId },
                    { "Date", DateTime.Now.ToString(CultureInfo.InvariantCulture) }
                };

                MongoLogger.Instance.Insert("fights_results", document);
            }

            return(results);
        }
Пример #2
0
        protected static int CalculateRankLoose(CharacterFighter character)
        {
            var opposedTeamRank = (int)character.OpposedTeam.GetAllFightersWithLeavers().OfType <CharacterFighter>().Average(x => x.Character.ArenaRank);

            return(ArenaRankFormulas.AdjustRank(character.Character.ArenaRank, opposedTeamRank, false));
        }