s2protocol.NET
0.9.0
dotnet add package s2protocol.NET --version 0.9.0
NuGet\Install-Package s2protocol.NET -Version 0.9.0
<PackageReference Include="s2protocol.NET" Version="0.9.0" />
<PackageVersion Include="s2protocol.NET" Version="0.9.0" />
<PackageReference Include="s2protocol.NET" />
paket add s2protocol.NET --version 0.9.0
#r "nuget: s2protocol.NET, 0.9.0"
#:package s2protocol.NET@0.9.0
#addin nuget:?package=s2protocol.NET&version=0.9.0
#tool nuget:?package=s2protocol.NET&version=0.9.0
Introduction
dotnet wrapper for Blizzards s2protocol for decoding/parsing StarCraft II replays (*.SC2Replay)
Getting started
Installation
dotnet add package s2protocol.NET
Usage
ReplayDecoder decoder = new();
Sc2Replay? replay = await decoder.DecodeAsync(pathToSC2Replay);
Console.WriteLine(replay.Header.BaseBuild);
Optional options:
ReplayDecoder decoder = new();
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();
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 No BigInteger support
ChangeLog
<details open="open"><summary>v0.9.0</summary>
- Breaking Changes
- removed requirement for IronPython
</details>
<details><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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- SharpZipLib (>= 1.4.2)
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.9.0 | 167 | 7/26/2025 |
0.8.4 | 155 | 12/13/2024 |
0.8.3 | 146 | 11/30/2024 |
0.8.2 | 162 | 7/17/2024 |
0.8.1 | 199 | 4/3/2024 |
0.8.0 | 173 | 4/2/2024 |
0.8.0-rc1.0 | 221 | 11/1/2023 |
0.6.12 | 543 | 10/4/2023 |
0.6.11 | 731 | 4/24/2023 |
0.6.10 | 835 | 2/1/2023 |
0.6.9 | 910 | 1/24/2023 |
0.6.8 | 929 | 11/3/2022 |
0.6.7 | 898 | 10/27/2022 |
0.6.6 | 952 | 7/31/2022 |
0.6.5 | 1,021 | 4/23/2022 |
0.6.4 | 1,011 | 3/17/2022 |
0.6.3 | 971 | 2/20/2022 |
0.6.2 | 1,035 | 2/7/2022 |
0.6.1 | 1,021 | 2/4/2022 |
0.6.0 | 981 | 2/2/2022 |