예제 #1
0
 private static MercTeam AnalyzeTeam(Team team, MatchDetail match)
 {
     // get teammembers
     var teamMembers = match.Participants.Where(x => x.TeamId == team.TeamId).ToList();
     var res = new MercTeam();
     // safe data like baronkill
     res.BaronKills = team.BaronKills;
     // dragonkill
     res.DragonKills = team.DragonKills;
     // did they firstblood
     res.FirstBlood = team.FirstBlood;
     // when first baron
     res.FirstBaron = match.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.MonsterType == "BARON_NASHOR" && teamMembers.Select(z => z.ParticipantId).Contains(y.KillerId))).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // when first dragon
     res.FirstDragon = match.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.MonsterType == "DRAGON" && teamMembers.Select(z => z.ParticipantId).Contains(y.KillerId))).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // when first inhibitor
     res.FirstInhibitorTaken = match.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "BUILDING_KILL" && teamMembers.Select(z => z.ParticipantId).Contains(y.KillerId)) && x.Events.Any(y => y.BuildingType == "INHIBITOR_BUILDING")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // when first tower
     res.FirstTowerTaken = match.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "BUILDING_KILL" && teamMembers.Select(z => z.ParticipantId).Contains(y.KillerId)) && x.Events.Any(y => y.BuildingType == "TOWER_BUILDING")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // did they win?
     res.Winner = team.Winner;
     // find out wich mercaneries the members bouhgt
     res.MercsBought = new List<MercData>();
     foreach (var m in teamMembers)
     {
         // find an ITEM_PURCHASED event with one of the item ids from metadata
         var mercId = match.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "ITEM_PURCHASED" && meta_data.Merc.Contains(y.ItemId) && y.ParticipantId == m.ParticipantId)).Select(x => x.Events.FirstOrDefault(y => y.EventType == "ITEM_PURCHASED" && meta_data.Merc.Contains(y.ItemId) && y.ParticipantId == m.ParticipantId)).FirstOrDefault();
         if (mercId != null)
         {
             var merc = new MercData();
             merc.Id = mercId.ItemId;
             merc.ParticipantId = m.ParticipantId;
             // look max defenslevel bought
             merc.DefenseLevel = match.Timeline
                 .Frames.Where(x =>
                     x.Events != null
                     && x.Events.Any(y => y.EventType == "ITEM_PURCHASED" && meta_data.Defense.Select(z => z.Id).Contains(y.ItemId) && y.ParticipantId == m.ParticipantId)
                     ).Count();
             // look max offenselevel bought
             merc.OffenseLevel = match.Timeline
                 .Frames.Where(x =>
                     x.Events != null
                     && x.Events.Any(y => y.EventType == "ITEM_PURCHASED" && meta_data.Offense.Select(z => z.Id).Contains(y.ItemId) && y.ParticipantId == m.ParticipantId)
                     ).Count();
             // look max upgradelevel bought
             merc.UpgradeLevel = match.Timeline
                 .Frames.Where(x =>
                     x.Events != null
                     && x.Events.Any(y => y.EventType == "ITEM_PURCHASED" && meta_data.Upgrade.Select(z => z.Id).Contains(y.ItemId) && y.ParticipantId == m.ParticipantId)
                     ).Count();
             res.MercsBought.Add(merc);
         }
     }
     // safe importent data from participant data trash the rest
     res.Participants = teamMembers.Select(x => new Lol.Api.Bilgewater.Participant
     {
         Id = x.ParticipantId,
         ChampionId = x.ChampionId,
         Assists = x.Stats.Assists,
         Deaths = x.Stats.Deaths,
         Kills = x.Stats.Kills,
         MinionsKilled = x.Stats.MinionsKilled,
         NeutralMinionsKilled = x.Stats.NeutralMinionsKilled,
         NeutralMinionsKilledEnemyJungle = x.Stats.NeutralMinionsKilledEnemyJungle,
         NeutralMinionsKilledTeamJungle = x.Stats.NeutralMinionsKilledTeamJungle,
         PentaKills = x.Stats.PentaKills,
         Item0 = x.Stats.Item0,
         Item1 = x.Stats.Item1,
         Item2 = x.Stats.Item2,
         Item3 = x.Stats.Item3,
         Item4 = x.Stats.Item4,
         Item5 = x.Stats.Item5,
         Item6 = x.Stats.Item6,
         Spell1Id = x.Spell1Id,
         Spell2Id = x.Spell2Id,
     }).ToList();
     return res;
 }
예제 #2
0
 private static MercStatistcs AnalyzeMatch(MatchDetail converted)
 {
     var res = new MercStatistcs();
     // id is somewhat obligatory
     res.MatchId = converted.MatchId;
     // using linq we look in frames for the first event with "BARON_NASHOR" and extract the timetamp in seconds - is milliseconds in file
     res.FirstBaron = converted.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.MonsterType == "BARON_NASHOR")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // using linq we look in frames for the first event with "BARON_DRAGON" and extract the timetamp in seconds - is milliseconds in file
     res.FirstDragon = converted.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.MonsterType == "DRAGON")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // using linq we look in frames for the first event with "CHAMPION_KILL" and extract the timetamp in seconds - is milliseconds in file
     res.FirstBlood = converted.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "CHAMPION_KILL")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // using linq we look in frames for the first event with "BUILDING_KILL" and buildingtype = "INHIBITOR_BUIDLING and extract the timetamp in seconds - is milliseconds in file
     res.FirstInhib = converted.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "BUILDING_KILL") && x.Events.Any(y => y.BuildingType == "INHIBITOR_BUILDING")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // using linq we look in frames for the first event with "BUILDING_KILL" and buildingtype = "TOWER_BUILDING and extract the timetamp in seconds - is milliseconds in file
     res.FirstTower = converted.Timeline.Frames.Where(x => x.Events != null && x.Events.Any(y => y.EventType == "BUILDING_KILL") && x.Events.Any(y => y.BuildingType == "TOWER_BUILDING")).Select(x => x.Timestamp / 1000).OrderBy(x => x).FirstOrDefault();
     // save matchduration
     res.MatchDuration = converted.MatchDuration;
     // get data from teams
     res.TeamBlue = AnalyzeTeam(converted.Teams[0], converted);
     res.TeamRed = AnalyzeTeam(converted.Teams[1], converted);
     return res;
 }