public void ProcessMatchDetail(MatchDetail detail)
        {
            if (!_matches.Summaries.ContainsKey(detail.MatchId))
            {
                return;
            }
            int heroIdx = detail.HeroId - _minHeroId;

            if (heroIdx < 0 || heroIdx >= _totals.Length)
            {
                return;
            }
            WinRateBuilder.Increment(ref _totals[heroIdx], detail.Winner);
        }
        public void ProcessMatchDetail(MatchDetail detail)
        {
            if (!_matches.Summaries.TryGetValue(detail.MatchId, out MatchSummary summary))
            {
                return;
            }
            int heroIdx = detail.HeroId - _minHeroId;

            if (heroIdx < 0 || heroIdx >= _totalsByHero.Length)
            {
                return;
            }
            WinRateBuilder.Increment(ref _totalsByHero[heroIdx], detail.Winner);
            int mapIdx = summary.MapId - _minMapId;

            if (mapIdx < 0 || mapIdx >= _totalsByHeroAndMap.GetLength(1))
            {
                return;
            }
            WinRateBuilder.Increment(ref _totalsByHeroAndMap[heroIdx, mapIdx], detail.Winner);
        }
Пример #3
0
        public void ProcessMatchDetails(MatchDetail[] detail)
        {
            if (detail.Length != 10 || !_matches.Summaries.ContainsKey(detail[0].MatchId))
            {
                return;
            }

            for (int i = 0; i < 10; i++)
            {
                var detail1  = detail[i];
                int hero1Idx = detail1.HeroId - _minHeroId;
                if (hero1Idx < 0 || hero1Idx >= _baseWinRates.Length || detail1.MirrorMatch)
                {
                    continue;
                }
                WinRateBuilder.Increment(ref _baseWinRates[hero1Idx], detail[i].Winner);
                for (int j = 0; j < i; j++)
                {
                    var detail2  = detail[j];
                    int hero2Idx = detail2.HeroId - _minHeroId;
                    if (hero2Idx < 0 || hero2Idx >= _baseWinRates.Length || detail2.MirrorMatch)
                    {
                        continue;
                    }
                    bool ordered = hero1Idx < hero2Idx;
                    (int heroA, int heroB)key = ordered ? (hero1Idx, hero2Idx) : (hero2Idx, hero1Idx);
                    if (detail1.Winner == detail2.Winner)
                    {
                        WinRateBuilder.Increment(ref _allyWinRates[key.heroA, key.heroB], detail1.Winner);
                    }
                    else
                    {
                        WinRateBuilder.Increment(ref _enemyWinRates[key.heroA, key.heroB], ordered ? detail1.Winner : detail2.Winner);
                    }
                }
            }
        }