s2protocol.NET 0.8.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package s2protocol.NET --version 0.8.3
                    
NuGet\Install-Package s2protocol.NET -Version 0.8.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="s2protocol.NET" Version="0.8.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="s2protocol.NET" Version="0.8.3" />
                    
Directory.Packages.props
<PackageReference Include="s2protocol.NET" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add s2protocol.NET --version 0.8.3
                    
#r "nuget: s2protocol.NET, 0.8.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package s2protocol.NET@0.8.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=s2protocol.NET&version=0.8.3
                    
Install as a Cake Addin
#tool nuget:?package=s2protocol.NET&version=0.8.3
                    
Install as a Cake Tool

.NET

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.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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on s2protocol.NET:

Package Downloads
Sc2DirectStrike.Parser

SCII DirectStrike Replay parser

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 314 8/5/2026
0.9.6 174 7/25/2026
0.9.4 213 5/12/2026
0.9.3 155 5/12/2026
0.9.2 153 5/9/2026
0.9.1.1 206 2/11/2026
0.9.1-rc1 191 8/23/2025
0.9.0.1 261 10/11/2025
0.9.0 380 7/26/2025
0.8.4 353 12/13/2024
0.8.3 325 11/30/2024
0.8.2 351 7/17/2024
0.8.1 384 4/3/2024
0.8.0 372 4/2/2024
0.8.0-rc1.0 314 11/1/2023
0.6.12 644 10/4/2023
0.6.11 875 4/24/2023
0.6.10 974 2/1/2023
0.6.9 1,048 1/24/2023
0.6.8 1,116 11/3/2022
Loading failed