private static FortniteReplay ReadReplay(FileInfo replayFile) { var reader = new ReplayReader(); var replay = reader.ReadReplay(replayFile.FullName); return(replay); }
static void Main(string[] args) { var serviceCollection = new ServiceCollection() .AddLogging(loggingBuilder => loggingBuilder .AddConsole() .SetMinimumLevel(LogLevel.Error)); var provider = serviceCollection.BuildServiceProvider(); var logger = provider.GetService <ILogger <Program> >(); //var localAppDataFolder = GetFolderPath(SpecialFolder.LocalApplicationData); //var replayFilesFolder = Path.Combine(localAppDataFolder, @"FortniteGame\Saved\Demos"); var replayFilesFolder = @"F:\Projects\FortniteReplayCollection\_upload\season 11\"; var replayFiles = Directory.EnumerateFiles(replayFilesFolder, "*.replay"); var sw = new Stopwatch(); var reader = new ReplayReader(logger, ParseMode.Full); long total = 0; foreach (var replayFile in replayFiles) { sw.Restart(); try { var replay = reader.ReadReplay(replayFile); } catch (Exception ex) { Console.WriteLine(ex); } sw.Stop(); Console.WriteLine($"---- {replayFile} : done in {sw.ElapsedMilliseconds} milliseconds ----"); total += sw.ElapsedMilliseconds; } Console.WriteLine($"total: {total / 1000} seconds ----"); //var replayFile = "Replays/shootergame.replay"; //var replayFile = "Replays/season6.10.replay"; //var replayFile = "Replays/season11.11.replay"; //var replayFile = "Replays/season11.31.replay"; //var replayFile = "Replays/season11.replay"; //var replayFile = "Replays/season12.replay"; //var replayFile = "Replays/collectPickup.replay"; //var sw = new Stopwatch(); //sw.Start(); //var reader = new ReplayReader(logger, ParseMode.Debug); //var replay = reader.ReadReplay(replayFile); //sw.Stop(); //Console.WriteLine($"---- done in {(sw.ElapsedMilliseconds / 1000)} seconds ----"); Console.ReadLine(); }
private void WatcherOnChanged(object sender, FileSystemEventArgs e) { _logger.LogInformation("Starting Process @ {time}", DateTimeOffset.Now); var replay = _reader.ReadReplay(e.FullPath); var newFileName = _config.GetActualFileName(replay); if (_config.MoveToThisFolder == string.Empty || !Directory.Exists(_config.MoveToThisFolder)) { File.Move(e.FullPath, e.FullPath.Replace("autosave", newFileName)); } else { File.Move(e.FullPath, _config.MoveToThisFolder + @$ "\{newFileName}.pmv");
public static void Main(string[] args) { var replayPath = args[0]; var reader = new ReplayReader(); var replay = reader.ReadReplay(replayPath); var players = new List <PlayerData>(); foreach (PlayerData playerData in replay.PlayerData) { if (!String.IsNullOrEmpty(playerData.PlayerId)) { players.Add(playerData); } } var data = new { players = players, killfeed = replay.Eliminations }; Console.Write(JsonSerializer.Serialize(data)); }
static void Main(string[] args) { var serviceCollection = new ServiceCollection() .AddLogging(loggingBuilder => loggingBuilder .AddConsole() .SetMinimumLevel(LogLevel.Warning)); var provider = serviceCollection.BuildServiceProvider(); var logger = provider.GetService <ILogger <Program> >(); //var localAppDataFolder = GetFolderPath(SpecialFolder.LocalApplicationData); ////var replayFilesFolder = Path.Combine(localAppDataFolder, @"FortniteGame\Saved\Demos"); //var replayFilesFolder = @"D:\Projects\FortniteReplayCollection"; //var replayFiles = Directory.EnumerateFiles(replayFilesFolder, "*.replay"); //foreach (var replayFile in replayFiles) //{ // var reader = new ReplayReader(logger); // var replay = reader.ReadReplay(replayFile); //} //var replayFile = "Replays/shootergame.replay"; //var replayFile = "Replays/season6.10.replay"; var replayFile = "Replays/season11.11.replay"; //var replayFile = "Replays/season11.31.replay"; //var replayFile = "Replays/season11.replay"; //var replayFile = "Replays/season12.replay"; //var replayFile = "Replays/collectPickup.replay"; var sw = new Stopwatch(); sw.Start(); var reader = new ReplayReader(logger, Unreal.Core.Models.Enums.ParseMode.Debug); var replay = reader.ReadReplay(replayFile); sw.Stop(); Console.WriteLine($"---- done in {(sw.ElapsedMilliseconds / 1000)} seconds ----"); Console.ReadLine(); }
static void Main(string[] args) { var serviceCollection = new ServiceCollection() .AddLogging(loggingBuilder => loggingBuilder .AddConsole() .SetMinimumLevel(LogLevel.Warning)); var provider = serviceCollection.BuildServiceProvider(); var logger = provider.GetService <ILogger <Program> >(); //var localAppDataFolder = GetFolderPath(SpecialFolder.LocalApplicationData); ////var replayFilesFolder = Path.Combine(localAppDataFolder, @"FortniteGame\Saved\Demos"); //var replayFilesFolder = @"D:\Projects\FortniteReplayCollection"; //var replayFiles = Directory.EnumerateFiles(replayFilesFolder, "*.replay"); //foreach (var replayFile in replayFiles) //{ // var reader = new ReplayReader(logger); // var replay = reader.ReadReplay(replayFile); //} //var replayFile = "Replays/shootergame.replay"; var replayFile = "Replays/season6.10.replay"; //var replayFile = "Replays/season11.11.replay"; //var replayFile = "Replays/season11.replay"; //var replayFile = "Replays/UnsavedReplay-2018.10.06-22.00.32.replay"; //var replayFile = "Replays/UnsavedReplay-2019.04.05-20.22.58.replay"; //var replayFile = "Replays/UnsavedReplay-2019.05.03-21.24.46.replay"; //var replayFile = "Replays/UnsavedReplay-2019.05.22-16.58.41.replay"; //var replayFile = "Replays/UnsavedReplay-2019.06.30-20.39.37.replay"; //var replayFile = "Replays/UnsavedReplay-2019.09.12-21.39.37.replay"; //var replayFile = "Replays/00769AB3D5F45A5ED7B01553227A8A82E07CC592.replay"; var reader = new ReplayReader(logger); var replay = reader.ReadReplay(replayFile); Console.WriteLine("---- done ----"); Console.ReadLine(); }
static void Main(string[] args) { var reader = new ReplayReader(); var file = args[0]; var replay = reader.ReadReplay(file, ParseType.Full); file = file.Split("/")[file.Split("/").Length - 1]; file = file.Split("\\")[file.Split("\\").Length - 1]; int real = 0, totalPlayers = 0, team = -1; string owner = "", session = replay.GameInformation.GameState.SessionId, timeStart = replay.Info.Timestamp.ToString(); JObject playerList = new JObject(); JArray players = new JArray(); JArray killFeed = new JArray(); JObject stats = new JObject(); JArray placements = new JArray(); /* Real Player & Player List Processing */ foreach (var player in replay.GameInformation.Players) { if (player.Teamindex > 2) { totalPlayers++; } if (player.IsPlayersReplay) { owner = player.EpicId.ToLower(); team = player.Teamindex - 2; } else if (!player.IsBot && player.EpicId != null) { JArray t = new JArray(); t.Add(player.Teamindex - 2); t.Add(player.EpicId.ToLower()); t.Add(player.Platform); players.Add(t); real++; } } /* Kill Feed Processing */ string killer, killed; foreach (var kill in replay.GameInformation.KillFeed) { if (kill.FinisherOrDowner != null && kill.Player != null && (kill.CurrentPlayerState == PlayerState.Killed || kill.CurrentPlayerState == PlayerState.Knocked || kill.CurrentPlayerState == PlayerState.BleedOut || kill.CurrentPlayerState == PlayerState.FinallyEliminated)) { JArray t = new JArray(); if (kill.FinisherOrDowner.Teamindex <= 2) { killer = "NPC"; } else { killer = kill.FinisherOrDowner.IsBot ? "BOT" : kill.FinisherOrDowner.EpicId == null ? "bad id" : kill.FinisherOrDowner.EpicId.ToLower(); } if (kill.Player.Teamindex <= 2) { killed = "NPC"; } else { killed = kill.Player.IsBot ? "BOT" : kill.Player.EpicId.ToLower(); } t.Add(killer); t.Add(killed); t.Add(UpdateDeathTag(kill.DeathTags)); t.Add(kill.CurrentPlayerState == PlayerState.Knocked); t.Add(TimeofDeath(kill.DeltaGameTimeSeconds)); t.Add(kill.DeathTags); if (!(killer == "NPC" && killed == "NPC")) { killFeed.Add(t); } } } /* Stats Processing */ try { stats["kills"] = replay.Stats.Eliminations; stats["assists"] = replay.Stats.Assists; stats["accuracy"] = replay.Stats.Accuracy * 100; stats["dealt"] = replay.Stats.DamageToPlayers; stats["taken"] = replay.Stats.DamageTaken; stats["distance"] = replay.Stats.TotalTraveled; } catch (System.NullReferenceException) { // fails in creative modes at times? no idea why stats["kills"] = "N/A"; stats["assists"] = "N/A"; stats["accuracy"] = "N/A"; stats["dealt"] = "N/A"; stats["taken"] = "N/A"; stats["distance"] = "N/A"; } /* Placements Processing */ List <string> pList = new List <string>(); foreach (var p in replay.GameInformation.Players) { if (p.Teamindex > 2 && !StringContains(pList, p.Teamindex.ToString())) { pList.Add(p.Teamindex.ToString()); JObject t = new JObject(); t["team"] = p.Teamindex - 2; t["placement"] = p.Placement; t["members"] = p.IsBot ? "BOT" : p.EpicId.ToLower(); t["kills"] = p.TeamKills; placements.Add(t); } else if (p.Teamindex > 2) // adding a team member { foreach (var t in placements) { if (t["team"].ToString() == (p.Teamindex - 2).ToString()) { t["members"] += "," + (p.IsBot ? "BOT" : p.EpicId.ToLower()); if ((int)t["placement"] > p.Placement) { t["placement"] = p.Placement; // best player of that team takes rank, otherwise this doesn't look right in things like squad fills where someone leaves early and teammates have different placements } break; } } } } playerList["owner"] = owner; playerList["team"] = team; playerList["file"] = file; playerList["session"] = session; playerList["time"] = timeStart; playerList["totalPlayers"] = totalPlayers; playerList["players"] = players; playerList["killfeed"] = killFeed; playerList["stats"] = stats; playerList["placements"] = placements; using (StreamWriter path = File.CreateText(@"playerList.json")) using (JsonTextWriter writer = new JsonTextWriter(path)) playerList.WriteTo(writer); }
static void Main(string[] args) { var serviceCollection = new ServiceCollection() .AddLogging(loggingBuilder => loggingBuilder .AddConsole() .SetMinimumLevel(LogLevel.Warning)); var provider = serviceCollection.BuildServiceProvider(); var logger = provider.GetService <ILogger <Program> >(); //var localAppDataFolder = GetFolderPath(SpecialFolder.LocalApplicationData); ////var replayFilesFolder = Path.Combine(localAppDataFolder, @"FortniteGame\Saved\Demos"); //var replayFilesFolder = @"D:\Projects\FortniteReplayCollection"; //var replayFiles = Directory.EnumerateFiles(replayFilesFolder, "*.replay"); //foreach (var replayFile in replayFiles) //{ // var reader = new ReplayReader(logger); // var replay = reader.ReadReplay(replayFile); //} //var replayFile = "Replays/season12_arena.replay"; //var replayFile = "Replays/season11.31.replay var replayFile = "Replays/broken.replay"; //Used for testing //var replayFile = @"C:\Users\TnT\Source\Repos\FortniteReplayDecompressor_Shiqan\src\ConsoleReader\bin\Release\netcoreapp3.1\Replays\collectPickup.replay"; //var replayFile = "Replays/season11.11.replay"; //Used for testing //var replayFile = "Replays/Test.replay"; //Used for testing //var replayFile = "Replays/shoottest.replay"; //var replayFile = "Replays/tournament2.replay"; //var replayFile = "Replays/creative-season11.21.replay"; //var replayFile = "Replays/creative.replay"; //var replayFile = "Replays/UnsavedReplay-2019.12.11-02.43.14.replay"; //var replayFile = "Replays/UnsavedReplay-2019.12.10-17.47.46.replay"; //var replayFile = "Replays/UnsavedReplay-2019.12.11-01.49.22.replay"; //var replayFile = "Replays/123.replay"; //var replayFile = "Replays/WCReplay.replay"; //var replayFile = "Replays/00769AB3D5F45A5ED7B01553227A8A82E07CC592.replay"; //var replayFile = "Replays/season12_arena.replay"; //var replayFile = "Replays/1.replay"; //var replayFile = "Replays/weapons2.replay"; //var replayFile = "Replays/iceblocks2.replay"; //var replayFile = "Replays/creativeShooting.replay"; Stopwatch sw = new Stopwatch(); double totalTime = 0; string appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); int count = 0; List <double> times = new List <double>(); var reader = new ReplayReader(null, new FortniteReplaySettings { PlayerLocationType = LocationTypes.None, }); string demoPath = Path.Combine(appData, "FortniteGame", "Saved", "Demos"); foreach (string path in Directory.GetFiles(@"C:\Users\TnT\Source\Repos\FortniteReplayDecompressor_Shiqan\src\ConsoleReader\bin\Release\netcoreapp3.1\Replays")) { Console.WriteLine(path); for (int i = 0; i < 2; i++) { ++count; sw.Restart(); var replay = reader.ReadReplay(replayFile, ParseType.Full); sw.Stop(); var b = replay.GameInformation.Players.OrderBy(x => x.Placement); Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}ms. Total Groups Read: {reader?.TotalGroupsRead}. Failed Bunches: {reader?.TotalFailedBunches}. Failed Replicator: {reader?.TotalFailedReplicatorReceives} Null Exports: {reader?.NullHandles} Property Errors: {reader?.PropertyError} Failed Property Reads: {reader?.FailedToRead}"); totalTime += sw.Elapsed.TotalMilliseconds; times.Add(sw.Elapsed.TotalMilliseconds); } Console.WriteLine(); } var fastest5 = times.OrderBy(x => x).Take(10); Console.WriteLine($"Total Time: {totalTime}ms. Average: {((double)totalTime / count):0.00}ms"); Console.WriteLine($"Fastest 10 Time: {fastest5.Sum()}ms. Average: {(fastest5.Sum() / fastest5.Count()):0.00}ms"); Console.WriteLine("---- done ----"); //Console.WriteLine($"Total Errors: {reader?.TotalErrors}"); Console.ReadLine(); }
public ReplayData SingleScan(FileInfo file, int lines) { if (file != null) { if (file.Exists) { ReplayData replay = new ReplayData(); DataCollector collector = new DataCollector(); replay.Path = file.DirectoryName; replay.Name = file.Name; replay.FullPath = file.FullName; replay.Size = Convert.ToInt32(file.Length / 1024); string text = String.Empty; if (lines > 0) { text = ReplayReader.ReadReplay(replay.FullPath, lines); } else { text = ReplayReader.ReadReplay(replay.FullPath); } if (String.IsNullOrEmpty(text)) { return(replay); } bool isValidReplay = collector.GetReplayStatus(text); replay.DateTime = collector.DateTime(text); replay.Map = collector.GetMapName(text); replay.Player = collector.GetPlayerName(text); replay.GamePlayId = collector.GetGamePlay(text); replay.Respawn = collector.Respawn(text); replay.Players = collector.Players(text); replay.Status = isValidReplay; replay.Vehicle = collector.PlayerVehicle(text); replay.Version = collector.Version(text); replay.BattleType = collector.BattleType(text); replay.HasMods = collector.HasMods(text); replay.RegionCode = collector.RegionCode(text); replay.ServerName = collector.ServerName(text); replay.PlayerId = collector.PlayerId(text); if (isValidReplay) { replay.Duration = collector.BattleDuration(text); replay.Winner = collector.Winner(text); replay.Status = collector.GetReplayStatus(text); } else { _broken++; } return(replay); } } return(null); }
static void Main(string[] args) { var serviceCollection = new ServiceCollection().AddLogging(loggingBuilder => loggingBuilder.AddConsole().SetMinimumLevel(LogLevel.Error)); var provider = serviceCollection.BuildServiceProvider(); var logger = provider.GetService <ILogger <Program> >(); var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var replayFilesFolder = Path.Combine(desktopFolder, @"Replays"); var replayFiles = Directory.EnumerateFiles(replayFilesFolder, "*.replay"); var sw = new Stopwatch(); var reader = new ReplayReader(logger, ParseMode.Full); long total = 0; foreach (var replayFile in replayFiles) { var count_player = 0; var count_bot = 0; var pPSN = 0; var pXBL = 0; var pWIN = 0; var pSWT = 0; var pIOS = 0; var pMAC = 0; var pAND = 0; var pMISC = 0; sw.Restart(); try { var replay = reader.ReadReplay(replayFile); foreach (var playerData in replay.PlayerData) { if (playerData.EpicId is not null) { count_player++; var playerFeedStuff = $"EpicId: {playerData.EpicId.ToString().ToLower()}, IsBot?: {playerData.IsBot}, Placement #: {playerData.Placement}, Platform: {playerData.Platform}, SeasonLevel: {playerData.SeasonLevelUIDisplay}, PlayerNumber: {playerData.PlayerNumber}, TeamIndex: {playerData.TeamIndex}, TeamKills: {playerData.TeamKills}, IsThePartyLeader?: {playerData.IsPartyLeader}, HasThankedBusDriver?!: {playerData.HasThankedBusDriver}, IsUsingStreamerMode?: {playerData.IsUsingStreamerMode}, IsUsingAnonymousMode?: {playerData.IsUsingAnonymousMode}, DC'ed?: {playerData.Disconnected}, PlayerKills: {playerData.Kills}, Death Time: {playerData.DeathTime}, Reboot Counter: {playerData.RebootCounter}, CurrentWeapon (code): {playerData.CurrentWeapon}"; Console.WriteLine(playerFeedStuff.Pastel(Color.FromArgb(255, 165, 0))); Console.WriteLine($" "); Console.WriteLine($"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); var playerDataCosmetics = $"PlayerContrail: {playerData.Cosmetics.SkyDiveContrail}, Pickaxe: {playerData.Cosmetics.Pickaxe}, PlayerCharacter: {playerData.Cosmetics.Character}, Parts: {playerData.Cosmetics.Parts}, Glider: {playerData.Cosmetics.Glider}"; Console.WriteLine(playerDataCosmetics.Pastel(Color.FromArgb(255, 165, 0))); switch (playerData.Platform) { case "PSN": pPSN++; break; case "XBL": pXBL++; break; case "WIN": pWIN++; break; case "SWT": pSWT++; break; case "IOS": pIOS++; break; case "MAC": pMAC++; break; case "AND": pAND++; break; default: pMISC++; break; } } if (playerData.BotId is not null) { count_bot++; } } foreach (var c**t in replay.KillFeed) { if (c**t.PlayerName is not null && c**t.FinisherOrDownerName is not null) { var pName = c**t?.PlayerName.ToLower(); var whoKilled = c**t?.FinisherOrDownerName.ToLower(); var killFeedStuffCunt = $"Player: {pName}, IsBot: {c**t.PlayerIsBot}, IsDowned: {c**t.IsDowned}, DeathType (Code): {c**t.DeathCause}, DeathLocation: [{c**t.DeathLocation}], WhoKilled?: {whoKilled}, WasFinisherOrDownerAFknBot?: {c**t.FinisherOrDownerIsBot}, TimeAlive: {c**t.ReplicatedWorldTimeSeconds}, Was Revived?: {c**t.IsRevived}"; Console.WriteLine($" "); Console.WriteLine(killFeedStuffCunt.Pastel(Color.FromArgb(219, 112, 147))); } } /* Start game data stuff */ Console.WriteLine($" "); var gameDataStuff = $" MapInfo: {replay.GameData.MapInfo}, TotalBots: {replay.GameData.TotalBots}, TotalTeams: {replay.GameData.TotalTeams}, WinningTeamID: {replay.GameData.WinningTeam}, TotalPlayerStructures: {replay.GameData.TotalPlayerStructures}, SafeZoneStartTime: {replay.GameData.SafeZonesStartTime}, MatchEndTime: {replay.GameData.MatchEndTime}"; Console.WriteLine(gameDataStuff.Pastel(Color.FromArgb(175, 238, 238))); Console.WriteLine($" "); } catch (Exception ex) { Console.WriteLine(ex); } string totalCumulativePlayerPlatform = $"PSN: {pPSN}, XBL: {pXBL}, WIN: {pWIN}, SWT: {pSWT}, IOS: {pIOS}, MAC: {pMAC}, AND: {pAND}, MISC: {pMISC}"; string totalCumulativePlayer = $"Humans: {count_player}, Bots: {count_bot}"; Console.WriteLine(totalCumulativePlayer.Pastel(Color.FromArgb(0, 250, 154))); Console.WriteLine(totalCumulativePlayerPlatform.Pastel(Color.FromArgb(0, 255, 127))); Console.WriteLine($"========================================================================================================".Pastel(Color.FromArgb(124, 252, 0))); sw.Stop(); Console.WriteLine($"TotalProgramRuntime: {total / 1000} seconds ----".Pastel(Color.FromArgb(75, 0, 130))); Console.WriteLine($"---- {replayFile} : done in {sw.ElapsedMilliseconds} milliseconds ----".Pastel(Color.FromArgb(75, 0, 130))); total += sw.ElapsedMilliseconds; } Console.WriteLine($"TOTALS: {total / 1000} seconds ----".Pastel(Color.FromArgb(255, 68, 0))); /* Leave these lines for debug * Console.WriteLine($"TOTAL FROM ALL REPLAY FILES ---- Humans: {count_player}, Bots: {count_bot}"); * Console.WriteLine($"TOTAL FOR ALL REPLAY FILES ---- PSN: {pPSN}, XBL: {pXBL}, WIN: {pWIN}, SWT: {pSWT}, IOS: {pIOS}, MAC: {pMAC}, AND: {pAND}, MISC: {pMISC}"); */ Console.WriteLine($"========================================================================================================".Pastel(Color.FromArgb(124, 252, 0))); Console.WriteLine($"DONE - press any key to end. VERSION: 1601697301".Pastel(Color.FromArgb(255, 68, 0))); Console.ReadLine(); }