s2protocol.NET
0.8.4
dotnet add package s2protocol.NET --version 0.8.4
NuGet\Install-Package s2protocol.NET -Version 0.8.4
<PackageReference Include="s2protocol.NET" Version="0.8.4" />
paket add s2protocol.NET --version 0.8.4
#r "nuget: s2protocol.NET, 0.8.4"
// Install s2protocol.NET as a Cake Addin #addin nuget:?package=s2protocol.NET&version=0.8.4 // Install s2protocol.NET as a Cake Tool #tool nuget:?package=s2protocol.NET&version=0.8.4
Introduction
dotnet wrapper for Blizzards s2protocol for decoding/parsing StarCraft II replays (*.SC2Replay) using IronPython (2.7)
Getting started
Installation
dotnet add package IronPython.StdLib --version 2.7.12
dotnet add package s2protocol.NET
Usage
IronPyhton has a known memory leak Issue - try initializing the ReplayDecoder just once and reusing it.
public static readonly string? assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
ReplayDecoder decoder = new(assemblyPath);
Sc2Replay? replay = await decoder.DecodeAsync(pathToSC2Replay);
Console.WriteLine(replay.Header.BaseBuild);
Optional options:
ReplayDecoder decoder = new(assemblyPath);
ReplayDecoderOptions options = new ReplayDecoderOptions()
{
Details = false,
Metadata = false,
MessageEvents = false,
TrackerEvents = true,
GameEvents = false,
AttributeEvents = false
};
CancellationTokenSource cts = new();
Sc2Replay? replay = await decoder.DecodeAsync(pathToSC2Replay, options, cts.Token);
Console.WriteLine(replay.TrackerEvents.SUnitBornEvents.FirstOrDefault());
Multiple replays:
ReplayDecoder decoder = new(assemblyPath);
var folder = "path_to_replay_folder";
List<string> replays = Directory.GetFiles(folder, "*.SC2Replay").ToList();
ReplayDecoderOptions options = new ReplayDecoderOptions() { TrackerEvents = false };
int threads = 8;
CancellationTokenSource cts = new();
int decoded = 0;
int errors = 0;
await foreach (DecodeParallelResult decodeResult in decoder.DecodeParallelWithErrorReport(replays, 2, options, cts.Token))
{
if (decodeResult.Sc2Replay == null)
{
Console.WriteLine($"failed decoding replay {decodeResult.ReplayPath}: {decodeResult.Exception}");
errors++;
}
else
{
Console.WriteLine($"{decoded} {decodeResult.Sc2Replay.Details?.DateTimeUTC}");
decoded++;
}
}
Known Limitations / ToDo
GameEvents
STriggerSoundLengthSyncEvent ⇒ no data SControlGroupUpdateEvent ⇒ no mask
ChangeLog
<details open="open"><summary>v0.8.4</summary>
- s2protocol v5.0.14.93333.0
</details>
<details><summary>v0.8.3</summary>
- s2protocol v5.0.14.93272.0
</details>
<details><summary>v0.8.2</summary>
- s2protocol v5.0.13.92440.0
</details>
<details><summary>v0.8.0</summary>
Breaking Changes
- dotnet 8
- SC2 Patch 5.0.13 - s2protocol 92028
- PingMessageEvents
</details>
<details><summary>v0.8.0-rc1.0</summary>
Breaking Changes
- dotnet 8
- removed logging
- improved error handling
</details>
<details><summary>v0.6.12</summary>
- Protocol 91115
</details>
<details><summary>v0.6.11</summary>
- Protocol 90136
</details>
<details><summary>v0.6.10</summary>
- Protocol 89720
</details>
<details><summary>v0.6.9</summary>
- Protocol 89634
- Fix Gametime to UTC
</details>
<details><summary>v0.6.8</summary>
- Catch UnitIndex BigInteger
- New parallel decoding with ErrorReport: decoder.DecodeParallelWithErrorReport
- Parallel decoding tests
</details>
<details><summary>v0.6.7</summary>
- Catch Currupted Trackerevents
- Protocoll 88500 fix
</details>
<details><summary>v0.6.6</summary>
- Call GC.Collect() in dispose to release file locks
- Disabled default console-logging
- Added Test for protocol 88500 (5.0.10)
</details>
<details><summary>v0.6.5</summary>
- Save full path in FileName
</details>
<details><summary>v0.6.4</summary>
- Patch 5.0.9 - Protocol 87702
</details>
<details><summary>v0.6.3</summary>
- Python.StdLib to version 2.7.12
- JsonIgnore on UnitBorn ↔ UnitDied cycles
</details>
<details><summary>v0.6.2</summary>
- GameEvents
- AttributeEvents
- Tracker-Unit-Events mapping (Born → Died ...)
- Tracker-Unit-Events UnitIndex from
protocol.unit_tag(index, recycle)
</details>
<details><summary>v0.6.1</summary>
- Fixed some types (nullable/BigInteger/long)
- Initdata is now available
- Json de-/serialization
</details>
<details><summary>v0.6.0</summary>
- Init
</details>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- IronPython (>= 2.7.12)
- IronPython.StdLib (>= 2.7.12)
- System.Drawing.Common (>= 4.7.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.8.4 | 87 | 12/13/2024 |
0.8.3 | 88 | 11/30/2024 |
0.8.2 | 128 | 7/17/2024 |
0.8.1 | 160 | 4/3/2024 |
0.8.0 | 131 | 4/2/2024 |
0.8.0-rc1.0 | 193 | 11/1/2023 |
0.6.12 | 520 | 10/4/2023 |
0.6.11 | 692 | 4/24/2023 |
0.6.10 | 784 | 2/1/2023 |
0.6.9 | 836 | 1/24/2023 |
0.6.8 | 873 | 11/3/2022 |
0.6.7 | 839 | 10/27/2022 |
0.6.6 | 897 | 7/31/2022 |
0.6.5 | 957 | 4/23/2022 |
0.6.4 | 947 | 3/17/2022 |
0.6.3 | 906 | 2/20/2022 |
0.6.2 | 970 | 2/7/2022 |
0.6.1 | 956 | 2/4/2022 |
0.6.0 | 915 | 2/2/2022 |