diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 911ee4e..931e08e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v1 with: - dotnet-version: 6.0.x + dotnet-version: 8.0.x - uses: dotnet/nbgv@master id: nbgv diff --git a/.github/workflows/nuget-push.yml b/.github/workflows/nuget-push.yml index 8f5a6ea..aa78a3b 100644 --- a/.github/workflows/nuget-push.yml +++ b/.github/workflows/nuget-push.yml @@ -27,7 +27,8 @@ jobs: project: [ { name: "Main", path: "Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj" }, { name: "Core", path: "Nodsoft.WowsReplaysUnpack.Core/Nodsoft.WowsReplaysUnpack.Core.csproj" }, - { name: "ExtendedData", path: "Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj" } + { name: "ExtendedData", path: "Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj" }, + { name: "Generators", path: "Nodsoft.WowsReplaysUnpack.Generators/Nodsoft.WowsReplaysUnpack.Generators.csproj" } ] # Sources to publish to @@ -44,7 +45,7 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v1 with: - dotnet-version: 6.0.x + dotnet-version: 8.0.x - uses: dotnet/nbgv@master id: nbgv diff --git a/Nodsoft.WowsReplaysUnpack.Benchmark/Controllers/PerformanceController.cs b/Nodsoft.WowsReplaysUnpack.Benchmark/Controllers/PerformanceController.cs index 8c4032a..e5e93e5 100644 --- a/Nodsoft.WowsReplaysUnpack.Benchmark/Controllers/PerformanceController.cs +++ b/Nodsoft.WowsReplaysUnpack.Benchmark/Controllers/PerformanceController.cs @@ -7,7 +7,7 @@ namespace Nodsoft.WowsReplaysUnpack.Benchmark.Controllers { - internal class PerformanceController : ReplayControllerBase + internal class PerformanceController : ReplayControllerBase { public PerformanceController(IDefinitionStore definitionStore, ILogger entityLogger) : base(definitionStore, entityLogger) { } diff --git a/Nodsoft.WowsReplaysUnpack.Benchmark/Nodsoft.WowsReplaysUnpack.Benchmark.csproj b/Nodsoft.WowsReplaysUnpack.Benchmark/Nodsoft.WowsReplaysUnpack.Benchmark.csproj index e4d462c..0d6ff7f 100644 --- a/Nodsoft.WowsReplaysUnpack.Benchmark/Nodsoft.WowsReplaysUnpack.Benchmark.csproj +++ b/Nodsoft.WowsReplaysUnpack.Benchmark/Nodsoft.WowsReplaysUnpack.Benchmark.csproj @@ -2,15 +2,16 @@ Exe - net6.0 + net8.0 enable enable - - - + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Benchmark/Program.cs b/Nodsoft.WowsReplaysUnpack.Benchmark/Program.cs index 26c2f39..605c448 100644 --- a/Nodsoft.WowsReplaysUnpack.Benchmark/Program.cs +++ b/Nodsoft.WowsReplaysUnpack.Benchmark/Program.cs @@ -8,7 +8,6 @@ BenchmarkRunner.Run(DefaultConfig.Instance .WithOptions(ConfigOptions.DisableOptimizationsValidator) - .AddJob(Job.Default.WithRuntime(CoreRuntime.Core50)) - .AddJob(Job.Default.WithRuntime(CoreRuntime.Core60))); + .AddJob(Job.Default.WithRuntime(CoreRuntime.Core80))); Console.ReadLine(); diff --git a/Nodsoft.WowsReplaysUnpack.Benchmark/UnpackBenchmark.cs b/Nodsoft.WowsReplaysUnpack.Benchmark/UnpackBenchmark.cs index c539b72..71d07b4 100644 --- a/Nodsoft.WowsReplaysUnpack.Benchmark/UnpackBenchmark.cs +++ b/Nodsoft.WowsReplaysUnpack.Benchmark/UnpackBenchmark.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Benchmark.Controllers; +using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.Services; namespace Nodsoft.WowsReplaysUnpack.Benchmark @@ -10,8 +11,8 @@ public class UnpackBenchmark { private static readonly string samplesPath = Path.Join(Environment.CurrentDirectory, "Samples"); private static readonly MemoryStream _ms; - private static readonly IReplayUnpackerService _defaultUnpacker; - private static readonly IReplayUnpackerService _performanceUnpacker; + private static readonly IReplayUnpackerService _defaultUnpacker; + private static readonly IReplayUnpackerService _performanceUnpacker; static UnpackBenchmark() { @@ -25,14 +26,14 @@ static UnpackBenchmark() ServiceProvider? services = new ServiceCollection() .AddWowsReplayUnpacker(b => { - b.AddReplayController(); + b.AddReplayController(); }) .AddLogging(l => l.ClearProviders()) .BuildServiceProvider(); ReplayUnpackerFactory? factory = services.GetRequiredService(); _defaultUnpacker = factory.GetUnpacker(); - _performanceUnpacker = factory.GetUnpacker(); + _performanceUnpacker = factory.GetUnpacker(); } [Benchmark] diff --git a/Nodsoft.WowsReplaysUnpack.Console/Nodsoft.WowsReplaysUnpack.Console.csproj b/Nodsoft.WowsReplaysUnpack.Console/Nodsoft.WowsReplaysUnpack.Console.csproj index bbc188a..ee13fe2 100644 --- a/Nodsoft.WowsReplaysUnpack.Console/Nodsoft.WowsReplaysUnpack.Console.csproj +++ b/Nodsoft.WowsReplaysUnpack.Console/Nodsoft.WowsReplaysUnpack.Console.csproj @@ -4,12 +4,14 @@ Exe disable enable - net6.0 + net8.0 + true - - + + + @@ -17,6 +19,8 @@ + diff --git a/Nodsoft.WowsReplaysUnpack.Console/Program.cs b/Nodsoft.WowsReplaysUnpack.Console/Program.cs index b191b52..65121d4 100644 --- a/Nodsoft.WowsReplaysUnpack.Console/Program.cs +++ b/Nodsoft.WowsReplaysUnpack.Console/Program.cs @@ -1,135 +1,4 @@ -// See https://aka.ms/new-console-template for more information -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Nodsoft.WowsReplaysUnpack; -using Nodsoft.WowsReplaysUnpack.Core.Models; -using Nodsoft.WowsReplaysUnpack.EntitySerializer; -using Nodsoft.WowsReplaysUnpack.ExtendedData; -using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; -using Nodsoft.WowsReplaysUnpack.FileStore.Definitions; -using Nodsoft.WowsReplaysUnpack.Services; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.Serialization; -using System.Threading.Tasks; +using Nodsoft.WowsReplaysUnpack.Console.Samples.EntitySerializer; -string samplePath = Path.Join(Directory.GetCurrentDirectory(), "../../../../Nodsoft.WowsReplaysUnpack.Tests", "Replay-Samples"); -FileStream _GetReplayFile(string name) => File.OpenRead(Path.Join(samplePath, name)); - -ServiceProvider? services = new ServiceCollection() - //.AddWowsReplayUnpacker(builder => - //{ - // //builder.AddReplayController(); - // //builder.AddExtendedData(); - //}) - .AddWowsReplayUnpacker(builder => builder - .WithDefinitionLoader()) - .Configure(options => - { - options.RootDirectory = options.RootDirectory = Path.Join(Directory.GetCurrentDirectory(), - "..", "..", "..", "..", "Nodsoft.WowsReplaysUnpack.Core", "Definitions", "Versions"); - }) - .AddLogging(logging => - { - logging.ClearProviders(); - logging.AddConsole(); - logging.SetMinimumLevel(LogLevel.Error); - }) - .BuildServiceProvider(); - -ReplayUnpackerFactory? replayUnpacker = services.GetRequiredService(); - -//var unpackedReplay = replayUnpacker.GetUnpacker().Unpack(GetReplayFile("payload.wowsreplay")); -//var unpackedReplay = replayUnpacker.GetUnpacker().Unpack(GetReplayFile("payload.wowsreplay")); -//ExtendedDataReplay? unpackedReplay = (ExtendedDataReplay)replayUnpacker.GetExtendedDataUnpacker().Unpack(_GetReplayFile("good.wowsreplay")); - -//foreach (ReplayMessage msg in replay.ChatMessages) -//{ -// Console.WriteLine($"[{GetGroupString(msg)}] {msg.EntityId} : {msg.MessageContent}"); -//} - -const int CYCLE = 20; -async Task syncTasks(bool sync) -{ - List unpackedReplays = new List(); - if (sync) - { - for (int i = 0; i < CYCLE; i++) - { - replayUnpacker.GetUnpacker().Unpack(_GetReplayFile("good.wowsreplay")); - } - } - else - { - Parallel.ForEach(Enumerable.Range(0, CYCLE), (i) => - { - unpackedReplays.Add(replayUnpacker.GetUnpacker().Unpack(_GetReplayFile("good.wowsreplay"))); - }); - } - return unpackedReplays.ToArray(); -} - -DateTime start = DateTime.Now; -await syncTasks(false); -Console.WriteLine(DateTime.Now - start); - -var goodReplay = replayUnpacker.GetUnpacker().Unpack(_GetReplayFile("good.wowsreplay")); -var alphaReplay = replayUnpacker.GetUnpacker().Unpack(_GetReplayFile("press_account_alpha.wowsreplay")); -var bravoReplay = replayUnpacker.GetUnpacker().Unpack(_GetReplayFile("unfinished_replay.wowsreplay")); - -var alphaState = alphaReplay.Entities.Single(e => e.Value.Name == "BattleLogic").Value.ClientProperties - .GetAsDict("state") - .GetAsDict("missions") - .GetAsArr("teamsScore"); - -var bravoState = bravoReplay.Entities.Single(e => e.Value.Name == "BattleLogic").Value.ClientProperties - .GetAsDict("state") - .GetAsDict("missions") - .GetAsArr("teamsScore"); - -var scoreA = alphaState.GetAsDict(0).GetAsValue("score"); -var scoreB = alphaState.GetAsDict(1).GetAsValue("score"); - -var _scoreA = bravoState.GetAsDict(0).GetAsValue("score"); -var _scoreB = bravoState.GetAsDict(1).GetAsValue("score"); - - - -var test = alphaReplay.SerializeEntity("BattleLogic"); - -Console.WriteLine(); -Console.ReadKey(); - -public class BattleLogic -{ - public Statee State { get; set; } - public class Statee - { - [DataMember(Name = "missions")] - public Missions _missions { get; set; } - public class Missions - { - public List teamsScore { get; set; } - public class TeamsScore - { - public ushort score { get; set; } - } - } - } -} -public static class ext -{ - public static FixedDictionary GetAsDict(this Dictionary dict, string key) => dict[key] as FixedDictionary; - public static FixedList GetAsArr(this Dictionary dict, string key) => dict[key] as FixedList; - public static FixedDictionary GetAsDict(this FixedList list, int index) => list[index] as FixedDictionary; - public static T GetAsValue(this FixedDictionary dict, string key) => (T)dict[key]; -} - -//static string GetGroupString(ReplayMessage msg) => msg.MessageGroup switch -//{ -// "battle_team" => "Team", -// "battle_common" => "All", -// _ => "" -//}; \ No newline at end of file +// await new SyncTest().ExecuteAsync(); +await new EntitySerializerSample().ExecuteAsync(); \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/BattleLogic.cs b/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/BattleLogic.cs new file mode 100644 index 0000000..2a1c853 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/BattleLogic.cs @@ -0,0 +1,30 @@ +using Nodsoft.WowsReplaysUnpack.Generators; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Nodsoft.WowsReplaysUnpack.Console.Samples.EntitySerializer; + +[SerializableEntity] +public partial class BattleLogic +{ + [DataMember(Name = "state")] + public State State { get; set; } = null!; +} + +public class State +{ + [DataMember(Name = "missions")] + public Missions Missions { get; set; } = null!; +} + +public class Missions +{ + [DataMember(Name = "teamsScore")] + public List TeamsScore { get; set; } = null!; +} + +public class TeamsScore +{ + [DataMember(Name = "score")] + public ushort Score { get; set; } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/EntitySerializerSample.cs b/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/EntitySerializerSample.cs new file mode 100644 index 0000000..e06db1a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/EntitySerializerSample.cs @@ -0,0 +1,72 @@ +using Microsoft.Extensions.DependencyInjection; +using Nodsoft.WowsReplaysUnpack.Core.Models; +using Nodsoft.WowsReplaysUnpack.EntitySerializer; +using Nodsoft.WowsReplaysUnpack.ExtendedData; +using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; +using Nodsoft.WowsReplaysUnpack.Services; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace Nodsoft.WowsReplaysUnpack.Console.Samples.EntitySerializer; + +public class EntitySerializerSample : TaskBase +{ + protected override void ConfigureServices(IServiceCollection serviceCollection) + { + serviceCollection.AddWowsReplayUnpacker(builder => + { + builder.AddExtendedData(); + }); + } + + protected override Task ExecuteAsync(IServiceProvider services) + { + using IReplayUnpackerService unpacker = + services.GetRequiredService().GetExtendedDataUnpacker(); + + ExtendedDataReplay alphaReplay = unpacker.Unpack(GetReplayFile("press_account_alpha.wowsreplay")); + ExtendedDataReplay bravoReplay = unpacker.Unpack(GetReplayFile("press_account_bravo.wowsreplay")); + + ManualExtensions(alphaReplay, bravoReplay); + Serializer(alphaReplay, bravoReplay); + + return Task.CompletedTask; + } + + private void ManualExtensions(UnpackedReplay alphaReplay, UnpackedReplay bravoReplay) + { + FixedList? alphaState = alphaReplay.Entities.Single(e => e.Value.Name == "BattleLogic").Value.ClientProperties + .GetAsDict("state")? + .GetAsDict("missions")? + .GetAsArr("teamsScore"); + + FixedList? bravoState = bravoReplay.Entities.Single(e => e.Value.Name == "BattleLogic").Value.ClientProperties + .GetAsDict("state")? + .GetAsDict("missions")? + .GetAsArr("teamsScore"); + + ushort? alphaScoreA = alphaState?.GetAsDict(0)?.GetAsValue("score"); + ushort? alphaScoreB = alphaState?.GetAsDict(1)?.GetAsValue("score"); + + ushort? bravoScoreA = bravoState?.GetAsDict(0)?.GetAsValue("score"); + ushort? bravoScoreB = bravoState?.GetAsDict(1)?.GetAsValue("score"); + + System.Console.WriteLine("Manuel Extensions:"); + System.Console.WriteLine($"Alpha Replay: [{alphaScoreA}:{alphaScoreB}]"); + System.Console.WriteLine($"Bravo Replay: [{bravoScoreA}:{bravoScoreB}]"); + } + + private void Serializer(UnpackedReplay alphaReplay, UnpackedReplay bravoReplay) + { + BattleLogic alphaBattleLogic = alphaReplay.DeserializeEntity("BattleLogic"); + BattleLogic bravoBattleLogic = bravoReplay.DeserializeEntity("BattleLogic"); + + + System.Console.WriteLine("Manuel Extensions:"); + System.Console.WriteLine( + $"Alpha Replay: [{alphaBattleLogic.State.Missions.TeamsScore[0].Score}:{alphaBattleLogic.State.Missions.TeamsScore[1].Score}]"); + System.Console.WriteLine( + $"Bravo Replay: [{bravoBattleLogic.State.Missions.TeamsScore[0].Score}:{bravoBattleLogic.State.Missions.TeamsScore[1].Score}]"); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Console/TaskBase.cs b/Nodsoft.WowsReplaysUnpack.Console/TaskBase.cs new file mode 100644 index 0000000..e950220 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Console/TaskBase.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace Nodsoft.WowsReplaysUnpack.Console; + +public abstract class TaskBase +{ + private static readonly string _samplePath = Path.Join(Directory.GetCurrentDirectory(), + "../../../../Nodsoft.WowsReplaysUnpack.Tests", + "Replay-Samples"); + + protected FileStream GetReplayFile(string name) => + File.Open(Path.Join(_samplePath, name), FileMode.Open, FileAccess.Read, FileShare.Read); + + protected abstract void ConfigureServices(IServiceCollection serviceCollection); + + public async Task ExecuteAsync() + { + ServiceCollection serviceCollection = new(); + serviceCollection.AddLogging(logging => + { + logging.ClearProviders(); + logging.AddConsole(); + logging.SetMinimumLevel(LogLevel.Information); + }); + + ConfigureServices(serviceCollection); + + ServiceProvider services = serviceCollection.BuildServiceProvider(); + + await ExecuteAsync(services); + } + + protected abstract Task ExecuteAsync(IServiceProvider services); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Console/Tests/SyncTest.cs b/Nodsoft.WowsReplaysUnpack.Console/Tests/SyncTest.cs new file mode 100644 index 0000000..8229a1e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Console/Tests/SyncTest.cs @@ -0,0 +1,49 @@ +using Microsoft.Extensions.DependencyInjection; +using Nodsoft.WowsReplaysUnpack.Core.Models; +using Nodsoft.WowsReplaysUnpack.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Nodsoft.WowsReplaysUnpack.Console.Tests; + +public class SyncTest : TaskBase +{ + protected override void ConfigureServices(IServiceCollection serviceCollection) + { + serviceCollection.AddWowsReplayUnpacker(); + } + + protected override Task ExecuteAsync(IServiceProvider services) + { + using IReplayUnpackerService unpacker = + services.GetRequiredService().GetUnpacker(); + + _ = RunTasks(unpacker, 20, false); + + return Task.CompletedTask; + } + + private UnpackedReplay[] RunTasks(IReplayUnpackerService unpacker, int cycles, + bool sync) + { + List unpackedReplays = new(); + if (sync) + { + for (int i = 0; i < cycles; i++) + { + unpacker.Unpack(GetReplayFile("good.wowsreplay")); + } + } + else + { + Parallel.ForEach(Enumerable.Range(0, cycles), _ => + { + unpackedReplays.Add(unpacker.Unpack(GetReplayFile("good.wowsreplay"))); + }); + } + + return [..unpackedReplays]; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Abstractions/IReplayController.cs b/Nodsoft.WowsReplaysUnpack.Core/Abstractions/IReplayController.cs new file mode 100644 index 0000000..bb1a4c7 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Abstractions/IReplayController.cs @@ -0,0 +1,47 @@ +using Nodsoft.WowsReplaysUnpack.Core.Entities; +using Nodsoft.WowsReplaysUnpack.Core.Models; +using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; + +namespace Nodsoft.WowsReplaysUnpack.Core.Abstractions; + +/// +/// Specifies a replay controller, responsible for handling the replay data extraction. +/// +public interface IReplayController +{ + /// + /// Handles a network packet, based on its type and properties. + /// + /// Network packet to handle. + /// Options to use when handling the packet. + void HandleNetworkPacket(NetworkPacketBase networkPacket, ReplayUnpackerOptions options); + + /// + /// Handles calls to method or property subscriptions + /// + /// The hash of the subscription + /// The entity the method is called for + /// The timestamp of the network packet + /// The arguments for the subscription + void CallSubscription(string hash, Entity entity, float packetTime, + Dictionary arguments); + + /// + /// Handles calls when a property on an entity has changed + /// + /// The hash of the subscription + /// The entity the property is changed on + /// The property value + void PropertyChanged(string hash, Entity entity, object? value); +} + +public interface IReplayController : IReplayController + where T : UnpackedReplay +{ + /// + /// Creates an out of an existing . + /// + /// The arena info. + /// The unpacked replay. + T CreateUnpackedReplay(ArenaInfo arenaInfo); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/AssemblyDefinitionLoader.cs b/Nodsoft.WowsReplaysUnpack.Core/Definitions/AssemblyDefinitionLoader.cs index 4862f10..26575ed 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Definitions/AssemblyDefinitionLoader.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/AssemblyDefinitionLoader.cs @@ -1,8 +1,12 @@ -using Nodsoft.WowsReplaysUnpack.Core.Extensions; +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Extensions; using System.Reflection; using System.Xml; namespace Nodsoft.WowsReplaysUnpack.Core.Definitions; + +[UsedImplicitly] +[PublicAPI] public class AssemblyDefinitionLoader : IDefinitionLoader { private static readonly XmlReaderSettings _xmlReaderSettings = new() { IgnoreComments = true }; @@ -10,19 +14,13 @@ public class AssemblyDefinitionLoader : IDefinitionLoader /// /// Assembly of the Definition store (defaults to the implementation assembly). /// - protected readonly Assembly Assembly; + protected Assembly Assembly { get; set; } = typeof(DefaultDefinitionStore).Assembly; /// /// Version -> Definitions Directory /// - protected readonly Dictionary DirectoryCache = new(); - - public AssemblyDefinitionLoader() - { - - Assembly = typeof(DefaultDefinitionStore).Assembly; - } - + protected Dictionary DirectoryCache { get; set; } = new(); + /// public Version[] GetSupportedVersions() { diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/BaseDefinition.cs b/Nodsoft.WowsReplaysUnpack.Core/Definitions/BaseDefinition.cs index 5e50300..d4103f6 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Definitions/BaseDefinition.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/BaseDefinition.cs @@ -7,7 +7,7 @@ namespace Nodsoft.WowsReplaysUnpack.Core.Definitions; /// /// Base class for all definitions (.def) files. /// -public abstract record BaseDefinition +public abstract class BaseDefinition { /// /// Game client version of this definition file. @@ -18,7 +18,7 @@ public abstract record BaseDefinition /// Definition store for this definition. /// protected IDefinitionStore DefinitionStore { get; } - + /// /// Name of this definition file. /// @@ -28,20 +28,19 @@ public abstract record BaseDefinition /// Represents all volatile properties in this definition file. /// public Dictionary VolatileProperties { get; } = new(); - + private readonly List _properties = new(); private readonly string _folder; + protected XmlElement? XmlDocument { get; set; } protected BaseDefinition(Version clientVersion, IDefinitionStore definitionStore, string name, string folder) { ClientVersion = clientVersion; DefinitionStore = definitionStore; Name = name; + XmlDocument = DefinitionStore.GetFileAsXml(ClientVersion, Name + ".def", folder).DocumentElement!; _folder = folder; - - ParseDefinitionFile(DefinitionStore.GetFileAsXml(ClientVersion, Name + ".def", _folder).DocumentElement!); } - public PropertyDefinition[] GetPropertiesByFlags(EntityFlag entityFlag, bool orderBySize = false) { diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/DefaultDefinitionStore.cs b/Nodsoft.WowsReplaysUnpack.Core/Definitions/DefaultDefinitionStore.cs index 0971d43..6a3b349 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Definitions/DefaultDefinitionStore.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/DefaultDefinitionStore.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Core.DataTypes; using Nodsoft.WowsReplaysUnpack.Core.Exceptions; using Nodsoft.WowsReplaysUnpack.Core.Extensions; @@ -7,8 +8,9 @@ namespace Nodsoft.WowsReplaysUnpack.Core.Definitions; /// -/// Default implementation of a Definition store, which is used to load definitions from XML files. +/// Default implementation of a Definition store, which is used to provide the definitions from cache when already loaded /// +[PublicAPI] public class DefaultDefinitionStore : IDefinitionStore { /// @@ -50,8 +52,7 @@ public DefaultDefinitionStore(ILogger logger, IDefinitio Logger = logger; DefinitionLoader = definitionLoader; - - _supportedVersions = DefinitionLoader.GetSupportedVersions(); + _supportedVersions = definitionLoader.GetSupportedVersions(); } #region EntityDefinitions @@ -76,7 +77,7 @@ public virtual EntityDefinition GetEntityDefinition(Version clientVersion, strin return definition; } - definition = new(clientVersion, this, name); + definition = EntityDefinition.Create(clientVersion, this, name); EntityDefinitionCache.Add(cacheKey, definition); return definition; diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/EntityDefinition.cs b/Nodsoft.WowsReplaysUnpack.Core/Definitions/EntityDefinition.cs index f286c97..d18f3ea 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Definitions/EntityDefinition.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/EntityDefinition.cs @@ -6,7 +6,7 @@ namespace Nodsoft.WowsReplaysUnpack.Core.Definitions; /// /// Defines an entity definition found in a .def file. /// -public record EntityDefinition : BaseDefinition +public sealed class EntityDefinition : BaseDefinition { private const string ENTITY_DEFS = "entity_defs"; @@ -18,9 +18,21 @@ public record EntityDefinition : BaseDefinition /// public List ClientMethods { get; private set; } = new(); - public EntityDefinition(Version clientVersion, IDefinitionStore definitionStore, string name) + private EntityDefinition(Version clientVersion, IDefinitionStore definitionStore, string name) : base(clientVersion, definitionStore, name, ENTITY_DEFS) { } + public static EntityDefinition Create(Version clientVersion, IDefinitionStore definitionStore, string name) + { + EntityDefinition definition = new(clientVersion, definitionStore, name); + if (definition.XmlDocument is null) + { + throw new Exception("XmlDocument has to be set"); + } + definition.ParseDefinitionFile(definition.XmlDocument); + definition.XmlDocument = null; // Xml does not need to stay in memory + return definition; + } + /// /// Parses a .def file for the entity definition. /// @@ -32,8 +44,8 @@ protected override void ParseDefinitionFile(XmlElement xml) //ParseMethods(xml.SelectSingleNode("BaseMethods"), BaseMethods); ParseMethods(xml.SelectSingleNode("ClientMethods"), ClientMethods); - CellMethods = CellMethods.OrderBy(m => m.DataSize).ToList(); - ClientMethods = ClientMethods.OrderBy(m => m.DataSize).ToList(); + CellMethods = [..CellMethods.OrderBy(m => m.DataSize)]; + ClientMethods = [..ClientMethods.OrderBy(m => m.DataSize)]; } private void ParseMethods(XmlNode? methodsNode, ICollection methods) diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/TypeConsts.cs b/Nodsoft.WowsReplaysUnpack.Core/Definitions/TypeConsts.cs index fb7b6c6..0879d39 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Definitions/TypeConsts.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/TypeConsts.cs @@ -1,5 +1,4 @@ using Nodsoft.WowsReplaysUnpack.Core.DataTypes; -using System.Collections.Immutable; namespace Nodsoft.WowsReplaysUnpack.Core.Definitions; diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AccountReviverComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AccountReviverComponent.def new file mode 100644 index 0000000..a55a784 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AccountReviverComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AchievementsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AchievementsComponent.def new file mode 100644 index 0000000..5ac40fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AchievementsComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + UINT64 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AlmanacComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AlmanacComponent.def new file mode 100644 index 0000000..860a1e2 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/AlmanacComponent.def @@ -0,0 +1,32 @@ + + + + ZIPPED_BLOB + + none + + + + ZIPPED_BLOB + + none + + + + UINT16 + UINT8 + BOOL + + + + + + UINT16 + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BattlePassComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BattlePassComponent.def new file mode 100644 index 0000000..781cdee --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BattlePassComponent.def @@ -0,0 +1,50 @@ + + + + + + + UINT16 + UINT8 + + + + + + UINT16 + UINT16 + UINT8 + UINT8 + + + BOOL + + + + + + UINT16 + + + BOOL + + + + + + + + + + UINT16 + UINT16 + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BrawlBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BrawlBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/BrawlBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ControllerToAccountConnector.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ControllerToAccountConnector.def new file mode 100644 index 0000000..bdb8847 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ControllerToAccountConnector.def @@ -0,0 +1,51 @@ + + + + + <_pingAccountCounter/> + <_ControllerToAccountConnector__accountCheckVaryID/> + <_ControllerToAccountConnector__accountWaiter/> + + + + + + + + ENTITYAPI_TIMEOUT + + + MAILBOX + + + + + + MAILBOX + + + + + + MASTER_ID + MAILBOX + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + ZIPPED_BLOB + UINT8 + MAILBOX + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponent.def new file mode 100644 index 0000000..c913f4f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponent.def @@ -0,0 +1,107 @@ + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + + + UINT8 + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + ARENA_UNIQUE_ID + MASTER_ID + + + + + + + ENTITY_ID + SHIP_ID + BOOL + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + UNICODE_STRING + + + + + + + ENTITY_ID + SHIP_ID + + + INT64 + + + + + + + ENTITY_ID + DB_ID + + + + + + + ENTITY_ID + + + + + + + DB_ID + UNICODE_STRING + + + + + + + ENTITY_ID + + + + + + + + + + UINT8 + UINT8 + STRING + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponentAvatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponentAvatar.def new file mode 100644 index 0000000..d9ae622 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DivisionsManagerComponentAvatar.def @@ -0,0 +1,16 @@ + + + + + + ENTITY_ID + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DockComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DockComponent.def new file mode 100644 index 0000000..e84c4f4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/DockComponent.def @@ -0,0 +1,13 @@ + + + + + + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/GiftListsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/GiftListsComponent.def new file mode 100644 index 0000000..11df2da --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/GiftListsComponent.def @@ -0,0 +1,17 @@ + + + + + + + UINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/HotFixComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/HotFixComponent.def new file mode 100644 index 0000000..7b89c1b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/HotFixComponent.def @@ -0,0 +1,28 @@ + + + + BLOB + + + + + + BOOL + + + + + + + + + PYTHON + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/KeyTargetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/KeyTargetComponent.def new file mode 100644 index 0000000..de0e975 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/KeyTargetComponent.def @@ -0,0 +1,18 @@ + + + + + + + + + UINT32 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/LootboxComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/LootboxComponent.def new file mode 100644 index 0000000..ffd9cbd --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/LootboxComponent.def @@ -0,0 +1,56 @@ + + + + + + + GAMEPARAMS_ID + + + + + + + GAMEPARAMS_ID + UINT16 + + + + + + + + + + + + GAMEPARAMS_ID + MSGPACK_BLOB + + + none + + + + + + + + + UINT16 + + + + + + UINT16 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MasterEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MasterEntityAPIComponent.def new file mode 100644 index 0000000..393b760 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MasterEntityAPIComponent.def @@ -0,0 +1,98 @@ + + + <_MasterEntityAPIComponent__loadEntitiesHelper/> + + + + + CLUSTER_ID + STRING + ZIPPED_BLOB + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOOKUP_ARGS + BOOL + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + STRING + DB_ID + ENTITY_LOAD_ARGS + ZIPPED_BLOB + + + MAILBOX + + + + + + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + CLUSTER_ID + CREATE_BATTLE_SESSION_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_PRE_BATTLE_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_TRAINING_ROOM_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MatchmakerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MatchmakerComponent.def new file mode 100644 index 0000000..85567e4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/MatchmakerComponent.def @@ -0,0 +1,82 @@ + + + <_MatchmakerComponent__realm> + STRING + BASE + + <_MatchmakerComponent__queueType> + QUEUE_TYPE + BASE + + <_MatchmakerComponent__inDivision> + BOOL + BASE + + <_MatchmakerComponent__battleStarterService> + MAILBOX + BASE + + + + + + + + SHIP_ID + QUEUE_TYPE + INT16 + INT32 + GAMEPARAMS_ID + + + + + + + + + + ENQUEUE_DATA + + + + + + ENQUEUE_DATA + + + + + + UINT8 + + + + + + + + QUEUE_TYPE + SHIP_ID + PICKLED_BLOB + + + + + + GAMEPARAMS_ID + PICKLED_BLOB + + + + + + UINT8 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/NewbieQuestComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/NewbieQuestComponent.def new file mode 100644 index 0000000..8a393ea --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/NewbieQuestComponent.def @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PVEBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PVEBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PVEBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PdataResetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PdataResetComponent.def new file mode 100644 index 0000000..076cf6a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/PdataResetComponent.def @@ -0,0 +1,71 @@ + + + + + + + + + + + INT8 + ZIPPED_BLOB + + + + + + + ZIPPED_BLOB + + + + INT8 + + + + + + + RESTORE_POINT + + + UINT8 + + + + + + + INT32 + UINT32 + BOOL + + + INT8 + + + + + + + INT8 + + + + + + + DB_ID + STRING + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RankedBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RankedBattlesComponent.def new file mode 100644 index 0000000..9622027 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RankedBattlesComponent.def @@ -0,0 +1,73 @@ + + + + + INT16 + + + + + + INT16 + + + + + + INT16 + UINT8 + BOOL + + + + + + INT8 + + + + + + INT16 + + + + + + + + + + + + + + + + INT8 + INT8 + BOOL + BOOL + BOOL + + + + + + + + + + INT16 + INT8 + INT16 + INT16 + INT16 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RequestPerformerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RequestPerformerComponent.def new file mode 100644 index 0000000..15110b3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/RequestPerformerComponent.def @@ -0,0 +1,23 @@ + + + + + + <_UsersInfoActualizer__awaitingRequests/> + <_UsersInfoActualizer__currentBatchID/> + <_UsersInfoActualizer__processingBatches/> + + + + + + UINT32 + ARRAYPLAYER_INFO + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ShipAcesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ShipAcesComponent.def new file mode 100644 index 0000000..ca3a438 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/ShipAcesComponent.def @@ -0,0 +1,38 @@ + + + + + + + + + + UINT8 + STRING + STRING + + + + + + + SHIP_ID + ACES_TASK_PROGRESS + + + + + + + + + + ZIPPED_BLOB + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/StrategicActionsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/StrategicActionsComponent.def new file mode 100644 index 0000000..d2ef68a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/StrategicActionsComponent.def @@ -0,0 +1,59 @@ + + + + + + STRING + + + BOOL + + + + + + STRING + + + BOOL + + + + + + BOOL + + + + + + UINT16 + + + + + + + + + + + + STRING + UINT16 + ARRAYSTRING + + + + + STRING + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SuperEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SuperEntityAPIComponent.def new file mode 100644 index 0000000..efdef19 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SuperEntityAPIComponent.def @@ -0,0 +1,72 @@ + + + + + + + + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + MAILBOX + DB_ID + MASTER_ID + + + + + + DB_ID + BOOL + + + + + + DB_ID + MAILBOX + + + MASTER_ID + MAILBOX + + + + + + MAILBOX + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SurveysComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SurveysComponent.def new file mode 100644 index 0000000..3defdaf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/SurveysComponent.def @@ -0,0 +1,29 @@ + + + + + + + + + UINT32 + ARRAYUINT8 + + + + + + + UINT32 + UINT32 + ARRAYUINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomComponent.def new file mode 100644 index 0000000..29cf0ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomComponent.def @@ -0,0 +1,111 @@ + + + + + + + + + + + + UINT64 + + + + + + + + + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + + + + + INT64 + + + + + + + + + INT64 + + + + + + + + + + + + + INT64 + INT64 + + + + + INT64 + INT64 + INT32 + INT32 + UNICODE_STRING + + + + + INT64 + INT64 + INT32 + INT32 + INT32 + + + + + INT64 + INT64 + + + + \ + TRAINING_ROOM_PROPERTIES + + + + + INT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomsManagerComponent.def new file mode 100644 index 0000000..ef17df9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/TrainingRoomsManagerComponent.def @@ -0,0 +1,32 @@ + + + + TRAINING_ROOM_PROPERTIES + + + + + ARRAY + DB_ID + + UNICODE_STRING + + + + + UINT64 + UNICODE_STRING + + + + + UINT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/UserDataComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/UserDataComponent.def new file mode 100644 index 0000000..26dfdfb --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/UserDataComponent.def @@ -0,0 +1,38 @@ + + + + + ARRAYDB_ID + MSGPACK_BLOB + + + + + + ARRAYDB_ID + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/VSEventComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/VSEventComponent.def new file mode 100644 index 0000000..ac91dff --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/VSEventComponent.def @@ -0,0 +1,67 @@ + + + + + + + INT8 + + + + + + + + BOOL + + + + + + STRING + UINT32 + + + + + + + + + + + + UINT32 + + UINT32 + + + + + + + + INT8 + + + + + + + + + <_VSEventComponent__eventPdata/> + <_VSEventComponent__tasksProgress/> + <_VSEventComponent__shouldRequestFinalStats/> + <_VSEventComponent__notRequestedPersonalTasksRates/> + <_VSEventComponent__notSyncTasksProgress/> + <_VSEventComponent__notSyncFinalStats/> + <_VSEventComponent__shouldReSyncOnStageChanged/> + <_VSEventComponent__shouldSyncTasksProgressOnPrimeChanged/> + <_VSEventComponent__isSubscribed/> + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/XmppComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/XmppComponent.def new file mode 100644 index 0000000..abe4a5f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/component_defs/XmppComponent.def @@ -0,0 +1,23 @@ + + + + MSGPACK_BLOB + + + BOOL + + + BOOL + + + BOOL + + + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/components.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/components.xml new file mode 100644 index 0000000..db2d64a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/components.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entities.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entities.xml new file mode 100644 index 0000000..dadadb8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entities.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Account.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Account.def new file mode 100644 index 0000000..5b6a928 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Account.def @@ -0,0 +1,511 @@ + + + + true + + AccountCMDs + BattleStarterClient + AccountPData + WalletOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + + + + BOOL + BASE_AND_CLIENT + False + + + + + + BLOB + + + + UNICODE_STRING + INT64 + + + + + BLOB + BLOB + + + none + + + + BLOB + + + BLOB + + + STRING + INT32 + INT32 + + + UINT64 + + + INT32 + FLOAT + + + FLOAT + INT32 + + + PYTHON + + + INT16 + UINT32 + UINT16 + UINT16 + GAME_MODE + GAMEPARAMS_ID + + + PRE_BATTLE_INVITE_DEF + + + OBJECT_ID + UINT8 + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + BLOB + INT32 + BOOL + + none + + + + INT32 + + + UINT8 + UINT32 + UINT8 + + + UINT8 + UINT8 + + + UINT8 + BLOB + + + BLOB + COUNTDOWN_INFO + INT32 + BOOL + + none + + + + INT8 + + + INT8 + + + PRE_BATTLE_ID + BLOB + BOOL + INT32 + True + + none + + + + PLAYER_ID + + + QUEUE_TYPE + GAMEPARAMS_ID + BOOL + + + DB_ID + STRING + STRING + STRING + STRING + UINT32 + + + INT16 + INT16 + + + ARRAY + RANK_BATTLES_DENY_REASON + + + + UINT32 + UINT8 + BLOB + + + + DB_ID + INT32 + UINT8 + + + UINT8 + + + STRING + + + UINT64 + + + BOOL + + + + STRING + + none + + + + UINT8 + + + UINT32 + + + INT32 + + + MSGPACK_BLOB + + none + + + + SHIP_ID + UINT8 + + + + CREW_ID + BOOL + + + + SHIP_ID + MSGPACK_BLOB + + + SHIP_ID + + + SHIP_ID + BOOL + + + UINT32 + MSGPACK_BLOB + + + BOOL + UINT8 + UINT32 + + + + STRING + STRING + + + + ARRAY + BARGE_BANNER + + + + + BLOB + + + + UINT32 + UINT32 + BOOL + + + CAMPAIGN_TASK_ID + + + CAMPAIGN_TASK_ID + UINT8 + + + CAMPAIGN_TASK_ID + UINT8 + UINT16 + ARRAY + UINT32 + + + + CAMPAIGN_TASK_ID + + + BLOB + + + UINT32 + UINT16 + ARRAY + UINT32 + + + + ARRAY + UINT32 + + ARRAY + UINT32 + + + + UINT32 + UINT8 + + + UINT32 + UINT32 + ARRAY + UINT32 + + + + BOOL + + + BOOL + + + UINT32 + STRING + UINT8 + + + BLOB + + + UINT32 + UINT32 + UINT32 + UINT32 + + + MSGPACK_BLOB + + + + UINT32 + STRING + UINT32 + + + + + INT64 + + + + BOOL + + + UINT64 + + + + UNICODE_STRING + + + UINT8 + + + BOOL + UINT8 + + + + ARRAY + GAMEPARAMS_ID + + + + + + ARRAY + GAMEPARAMS_ID + + + + + + + + MSGPACK_BLOB + + + + + UINT32 + UINT32 + UINT32 + UINT32 + + + + + + + UINT32 + + + + ARRAY + STRING + + + + + ARRAY + STRING + + + + + ARRAY + UINT32 + + + + + + + + + STRING + STRING + + + + BLOB + + + UINT64 + + + + CLIENT_STAT_INFO + + + + + STRING + + + + + + + + + + + + + + + + + + + + + + UINT32 + MSGPACK_BLOB + INT32 + BOOL + + + BOOL + + + + UINT16 + + + + + UINT8 + + + + STRING + FLOAT + + + + FLOAT + + + + MSGPACK_BLOB + MSGPACK_BLOB + + + + + + UNICODE_STRING + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Avatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Avatar.def new file mode 100644 index 0000000..4a18565 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Avatar.def @@ -0,0 +1,1261 @@ + + + + + BattleLogicEntityOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + DebugDrawEntity + StatsOwner + + + + + + + ENTITY_ID + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC_AND_OWN + True + + + VECTOR3 + OWN_CLIENT + + + TEAM_ID + ALL_CLIENTS + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + BOOL + OWN_CLIENT + False + true + + + BOOL + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + UINT64 + BASE_AND_CLIENT + 0 + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + PRIVATE_BATTLE_LOGIC_STATE + OWN_CLIENT + + + PRIVATE_VEHICLE_STATE + OWN_CLIENT + + + VISIBILITY_DISTANCES + ALL_CLIENTS + + + BOOL + OWN_CLIENT + 0 + + + BOOL + OWN_CLIENT + 1 + + + UINT16 + OWN_CLIENT + 0 + + + PLAYER_MODE + OWN_CLIENT + + + VISION + OWN_CLIENT + + + BOOL + OWN_CLIENT + 0 + + + + + PLAYER_ID + UINT16 + UINT16 + + + ENTITY_ID + ENTITY_ID + UINT32 + + + ENTITY_ID + ENTITY_ID + + + + GAMEPARAMS_ID + GAMEPARAMS_ID + UINT8 + ARRAY + WEAPON_LOCK_STATE + + + + + GAMEPARAMS_ID + UINT32 + UINT32 + ENTITY_ID + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + INT16 + ARRAY + UINT32 + + + + + BLOB + BLOB + BLOB + + true + true + 2 + + + + BLOB + BLOB + BLOB + + 2 + + + false + + + + ARRAY + SHOTS_PACK + + + + ARRAY + TORPEDOES_PACK + + + + ARRAY + SHOTKILLS_PACK + + + + ARRAY + EXPLOSION + + + + ARRAY + PLANE_PROJECTILE_PACK + + + + ARRAY + PLANE_SKIP_BOMB_PACK + + + + ARRAY + PLANE_ROCKET_PACK + + + + ARRAY + DEPTH_CHARGES_PACK + + + + ARRAY + LASER_BEAM + + + + ARRAY + SECTOR_WAVE_SHOTS_PACK + + + + ARRAY + PINGER_SHOT + + + + ARRAY + PINGER_SHOT_KILL + + + + PLAYER_ID + UINT16 + + + + PLAYER_ID + SHOT_ID + VECTOR3 + + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + BOOL + + + PLAYER_ID + SHOT_ID + BOOL + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + UINT8 + + + + MINEFIELD_INFO + + + + + FIELD_ID + + + + + ARRAY + FIELD_PACK + + + + + + ARRAY + FIELD_PACK + + + + + INT32 + BLOB + ENTITY_ID + BOOL + + + BLOB + INT16 + BOOL + + none + + + + UINT8 + UINT16 + + + GAMEPARAMS_ID + UINT8 + SQUADRON_STATE + PLANE_ID + UINT32 + FLOAT + UINT64 + + + PLANE_ID + TEAM_ID + GAMEPARAMS_ID + VECTOR2 + BOOL + + + PLANE_ID + + + PLANE_ID + VECTOR2 + + + PLANE_ID + UINT8 + + + PLANE_ID + + + PLANE_ID + FLOAT + PLANE_PATH + + + PLANE_ID + PLANE_PATH + + + PLANE_ID + VECTOR3 + FLOAT + FLOAT + TEAM_ID + UINT64 + + + PLANE_ID + + + PLANE_ID + UINT8 + UINT8 + + + PLANE_ID + ARRAY + UINT8 + + UINT8 + INT64 + + + PLANE_ID + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + FLOAT + UINT8 + + + PLANE_ID + FLOAT + + + PLANE_ID + UINT64 + + + BLOB + + + PLANE_ID + UINT16 + + + + PLANE_ID + UINT8 + + + + PLANE_ID + UINT8 + BOOL + + + + PLANE_ID + UINT8 + + + + + PLANE_ID + UINT8 + + + + + PLANE_ID + UINT8 + + + + PLANE_ID + BOOL + + + PLANE_ID + UINT8 + + + PLANE_ID + UINT8 + + + PLANE_ID + VECTOR3 + FLOAT + + + + PLANE_ID + TEAM_ID + + + + + PLANE_ID + TEAM_ID + + + + PLANE_ID + + + + PLAYER_ID + QUICK_COMMAND + + + + FLOAT + + + PLAYER_ID + STRING + STRING + STRING + + + ENTITY_ID + VECTOR3 + FLOAT + + + VECTOR3 + FLOAT + + + ENTITY_ID + + + + + UINT32 + UINT8 + BLOB + + + + + INT64 + INT8 + BLOB + BLOB + BLOB + BLOB + BLOB + + + none + + + + BLOB + + + UINT64 + + + UINT64 + + + MINIMAPINFO + MINIMAPINFO + + + + PLAYER_ID + UINT32 + + + ARRAY + UINT32 + + + + BLOB + + + UINT8 + INT8 + + + ENTITY_ID + + + UINT8 + + + + BLOB + INT32 + BOOL + + + none + + + + + UINT8 + UINT8 + + + + + + + PLAYER_ID + BOOL + + + + BLOB + BOOL + True + + none + + + + + BLOB + + + + + INT32 + + + + INT16 + INT16 + + + UINT32 + UINT32 + BOOL + + + BLOB + + + BLOB + + + + PRE_BATTLE_INVITE_DEF + + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + BLOB + + + OBJECT_ID + UINT8 + + + ENTITY_ID + + + ENTITY_ID + + + UINT8 + + + BOOL + + + ARRAY + SURFACE_HYDROPHONE_ZONE_INFO + + + + ARRAY + SURFACE_BROADCAST_ZONE_INFO + + + + ENTITY_ID + + + + + + UINT16 + ENTITY_ID + FLOAT + + + FLOAT + + + FLOAT + + + + + + BOOL + FLOAT + + + + ARRAY + UINT8 + + UINT8 + UINT8 + + + + + PLANE_ID + ARRAY + UINT8 + + UINT8 + UINT8 + + + + STRING + + + STRING + ZIPPED_BLOB + UINT8 + + + STRING + + + ENTITY_ID + VECTOR3 + BUBBLE_PACK + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + ENTITY_ID + UINT8 + VECTOR3 + + + ENTITY_ID + UINT8 + PLANE_ID + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + BOOL + + + BATTLE_EVENT + REASON_ID + + + ENTITY_ID + NAVIGATION_DEBUG_DATA + + + FLOAT + + + + UINT8 + PLANE_ID + SHOT_ID + + + + + UINT8 + PLANE_ID + VECTOR3 + FLOAT + SHOT_ID + + + #TODO:have to be removed + UINT8 + PLANE_ID + + + UINT8 + + + VECTOR3 + UINT8 + TEAM_ID + + + ENTITY_ID + VECTOR2 + + + ENTITY_ID + FLAT_VECTOR + FLOAT + + + UINT8 + FLOAT + + + + VECTOR3 + FLOAT + FLOAT + + + + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + UINT8 + UINT32 + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + + WEAPON_TYPE + NULLABLE_VECTOR3 + NULLABLE_VECTOR3 + BOOL + BOOL + + + + OWN_CLIENT + + WEAPON_TYPE + VECTOR3 + VECTOR3 + + + + OWN_CLIENT + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + UINT8 + UINT8 + + + OWN_CLIENT + WEAPON_TYPE + GAMEPARAMS_ID + + + OWN_CLIENT + + + OWN_CLIENT + VECTOR3 + + + OWN_CLIENT + INT8 + INT8 + TARGET_ID + VECTOR3 + + + OWN_CLIENT + VECTOR3 + WEAPON_TYPE + VECTOR3 + + + FLOAT + OWN_CLIENT + + + FLOAT + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + ENTITY_ID + true + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + INT8 + FLOAT + FLOAT + BOOL + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + PLANE_ID + VECTOR3 + FLOAT + VECTOR3 + FLOAT + + + + OWN_CLIENT + PLANE_ID + UINT8 + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + FLOAT + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + BLOB + FLOAT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + UINT64 + OWN_CLIENT + + + OWN_CLIENT + TARGET_ID + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + + BOOL + + + + OWN_CLIENT + INT8 + ARRAY + UINT8 + + FLOAT + + + OWN_CLIENT + PLANE_ID + VECTOR3 + NULLABLE_FLOAT + + + OWN_CLIENT + UINT16 + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + TEAM_ID + + + OWN_CLIENT + UINT8 + ARRAY + UINT8 + + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + ENTITY_ID + BOOL + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + + + OWN_CLIENT + + QUICK_COMMAND + + + + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + PLAYER_ID + UINT8 + + + OWN_CLIENT + + + OWN_CLIENT + STRING + STRING + + + UINT64 + OWN_CLIENT + + + UINT16 + UINT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT16 + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT32 + OWN_CLIENT + OWN_CLIENT + + + + STRING + TEAM_ID + INT16 + INT16 + INT16 + UINT16 + STRING + ARRAY + STRING + + + OWN_CLIENT + + + OWN_CLIENT + + UINT32 + + + + + UINT32 + UINT32 + + OWN_CLIENT + + + + UINT8 + UINT8 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + INT64 + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + OWN_CLIENT + + + INT64 + OWN_CLIENT + + + UINT32 + OWN_CLIENT + + + UINT8 + OWN_CLIENT + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleEntity.def new file mode 100644 index 0000000..d43c0ec --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleEntity.def @@ -0,0 +1,50 @@ + + + + + BattleLogicEntityOwner + AviationOwner + DamageDealerOwner + StatsOwner + WeatherOwner + VisionOwner + + true + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + GAMEPARAMS_ID + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + 1 + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleLogic.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleLogic.def new file mode 100644 index 0000000..a4c32e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/BattleLogic.def @@ -0,0 +1,71 @@ + + + + + StatsOwner + + true + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BATTLE_LOGIC_STATE + ALL_CLIENTS + + + TEAMS_DEF + ALL_CLIENTS + + + ARRAY + BATTLE_LOGIC_DEBUG_TEXT + + ALL_CLIENTS + + + PREREQUISITE_DATA + ALL_CLIENTS + + + MAP_BORDER + ALL_CLIENTS + + + BATTLE_RESULT + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + + + STRING + VECTOR3 + FLOAT + + + STRING + VECTOR3 + FLOAT + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Building.def new file mode 100644 index 0000000..3b564a8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Building.def @@ -0,0 +1,76 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BattleLogicEntityOwner + WeatherOwner + ModelOwner + StatsOwner + + true + + + GAMEPARAMS_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + + + UINT32 + UINT32 + + + UINT16 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/InteractiveZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/InteractiveZone.def new file mode 100644 index 0000000..ac418ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/InteractiveZone.def @@ -0,0 +1,60 @@ + + + + + BattleLogicEntityOwner + + True + + + FLOAT32 + ALL_CLIENTS + 5.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + TARGET_ID + ALL_CLIENTS + 0 + + + STRING + ALL_CLIENTS + "" + + + TEAM_ID + ALL_CLIENTS + 0 + + + INTERACTIVE_ZONE_ENTITY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + INTERACTIVE_ZONE_STATE + ALL_CLIENTS + + + ARRAY + BUOYANCY_STATE + + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Login.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Login.def new file mode 100644 index 0000000..c0a05f5 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Login.def @@ -0,0 +1,41 @@ + + + + + GiveClientHelper + + + + + + UINT32 + UINT8 + STRING + + + + + UINT8 + UINT64 + + + + + UINT32 + UINT64 + ARRAY + STRING + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/MasterChanger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/MasterChanger.def new file mode 100644 index 0000000..73afe59 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/MasterChanger.def @@ -0,0 +1,42 @@ + + + + + GiveClientHelper + + + + UINT8 + BASE_AND_CLIENT + + + UINT32 + BASE_AND_CLIENT + + + + + + UINT32 + UINT8!-- Disconnect reason description. --> + STRING + + + + UINT64 + + + UINT8 + UINT32 + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/OfflineEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/OfflineEntity.def new file mode 100644 index 0000000..c5b133b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/OfflineEntity.def @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayConnectionHandler.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayConnectionHandler.def new file mode 100644 index 0000000..168963d --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayConnectionHandler.def @@ -0,0 +1,24 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayLeech.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayLeech.def new file mode 100644 index 0000000..c815da4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/ReplayLeech.def @@ -0,0 +1,31 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + BLOB + + + BLOB + + + + + + + UINT64 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/SmokeScreen.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/SmokeScreen.def new file mode 100644 index 0000000..cc5e3ea --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/SmokeScreen.def @@ -0,0 +1,43 @@ + + + + + BattleLogicEntityOwner + WeatherOwner + + true + + + FLOAT32 + ALL_CLIENTS + + + ARRAY + VECTOR2 + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + INT8 + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Vehicle.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Vehicle.def new file mode 100644 index 0000000..926d16a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/Vehicle.def @@ -0,0 +1,494 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + BattleLogicEntityOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BuoyancyOwner + WeatherOwner + ModelOwner + StatsOwner + + + 0.1 + + + + + + + + + + true + + + BOOL + ALL_CLIENTS + 0 + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + + + VISIBILITY_FLAG + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + SHIP_CONFIG + ALL_CLIENTS + + + CREW_MODIFIERS_COMPACT_PARAMS + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + UINT32 + ALL_CLIENTS + 0 + + + + UINT16 + ALL_CLIENTS + + + + UINT32 + ALL_CLIENTS + 0 + + true + + + INT8 + ALL_CLIENTS + + + + UINT8 + ALL_CLIENTS + + + + INT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + ARRAY + STRING + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + PICKLED_BLOB + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + UINT16 + ALL_CLIENTS + + + GAMEPARAMS + ALL_CLIENTS + + + VEHICLE_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + + + + UINT8 + + + BOOL + + + ARRAY + SUBMARINE_HYDROPHONE_TARGET_INFO + + FLOAT + UINT16 + + + WEAPON_TYPE + GAMEPARAMS_ID + BOOL + + + WEAPON_TYPE + UINT8 + + + ARRAY + UINT64 + + + + ARRAY + DAMAGES + + 2 + + + INT8 + FLOAT32 + + + UINT8 + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + ARRAY + STRING + + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + INT32 + + + UINT8 + + + INT8 + UINT32 + UINT32 + FLOAT + UINT8 + VECTOR2 + VECTOR3 + VECTOR3 + + + FLOAT + + + FLOAT + + + INT32 + VECTOR3 + INT32 + INT32 + BOOL + + + INT32 + UINT16 + + + INT32 + + + INT32 + FLOAT + FLOAT + + + WEAPON_TYPE + GUN_BITS + + + WEAPON_TYPE + GUN_BITS + + + UINT8 + VECTOR3 + + + WEAPON_TYPE + GUN_BITS + + + BLOB + BLOB + + + + INT8 + BLOB + 2 + + + WEAPON_TYPE + BLOB + 2 + + + BLOB + + + BLOB + + + PLANE_ID + BLOB + + + + UINT64 + + + FLOAT + + + + + UINT8 + BOOL + + + BOOL + + + BLOB + + + INT8 + FLOAT + + + INT8 + + + VECTOR3 + FLOAT + BOOL + + + FLOAT + + + UINT8 + FLOAT + + + WEAPON_TYPE + GUN_DIRECTIONS + + + + ENTITY_ID + + + ENTITY_ID + + + ENTITY_ID + FLOAT + FLOAT + VECTOR3 + INT8 + UINT8 + + + ENTITY_ID + FLOAT + FLOAT + UINT8 + + + ENTITY_ID + NULLABLE_VECTOR3 + + + ARRAY + ATTACHED_PINGER_WAVE + + + + PLAYER_ID + VECTOR3 + INT8 + FLOAT + FLOAT + UINT8 + FLOAT + + + PLAYER_ID + FLOAT + FLOAT + UINT8 + FLOAT + + + INT8 + INT8 + FLOAT + + + + WILD_FIRE_STATE + + + + + + + + + + + + + + + + + + + VECTOR3 + NULLABLE_FLOAT + + + + + ENTITY_ID + + + + + INT32 + + + + OWN_CLIENT + + + + + BOOL + NULLABLE_FLOAT + PICKLED_BLOB + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/alias.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/alias.xml new file mode 100644 index 0000000..ea40750 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/alias.xml @@ -0,0 +1,2033 @@ + + UINT8 + UINT32 + INT32 + INT8 + UINT32 + UINT32 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + UINT32 + INT32 + INT64 + UINT8 + INT32 + UINT8 + UINT8 + UINT16 + INT64 + INT64 + UINT32 + UINT32 + INT64 + UINT32 + UINT64 + UINT32 + UINT32 + UINT32 + UINT16 + UINT32 + UINT32 + UINT8 + UINT16 + UINT16 + UINT8 + UINT8 + INT8 + UINT8 + UINT16 + UINT8 + UINT8 + + + USER_TYPE + BLOB + ZippedBlobConverter.converter + + + + USER_TYPE + BLOB + BoundServiceUtils.CachedZippedBlobConverter.CachedZippedBlobConverter + + + + USER_TYPE + GameParams.converter + + + + USER_TYPE + VECTOR2 + FlatVectorDef.converter + + + + ARRAYUINT32 + + + + ARRAYTEAM_ID + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + + + + + ARRAYAVATAR_ID + + + + ARRAYENTITY_ID + + + + ARRAYDB_ID + + + + FIXED_DICT + + VECTOR3 + FLOAT + INT8 + + INT8 + + + + + ARRAY PLANE_WAYPOINT + + + + FIXED_DICT + + TEAM_ID + TEAM_INFO + + + + + FIXED_DICT + + TEAM_INFO + ARRAYTEAM_STATE + + TeamsDef.converter + + + + FIXED_DICT + + WEAPON_TYPE + UINT8 + TARGET_ID + VECTOR3 + + + + + FIXED_DICT + + MAP_ID + INT16 + INT16 + INT8 + INT8 + UINT8 + STRING + ARRAYSTRING + ARRAYTEAM_ID + GAMEPARAMS_ID + + BattleDef.converter + + + + USER_TYPE + BattleEventDef.converter + + + + USER_TYPE + ShipConfig.converter + + + + FIXED_DICT + + DB_ID + UNICODE_STRING + UINT32 + + PlayerClanInfo.converter + true + + + + FIXED_DICT + + DB_ID + STRING + UINT32 + UINT32 + BOOL + STRING + PLAYER_CLAN_INFO + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + DB_ID + UINT16 + + + + + + FIXED_DICT + + UINT32 + BOOL + ARRAYARRAYUINT8 + + CrewModifiers.crewModifiersCompactParamsConverter + + + + FIXED_DICT + + BOOL + INT8 + BOOL + UINT8 + ARRAYAI_CATEGORY + + AIConfigDef.converter + true + + + + FIXED_DICT + + MAILBOX + PLAYER_ID + STRING + ARRAYGAMEPARAMS_ID + SHIP_CONFIG + CREW_MODIFIERS_COMPACT_PARAMS + AI_CONFIG + DB_ID + DB_ID + PLAYER_CLAN_INFO + PYTHON + STRING true + BOOL + BOOL + + PlayerDef.converter + true + + + + ARRAY PLAYER_DEF + + + + + ARRAY PLAYERS_DEFS + + + + FIXED_DICT + + DB_ID + PYTHON + + true + + + + FIXED_DICT + + STRING + PLAYER_ID + DB_ID + UINT32 + UINT32 + BOOL + DB_ID + UNICODE_STRING + UINT32 + + true + + + + FIXED_DICT + + OBJECT_ID + INT8 + INT8 + UINT32 + PRE_BATTLE_CREATOR_DEF + PRE_BATTLE_SENDER_DEF + STRING + + + + + + FIXED_DICT + + OBJECT_ID + DB_ID + PLAYER_ID + STRING + DB_ID + UNICODE_STRING + BATTLE_DEF + INT8 + INT8 + UINT16 + INT8 + BOOL + BOOL + INT32 + INT8 + INT8 + GAMEPARAMS_ID + BOOL + + true + PreBattleDef.converter + + + + FIXED_DICT + + UINT32 + UINT32 + + + + + FIXED_DICT + + ENTITY_ID + FLOAT + + + + + FIXED_DICT + + SHIP_ID + FLOAT + + + + + ARRAY MINIMAP_USER_INFO + + + ARRAY MAILBOX + + + + FIXED_DICT + + UINT8 + TARGET_ID + VECTOR3 + TEAM_ID + UINT8 + + GoalDef.converter + true + + + + FIXED_DICT + + UINT8 + UINT8 + GOAL_DEF + GOAL_DEF + + OrderDef.converter + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + VECTOR3 + SHOT_ID + UINT16 + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + ARRAYSHOT + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + VECTOR3 + VECTOR3 + + true + + + + FIXED_DICT + + BOOL + BOOL + UINT8 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + BOOL + TORPEDO_MANEUVER_DUMP + TORPEDO_ACOUSTIC_DUMP + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAYTORPEDO + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + FLOAT + FLOAT + + + + + FIXED_DICT + + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAY DEPTH_CHARGE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + BOOL + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + SHOT_ID + TERMINAL_BALLISTICS_INFO + + + + + FIXED_DICT + + PLAYER_ID + HIT_TYPE + ARRAYSHOTKILL + + + + + FIXED_DICT + + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + PLAYER_ID + GUN_ID + BOOL + + + + + FIXED_DICT + + PLAYER_ID + SHOT_ID + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + PLAYER_ID + HIT_TYPE + + + + + FIXED_DICT + + FLOAT + FLOAT + + + + + FIXED_DICT + + SHOT_ID + FLOAT + FLOAT + FLOAT + VECTOR3 + FLOAT + ARRAY SECTOR + + WaveDef.sectorConverter + false + + + + FIXED_DICT + + PLAYER_ID + GAMEPARAMS_ID + ARRAYSECTOR_WAVE_SHOT + + + + + FIXED_DICT + + INT64 + INT8 + BLOB + BLOB + BLOB + + + + + FIXED_DICT + + INT32 + FLOAT + PLAYER_ID + TARGET_ID + + + + + FIXED_DICT + + INT32 + INT64 + STRING + DB_ID_LIST + + + + + FIXED_DICT + + PLANE_ID + GAMEPARAMS_ID + BOOL + UINT8 + VECTOR3 + FLOAT + INT8 + INT8 + INT8 + UINT8 + BOOL + BOOL + UINT8 + BOOL + + + AirPlanes.AirplaneUtils.squadronStateConverter + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + UINT32 + UINT8 + STRING + + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + + + + + FIXED_DICT + + INT32 + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + UINT8 + VECTOR3 + VECTOR3 + VECTOR3 + BOOL + ENTITY_ID + INT32 + BOOL + + + + + USER_TYPE + ShotDecalDef.converter + + + + FIXED_DICT + + UINT8 + FLOAT + SHOT_DECAL_STATE + + + + + FIXED_DICT + + UINT8 + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + GAMEPARAMS_ID + VECTOR3 + FLOAT + FLOAT + + + + + + ARRAYENTITY_ID + + + + FIXED_DICT + + STRING + UINT8 + UINT8 + STRING + VECTOR2 + UINT8 + ENTITY_ID + TEAM_ID + STRING + + AttentionMarkerDef.converter + + + + + + + + + + FIXED_DICT + + INT8 + ARRAYENTITY_ID + + + + + FIXED_DICT + + STRING + + true + + + + FIXED_DICT + + ENTITY_ID + INT32 + INT32 + INT32 + + + + + FIXED_DICT + + UINT8 + ARRAYRESOURCE_RECORD + + true + + + + FIXED_DICT + + UINT8 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT8 + ENTITY_ID + FLOAT + FLOAT + + true + + + + FIXED_DICT + + INT16 + STRING + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT16 + INT16 + STRING + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + INT16 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + UINT32 + STATE + UINT8 + UINT8 + TARGET_ID + FLOAT + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + TEAM_ID + UINT32 + UINT8 + ARRAYPULL_TARGET_STATE + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + + + + + FIXED_DICT + + TEAM_ID + UINT16 + + + + + FIXED_DICT + + ARRAYHOLD_CONTROL_POINT_MISSION_STATE + ARRAYCAPTURE_CONTROL_POINT_MISSION_STATE + ARRAYKILL_SPECIFIC_SHIP_MISSION_STATE + ARRAYREACH_DESTINATION_MISSION_STATE + ARRAYPULL_TARGETS_MISSION_STATE + ARRAYPROTECT_MISSION_STATE + ARRAYTEAM_SCORE + INT16 + INT16 + + true + + + + FIXED_DICT + + ARRAYPRIVATE_PATH_MISSION_STATE + ARRAYPRIVATE_PATH_MISSION_STATE + + true + + + + FIXED_DICT + + STRING + BOOL + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + ENTITY_ID + STRING + + true + + + + FIXED_DICT + + UINT8 + STRING + UINT8 + UINT32 + UINT16 + UINT16 + UINT8 + UINT8 + UINT8 + STRING + UINT8 + TEAM_ID + STRING + ZIPPED_BLOB + + true + + + + FIXED_DICT + + ENTITY_ID + UINT8 + UINT8 + STRING + + true + + + + FIXED_DICT + + UINT8 + ARRAYVECTOR2 + + + + + FIXED_DICT + + UINT32 + ARRAYFIELD_LAYER_PACK + + + + + FIXED_DICT + + STRING + VECTOR2 + FLOAT + UINT32 + + + + + FIXED_DICT + + GAMEPARAMS_ID + GAMEPARAMS_ID + INT16 + INT16 + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_ITEM + GLOBAL_WEATHER_NOTIFICATION + + + + + FIXED_DICT + + ENTITY_ID + STRING + STRING + TEAM_ID + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + WeatherParamsDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_STATE + ARRAYLOCAL_WEATHER_STATE + + + + + FIXED_DICT + + FLOAT + FLOAT + TEAM_ID + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ENTITY_ID + UINT8 + STRING + INT8 + + true + + + + FIXED_DICT + + FLOAT + TEAM_ID + BOOL + BOOL + BOOL + BOOL + FLOAT + FLOAT + + true + + + + FIXED_DICT + + CONTROL_POINT_STATE + CAPTURE_LOGIC_STATE + + + + + USER_TYPE + Modifiers.ModifierDef.converter + + + + FIXED_DICT + + INT8 + GAMEPARAMS_ID + ENTITY_ID + INT16 + BOOL + DROP_CAPTURE_LOGIC_STATE + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR2 + GAMEPARAMS_ID + FLOAT + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ARRAYENTITY_ID + + + + + FIXED_DICT + + ARRAYDROP_ITEM_STATE + DROP_PLANE_STATE + ARRAYPICKED_DROP_STATE + + true + + + + USER_TYPE + BattleItemDef.converter + + + + FIXED_DICT + + UINT8 + BATTLE_ITEM_STATE + + + + + FIXED_DICT + + ARRAYTEAM_ID + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + + + + FIXED_DICT + + ARRAYATTENTION_MARKER_STATE + CLIENT_ANIMATION_STATE + ARRAYENTITY_ID + ARRAYENTITY_STATE_STATE + EXPECTED_ACTION_STATE + WEATHER_STATE + ARRAYKEY_OBJECT_STATE + MISSIONS_STATE + ARRAYRESOURCE_STATE + ARRAYSUCCESS_STORY_PROGRESS_STATE + ARRAYTASKS_STATE + ARRAYBATTLE_LOGIC_ENTITY_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + DROP_STATE + DIPLOMACY_STATE + UI_INFO_STATE + PHYSICS_STATE + + + + + FIXED_DICT + + MODIFIER_STATE + + true + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + + DiplomacyTicketDef.converter + + + + FIXED_DICT + + ARRAYDIPLOMACY_TICKET + ARRAYDIPLOMACY_TICKET + + true + + + + FIXED_DICT + + UINT32 + + true + + + + + FIXED_DICT + + ARRAY STASHED_BATTLE_ITEM_STATE + TRIGGERS_STATE + DIPLOMACY_TICKETS_STATE + BATTLE_LEVELING_STATE + PRIVATE_MISSIONS_STATE + + + + + FIXED_DICT + + DB_ID + INT32 + DB_ID + INT8 + INT8 + INT8 + DB_ID + MASTER_ID + + EvaluationDef.converter + + + + FIXED_DICT + + STRING + STRING + + + + + FIXED_DICT + + STRING + STRING + VECTOR2 + + + + + FIXED_DICT + + STRING + ARRAYBATTLE_LOGIC_DEBUG_CHANNEL + + + + + FIXED_DICT + + INT32 + INT32 + ARRAYSHIP_TYPE_ID + + + + + FIXED_DICT + + SHIP_TYPE_ID + INT32 + INT32 + + + + + FIXED_DICT + + SHIP_LEVEL + INT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + ARRAYINT32 + ARRAYSHIP_TYPE_ID + ARRAYINT8 + ARRAYSHIP_NATION_ID + + + + + FIXED_DICT + ShipRestrictions.ShipRestrictionsDefConverter.converter + + INT32 + INT32 + INT32 + ARRAYSHIP_CLASS_RESTRICTION + ARRAYSHIP_LEVEL_RESTRICTION + ARRAYSHIP_LIMIT_RESTRICTION + COMBINED_CLASSES_RESTRICTION + ARRAYRESTRICTION_FILTER + + true + + + + FIXED_DICT + TrainingRoomDataTypes.trainingRoomPropertiesConverter + + INT32 + UNICODE_STRING + INT32 + INT32 + INT32 + BOOL + BOOL + UNICODE_STRING + SHIP_RESTRICTIONS + BOOL + INT8 + UNICODE_STRING + BOOL + + + + + FIXED_DICT + TrainingRoomDef.converter + + BOOL + SHIP_RESTRICTIONS + BOOL + UNICODE_STRING + INT32 + PRE_BATTLE_DEF + INT32 + INT32 + INT32 + BOOL + BOOL + + true + + + + TUPLEINT322 + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + BUOYANCY_STATE + + true + + + + FIXED_DICT + + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT16 + INT8 + INT8 + UINT32 + STRING + STRING + + ReplayMetadataDef.converter + + + + ARRAYREPLAY_METADATA + + + FIXED_DICT + + INT8 + BOOL + + + + + FIXED_DICT + + GAMEPARAMS_ID + BOOL + GAMEPARAMS_ID + + + + + FIXED_DICT + + ARRAYPREREQUISITE_SHIP_DATA + ARRAYSTRING + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + INT16 + STRING + STRING + + + + + FIXED_DICT + + STRING + ARRAYMAILBOX + + true + + + + FIXED_DICT + + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT8 + ARRAYBUBBLE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_PROJECTILE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + ARRAYVECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_SKIP_BOMB + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + VECTOR3 + FLOAT + FLOAT + FLOAT + ARRAYPLANE_ROCKET + + + + + USER_TYPE + BLOB + MsgPackCustomConverter.converter + + + + USER_TYPE + BLOB + PickledBlobConverter.converter + + + + FIXED_DICT + + STRING + UINT8 + UINT32 + STRING + UINT8 + UINT8 + UINT64 + + PlayerDigestDef.digestConverter + + + + FIXED_DICT + + BOOL + UINT64 + + PlayerDigestDef.statusConverter + + + + FIXED_DICT + + DB_ID + PLAYER_DIGEST + PLAYER_STATUS + + PlayerDigestDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + VECTOR3 + + MapBorderDef.converter + true + + + + FIXED_DICT + + ARENA_UNIQUE_ID + ARRAYDB_ID + MSGPACK_BLOB + BLOB + + ReplayInfoDef.converter + + + + FIXED_DICT + + UINT8 + TEAM_ID + + + + + + USER_TYPE + AutoCompensationDataTypes.restartInfoConverterInstance + + + + FIXED_DICT + + FLOAT + ARRAY VECTOR3 + + + + + FIXED_DICT + + VECTOR3 + UINT16 + UINT16 + ARRAY NAVIGATION_UNPASSABLE_CELLS + FLOAT + + + + + USER_TYPE + FLOAT + NullableDef.nullableFloatConverter + + + + TUPLESTRING3 + + + + USER_TYPE + UINT16 + Converters.GunDirectionsConverter.converter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + MAILBOX + PLAYERS_DEFS + PRE_BATTLE_CREATOR_DEF + GAMEPARAMS_ID + + EnqueueProcess.DataTypes.EnqueueRequestConverter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + SHIP_ID + PYTHON + PYTHON + GAMEPARAMS_ID + MAILBOX + + EnqueueProcess.DataTypes.EnqueueDataConverter + true + + + + USER_TYPE + VECTOR3 + NullableDef.nullableVector3Converter + + + + FIXED_DICT + + FLOAT + UINT8 + + true + + + + UINT8 + true + + + + FIXED_DICT + + GAMEPARAMS_ID + UINT8 + INT8 + INT16 + INT16 + + BuffDef.converter + + + + FIXED_DICT + + ARRAY BUFF_STATE + + true + + + + FIXED_DICT + + RIBBON_ID + UINT16 + + + + + ARRAY RIBBON_STATE + true + + + + FIXED_DICT + + FLOAT + + true + + + + FIXED_DICT + + BATTERY_STATE + BUFFS_STATE + VEHICLE_VISUAL_STATE + + + + + FIXED_DICT + + BUFFS_STATE + RAGE_MODE_STATE + RIBBONS_STATE + + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + INT8 + FLOAT + UINT8 + FLOAT + VECTOR3 + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + WildFireDef.converter + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + UINT8 + WEAPON_TYPE + UINT8 + FLOAT + FLOAT + PLANE_ID + PLANE_ID + + false + HeatMapConstants.squadronEventDataConverter + + + + FIXED_DICT + + UINT8 + PLANE_ID + ENTITY_ID + FLOAT + + false + HeatMapConstants.planeProjectileEventDataConverter + + + + FIXED_DICT + + STRING + UINT32 + UINT32 + STRING + STRING + STRING + STRING + + false + + + + FIXED_DICT + + TEAM_ID + UINT8 + + + + + FIXED_DICT + + FIELD_ID + ENTITY_ID + VECTOR3 + FLOAT + BOOL + FLOAT + UINT16 + UINT16 + FLOAT + UINT16 + FLOAT + UINT16 + UINT16 + UINT16 + + false + MinefieldStatistics.converter + + + + USER_TYPE + CommonQuickCommands.QuickCommandConverter.converter + + + + USER_TYPE + Fields.MinefieldInfo.converter + + + + FIXED_DICT + + BATTLE_DEF + ENTITY_ID + + + + + FIXED_DICT + + PRE_BATTLE_DEF + PLAYER_DEF + + + + + FIXED_DICT + + TRAINING_ROOM_DEF + PLAYER_DEF + UNICODE_STRING + + + + + FIXED_DICT + + INT32 + UINT32 + UINT64 + PYTHON + ARRAY UINT64 + UINT64 + UINT32 + PYTHON + UINT32 + PYTHON + + RestorePointConverter.converter + + + + USER_TYPE + EntityAPI.EntityAPITimeoutDef.converter + + + + FIXED_DICT + + UINT8 + BOOL + ENTITYAPI_TIMEOUT + PICKLED_BLOB + + EntityAPIDefs.loadConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.lookupConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.createConverter + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountCMDs.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountCMDs.def new file mode 100644 index 0000000..b2d214b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountCMDs.def @@ -0,0 +1,382 @@ + + + + + + + + + + + + + UINT8 + UINT8 + + + + + UINT8 + UINT8 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + INT32 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + UINT32 + INT32 + INT32 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + UINT8 + UINT8 + BLOB + + + + + UINT8 + UINT8 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + INT32 + + + + + UINT8 + UINT8 + DB_ID_LIST + + + + + UINT8 + UINT8 + DB_ID_LIST + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + ARRAY UINT8 + + + + + UINT8 + UINT8 + INT32 + INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + + + + + UINT8 + UINT8 + SHIP_ID + INT32 + INT32 + INT32 + INT32 + INT32 + INT32 + UNICODE_STRING + SHIP_RESTRICTIONS + + + + + UINT8 + UINT8 + TRAINING_ROOM_PROPERTIES + + + + + UINT8 + UINT8 + ARRAY GAMEPARAMS_ID + + + + + UINT8 + UINT8 + ARRAYUINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountPData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountPData.def new file mode 100644 index 0000000..de981b9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AccountPData.def @@ -0,0 +1,154 @@ + + + + + + + STRING + BASE_AND_CLIENT + True + 96 + + + + + + STRING + BASE + true + 96 + true + + + + + DB_ID + BASE_AND_CLIENT + true + + + + + DB_ID + BASE + true + 0 + + + + + INT16 + BASE + True + + + + + UINT32 + BASE + true + + + + + UINT64 + BASE_AND_CLIENT + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT8 + BASE + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT32 + BASE + True + 0 + + + + + STRING + BASE + True + 1000 + + + + + STRING + BASE + True + 100000 + + + + + UINT64 + BASE + true + + + + + UINT64 + BASE + true + 1 + + + + UINT32 + BASE + true + 0 + + + + UINT64 + BASE + true + 0 + + + <_destroyResponseCode> + UINT8 + BASE + + + + UINT8 + BASE + true + 0 + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AirDefenceOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AirDefenceOwner.def new file mode 100644 index 0000000..41e917f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AirDefenceOwner.def @@ -0,0 +1,49 @@ + + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYARRAYPLANE_ID + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYAIR_DEFENCE_AURA + ALL_CLIENTS + + + + + + + + + BUBBLE_PACK + UINT8 + + + + + + + BOOL + + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AtbaOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AtbaOwner.def new file mode 100644 index 0000000..4723f29 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AtbaOwner.def @@ -0,0 +1,24 @@ + + + + ATBA_TARGETS + ALL_CLIENTS + + + + + + + + + + UINT32 + + + + + + UINT8 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AviationOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AviationOwner.def new file mode 100644 index 0000000..09420ce --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/AviationOwner.def @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + <_AviationOwner__spottedMinimapSquadrons/> + <_AviationOwner__spottedMinimapFighters/> + <_AviationOwner__planeRegenPercentVaryId/> + <_AviationOwner__planeHealCoef/> + + + + + + + + + UINT32 + INT8 + + + + + UINT8 + UINT8 + VECTOR3 + FLOAT + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def new file mode 100644 index 0000000..d716467 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def @@ -0,0 +1,32 @@ + + + + ENTITY_ID + CELL_PRIVATE + + + ENTITY_ID + BASE + + + UINT8 + CELL_PRIVATE + + + + + + + + + + + + BOOL + + + BOOL + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleStarterClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleStarterClient.def new file mode 100644 index 0000000..f5f209e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BattleStarterClient.def @@ -0,0 +1,23 @@ + + + + + UINT8 + + + + + STRING + MAILBOX + + + + + PYTHON + + + INT64 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BuoyancyOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BuoyancyOwner.def new file mode 100644 index 0000000..2ddf199 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/BuoyancyOwner.def @@ -0,0 +1,68 @@ + + + + + + + + + + BUOYANCY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + FLOAT + ALL_CLIENTS + + + + + + + <_BuoyancyOwner__oldBuoyancyState/> + <_BuoyancyOwner__currentBuoyancySpeedTime/> + <_BuoyancyOwner__targetBuoyancySpeedCoef/> + <_BuoyancyOwner__prevBuoyancySpeedCoef/> + <_BuoyancyOwner__buoyancySpeedTime/> + <_BuoyancyOwner__newBuoyancyLevelLock/> + <_BuoyancyOwner__currentStateIndex/> + <_BuoyancyOwner__availableStates/> + + + + + + + + + + + + + + + + <_BuoyancyOwner__isUsingFakeTargetWaterline/> + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DamageDealerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DamageDealerOwner.def new file mode 100644 index 0000000..8ffbc9f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DamageDealerOwner.def @@ -0,0 +1,28 @@ + + + + BOOL + CELL_PUBLIC + + + + ARRAYFLOAT324 + CELL_PUBLIC + + 1.0 + 1.0 + 1.0 + 0.0 + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DebugDrawEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DebugDrawEntity.def new file mode 100644 index 0000000..1b25f64 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/DebugDrawEntity.def @@ -0,0 +1,92 @@ + + + + + + STRING + BLOB + + + + + + ARRAY VECTOR3 + UINT32 + UINT32 + BOOL + BOOL + + + + + + VECTOR3 + VECTOR3 + UINT32 + UINT32 + BOOL + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + UINT32 + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + +
VECTOR3
+ FLOAT32 + UINT32 + UINT32 + BOOL +
+
+ + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + +
+
diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/GiveClientHelper.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/GiveClientHelper.def new file mode 100644 index 0000000..9db2889 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/GiveClientHelper.def @@ -0,0 +1,21 @@ + + + TransactionAPI + + + + + + + <_GiveClientHelper__logName/> + + + + + MAILBOX + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def new file mode 100644 index 0000000..e41533b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def @@ -0,0 +1,180 @@ + + + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + + + STRING + INT8 + + + + + + + + UINT8 + BOOL + OWN_CLIENT + + + UINT8 + BOOL + + + + + + STRING + INT32 + STRING + + + + + OWN_CLIENT + + GAMEPARAMS_ID + VECTOR3 + VECTOR3 + FLOAT32 + + + + + + OWN_CLIENT + + + + + + + VECTOR3 + FLOAT32 + UINT32 + BOOL + + + BLOB + BOOL + BOOL + + + ARRAY UINT8 + ARRAY UINT32 + 2 + + + UINT16 + UINT32 + + + UINT32 + STRING + UINT32 + + + ARRAY FLOAT + + + + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + UINT16 + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PRIVATE + False + + + FLOAT32 + CELL_PUBLIC + 0.0 + + + + ARRAY HEAT_INFO_STATE + ALL_CLIENTS + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + + + + + + + + + + + + + + + + + + + + + + + <_HitLocationManagerOwner__regenVary/> + <_HitLocationManagerOwner__healthRegenPercent/> + <_HitLocationManagerOwner__healthRegenSpeed/> + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/ModelOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/ModelOwner.def new file mode 100644 index 0000000..926e8ab --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/ModelOwner.def @@ -0,0 +1,32 @@ + + + + + + + STRING + STRING + + + STRING + STRING + + + + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsOwner.def new file mode 100644 index 0000000..51ed150 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsOwner.def @@ -0,0 +1,23 @@ + + + + BLOB + + + + + + + BLOB + BLOB + + + + + + + + + <_StatsOwner__sendStatsVary/> + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsPublisher.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsPublisher.def new file mode 100644 index 0000000..94adaac --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/StatsPublisher.def @@ -0,0 +1,29 @@ + + + + + + STRING + INT32 + BOOL + + + + + + STRING + FLOAT + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/TransactionAPI.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/TransactionAPI.def new file mode 100644 index 0000000..35c6bbf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/TransactionAPI.def @@ -0,0 +1,39 @@ + + + + + + UINT16 + BASE + 0 + + + + + + + + + + UINT64 + UINT8 + UINT8 + UINT8 + ARRAY MAILBOX + BOOL + + + + + + + UINT64 + UINT8 + UINT8 + MAILBOX + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VisionOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VisionOwner.def new file mode 100644 index 0000000..8bcd78f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VisionOwner.def @@ -0,0 +1,52 @@ + + + + + + <_events/> + <_collectedVision/> + <_spotVaryId/> + <_visibilityUpdateVaryId/> + <_visionToEntityUpdateVaryId/> + <_visionToProjectileVaryId/> + + <_visionFlag/> + + + + + + + + + + + + + + + + + + + + + + + + ENTITY_ID + VISIBILITY_FLAG + + + ENTITY_ID + + + + BOOL + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VoiceChatClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VoiceChatClient.def new file mode 100644 index 0000000..83196ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/VoiceChatClient.def @@ -0,0 +1,23 @@ + + + + + + + + + + + + BLOB + + + + + + BLOB + 2 + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletOwner.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletOwner.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletProperties.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletProperties.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WalletProperties.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WeatherOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WeatherOwner.def new file mode 100644 index 0000000..edf71ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/entity_defs/interfaces/WeatherOwner.def @@ -0,0 +1,20 @@ + + + + + + + + + + + + + WEATHER_LOGIC_PARAMS + CELL_PRIVATE + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/space_defs/GeneralSpaceData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/space_defs/GeneralSpaceData.def new file mode 100644 index 0000000..2113b3c --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/space_defs/GeneralSpaceData.def @@ -0,0 +1,15 @@ + + + + + + STRING + + + + UINT32 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/spaces.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/spaces.xml new file mode 100644 index 0000000..d4be0b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/spaces.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Barge.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Barge.def new file mode 100644 index 0000000..259fa18 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Barge.def @@ -0,0 +1,36 @@ + + CLIENT + Enable + + + STRING + True + + + + STRING + True + content/ports/ship/vessel/OSV3002/OSV3002.model + + + + + STRING + True + content/gameplay/europe/character/WH001_Sweden_sailor/WH001_Sweden_sailor.model + + + + + VECTOR3 + True + 0.0 0.0 0.0 + + + + FLOAT + True + 0.0 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Building.def new file mode 100644 index 0000000..2377917 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Building.def @@ -0,0 +1,58 @@ + + BASE + + Enable + + + tag + name + + + + + + STRING + true + + + + INT8 + true + + + + STRING + true + + + + + UINT32 + False + 0 + + + + STRING + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ControlPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ControlPoint.def new file mode 100644 index 0000000..37103b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ControlPoint.def @@ -0,0 +1,98 @@ + + + BASE + Enable + + + tag + name + + + + + + + STRING + True + + + + ARRAY UDO_REF + True + + + + STRING + true + + + + INT8 + true + -1 + + + + FLOAT + true + + RADIUS + 255 0 0 192 + 1 + + 10.0 + + + + FLOAT + true + + RADIUS + 0 255 0 192 + 1 + + 0.0 + + + + UINT16 + true + + + + UINT16 + true + + + + STRING + true + + + + STRING + True + + + + UINT8 + true + 10 + + + + STRING + true + PCOU001_Buoy_LMY003 + + + + + BOOL + True + False + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ConvoyWayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ConvoyWayPoint.def new file mode 100644 index 0000000..b90d1fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/ConvoyWayPoint.def @@ -0,0 +1,67 @@ + + Enable + + + 0x5503a6bf + radius + + + 0x55660066 + catchRadius + + + BASE + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + UINT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + FLOAT + 1.0 + true + + + FLOAT + 15 + + RADIUS + 255 168 0 192 + 1 + + true + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/DropZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/DropZone.def new file mode 100644 index 0000000..06d6cd0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/DropZone.def @@ -0,0 +1,65 @@ + + BASE + Enable + + + tag + name + + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + + + + STRING + true + PCOE001_Default + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/FogPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/FogPoint.def new file mode 100644 index 0000000..682783a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/FogPoint.def @@ -0,0 +1,25 @@ + + BASE + + + STRING + true + + + + FLOAT32 + true + 15 + RADIUS + 0 255 0 255 + 1.5 + + + + + FLOAT32 + true + 0.05 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapBorder.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapBorder.def new file mode 100644 index 0000000..a268f2f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapBorder.def @@ -0,0 +1,15 @@ + + BASE + + + STRING + True + + + + STRING + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapPartInfo.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapPartInfo.def new file mode 100644 index 0000000..691e52a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapPartInfo.def @@ -0,0 +1,71 @@ + + Enable + + + CLIENT + + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + VECTOR3 + false + + + + VECTOR3 + false + + + + FLOAT + false + 1.0472 + + + + STRING + True + 0x811177ff + + + + STRING + True + 0x90b1c231 + + + + FLOAT32 + True + 7.0 + + + + ARRAY VECTOR3 + + True + + + + ARRAY VECTOR3 + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapSeparator.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapSeparator.def new file mode 100644 index 0000000..0dc46dc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/MapSeparator.def @@ -0,0 +1,20 @@ + + Enable + + + BASE + + + ARRAY STRING + + True + + + + ARRAY UDO_REF + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Minefield.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Minefield.def new file mode 100644 index 0000000..7421af3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Minefield.def @@ -0,0 +1,91 @@ + + BASE + Enable + + + + + STRING + true + + + + STRING + true + + PBPM001_SeaMine + + + + STRING + false + + + + UINT16 + false + 0 + + + + STRING + false + + + + FLOAT + true + 1000.0 + + + + FLOAT + true + 1000.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + FLOAT + true + 0.0 + + + + FLOAT + true + 40.0 + 20.0 + + + + STRING + true + + + + BOOL + true + 1 + + + + FLOAT + true + 0.5 + 0.0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Prefab.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Prefab.def new file mode 100644 index 0000000..0cdba86 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Prefab.def @@ -0,0 +1,31 @@ + + BASE + Enable + + + name + + + + + STRING + true + + + + ARRAY UDO_REF + true + + + + STRING + true + + + + STRING + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpaceDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpaceDebugTool.def new file mode 100644 index 0000000..ca0e448 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpaceDebugTool.def @@ -0,0 +1,55 @@ + + Enable + + CLIENT + + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpatialUIDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpatialUIDebugTool.def new file mode 100644 index 0000000..83f1b6f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpatialUIDebugTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + FLOAT + true + 1 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpawnPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpawnPoint.def new file mode 100644 index 0000000..7e95937 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SpawnPoint.def @@ -0,0 +1,84 @@ + + + BASE + + Enable + + + tag + + + + + + STRING + true + + + + UINT8 + true + 0 + + + + STRING + true + + + + ARRAY UINT8 + True + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SquadronReticleTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SquadronReticleTool.def new file mode 100644 index 0000000..3f24f57 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/SquadronReticleTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + VECTOR3 + True + 1.0 1.0 1.0 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Trigger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Trigger.def new file mode 100644 index 0000000..5649ec9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/Trigger.def @@ -0,0 +1,47 @@ + + BASE + Enable + + + 0x55bd8d06 + radius + + + tag + name + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/WayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/WayPoint.def new file mode 100644 index 0000000..9078b56 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_object_defs/WayPoint.def @@ -0,0 +1,66 @@ + + CLIENT + Enable + + + STRING + true + + + + + ARRAY UDO_REF + True + + + + FLOAT32 + 20 + True + + + + STRING + True + + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + UINT8 + 1 + True + + + + FLOAT32 + 1.0 + True + + + + FLOAT32 + 2.0 + True + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_objects.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_objects.xml new file mode 100644 index 0000000..30347e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_1_0/scripts/user_data_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AccountReviverComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AccountReviverComponent.def new file mode 100644 index 0000000..a55a784 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AccountReviverComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AchievementsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AchievementsComponent.def new file mode 100644 index 0000000..5ac40fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AchievementsComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + UINT64 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AlmanacComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AlmanacComponent.def new file mode 100644 index 0000000..860a1e2 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/AlmanacComponent.def @@ -0,0 +1,32 @@ + + + + ZIPPED_BLOB + + none + + + + ZIPPED_BLOB + + none + + + + UINT16 + UINT8 + BOOL + + + + + + UINT16 + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BattlePassComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BattlePassComponent.def new file mode 100644 index 0000000..781cdee --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BattlePassComponent.def @@ -0,0 +1,50 @@ + + + + + + + UINT16 + UINT8 + + + + + + UINT16 + UINT16 + UINT8 + UINT8 + + + BOOL + + + + + + UINT16 + + + BOOL + + + + + + + + + + UINT16 + UINT16 + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BrawlBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BrawlBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/BrawlBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ControllerToAccountConnector.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ControllerToAccountConnector.def new file mode 100644 index 0000000..bdb8847 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ControllerToAccountConnector.def @@ -0,0 +1,51 @@ + + + + + <_pingAccountCounter/> + <_ControllerToAccountConnector__accountCheckVaryID/> + <_ControllerToAccountConnector__accountWaiter/> + + + + + + + + ENTITYAPI_TIMEOUT + + + MAILBOX + + + + + + MAILBOX + + + + + + MASTER_ID + MAILBOX + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + ZIPPED_BLOB + UINT8 + MAILBOX + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponent.def new file mode 100644 index 0000000..c913f4f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponent.def @@ -0,0 +1,107 @@ + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + + + UINT8 + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + ARENA_UNIQUE_ID + MASTER_ID + + + + + + + ENTITY_ID + SHIP_ID + BOOL + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + UNICODE_STRING + + + + + + + ENTITY_ID + SHIP_ID + + + INT64 + + + + + + + ENTITY_ID + DB_ID + + + + + + + ENTITY_ID + + + + + + + DB_ID + UNICODE_STRING + + + + + + + ENTITY_ID + + + + + + + + + + UINT8 + UINT8 + STRING + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponentAvatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponentAvatar.def new file mode 100644 index 0000000..d9ae622 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DivisionsManagerComponentAvatar.def @@ -0,0 +1,16 @@ + + + + + + ENTITY_ID + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DockComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DockComponent.def new file mode 100644 index 0000000..e84c4f4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/DockComponent.def @@ -0,0 +1,13 @@ + + + + + + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/GiftListsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/GiftListsComponent.def new file mode 100644 index 0000000..11df2da --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/GiftListsComponent.def @@ -0,0 +1,17 @@ + + + + + + + UINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/HotFixComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/HotFixComponent.def new file mode 100644 index 0000000..7b89c1b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/HotFixComponent.def @@ -0,0 +1,28 @@ + + + + BLOB + + + + + + BOOL + + + + + + + + + PYTHON + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/KeyTargetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/KeyTargetComponent.def new file mode 100644 index 0000000..de0e975 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/KeyTargetComponent.def @@ -0,0 +1,18 @@ + + + + + + + + + UINT32 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/LootboxComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/LootboxComponent.def new file mode 100644 index 0000000..ffd9cbd --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/LootboxComponent.def @@ -0,0 +1,56 @@ + + + + + + + GAMEPARAMS_ID + + + + + + + GAMEPARAMS_ID + UINT16 + + + + + + + + + + + + GAMEPARAMS_ID + MSGPACK_BLOB + + + none + + + + + + + + + UINT16 + + + + + + UINT16 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MasterEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MasterEntityAPIComponent.def new file mode 100644 index 0000000..393b760 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MasterEntityAPIComponent.def @@ -0,0 +1,98 @@ + + + <_MasterEntityAPIComponent__loadEntitiesHelper/> + + + + + CLUSTER_ID + STRING + ZIPPED_BLOB + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOOKUP_ARGS + BOOL + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + STRING + DB_ID + ENTITY_LOAD_ARGS + ZIPPED_BLOB + + + MAILBOX + + + + + + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + CLUSTER_ID + CREATE_BATTLE_SESSION_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_PRE_BATTLE_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_TRAINING_ROOM_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MatchmakerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MatchmakerComponent.def new file mode 100644 index 0000000..85567e4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/MatchmakerComponent.def @@ -0,0 +1,82 @@ + + + <_MatchmakerComponent__realm> + STRING + BASE + + <_MatchmakerComponent__queueType> + QUEUE_TYPE + BASE + + <_MatchmakerComponent__inDivision> + BOOL + BASE + + <_MatchmakerComponent__battleStarterService> + MAILBOX + BASE + + + + + + + + SHIP_ID + QUEUE_TYPE + INT16 + INT32 + GAMEPARAMS_ID + + + + + + + + + + ENQUEUE_DATA + + + + + + ENQUEUE_DATA + + + + + + UINT8 + + + + + + + + QUEUE_TYPE + SHIP_ID + PICKLED_BLOB + + + + + + GAMEPARAMS_ID + PICKLED_BLOB + + + + + + UINT8 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/NewbieQuestComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/NewbieQuestComponent.def new file mode 100644 index 0000000..8a393ea --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/NewbieQuestComponent.def @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PVEBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PVEBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PVEBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PdataResetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PdataResetComponent.def new file mode 100644 index 0000000..076cf6a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/PdataResetComponent.def @@ -0,0 +1,71 @@ + + + + + + + + + + + INT8 + ZIPPED_BLOB + + + + + + + ZIPPED_BLOB + + + + INT8 + + + + + + + RESTORE_POINT + + + UINT8 + + + + + + + INT32 + UINT32 + BOOL + + + INT8 + + + + + + + INT8 + + + + + + + DB_ID + STRING + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RankedBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RankedBattlesComponent.def new file mode 100644 index 0000000..9622027 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RankedBattlesComponent.def @@ -0,0 +1,73 @@ + + + + + INT16 + + + + + + INT16 + + + + + + INT16 + UINT8 + BOOL + + + + + + INT8 + + + + + + INT16 + + + + + + + + + + + + + + + + INT8 + INT8 + BOOL + BOOL + BOOL + + + + + + + + + + INT16 + INT8 + INT16 + INT16 + INT16 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RequestPerformerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RequestPerformerComponent.def new file mode 100644 index 0000000..15110b3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/RequestPerformerComponent.def @@ -0,0 +1,23 @@ + + + + + + <_UsersInfoActualizer__awaitingRequests/> + <_UsersInfoActualizer__currentBatchID/> + <_UsersInfoActualizer__processingBatches/> + + + + + + UINT32 + ARRAYPLAYER_INFO + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ShipAcesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ShipAcesComponent.def new file mode 100644 index 0000000..ca3a438 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/ShipAcesComponent.def @@ -0,0 +1,38 @@ + + + + + + + + + + UINT8 + STRING + STRING + + + + + + + SHIP_ID + ACES_TASK_PROGRESS + + + + + + + + + + ZIPPED_BLOB + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/StrategicActionsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/StrategicActionsComponent.def new file mode 100644 index 0000000..d2ef68a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/StrategicActionsComponent.def @@ -0,0 +1,59 @@ + + + + + + STRING + + + BOOL + + + + + + STRING + + + BOOL + + + + + + BOOL + + + + + + UINT16 + + + + + + + + + + + + STRING + UINT16 + ARRAYSTRING + + + + + STRING + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SuperEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SuperEntityAPIComponent.def new file mode 100644 index 0000000..efdef19 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SuperEntityAPIComponent.def @@ -0,0 +1,72 @@ + + + + + + + + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + MAILBOX + DB_ID + MASTER_ID + + + + + + DB_ID + BOOL + + + + + + DB_ID + MAILBOX + + + MASTER_ID + MAILBOX + + + + + + MAILBOX + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SurveysComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SurveysComponent.def new file mode 100644 index 0000000..3defdaf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/SurveysComponent.def @@ -0,0 +1,29 @@ + + + + + + + + + UINT32 + ARRAYUINT8 + + + + + + + UINT32 + UINT32 + ARRAYUINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomComponent.def new file mode 100644 index 0000000..29cf0ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomComponent.def @@ -0,0 +1,111 @@ + + + + + + + + + + + + UINT64 + + + + + + + + + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + + + + + INT64 + + + + + + + + + INT64 + + + + + + + + + + + + + INT64 + INT64 + + + + + INT64 + INT64 + INT32 + INT32 + UNICODE_STRING + + + + + INT64 + INT64 + INT32 + INT32 + INT32 + + + + + INT64 + INT64 + + + + \ + TRAINING_ROOM_PROPERTIES + + + + + INT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomsManagerComponent.def new file mode 100644 index 0000000..ef17df9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/TrainingRoomsManagerComponent.def @@ -0,0 +1,32 @@ + + + + TRAINING_ROOM_PROPERTIES + + + + + ARRAY + DB_ID + + UNICODE_STRING + + + + + UINT64 + UNICODE_STRING + + + + + UINT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/UserDataComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/UserDataComponent.def new file mode 100644 index 0000000..26dfdfb --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/UserDataComponent.def @@ -0,0 +1,38 @@ + + + + + ARRAYDB_ID + MSGPACK_BLOB + + + + + + ARRAYDB_ID + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/VSEventComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/VSEventComponent.def new file mode 100644 index 0000000..ac91dff --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/VSEventComponent.def @@ -0,0 +1,67 @@ + + + + + + + INT8 + + + + + + + + BOOL + + + + + + STRING + UINT32 + + + + + + + + + + + + UINT32 + + UINT32 + + + + + + + + INT8 + + + + + + + + + <_VSEventComponent__eventPdata/> + <_VSEventComponent__tasksProgress/> + <_VSEventComponent__shouldRequestFinalStats/> + <_VSEventComponent__notRequestedPersonalTasksRates/> + <_VSEventComponent__notSyncTasksProgress/> + <_VSEventComponent__notSyncFinalStats/> + <_VSEventComponent__shouldReSyncOnStageChanged/> + <_VSEventComponent__shouldSyncTasksProgressOnPrimeChanged/> + <_VSEventComponent__isSubscribed/> + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/XmppComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/XmppComponent.def new file mode 100644 index 0000000..abe4a5f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/component_defs/XmppComponent.def @@ -0,0 +1,23 @@ + + + + MSGPACK_BLOB + + + BOOL + + + BOOL + + + BOOL + + + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/components.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/components.xml new file mode 100644 index 0000000..db2d64a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/components.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entities.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entities.xml new file mode 100644 index 0000000..dadadb8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entities.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Account.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Account.def new file mode 100644 index 0000000..2110e54 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Account.def @@ -0,0 +1,511 @@ + + + + true + + AccountCMDs + BattleStarterClient + AccountPData + WalletOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + + + + BOOL + BASE_AND_CLIENT + False + + + + + + BLOB + + + + UNICODE_STRING + INT64 + + + + + BLOB + BLOB + + + none + + + + BLOB + + + BLOB + + + STRING + INT32 + INT32 + + + UINT64 + + + INT32 + FLOAT + + + FLOAT + INT32 + + + PYTHON + + + INT16 + UINT32 + UINT16 + UINT16 + GAME_MODE + GAMEPARAMS_ID + + + PRE_BATTLE_INVITE_DEF + + + OBJECT_ID + UINT8 + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + BLOB + INT32 + BOOL + + none + + + + INT32 + + + UINT8 + UINT32 + UINT8 + + + UINT8 + UINT8 + + + UINT8 + BLOB + + + BLOB + COUNTDOWN_INFO + INT32 + BOOL + + none + + + + INT8 + + + INT8 + + + PRE_BATTLE_ID + BLOB + BOOL + INT32 + True + + none + + + + PLAYER_ID + + + QUEUE_TYPE + GAMEPARAMS_ID + BOOL + + + DB_ID + STRING + STRING + STRING + STRING + UINT32 + + + INT16 + INT16 + + + ARRAY + RANK_BATTLES_DENY_REASON + + + + UINT32 + UINT8 + BLOB + + + + DB_ID + INT32 + UINT8 + + + UINT8 + + + STRING + + + UINT64 + + + BOOL + + + + STRING + + none + + + + UINT8 + + + UINT32 + + + INT32 + + + MSGPACK_BLOB + + none + + + + SHIP_ID + UINT8 + + + + CREW_ID + BOOL + + + + SHIP_ID + MSGPACK_BLOB + + + SHIP_ID + + + SHIP_ID + BOOL + + + UINT32 + MSGPACK_BLOB + + + BOOL + UINT8 + UINT32 + + + + STRING + STRING + + + + ARRAY + BARGE_BANNER + + + + + BLOB + + + + UINT32 + UINT32 + BOOL + + + CAMPAIGN_TASK_ID + + + CAMPAIGN_TASK_ID + UINT8 + + + CAMPAIGN_TASK_ID + UINT8 + UINT16 + ARRAY + UINT32 + + + + CAMPAIGN_TASK_ID + + + BLOB + + + UINT32 + UINT16 + ARRAY + UINT32 + + + + ARRAY + UINT32 + + ARRAY + UINT32 + + + + UINT32 + UINT8 + + + UINT32 + UINT32 + ARRAY + UINT32 + + + + BOOL + + + BOOL + + + UINT32 + STRING + UINT8 + + + BLOB + + + UINT32 + UINT32 + UINT32 + UINT32 + + + MSGPACK_BLOB + + + + UINT32 + STRING + UINT32 + + + + + INT64 + + + + BOOL + + + UINT64 + + + + UNICODE_STRING + + + UINT8 + + + BOOL + UINT8 + + + + ARRAY + GAMEPARAMS_ID + + + + + + ARRAY + GAMEPARAMS_ID + + + + + + + + MSGPACK_BLOB + + + + + UINT32 + UINT32 + UINT32 + UINT32 + + + + + + + UINT32 + + + + ARRAY + STRING + + + + + ARRAY + STRING + + + + + ARRAY + UINT32 + + + + + + + + + STRING + STRING + + + + BLOB + + + UINT64 + + + + CLIENT_STAT_INFO + + + + + STRING + + + + + + + + + + + + + + + + + + + + + + UINT32 + MSGPACK_BLOB + INT32 + BOOL + + + BOOL + + + + UINT16 + + + + + UINT8 + + + + STRING + FLOAT + + + + FLOAT + + + + MSGPACK_BLOB + MSGPACK_BLOB + + + + + + UNICODE_STRING + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Avatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Avatar.def new file mode 100644 index 0000000..7d9e7c0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Avatar.def @@ -0,0 +1,1299 @@ + + + + + BattleLogicEntityOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + DebugDrawEntity + StatsOwner + + + + + + + ENTITY_ID + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC_AND_OWN + True + + + VECTOR3 + OWN_CLIENT + + + TEAM_ID + ALL_CLIENTS + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + BOOL + OWN_CLIENT + False + true + + + BOOL + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + UINT64 + BASE_AND_CLIENT + 0 + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + PRIVATE_BATTLE_LOGIC_STATE + OWN_CLIENT + + + PRIVATE_VEHICLE_STATE + OWN_CLIENT + + + VISIBILITY_DISTANCES + ALL_CLIENTS + + + BOOL + OWN_CLIENT + 0 + + + BOOL + OWN_CLIENT + 1 + + + UINT16 + OWN_CLIENT + 0 + + + PLAYER_MODE + OWN_CLIENT + + + VISION + OWN_CLIENT + + + BOOL + OWN_CLIENT + 0 + + + + + PLAYER_ID + UINT16 + UINT16 + + + ENTITY_ID + ENTITY_ID + UINT32 + + + ENTITY_ID + ENTITY_ID + + + + GAMEPARAMS_ID + GAMEPARAMS_ID + UINT8 + ARRAY + WEAPON_LOCK_STATE + + + + + GAMEPARAMS_ID + UINT32 + UINT32 + ENTITY_ID + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + INT16 + ARRAY + UINT32 + + + + + BLOB + BLOB + BLOB + + true + true + 2 + + + + BLOB + BLOB + BLOB + + 2 + + + false + + + + ARRAY + SHOTS_PACK + + + + ARRAY + TORPEDOES_PACK + + + + ARRAY + SHOTKILLS_PACK + + + + ARRAY + EXPLOSION + + + + ARRAY + PLANE_PROJECTILE_PACK + + + + ARRAY + PLANE_SKIP_BOMB_PACK + + + + ARRAY + PLANE_ROCKET_PACK + + + + ARRAY + DEPTH_CHARGES_PACK + + + + ARRAY + LASER_BEAM + + + + ARRAY + SECTOR_WAVE_SHOTS_PACK + + + + ARRAY + PINGER_SHOT + + + + ARRAY + PINGER_SHOT_KILL + + + + PLAYER_ID + UINT16 + + + + PLAYER_ID + SHOT_ID + VECTOR3 + + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + BOOL + + + PLAYER_ID + SHOT_ID + BOOL + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + UINT8 + + + + MINEFIELD_INFO + + + + + FIELD_ID + + + + + ARRAY + FIELD_PACK + + + + + + ARRAY + FIELD_PACK + + + + + INT32 + BLOB + ENTITY_ID + BOOL + + + BLOB + INT16 + BOOL + + none + + + + UINT8 + UINT16 + + + GAMEPARAMS_ID + UINT8 + SQUADRON_STATE + PLANE_ID + UINT32 + FLOAT + UINT64 + + + PLANE_ID + TEAM_ID + GAMEPARAMS_ID + VECTOR2 + BOOL + + + PLANE_ID + + + PLANE_ID + VECTOR2 + + + PLANE_ID + UINT8 + + + PLANE_ID + + + PLANE_ID + FLOAT + PLANE_PATH + + + PLANE_ID + PLANE_PATH + + + + PLANE_ID + VECTOR3 + + FLOAT + TEAM_ID + UINT64 + UINT8 + + + + PLANE_ID + + + PLANE_ID + UINT8 + UINT8 + + + PLANE_ID + ARRAY + UINT8 + + UINT8 + INT64 + + + PLANE_ID + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + FLOAT + UINT8 + + + PLANE_ID + FLOAT + + + PLANE_ID + UINT64 + + + BLOB + + + PLANE_ID + UINT16 + + + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + + + + PLANE_ID + BOOL + + + PLANE_ID + UINT8 + + + PLANE_ID + UINT8 + + + PLANE_ID + VECTOR3 + FLOAT + + + + PLANE_ID + TEAM_ID + + + + + PLANE_ID + TEAM_ID + + + + PLANE_ID + + + + PLAYER_ID + QUICK_COMMAND + + + + FLOAT + + + PLAYER_ID + STRING + STRING + STRING + + + ENTITY_ID + VECTOR3 + FLOAT + + + VECTOR3 + FLOAT + + + ENTITY_ID + + + + + UINT32 + UINT8 + BLOB + + + + + INT64 + INT8 + BLOB + BLOB + BLOB + BLOB + BLOB + + + none + + + + BLOB + + + UINT64 + + + UINT64 + + + MINIMAPINFO + MINIMAPINFO + + + + PLAYER_ID + UINT32 + + + ARRAY + UINT32 + + + + BLOB + + + UINT8 + INT8 + + + ENTITY_ID + + + UINT8 + + + + BLOB + INT32 + BOOL + + + none + + + + + UINT8 + UINT8 + + + + + + + PLAYER_ID + BOOL + + + + BLOB + BOOL + True + + none + + + + + BLOB + + + + + INT32 + + + + INT16 + INT16 + + + UINT32 + UINT32 + BOOL + + + BLOB + + + BLOB + + + + PRE_BATTLE_INVITE_DEF + + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + BLOB + + + OBJECT_ID + UINT8 + + + ENTITY_ID + + + ENTITY_ID + + + UINT8 + + + BOOL + + + ARRAY + SURFACE_HYDROPHONE_ZONE_INFO + + + + ARRAY + SURFACE_BROADCAST_ZONE_INFO + + + + ENTITY_ID + + + + + + UINT16 + ENTITY_ID + FLOAT + + + FLOAT + + + FLOAT + + + + + + BOOL + FLOAT + + + + ARRAY + CONSUMABLE_ID + + UINT8 + UINT8 + + + + + PLANE_ID + ARRAY + CONSUMABLE_ID + + UINT8 + UINT8 + + + + STRING + + + STRING + ZIPPED_BLOB + UINT8 + + + STRING + + + ENTITY_ID + VECTOR3 + BUBBLE_PACK + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + ENTITY_ID + UINT8 + VECTOR3 + + + ENTITY_ID + UINT8 + PLANE_ID + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + BOOL + + + BATTLE_EVENT + REASON_ID + + + ENTITY_ID + NAVIGATION_DEBUG_DATA + + + FLOAT + + + + UINT8 + PLANE_ID + SHOT_ID + + + + + UINT8 + PLANE_ID + VECTOR3 + FLOAT + SHOT_ID + + + #TODO:have to be removed + UINT8 + PLANE_ID + + + UINT8 + + + VECTOR3 + UINT8 + TEAM_ID + + + ENTITY_ID + VECTOR2 + + + + ENTITY_ID + FLAT_VECTOR + FLOAT + NULLABLE_VECTOR3 + + + + UINT8 + FLOAT + + + + VECTOR3 + FLOAT + FLOAT + + + + + + OWN_CLIENT + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + OWN_CLIENT + + PLANE_ID + CONSUMABLE_USAGE_PARAMS + + + + OWN_CLIENT + + CONSUMABLE_ID + BOOL + + + + OWN_CLIENT + CONSUMABLE_USAGE_PARAMS + + + OWN_CLIENT + CONSUMABLE_ID + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + UINT8 + UINT32 + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + + WEAPON_TYPE + NULLABLE_VECTOR3 + NULLABLE_VECTOR3 + BOOL + BOOL + + + + OWN_CLIENT + + WEAPON_TYPE + VECTOR3 + VECTOR3 + + + + OWN_CLIENT + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + UINT8 + UINT8 + + + OWN_CLIENT + WEAPON_TYPE + GAMEPARAMS_ID + + + OWN_CLIENT + + + OWN_CLIENT + VECTOR3 + + + OWN_CLIENT + INT8 + INT8 + TARGET_ID + VECTOR3 + + + OWN_CLIENT + VECTOR3 + WEAPON_TYPE + VECTOR3 + + + FLOAT + OWN_CLIENT + + + FLOAT + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + ENTITY_ID + true + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + INT8 + FLOAT + FLOAT + BOOL + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + PLANE_ID + VECTOR3 + FLOAT + VECTOR3 + FLOAT + + + + OWN_CLIENT + PLANE_ID + UINT8 + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + FLOAT + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + BLOB + FLOAT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + UINT64 + OWN_CLIENT + + + OWN_CLIENT + TARGET_ID + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + + BOOL + + + + OWN_CLIENT + + BOOL + + + + OWN_CLIENT + INT8 + ARRAY + UINT8 + + FLOAT + + + OWN_CLIENT + PLANE_ID + VECTOR3 + NULLABLE_FLOAT + + + OWN_CLIENT + UINT16 + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + TEAM_ID + + + OWN_CLIENT + UINT8 + ARRAY + UINT8 + + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + ENTITY_ID + BOOL + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + + + OWN_CLIENT + + QUICK_COMMAND + + + + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + PLAYER_ID + UINT8 + + + OWN_CLIENT + + + OWN_CLIENT + STRING + STRING + + + UINT64 + OWN_CLIENT + + + UINT16 + UINT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT16 + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT32 + OWN_CLIENT + OWN_CLIENT + + + + STRING + TEAM_ID + INT16 + INT16 + INT16 + UINT16 + STRING + ARRAY + STRING + + + OWN_CLIENT + + + OWN_CLIENT + + UINT32 + + + + + UINT32 + UINT32 + + OWN_CLIENT + + + + UINT8 + UINT8 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + INT64 + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + OWN_CLIENT + + + INT64 + OWN_CLIENT + + + UINT32 + OWN_CLIENT + + + UINT8 + OWN_CLIENT + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleEntity.def new file mode 100644 index 0000000..d43c0ec --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleEntity.def @@ -0,0 +1,50 @@ + + + + + BattleLogicEntityOwner + AviationOwner + DamageDealerOwner + StatsOwner + WeatherOwner + VisionOwner + + true + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + GAMEPARAMS_ID + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + 1 + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleLogic.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleLogic.def new file mode 100644 index 0000000..a4c32e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/BattleLogic.def @@ -0,0 +1,71 @@ + + + + + StatsOwner + + true + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BATTLE_LOGIC_STATE + ALL_CLIENTS + + + TEAMS_DEF + ALL_CLIENTS + + + ARRAY + BATTLE_LOGIC_DEBUG_TEXT + + ALL_CLIENTS + + + PREREQUISITE_DATA + ALL_CLIENTS + + + MAP_BORDER + ALL_CLIENTS + + + BATTLE_RESULT + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + + + STRING + VECTOR3 + FLOAT + + + STRING + VECTOR3 + FLOAT + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Building.def new file mode 100644 index 0000000..3b564a8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Building.def @@ -0,0 +1,76 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BattleLogicEntityOwner + WeatherOwner + ModelOwner + StatsOwner + + true + + + GAMEPARAMS_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + + + UINT32 + UINT32 + + + UINT16 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/InteractiveZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/InteractiveZone.def new file mode 100644 index 0000000..ac418ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/InteractiveZone.def @@ -0,0 +1,60 @@ + + + + + BattleLogicEntityOwner + + True + + + FLOAT32 + ALL_CLIENTS + 5.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + TARGET_ID + ALL_CLIENTS + 0 + + + STRING + ALL_CLIENTS + "" + + + TEAM_ID + ALL_CLIENTS + 0 + + + INTERACTIVE_ZONE_ENTITY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + INTERACTIVE_ZONE_STATE + ALL_CLIENTS + + + ARRAY + BUOYANCY_STATE + + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Login.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Login.def new file mode 100644 index 0000000..c0a05f5 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Login.def @@ -0,0 +1,41 @@ + + + + + GiveClientHelper + + + + + + UINT32 + UINT8 + STRING + + + + + UINT8 + UINT64 + + + + + UINT32 + UINT64 + ARRAY + STRING + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/MasterChanger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/MasterChanger.def new file mode 100644 index 0000000..73afe59 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/MasterChanger.def @@ -0,0 +1,42 @@ + + + + + GiveClientHelper + + + + UINT8 + BASE_AND_CLIENT + + + UINT32 + BASE_AND_CLIENT + + + + + + UINT32 + UINT8!-- Disconnect reason description. --> + STRING + + + + UINT64 + + + UINT8 + UINT32 + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/OfflineEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/OfflineEntity.def new file mode 100644 index 0000000..c5b133b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/OfflineEntity.def @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayConnectionHandler.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayConnectionHandler.def new file mode 100644 index 0000000..168963d --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayConnectionHandler.def @@ -0,0 +1,24 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayLeech.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayLeech.def new file mode 100644 index 0000000..c815da4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/ReplayLeech.def @@ -0,0 +1,31 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + BLOB + + + BLOB + + + + + + + UINT64 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/SmokeScreen.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/SmokeScreen.def new file mode 100644 index 0000000..4249db0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/SmokeScreen.def @@ -0,0 +1,43 @@ + + + + + BattleLogicEntityOwner + WeatherOwner + + true + + + FLOAT32 + ALL_CLIENTS + + + ARRAY + VECTOR3 + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + INT8 + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Vehicle.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Vehicle.def new file mode 100644 index 0000000..e4557ed --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/Vehicle.def @@ -0,0 +1,504 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + BattleLogicEntityOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BuoyancyOwner + WeatherOwner + ModelOwner + StatsOwner + + + 0.1 + + + + + + + + + + true + + + BOOL + ALL_CLIENTS + 0 + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + + + VISIBILITY_FLAG + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + SHIP_CONFIG + ALL_CLIENTS + + + CREW_MODIFIERS_COMPACT_PARAMS + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + UINT32 + ALL_CLIENTS + 0 + + + + UINT16 + ALL_CLIENTS + + + + UINT32 + ALL_CLIENTS + 0 + + true + + + INT8 + ALL_CLIENTS + + + + UINT8 + ALL_CLIENTS + + + + INT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + ARRAY + STRING + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + PICKLED_BLOB + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + UINT16 + ALL_CLIENTS + + + GAMEPARAMS + ALL_CLIENTS + + + VEHICLE_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + + + + BOOL + + + ARRAY + SUBMARINE_HYDROPHONE_TARGET_INFO + + UINT16 + + + WEAPON_TYPE + GAMEPARAMS_ID + BOOL + + + WEAPON_TYPE + UINT8 + + + ARRAY + UINT64 + + + + ARRAY + DAMAGES + + 2 + + + UINT8 + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + ARRAY + STRING + + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + INT32 + + + UINT8 + + + INT8 + UINT32 + UINT32 + FLOAT + UINT8 + VECTOR2 + VECTOR3 + VECTOR3 + + + FLOAT + + + FLOAT + + + INT32 + VECTOR3 + INT32 + INT32 + BOOL + + + INT32 + UINT16 + + + INT32 + + + INT32 + FLOAT + FLOAT + + + WEAPON_TYPE + GUN_BITS + + + WEAPON_TYPE + GUN_BITS + + + UINT8 + VECTOR3 + + + WEAPON_TYPE + GUN_BITS + + + BLOB + BLOB + + + + INT8 + BLOB + 2 + + + WEAPON_TYPE + BLOB + 2 + + + BLOB + + + BLOB + + + PLANE_ID + BLOB + + + + UINT64 + + + FLOAT + + + + + + CONSUMABLE_ID + BOOL + + + + CONSUMABLE_ID + BOOL + + + CONSUMABLE_ID + + + + CONSUMABLE_ID + FLOAT32 + + + + BOOL + + + BLOB + + + INT8 + FLOAT + + + INT8 + + + VECTOR3 + FLOAT + BOOL + + + FLOAT + + + UINT8 + FLOAT + + + WEAPON_TYPE + GUN_DIRECTIONS + + + + ENTITY_ID + + + ENTITY_ID + + + ENTITY_ID + FLOAT + FLOAT + VECTOR3 + INT8 + UINT8 + + + ENTITY_ID + FLOAT + FLOAT + UINT8 + + + ENTITY_ID + NULLABLE_VECTOR3 + + + ARRAY + ATTACHED_PINGER_WAVE + + + + PLAYER_ID + VECTOR3 + INT8 + FLOAT + FLOAT + UINT8 + FLOAT + + + PLAYER_ID + FLOAT + FLOAT + UINT8 + FLOAT + + + INT8 + INT8 + FLOAT + + + + WILD_FIRE_STATE + + + + + + + + + + + + + + + + + + + + + + VECTOR3 + NULLABLE_FLOAT + + + + + ENTITY_ID + + + + + INT32 + + + + OWN_CLIENT + + + + + BOOL + NULLABLE_FLOAT + PICKLED_BLOB + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/alias.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/alias.xml new file mode 100644 index 0000000..c264348 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/alias.xml @@ -0,0 +1,2042 @@ + + UINT8 + UINT32 + INT32 + INT8 + UINT32 + UINT32 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + UINT32 + INT32 + INT64 + UINT8 + INT32 + UINT8 + UINT8 + UINT16 + INT64 + INT64 + UINT32 + UINT32 + INT64 + UINT32 + UINT64 + UINT32 + UINT32 + UINT32 + UINT16 + UINT32 + UINT32 + UINT8 + UINT16 + UINT16 + UINT8 + UINT8 + INT8 + UINT8 + UINT16 + UINT8 + UINT8 + UINT64 + UINT8 + + + USER_TYPE + BLOB + ZippedBlobConverter.converter + + + + USER_TYPE + BLOB + BoundServiceUtils.CachedZippedBlobConverter.CachedZippedBlobConverter + + + + USER_TYPE + GameParams.converter + + + + USER_TYPE + VECTOR2 + FlatVectorDef.converter + + + + ARRAYUINT32 + + + + ARRAYTEAM_ID + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + + + + + ARRAYAVATAR_ID + + + + ARRAYENTITY_ID + + + + ARRAYDB_ID + + + + FIXED_DICT + + VECTOR3 + FLOAT + INT8 + + INT8 + + + + + ARRAY PLANE_WAYPOINT + + + + FIXED_DICT + + TEAM_ID + TEAM_INFO + + + + + FIXED_DICT + + TEAM_INFO + ARRAYTEAM_STATE + + TeamsDef.converter + + + + FIXED_DICT + + WEAPON_TYPE + UINT8 + TARGET_ID + VECTOR3 + + + + + FIXED_DICT + + MAP_ID + INT16 + INT16 + INT8 + INT8 + UINT8 + STRING + ARRAYSTRING + ARRAYTEAM_ID + GAMEPARAMS_ID + + BattleDef.converter + + + + USER_TYPE + BattleEventDef.converter + + + + USER_TYPE + ShipConfig.converter + + + + FIXED_DICT + + DB_ID + UNICODE_STRING + UINT32 + + PlayerClanInfo.converter + true + + + + FIXED_DICT + + DB_ID + STRING + UINT32 + UINT32 + BOOL + STRING + PLAYER_CLAN_INFO + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + DB_ID + UINT16 + + + + + + FIXED_DICT + + UINT32 + BOOL + ARRAYARRAYUINT8 + + CrewModifiers.crewModifiersCompactParamsConverter + + + + FIXED_DICT + + BOOL + INT8 + BOOL + UINT8 + ARRAYAI_CATEGORY + + AIConfigDef.converter + true + + + + FIXED_DICT + + MAILBOX + PLAYER_ID + STRING + ARRAYGAMEPARAMS_ID + SHIP_CONFIG + CREW_MODIFIERS_COMPACT_PARAMS + AI_CONFIG + DB_ID + DB_ID + PLAYER_CLAN_INFO + PYTHON + STRING true + BOOL + BOOL + + PlayerDef.converter + true + + + + ARRAY PLAYER_DEF + + + + + ARRAY PLAYERS_DEFS + + + + FIXED_DICT + + DB_ID + PYTHON + + true + + + + FIXED_DICT + + STRING + PLAYER_ID + DB_ID + UINT32 + UINT32 + BOOL + DB_ID + UNICODE_STRING + UINT32 + + true + + + + FIXED_DICT + + OBJECT_ID + INT8 + INT8 + UINT32 + PRE_BATTLE_CREATOR_DEF + PRE_BATTLE_SENDER_DEF + STRING + + + + + + FIXED_DICT + + OBJECT_ID + DB_ID + PLAYER_ID + STRING + DB_ID + UNICODE_STRING + BATTLE_DEF + INT8 + INT8 + UINT16 + INT8 + BOOL + BOOL + INT32 + INT8 + INT8 + GAMEPARAMS_ID + BOOL + + true + PreBattleDef.converter + + + + FIXED_DICT + + UINT32 + UINT32 + + + + + FIXED_DICT + + ENTITY_ID + FLOAT + + + + + FIXED_DICT + + SHIP_ID + FLOAT + + + + + ARRAY MINIMAP_USER_INFO + + + ARRAY MAILBOX + + + + FIXED_DICT + + UINT8 + TARGET_ID + VECTOR3 + TEAM_ID + UINT8 + + GoalDef.converter + true + + + + FIXED_DICT + + UINT8 + UINT8 + GOAL_DEF + GOAL_DEF + + OrderDef.converter + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + VECTOR3 + SHOT_ID + UINT16 + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + ARRAYSHOT + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + VECTOR3 + VECTOR3 + + true + + + + FIXED_DICT + + BOOL + BOOL + UINT8 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + BOOL + TORPEDO_MANEUVER_DUMP + TORPEDO_ACOUSTIC_DUMP + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAYTORPEDO + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + FLOAT + FLOAT + + + + + FIXED_DICT + + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAY DEPTH_CHARGE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + BOOL + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + SHOT_ID + TERMINAL_BALLISTICS_INFO + + + + + FIXED_DICT + + PLAYER_ID + HIT_TYPE + ARRAYSHOTKILL + + + + + FIXED_DICT + + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + PLAYER_ID + GUN_ID + BOOL + + + + + FIXED_DICT + + PLAYER_ID + SHOT_ID + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + PLAYER_ID + HIT_TYPE + + + + + FIXED_DICT + + FLOAT + FLOAT + + + + + FIXED_DICT + + SHOT_ID + FLOAT + FLOAT + FLOAT + VECTOR3 + FLOAT + ARRAY SECTOR + + WaveDef.sectorConverter + false + + + + FIXED_DICT + + PLAYER_ID + GAMEPARAMS_ID + ARRAYSECTOR_WAVE_SHOT + + + + + FIXED_DICT + + INT64 + INT8 + BLOB + BLOB + BLOB + + + + + FIXED_DICT + + INT32 + FLOAT + PLAYER_ID + TARGET_ID + + + + + FIXED_DICT + + INT32 + INT64 + STRING + DB_ID_LIST + + + + + FIXED_DICT + + PLANE_ID + GAMEPARAMS_ID + BOOL + UINT8 + VECTOR3 + FLOAT + INT8 + INT8 + INT8 + UINT8 + BOOL + BOOL + UINT8 + BOOL + + + AirPlanes.AirplaneUtils.squadronStateConverter + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + UINT32 + UINT8 + STRING + + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + + + + + FIXED_DICT + + INT32 + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + UINT8 + VECTOR3 + VECTOR3 + VECTOR3 + BOOL + ENTITY_ID + INT32 + BOOL + + + + + USER_TYPE + ShotDecalDef.converter + + + + FIXED_DICT + + UINT8 + FLOAT + SHOT_DECAL_STATE + + + + + FIXED_DICT + + UINT8 + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + GAMEPARAMS_ID + VECTOR3 + FLOAT + FLOAT + + + + + + ARRAYENTITY_ID + + + + FIXED_DICT + + STRING + UINT8 + UINT8 + STRING + VECTOR2 + UINT8 + ENTITY_ID + TEAM_ID + STRING + + AttentionMarkerDef.converter + + + + + + + + + + FIXED_DICT + + INT8 + ARRAYENTITY_ID + + + + + FIXED_DICT + + STRING + + true + + + + FIXED_DICT + + ENTITY_ID + INT32 + INT32 + INT32 + + + + + FIXED_DICT + + UINT8 + ARRAYRESOURCE_RECORD + + true + + + + FIXED_DICT + + UINT8 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT8 + ENTITY_ID + FLOAT + ARRAYUINT8 + FLOAT + + true + + + + FIXED_DICT + + INT16 + STRING + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT16 + INT16 + STRING + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + INT16 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + UINT32 + STATE + UINT8 + UINT8 + TARGET_ID + FLOAT + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + TEAM_ID + UINT32 + UINT8 + ARRAYPULL_TARGET_STATE + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + + + + + FIXED_DICT + + TEAM_ID + UINT16 + + + + + FIXED_DICT + + ARRAYHOLD_CONTROL_POINT_MISSION_STATE + ARRAYCAPTURE_CONTROL_POINT_MISSION_STATE + ARRAYKILL_SPECIFIC_SHIP_MISSION_STATE + ARRAYREACH_DESTINATION_MISSION_STATE + ARRAYPULL_TARGETS_MISSION_STATE + ARRAYPROTECT_MISSION_STATE + ARRAYTEAM_SCORE + INT16 + INT16 + + true + + + + FIXED_DICT + + ARRAYPRIVATE_PATH_MISSION_STATE + ARRAYPRIVATE_PATH_MISSION_STATE + + true + + + + FIXED_DICT + + STRING + BOOL + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + ENTITY_ID + STRING + + true + + + + FIXED_DICT + + UINT8 + STRING + UINT8 + UINT32 + UINT16 + UINT16 + UINT8 + UINT8 + UINT8 + STRING + UINT8 + TEAM_ID + STRING + ZIPPED_BLOB + + true + + + + FIXED_DICT + + ENTITY_ID + UINT8 + UINT8 + STRING + + true + + + + FIXED_DICT + + UINT8 + ARRAYVECTOR2 + + + + + FIXED_DICT + + UINT32 + ARRAYFIELD_LAYER_PACK + + + + + FIXED_DICT + + STRING + VECTOR2 + FLOAT + UINT32 + + + + + FIXED_DICT + + GAMEPARAMS_ID + GAMEPARAMS_ID + INT16 + INT16 + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_ITEM + GLOBAL_WEATHER_NOTIFICATION + + + + + FIXED_DICT + + ENTITY_ID + STRING + STRING + TEAM_ID + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + WeatherParamsDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_STATE + ARRAYLOCAL_WEATHER_STATE + + + + + FIXED_DICT + + FLOAT + FLOAT + TEAM_ID + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ENTITY_ID + UINT8 + STRING + INT8 + + true + + + + FIXED_DICT + + FLOAT + TEAM_ID + BOOL + BOOL + BOOL + BOOL + FLOAT + FLOAT + + true + + + + FIXED_DICT + + CONTROL_POINT_STATE + CAPTURE_LOGIC_STATE + + + + + USER_TYPE + Modifiers.ModifierDef.converter + + + + FIXED_DICT + + INT8 + GAMEPARAMS_ID + ENTITY_ID + INT16 + BOOL + DROP_CAPTURE_LOGIC_STATE + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR2 + GAMEPARAMS_ID + FLOAT + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ARRAYENTITY_ID + + + + + FIXED_DICT + + ARRAYDROP_ITEM_STATE + DROP_PLANE_STATE + ARRAYPICKED_DROP_STATE + + true + + + + USER_TYPE + BattleItemDef.converter + + + + FIXED_DICT + + UINT8 + BATTLE_ITEM_STATE + + + + + FIXED_DICT + + ARRAYTEAM_ID + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + + + + FIXED_DICT + + ARRAYATTENTION_MARKER_STATE + CLIENT_ANIMATION_STATE + ARRAYENTITY_ID + ARRAYENTITY_STATE_STATE + EXPECTED_ACTION_STATE + WEATHER_STATE + ARRAYKEY_OBJECT_STATE + MISSIONS_STATE + ARRAYRESOURCE_STATE + ARRAYSUCCESS_STORY_PROGRESS_STATE + ARRAYTASKS_STATE + ARRAYBATTLE_LOGIC_ENTITY_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + DROP_STATE + DIPLOMACY_STATE + UI_INFO_STATE + PHYSICS_STATE + + + + + FIXED_DICT + + MODIFIER_STATE + + true + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + + DiplomacyTicketDef.converter + + + + FIXED_DICT + + ARRAYDIPLOMACY_TICKET + ARRAYDIPLOMACY_TICKET + + true + + + + FIXED_DICT + + UINT32 + + true + + + + + FIXED_DICT + + ARRAY STASHED_BATTLE_ITEM_STATE + TRIGGERS_STATE + DIPLOMACY_TICKETS_STATE + BATTLE_LEVELING_STATE + PRIVATE_MISSIONS_STATE + + + + + FIXED_DICT + + DB_ID + INT32 + DB_ID + INT8 + INT8 + INT8 + DB_ID + MASTER_ID + + EvaluationDef.converter + + + + FIXED_DICT + + STRING + STRING + + + + + FIXED_DICT + + STRING + STRING + VECTOR2 + + + + + FIXED_DICT + + STRING + ARRAYBATTLE_LOGIC_DEBUG_CHANNEL + + + + + FIXED_DICT + + INT32 + INT32 + ARRAYSHIP_TYPE_ID + + + + + FIXED_DICT + + SHIP_TYPE_ID + INT32 + INT32 + + + + + FIXED_DICT + + SHIP_LEVEL + INT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + ARRAYINT32 + ARRAYSHIP_TYPE_ID + ARRAYINT8 + ARRAYSHIP_NATION_ID + + + + + FIXED_DICT + ShipRestrictions.ShipRestrictionsDefConverter.converter + + INT32 + INT32 + INT32 + ARRAYSHIP_CLASS_RESTRICTION + ARRAYSHIP_LEVEL_RESTRICTION + ARRAYSHIP_LIMIT_RESTRICTION + COMBINED_CLASSES_RESTRICTION + ARRAYRESTRICTION_FILTER + + true + + + + FIXED_DICT + TrainingRoomDataTypes.trainingRoomPropertiesConverter + + INT32 + UNICODE_STRING + INT32 + INT32 + INT32 + BOOL + BOOL + UNICODE_STRING + SHIP_RESTRICTIONS + BOOL + INT8 + UNICODE_STRING + BOOL + + + + + FIXED_DICT + TrainingRoomDef.converter + + BOOL + SHIP_RESTRICTIONS + BOOL + UNICODE_STRING + INT32 + PRE_BATTLE_DEF + INT32 + INT32 + INT32 + BOOL + BOOL + + true + + + + TUPLEINT322 + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + BUOYANCY_STATE + + true + + + + FIXED_DICT + + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT16 + INT8 + INT8 + UINT32 + STRING + STRING + + ReplayMetadataDef.converter + + + + ARRAYREPLAY_METADATA + + + FIXED_DICT + + INT8 + BOOL + + + + + FIXED_DICT + + GAMEPARAMS_ID + BOOL + GAMEPARAMS_ID + + + + + FIXED_DICT + + ARRAYPREREQUISITE_SHIP_DATA + ARRAYSTRING + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + INT16 + STRING + STRING + + + + + FIXED_DICT + + STRING + ARRAYMAILBOX + + true + + + + FIXED_DICT + + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT8 + ARRAYBUBBLE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_PROJECTILE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + ARRAYVECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_SKIP_BOMB + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + VECTOR3 + FLOAT + FLOAT + FLOAT + ARRAYPLANE_ROCKET + + + + + USER_TYPE + BLOB + MsgPackCustomConverter.converter + + + + USER_TYPE + BLOB + PickledBlobConverter.converter + + + + FIXED_DICT + + STRING + UINT8 + UINT32 + STRING + UINT8 + UINT8 + UINT64 + + PlayerDigestDef.digestConverter + + + + FIXED_DICT + + BOOL + UINT64 + + PlayerDigestDef.statusConverter + + + + FIXED_DICT + + DB_ID + PLAYER_DIGEST + PLAYER_STATUS + + PlayerDigestDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + VECTOR3 + + MapBorderDef.converter + true + + + + FIXED_DICT + + ARENA_UNIQUE_ID + ARRAYDB_ID + MSGPACK_BLOB + BLOB + + ReplayInfoDef.converter + + + + FIXED_DICT + + UINT8 + TEAM_ID + + + + + + USER_TYPE + AutoCompensationDataTypes.restartInfoConverterInstance + + + + FIXED_DICT + + FLOAT + ARRAY VECTOR3 + + + + + FIXED_DICT + + VECTOR3 + UINT16 + UINT16 + ARRAY NAVIGATION_UNPASSABLE_CELLS + FLOAT + + + + + USER_TYPE + FLOAT + NullableDef.nullableFloatConverter + + + + TUPLESTRING3 + + + + USER_TYPE + UINT16 + Converters.GunDirectionsConverter.converter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + MAILBOX + INTERCLUSTER_ID + PLAYERS_DEFS + PRE_BATTLE_CREATOR_DEF + GAMEPARAMS_ID + + EnqueueProcess.DataTypes.EnqueueRequestConverter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + SHIP_ID + PYTHON + PYTHON + GAMEPARAMS_ID + MAILBOX + + EnqueueProcess.DataTypes.EnqueueDataConverter + true + + + + USER_TYPE + VECTOR3 + NullableDef.nullableVector3Converter + + + + FIXED_DICT + + FLOAT + UINT8 + + true + + + + UINT8 + true + + + + FIXED_DICT + + GAMEPARAMS_ID + UINT8 + INT8 + INT16 + INT16 + + BuffDef.converter + + + + FIXED_DICT + + ARRAY BUFF_STATE + + true + + + + FIXED_DICT + + RIBBON_ID + UINT16 + + + + + ARRAY RIBBON_STATE + true + + + + FIXED_DICT + + FLOAT + + true + + + + FIXED_DICT + + BATTERY_STATE + BUFFS_STATE + VEHICLE_VISUAL_STATE + + + + + FIXED_DICT + + BUFFS_STATE + RAGE_MODE_STATE + RIBBONS_STATE + + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + INT8 + FLOAT + UINT8 + FLOAT + VECTOR3 + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + WildFireDef.converter + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + UINT8 + WEAPON_TYPE + UINT8 + FLOAT + FLOAT + PLANE_ID + PLANE_ID + + false + HeatMapConstants.squadronEventDataConverter + + + + FIXED_DICT + + UINT8 + PLANE_ID + ENTITY_ID + FLOAT + + false + HeatMapConstants.planeProjectileEventDataConverter + + + + FIXED_DICT + + STRING + UINT32 + UINT32 + STRING + STRING + STRING + STRING + + false + + + + FIXED_DICT + + TEAM_ID + UINT8 + + + + + FIXED_DICT + + FIELD_ID + ENTITY_ID + VECTOR3 + FLOAT + BOOL + FLOAT + UINT16 + UINT16 + FLOAT + UINT16 + FLOAT + UINT16 + UINT16 + UINT16 + + false + MinefieldStatistics.converter + + + + USER_TYPE + CommonQuickCommands.QuickCommandConverter.converter + + + + USER_TYPE + Fields.MinefieldInfo.converter + + + + FIXED_DICT + + BATTLE_DEF + ENTITY_ID + + + + + FIXED_DICT + + PRE_BATTLE_DEF + PLAYER_DEF + + + + + FIXED_DICT + + TRAINING_ROOM_DEF + PLAYER_DEF + UNICODE_STRING + + + + + FIXED_DICT + + INT32 + UINT32 + UINT64 + PYTHON + ARRAY UINT64 + UINT64 + UINT32 + PYTHON + UINT32 + PYTHON + + RestorePointConverter.converter + + + + USER_TYPE + EntityAPI.EntityAPITimeoutDef.converter + + + + FIXED_DICT + + UINT8 + BOOL + ENTITYAPI_TIMEOUT + PICKLED_BLOB + + EntityAPIDefs.loadConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.lookupConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.createConverter + + + + USER_TYPE + CommonConsumables.UsageConverter.converter + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountCMDs.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountCMDs.def new file mode 100644 index 0000000..b2d214b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountCMDs.def @@ -0,0 +1,382 @@ + + + + + + + + + + + + + UINT8 + UINT8 + + + + + UINT8 + UINT8 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + INT32 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + UINT32 + INT32 + INT32 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + UINT8 + UINT8 + BLOB + + + + + UINT8 + UINT8 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + INT32 + + + + + UINT8 + UINT8 + DB_ID_LIST + + + + + UINT8 + UINT8 + DB_ID_LIST + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + ARRAY UINT8 + + + + + UINT8 + UINT8 + INT32 + INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + + + + + UINT8 + UINT8 + SHIP_ID + INT32 + INT32 + INT32 + INT32 + INT32 + INT32 + UNICODE_STRING + SHIP_RESTRICTIONS + + + + + UINT8 + UINT8 + TRAINING_ROOM_PROPERTIES + + + + + UINT8 + UINT8 + ARRAY GAMEPARAMS_ID + + + + + UINT8 + UINT8 + ARRAYUINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountPData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountPData.def new file mode 100644 index 0000000..de981b9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AccountPData.def @@ -0,0 +1,154 @@ + + + + + + + STRING + BASE_AND_CLIENT + True + 96 + + + + + + STRING + BASE + true + 96 + true + + + + + DB_ID + BASE_AND_CLIENT + true + + + + + DB_ID + BASE + true + 0 + + + + + INT16 + BASE + True + + + + + UINT32 + BASE + true + + + + + UINT64 + BASE_AND_CLIENT + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT8 + BASE + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT32 + BASE + True + 0 + + + + + STRING + BASE + True + 1000 + + + + + STRING + BASE + True + 100000 + + + + + UINT64 + BASE + true + + + + + UINT64 + BASE + true + 1 + + + + UINT32 + BASE + true + 0 + + + + UINT64 + BASE + true + 0 + + + <_destroyResponseCode> + UINT8 + BASE + + + + UINT8 + BASE + true + 0 + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AirDefenceOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AirDefenceOwner.def new file mode 100644 index 0000000..41e917f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AirDefenceOwner.def @@ -0,0 +1,49 @@ + + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYARRAYPLANE_ID + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYAIR_DEFENCE_AURA + ALL_CLIENTS + + + + + + + + + BUBBLE_PACK + UINT8 + + + + + + + BOOL + + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AtbaOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AtbaOwner.def new file mode 100644 index 0000000..4723f29 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AtbaOwner.def @@ -0,0 +1,24 @@ + + + + ATBA_TARGETS + ALL_CLIENTS + + + + + + + + + + UINT32 + + + + + + UINT8 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AviationOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AviationOwner.def new file mode 100644 index 0000000..780c0d6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/AviationOwner.def @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + <_AviationOwner__spottedMinimapSquadrons/> + <_AviationOwner__spottedMinimapFighters/> + <_AviationOwner__planeRegenPercentVaryId/> + <_AviationOwner__planeHealCoef/> + + + + + + + + + + UINT8 + UINT8 + VECTOR3 + FLOAT + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def new file mode 100644 index 0000000..d716467 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def @@ -0,0 +1,32 @@ + + + + ENTITY_ID + CELL_PRIVATE + + + ENTITY_ID + BASE + + + UINT8 + CELL_PRIVATE + + + + + + + + + + + + BOOL + + + BOOL + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleStarterClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleStarterClient.def new file mode 100644 index 0000000..f5f209e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BattleStarterClient.def @@ -0,0 +1,23 @@ + + + + + UINT8 + + + + + STRING + MAILBOX + + + + + PYTHON + + + INT64 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BuoyancyOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BuoyancyOwner.def new file mode 100644 index 0000000..2ddf199 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/BuoyancyOwner.def @@ -0,0 +1,68 @@ + + + + + + + + + + BUOYANCY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + FLOAT + ALL_CLIENTS + + + + + + + <_BuoyancyOwner__oldBuoyancyState/> + <_BuoyancyOwner__currentBuoyancySpeedTime/> + <_BuoyancyOwner__targetBuoyancySpeedCoef/> + <_BuoyancyOwner__prevBuoyancySpeedCoef/> + <_BuoyancyOwner__buoyancySpeedTime/> + <_BuoyancyOwner__newBuoyancyLevelLock/> + <_BuoyancyOwner__currentStateIndex/> + <_BuoyancyOwner__availableStates/> + + + + + + + + + + + + + + + + <_BuoyancyOwner__isUsingFakeTargetWaterline/> + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DamageDealerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DamageDealerOwner.def new file mode 100644 index 0000000..8ffbc9f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DamageDealerOwner.def @@ -0,0 +1,28 @@ + + + + BOOL + CELL_PUBLIC + + + + ARRAYFLOAT324 + CELL_PUBLIC + + 1.0 + 1.0 + 1.0 + 0.0 + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DebugDrawEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DebugDrawEntity.def new file mode 100644 index 0000000..1b25f64 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/DebugDrawEntity.def @@ -0,0 +1,92 @@ + + + + + + STRING + BLOB + + + + + + ARRAY VECTOR3 + UINT32 + UINT32 + BOOL + BOOL + + + + + + VECTOR3 + VECTOR3 + UINT32 + UINT32 + BOOL + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + UINT32 + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + +
VECTOR3
+ FLOAT32 + UINT32 + UINT32 + BOOL +
+
+ + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + +
+
diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/GiveClientHelper.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/GiveClientHelper.def new file mode 100644 index 0000000..9db2889 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/GiveClientHelper.def @@ -0,0 +1,21 @@ + + + TransactionAPI + + + + + + + <_GiveClientHelper__logName/> + + + + + MAILBOX + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def new file mode 100644 index 0000000..e41533b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def @@ -0,0 +1,180 @@ + + + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + + + STRING + INT8 + + + + + + + + UINT8 + BOOL + OWN_CLIENT + + + UINT8 + BOOL + + + + + + STRING + INT32 + STRING + + + + + OWN_CLIENT + + GAMEPARAMS_ID + VECTOR3 + VECTOR3 + FLOAT32 + + + + + + OWN_CLIENT + + + + + + + VECTOR3 + FLOAT32 + UINT32 + BOOL + + + BLOB + BOOL + BOOL + + + ARRAY UINT8 + ARRAY UINT32 + 2 + + + UINT16 + UINT32 + + + UINT32 + STRING + UINT32 + + + ARRAY FLOAT + + + + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + UINT16 + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PRIVATE + False + + + FLOAT32 + CELL_PUBLIC + 0.0 + + + + ARRAY HEAT_INFO_STATE + ALL_CLIENTS + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + + + + + + + + + + + + + + + + + + + + + + + <_HitLocationManagerOwner__regenVary/> + <_HitLocationManagerOwner__healthRegenPercent/> + <_HitLocationManagerOwner__healthRegenSpeed/> + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/ModelOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/ModelOwner.def new file mode 100644 index 0000000..926e8ab --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/ModelOwner.def @@ -0,0 +1,32 @@ + + + + + + + STRING + STRING + + + STRING + STRING + + + + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsOwner.def new file mode 100644 index 0000000..51ed150 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsOwner.def @@ -0,0 +1,23 @@ + + + + BLOB + + + + + + + BLOB + BLOB + + + + + + + + + <_StatsOwner__sendStatsVary/> + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsPublisher.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsPublisher.def new file mode 100644 index 0000000..94adaac --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/StatsPublisher.def @@ -0,0 +1,29 @@ + + + + + + STRING + INT32 + BOOL + + + + + + STRING + FLOAT + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/TransactionAPI.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/TransactionAPI.def new file mode 100644 index 0000000..35c6bbf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/TransactionAPI.def @@ -0,0 +1,39 @@ + + + + + + UINT16 + BASE + 0 + + + + + + + + + + UINT64 + UINT8 + UINT8 + UINT8 + ARRAY MAILBOX + BOOL + + + + + + + UINT64 + UINT8 + UINT8 + MAILBOX + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VisionOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VisionOwner.def new file mode 100644 index 0000000..8bcd78f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VisionOwner.def @@ -0,0 +1,52 @@ + + + + + + <_events/> + <_collectedVision/> + <_spotVaryId/> + <_visibilityUpdateVaryId/> + <_visionToEntityUpdateVaryId/> + <_visionToProjectileVaryId/> + + <_visionFlag/> + + + + + + + + + + + + + + + + + + + + + + + + ENTITY_ID + VISIBILITY_FLAG + + + ENTITY_ID + + + + BOOL + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VoiceChatClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VoiceChatClient.def new file mode 100644 index 0000000..83196ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/VoiceChatClient.def @@ -0,0 +1,23 @@ + + + + + + + + + + + + BLOB + + + + + + BLOB + 2 + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletOwner.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletOwner.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletProperties.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletProperties.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WalletProperties.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WeatherOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WeatherOwner.def new file mode 100644 index 0000000..edf71ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/entity_defs/interfaces/WeatherOwner.def @@ -0,0 +1,20 @@ + + + + + + + + + + + + + WEATHER_LOGIC_PARAMS + CELL_PRIVATE + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/space_defs/GeneralSpaceData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/space_defs/GeneralSpaceData.def new file mode 100644 index 0000000..2113b3c --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/space_defs/GeneralSpaceData.def @@ -0,0 +1,15 @@ + + + + + + STRING + + + + UINT32 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/spaces.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/spaces.xml new file mode 100644 index 0000000..d4be0b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/spaces.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Barge.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Barge.def new file mode 100644 index 0000000..259fa18 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Barge.def @@ -0,0 +1,36 @@ + + CLIENT + Enable + + + STRING + True + + + + STRING + True + content/ports/ship/vessel/OSV3002/OSV3002.model + + + + + STRING + True + content/gameplay/europe/character/WH001_Sweden_sailor/WH001_Sweden_sailor.model + + + + + VECTOR3 + True + 0.0 0.0 0.0 + + + + FLOAT + True + 0.0 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Building.def new file mode 100644 index 0000000..2377917 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Building.def @@ -0,0 +1,58 @@ + + BASE + + Enable + + + tag + name + + + + + + STRING + true + + + + INT8 + true + + + + STRING + true + + + + + UINT32 + False + 0 + + + + STRING + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ControlPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ControlPoint.def new file mode 100644 index 0000000..37103b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ControlPoint.def @@ -0,0 +1,98 @@ + + + BASE + Enable + + + tag + name + + + + + + + STRING + True + + + + ARRAY UDO_REF + True + + + + STRING + true + + + + INT8 + true + -1 + + + + FLOAT + true + + RADIUS + 255 0 0 192 + 1 + + 10.0 + + + + FLOAT + true + + RADIUS + 0 255 0 192 + 1 + + 0.0 + + + + UINT16 + true + + + + UINT16 + true + + + + STRING + true + + + + STRING + True + + + + UINT8 + true + 10 + + + + STRING + true + PCOU001_Buoy_LMY003 + + + + + BOOL + True + False + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ConvoyWayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ConvoyWayPoint.def new file mode 100644 index 0000000..b90d1fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/ConvoyWayPoint.def @@ -0,0 +1,67 @@ + + Enable + + + 0x5503a6bf + radius + + + 0x55660066 + catchRadius + + + BASE + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + UINT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + FLOAT + 1.0 + true + + + FLOAT + 15 + + RADIUS + 255 168 0 192 + 1 + + true + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/DropZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/DropZone.def new file mode 100644 index 0000000..06d6cd0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/DropZone.def @@ -0,0 +1,65 @@ + + BASE + Enable + + + tag + name + + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + + + + STRING + true + PCOE001_Default + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/FogPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/FogPoint.def new file mode 100644 index 0000000..682783a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/FogPoint.def @@ -0,0 +1,25 @@ + + BASE + + + STRING + true + + + + FLOAT32 + true + 15 + RADIUS + 0 255 0 255 + 1.5 + + + + + FLOAT32 + true + 0.05 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapBorder.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapBorder.def new file mode 100644 index 0000000..a268f2f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapBorder.def @@ -0,0 +1,15 @@ + + BASE + + + STRING + True + + + + STRING + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapPartInfo.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapPartInfo.def new file mode 100644 index 0000000..691e52a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapPartInfo.def @@ -0,0 +1,71 @@ + + Enable + + + CLIENT + + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + VECTOR3 + false + + + + VECTOR3 + false + + + + FLOAT + false + 1.0472 + + + + STRING + True + 0x811177ff + + + + STRING + True + 0x90b1c231 + + + + FLOAT32 + True + 7.0 + + + + ARRAY VECTOR3 + + True + + + + ARRAY VECTOR3 + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapSeparator.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapSeparator.def new file mode 100644 index 0000000..0dc46dc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/MapSeparator.def @@ -0,0 +1,20 @@ + + Enable + + + BASE + + + ARRAY STRING + + True + + + + ARRAY UDO_REF + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Minefield.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Minefield.def new file mode 100644 index 0000000..7421af3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Minefield.def @@ -0,0 +1,91 @@ + + BASE + Enable + + + + + STRING + true + + + + STRING + true + + PBPM001_SeaMine + + + + STRING + false + + + + UINT16 + false + 0 + + + + STRING + false + + + + FLOAT + true + 1000.0 + + + + FLOAT + true + 1000.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + FLOAT + true + 0.0 + + + + FLOAT + true + 40.0 + 20.0 + + + + STRING + true + + + + BOOL + true + 1 + + + + FLOAT + true + 0.5 + 0.0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Prefab.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Prefab.def new file mode 100644 index 0000000..0cdba86 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Prefab.def @@ -0,0 +1,31 @@ + + BASE + Enable + + + name + + + + + STRING + true + + + + ARRAY UDO_REF + true + + + + STRING + true + + + + STRING + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpaceDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpaceDebugTool.def new file mode 100644 index 0000000..ca0e448 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpaceDebugTool.def @@ -0,0 +1,55 @@ + + Enable + + CLIENT + + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpatialUIDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpatialUIDebugTool.def new file mode 100644 index 0000000..83f1b6f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpatialUIDebugTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + FLOAT + true + 1 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpawnPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpawnPoint.def new file mode 100644 index 0000000..7e95937 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SpawnPoint.def @@ -0,0 +1,84 @@ + + + BASE + + Enable + + + tag + + + + + + STRING + true + + + + UINT8 + true + 0 + + + + STRING + true + + + + ARRAY UINT8 + True + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SquadronReticleTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SquadronReticleTool.def new file mode 100644 index 0000000..3f24f57 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/SquadronReticleTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + VECTOR3 + True + 1.0 1.0 1.0 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Trigger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Trigger.def new file mode 100644 index 0000000..5649ec9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/Trigger.def @@ -0,0 +1,47 @@ + + BASE + Enable + + + 0x55bd8d06 + radius + + + tag + name + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/WayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/WayPoint.def new file mode 100644 index 0000000..9078b56 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_object_defs/WayPoint.def @@ -0,0 +1,66 @@ + + CLIENT + Enable + + + STRING + true + + + + + ARRAY UDO_REF + True + + + + FLOAT32 + 20 + True + + + + STRING + True + + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + UINT8 + 1 + True + + + + FLOAT32 + 1.0 + True + + + + FLOAT32 + 2.0 + True + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_objects.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_objects.xml new file mode 100644 index 0000000..30347e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_2_0/scripts/user_data_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AccountReviverComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AccountReviverComponent.def new file mode 100644 index 0000000..a55a784 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AccountReviverComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AchievementsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AchievementsComponent.def new file mode 100644 index 0000000..5ac40fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AchievementsComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + UINT64 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AlmanacComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AlmanacComponent.def new file mode 100644 index 0000000..860a1e2 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/AlmanacComponent.def @@ -0,0 +1,32 @@ + + + + ZIPPED_BLOB + + none + + + + ZIPPED_BLOB + + none + + + + UINT16 + UINT8 + BOOL + + + + + + UINT16 + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BattlePassComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BattlePassComponent.def new file mode 100644 index 0000000..781cdee --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BattlePassComponent.def @@ -0,0 +1,50 @@ + + + + + + + UINT16 + UINT8 + + + + + + UINT16 + UINT16 + UINT8 + UINT8 + + + BOOL + + + + + + UINT16 + + + BOOL + + + + + + + + + + UINT16 + UINT16 + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BrawlBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BrawlBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/BrawlBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ControllerToAccountConnector.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ControllerToAccountConnector.def new file mode 100644 index 0000000..bdb8847 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ControllerToAccountConnector.def @@ -0,0 +1,51 @@ + + + + + <_pingAccountCounter/> + <_ControllerToAccountConnector__accountCheckVaryID/> + <_ControllerToAccountConnector__accountWaiter/> + + + + + + + + ENTITYAPI_TIMEOUT + + + MAILBOX + + + + + + MAILBOX + + + + + + MASTER_ID + MAILBOX + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + ZIPPED_BLOB + UINT8 + MAILBOX + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponent.def new file mode 100644 index 0000000..c913f4f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponent.def @@ -0,0 +1,107 @@ + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + + + UINT8 + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + ARENA_UNIQUE_ID + MASTER_ID + + + + + + + ENTITY_ID + SHIP_ID + BOOL + + + + + + + UINT8 + SHIP_ID + QUEUE_TYPE + GAMEPARAMS_ID + UNICODE_STRING + + + + + + + ENTITY_ID + SHIP_ID + + + INT64 + + + + + + + ENTITY_ID + DB_ID + + + + + + + ENTITY_ID + + + + + + + DB_ID + UNICODE_STRING + + + + + + + ENTITY_ID + + + + + + + + + + UINT8 + UINT8 + STRING + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponentAvatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponentAvatar.def new file mode 100644 index 0000000..d9ae622 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DivisionsManagerComponentAvatar.def @@ -0,0 +1,16 @@ + + + + + + ENTITY_ID + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DockComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DockComponent.def new file mode 100644 index 0000000..e84c4f4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/DockComponent.def @@ -0,0 +1,13 @@ + + + + + + UINT8 + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/GiftListsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/GiftListsComponent.def new file mode 100644 index 0000000..11df2da --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/GiftListsComponent.def @@ -0,0 +1,17 @@ + + + + + + + UINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/HotFixComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/HotFixComponent.def new file mode 100644 index 0000000..7b89c1b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/HotFixComponent.def @@ -0,0 +1,28 @@ + + + + BLOB + + + + + + BOOL + + + + + + + + + PYTHON + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/KeyTargetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/KeyTargetComponent.def new file mode 100644 index 0000000..de0e975 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/KeyTargetComponent.def @@ -0,0 +1,18 @@ + + + + + + + + + UINT32 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/LootboxComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/LootboxComponent.def new file mode 100644 index 0000000..ffd9cbd --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/LootboxComponent.def @@ -0,0 +1,56 @@ + + + + + + + GAMEPARAMS_ID + + + + + + + GAMEPARAMS_ID + UINT16 + + + + + + + + + + + + GAMEPARAMS_ID + MSGPACK_BLOB + + + none + + + + + + + + + UINT16 + + + + + + UINT16 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MasterEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MasterEntityAPIComponent.def new file mode 100644 index 0000000..393b760 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MasterEntityAPIComponent.def @@ -0,0 +1,98 @@ + + + <_MasterEntityAPIComponent__loadEntitiesHelper/> + + + + + CLUSTER_ID + STRING + ZIPPED_BLOB + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOOKUP_ARGS + BOOL + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + STRING + DB_ID + ENTITY_LOAD_ARGS + ZIPPED_BLOB + + + MAILBOX + + + + + + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + CLUSTER_ID + CREATE_BATTLE_SESSION_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_PRE_BATTLE_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_TRAINING_ROOM_PARAMS + ENTITY_CREATE_ARGS + + + MAILBOX + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MatchmakerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MatchmakerComponent.def new file mode 100644 index 0000000..85567e4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/MatchmakerComponent.def @@ -0,0 +1,82 @@ + + + <_MatchmakerComponent__realm> + STRING + BASE + + <_MatchmakerComponent__queueType> + QUEUE_TYPE + BASE + + <_MatchmakerComponent__inDivision> + BOOL + BASE + + <_MatchmakerComponent__battleStarterService> + MAILBOX + BASE + + + + + + + + SHIP_ID + QUEUE_TYPE + INT16 + INT32 + GAMEPARAMS_ID + + + + + + + + + + ENQUEUE_DATA + + + + + + ENQUEUE_DATA + + + + + + UINT8 + + + + + + + + QUEUE_TYPE + SHIP_ID + PICKLED_BLOB + + + + + + GAMEPARAMS_ID + PICKLED_BLOB + + + + + + UINT8 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/NewbieQuestComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/NewbieQuestComponent.def new file mode 100644 index 0000000..8a393ea --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/NewbieQuestComponent.def @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PVEBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PVEBattlesComponent.def new file mode 100644 index 0000000..d71595b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PVEBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PdataResetComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PdataResetComponent.def new file mode 100644 index 0000000..076cf6a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/PdataResetComponent.def @@ -0,0 +1,71 @@ + + + + + + + + + + + INT8 + ZIPPED_BLOB + + + + + + + ZIPPED_BLOB + + + + INT8 + + + + + + + RESTORE_POINT + + + UINT8 + + + + + + + INT32 + UINT32 + BOOL + + + INT8 + + + + + + + INT8 + + + + + + + DB_ID + STRING + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RankedBattlesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RankedBattlesComponent.def new file mode 100644 index 0000000..9622027 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RankedBattlesComponent.def @@ -0,0 +1,73 @@ + + + + + INT16 + + + + + + INT16 + + + + + + INT16 + UINT8 + BOOL + + + + + + INT8 + + + + + + INT16 + + + + + + + + + + + + + + + + INT8 + INT8 + BOOL + BOOL + BOOL + + + + + + + + + + INT16 + INT8 + INT16 + INT16 + INT16 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RequestPerformerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RequestPerformerComponent.def new file mode 100644 index 0000000..15110b3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/RequestPerformerComponent.def @@ -0,0 +1,23 @@ + + + + + + <_UsersInfoActualizer__awaitingRequests/> + <_UsersInfoActualizer__currentBatchID/> + <_UsersInfoActualizer__processingBatches/> + + + + + + UINT32 + ARRAYPLAYER_INFO + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ShipAcesComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ShipAcesComponent.def new file mode 100644 index 0000000..ca3a438 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/ShipAcesComponent.def @@ -0,0 +1,38 @@ + + + + + + + + + + UINT8 + STRING + STRING + + + + + + + SHIP_ID + ACES_TASK_PROGRESS + + + + + + + + + + ZIPPED_BLOB + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/StrategicActionsComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/StrategicActionsComponent.def new file mode 100644 index 0000000..d2ef68a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/StrategicActionsComponent.def @@ -0,0 +1,59 @@ + + + + + + STRING + + + BOOL + + + + + + STRING + + + BOOL + + + + + + BOOL + + + + + + UINT16 + + + + + + + + + + + + STRING + UINT16 + ARRAYSTRING + + + + + STRING + UINT8 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SuperEntityAPIComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SuperEntityAPIComponent.def new file mode 100644 index 0000000..efdef19 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SuperEntityAPIComponent.def @@ -0,0 +1,72 @@ + + + + + + + + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + DB_ID + ENTITY_LOAD_ARGS + + + MAILBOX + + + + + + MAILBOX + DB_ID + MASTER_ID + + + + + + DB_ID + BOOL + + + + + + DB_ID + MAILBOX + + + MASTER_ID + MAILBOX + + + + + + MAILBOX + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SurveysComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SurveysComponent.def new file mode 100644 index 0000000..3defdaf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/SurveysComponent.def @@ -0,0 +1,29 @@ + + + + + + + + + UINT32 + ARRAYUINT8 + + + + + + + UINT32 + UINT32 + ARRAYUINT8 + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomComponent.def new file mode 100644 index 0000000..29cf0ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomComponent.def @@ -0,0 +1,111 @@ + + + + + + + + + + + + UINT64 + + + + + + + + + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + INT64 + INT64 + + + + + INT64 + + + + + INT64 + + + + + + + + + INT64 + + + + + + + + + + + + + INT64 + INT64 + + + + + INT64 + INT64 + INT32 + INT32 + UNICODE_STRING + + + + + INT64 + INT64 + INT32 + INT32 + INT32 + + + + + INT64 + INT64 + + + + \ + TRAINING_ROOM_PROPERTIES + + + + + INT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomsManagerComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomsManagerComponent.def new file mode 100644 index 0000000..ef17df9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/TrainingRoomsManagerComponent.def @@ -0,0 +1,32 @@ + + + + TRAINING_ROOM_PROPERTIES + + + + + ARRAY + DB_ID + + UNICODE_STRING + + + + + UINT64 + UNICODE_STRING + + + + + UINT64 + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/UserDataComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/UserDataComponent.def new file mode 100644 index 0000000..26dfdfb --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/UserDataComponent.def @@ -0,0 +1,38 @@ + + + + + ARRAYDB_ID + MSGPACK_BLOB + + + + + + ARRAYDB_ID + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + ARRAYPLAYER_INFO + ARRAYDB_ID + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/VSEventComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/VSEventComponent.def new file mode 100644 index 0000000..ac91dff --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/VSEventComponent.def @@ -0,0 +1,67 @@ + + + + + + + INT8 + + + + + + + + BOOL + + + + + + STRING + UINT32 + + + + + + + + + + + + UINT32 + + UINT32 + + + + + + + + INT8 + + + + + + + + + <_VSEventComponent__eventPdata/> + <_VSEventComponent__tasksProgress/> + <_VSEventComponent__shouldRequestFinalStats/> + <_VSEventComponent__notRequestedPersonalTasksRates/> + <_VSEventComponent__notSyncTasksProgress/> + <_VSEventComponent__notSyncFinalStats/> + <_VSEventComponent__shouldReSyncOnStageChanged/> + <_VSEventComponent__shouldSyncTasksProgressOnPrimeChanged/> + <_VSEventComponent__isSubscribed/> + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/XmppComponent.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/XmppComponent.def new file mode 100644 index 0000000..abe4a5f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/component_defs/XmppComponent.def @@ -0,0 +1,23 @@ + + + + MSGPACK_BLOB + + + BOOL + + + BOOL + + + BOOL + + + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/components.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/components.xml new file mode 100644 index 0000000..db2d64a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/components.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entities.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entities.xml new file mode 100644 index 0000000..dadadb8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entities.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Account.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Account.def new file mode 100644 index 0000000..fd0c87e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Account.def @@ -0,0 +1,512 @@ + + + + true + + AccountCMDs + BattleStarterClient + AccountPData + WalletOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + WritableEntity + + + + BOOL + BASE_AND_CLIENT + False + + + + + + BLOB + + + + UNICODE_STRING + INT64 + + + + + BLOB + BLOB + + + none + + + + BLOB + + + BLOB + + + STRING + INT32 + INT32 + + + UINT64 + + + INT32 + FLOAT + + + FLOAT + INT32 + + + PYTHON + + + INT16 + UINT32 + UINT16 + UINT16 + GAME_MODE + GAMEPARAMS_ID + + + PRE_BATTLE_INVITE_DEF + + + OBJECT_ID + UINT8 + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + BLOB + INT32 + BOOL + + none + + + + INT32 + + + UINT8 + UINT32 + UINT8 + + + UINT8 + UINT8 + + + UINT8 + BLOB + + + BLOB + COUNTDOWN_INFO + INT32 + BOOL + + none + + + + INT8 + + + INT8 + + + PRE_BATTLE_ID + BLOB + BOOL + INT32 + True + + none + + + + PLAYER_ID + + + QUEUE_TYPE + GAMEPARAMS_ID + BOOL + + + DB_ID + STRING + STRING + STRING + STRING + UINT32 + + + INT16 + INT16 + + + ARRAY + RANK_BATTLES_DENY_REASON + + + + UINT32 + UINT8 + BLOB + + + + DB_ID + INT32 + UINT8 + + + UINT8 + + + STRING + + + UINT64 + + + BOOL + + + + STRING + + none + + + + UINT8 + + + UINT32 + + + INT32 + + + MSGPACK_BLOB + + none + + + + SHIP_ID + UINT8 + + + + CREW_ID + BOOL + + + + SHIP_ID + MSGPACK_BLOB + + + SHIP_ID + + + SHIP_ID + BOOL + + + UINT32 + MSGPACK_BLOB + + + BOOL + UINT8 + UINT32 + + + + STRING + STRING + + + + ARRAY + BARGE_BANNER + + + + + BLOB + + + + UINT32 + UINT32 + BOOL + + + CAMPAIGN_TASK_ID + + + CAMPAIGN_TASK_ID + UINT8 + + + CAMPAIGN_TASK_ID + UINT8 + UINT16 + ARRAY + UINT32 + + + + CAMPAIGN_TASK_ID + + + BLOB + + + UINT32 + UINT16 + ARRAY + UINT32 + + + + ARRAY + UINT32 + + ARRAY + UINT32 + + + + UINT32 + UINT8 + + + UINT32 + UINT32 + ARRAY + UINT32 + + + + BOOL + + + BOOL + + + UINT32 + STRING + UINT8 + + + BLOB + + + UINT32 + UINT32 + UINT32 + UINT32 + + + MSGPACK_BLOB + + + + UINT32 + STRING + UINT32 + + + + + INT64 + + + + BOOL + + + UINT64 + + + + UNICODE_STRING + + + UINT8 + + + BOOL + UINT8 + + + + ARRAY + GAMEPARAMS_ID + + + + + + ARRAY + GAMEPARAMS_ID + + + + + + + + MSGPACK_BLOB + + + + + UINT32 + UINT32 + UINT32 + UINT32 + + + + + + + UINT32 + + + + ARRAY + STRING + + + + + ARRAY + STRING + + + + + ARRAY + UINT32 + + + + + + + + + STRING + STRING + + + + BLOB + + + UINT64 + + + + CLIENT_STAT_INFO + + + + + STRING + + + + + + + + + + + + + + + + + + + + + + UINT32 + MSGPACK_BLOB + INT32 + BOOL + + + BOOL + + + + UINT16 + + + + + UINT8 + + + + STRING + FLOAT + + + + FLOAT + + + + MSGPACK_BLOB + MSGPACK_BLOB + + + + + + UNICODE_STRING + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Avatar.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Avatar.def new file mode 100644 index 0000000..7d9e7c0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Avatar.def @@ -0,0 +1,1299 @@ + + + + + BattleLogicEntityOwner + VoiceChatClient + StatsPublisher + GiveClientHelper + DebugDrawEntity + StatsOwner + + + + + + + ENTITY_ID + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC_AND_OWN + True + + + VECTOR3 + OWN_CLIENT + + + TEAM_ID + ALL_CLIENTS + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + UINT32 + CELL_PUBLIC_AND_OWN + 0 + + + BOOL + OWN_CLIENT + False + true + + + BOOL + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + UINT64 + BASE_AND_CLIENT + 0 + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + PRIVATE_BATTLE_LOGIC_STATE + OWN_CLIENT + + + PRIVATE_VEHICLE_STATE + OWN_CLIENT + + + VISIBILITY_DISTANCES + ALL_CLIENTS + + + BOOL + OWN_CLIENT + 0 + + + BOOL + OWN_CLIENT + 1 + + + UINT16 + OWN_CLIENT + 0 + + + PLAYER_MODE + OWN_CLIENT + + + VISION + OWN_CLIENT + + + BOOL + OWN_CLIENT + 0 + + + + + PLAYER_ID + UINT16 + UINT16 + + + ENTITY_ID + ENTITY_ID + UINT32 + + + ENTITY_ID + ENTITY_ID + + + + GAMEPARAMS_ID + GAMEPARAMS_ID + UINT8 + ARRAY + WEAPON_LOCK_STATE + + + + + GAMEPARAMS_ID + UINT32 + UINT32 + ENTITY_ID + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + INT16 + ARRAY + UINT32 + + + + + BLOB + BLOB + BLOB + + true + true + 2 + + + + BLOB + BLOB + BLOB + + 2 + + + false + + + + ARRAY + SHOTS_PACK + + + + ARRAY + TORPEDOES_PACK + + + + ARRAY + SHOTKILLS_PACK + + + + ARRAY + EXPLOSION + + + + ARRAY + PLANE_PROJECTILE_PACK + + + + ARRAY + PLANE_SKIP_BOMB_PACK + + + + ARRAY + PLANE_ROCKET_PACK + + + + ARRAY + DEPTH_CHARGES_PACK + + + + ARRAY + LASER_BEAM + + + + ARRAY + SECTOR_WAVE_SHOTS_PACK + + + + ARRAY + PINGER_SHOT + + + + ARRAY + PINGER_SHOT_KILL + + + + PLAYER_ID + UINT16 + + + + PLAYER_ID + SHOT_ID + VECTOR3 + + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + BOOL + + + PLAYER_ID + SHOT_ID + BOOL + + + PLAYER_ID + UINT16 + VECTOR3 + FLOAT + FLOAT + UINT8 + + + + MINEFIELD_INFO + + + + + FIELD_ID + + + + + ARRAY + FIELD_PACK + + + + + + ARRAY + FIELD_PACK + + + + + INT32 + BLOB + ENTITY_ID + BOOL + + + BLOB + INT16 + BOOL + + none + + + + UINT8 + UINT16 + + + GAMEPARAMS_ID + UINT8 + SQUADRON_STATE + PLANE_ID + UINT32 + FLOAT + UINT64 + + + PLANE_ID + TEAM_ID + GAMEPARAMS_ID + VECTOR2 + BOOL + + + PLANE_ID + + + PLANE_ID + VECTOR2 + + + PLANE_ID + UINT8 + + + PLANE_ID + + + PLANE_ID + FLOAT + PLANE_PATH + + + PLANE_ID + PLANE_PATH + + + + PLANE_ID + VECTOR3 + + FLOAT + TEAM_ID + UINT64 + UINT8 + + + + PLANE_ID + + + PLANE_ID + UINT8 + UINT8 + + + PLANE_ID + ARRAY + UINT8 + + UINT8 + INT64 + + + PLANE_ID + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + INT8 + + + PLANE_ID + FLOAT + UINT8 + + + PLANE_ID + FLOAT + + + PLANE_ID + UINT64 + + + BLOB + + + PLANE_ID + UINT16 + + + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + + + + + PLANE_ID + CONSUMABLE_ID + + + + PLANE_ID + BOOL + + + PLANE_ID + UINT8 + + + PLANE_ID + UINT8 + + + PLANE_ID + VECTOR3 + FLOAT + + + + PLANE_ID + TEAM_ID + + + + + PLANE_ID + TEAM_ID + + + + PLANE_ID + + + + PLAYER_ID + QUICK_COMMAND + + + + FLOAT + + + PLAYER_ID + STRING + STRING + STRING + + + ENTITY_ID + VECTOR3 + FLOAT + + + VECTOR3 + FLOAT + + + ENTITY_ID + + + + + UINT32 + UINT8 + BLOB + + + + + INT64 + INT8 + BLOB + BLOB + BLOB + BLOB + BLOB + + + none + + + + BLOB + + + UINT64 + + + UINT64 + + + MINIMAPINFO + MINIMAPINFO + + + + PLAYER_ID + UINT32 + + + ARRAY + UINT32 + + + + BLOB + + + UINT8 + INT8 + + + ENTITY_ID + + + UINT8 + + + + BLOB + INT32 + BOOL + + + none + + + + + UINT8 + UINT8 + + + + + + + PLAYER_ID + BOOL + + + + BLOB + BOOL + True + + none + + + + + BLOB + + + + + INT32 + + + + INT16 + INT16 + + + UINT32 + UINT32 + BOOL + + + BLOB + + + BLOB + + + + PRE_BATTLE_INVITE_DEF + + + + INT8 + DB_ID + STRING + UNICODE_STRING + + + INT8 + PLAYER_ID + + + INT8 + OBJECT_ID + + + INT8 + OBJECT_ID + + + PLAYER_ID + INT8 + STRING + UNICODE_STRING + + + BLOB + + + OBJECT_ID + UINT8 + + + ENTITY_ID + + + ENTITY_ID + + + UINT8 + + + BOOL + + + ARRAY + SURFACE_HYDROPHONE_ZONE_INFO + + + + ARRAY + SURFACE_BROADCAST_ZONE_INFO + + + + ENTITY_ID + + + + + + UINT16 + ENTITY_ID + FLOAT + + + FLOAT + + + FLOAT + + + + + + BOOL + FLOAT + + + + ARRAY + CONSUMABLE_ID + + UINT8 + UINT8 + + + + + PLANE_ID + ARRAY + CONSUMABLE_ID + + UINT8 + UINT8 + + + + STRING + + + STRING + ZIPPED_BLOB + UINT8 + + + STRING + + + ENTITY_ID + VECTOR3 + BUBBLE_PACK + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + ENTITY_ID + UINT8 + VECTOR3 + + + ENTITY_ID + UINT8 + PLANE_ID + UINT8 + + + ENTITY_ID + UINT8 + PLANE_ID + + + BOOL + + + BATTLE_EVENT + REASON_ID + + + ENTITY_ID + NAVIGATION_DEBUG_DATA + + + FLOAT + + + + UINT8 + PLANE_ID + SHOT_ID + + + + + UINT8 + PLANE_ID + VECTOR3 + FLOAT + SHOT_ID + + + #TODO:have to be removed + UINT8 + PLANE_ID + + + UINT8 + + + VECTOR3 + UINT8 + TEAM_ID + + + ENTITY_ID + VECTOR2 + + + + ENTITY_ID + FLAT_VECTOR + FLOAT + NULLABLE_VECTOR3 + + + + UINT8 + FLOAT + + + + VECTOR3 + FLOAT + FLOAT + + + + + + OWN_CLIENT + + PLANE_ID + CONSUMABLE_ID + BOOL + + + + OWN_CLIENT + + PLANE_ID + CONSUMABLE_USAGE_PARAMS + + + + OWN_CLIENT + + CONSUMABLE_ID + BOOL + + + + OWN_CLIENT + CONSUMABLE_USAGE_PARAMS + + + OWN_CLIENT + CONSUMABLE_ID + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + UINT8 + UINT32 + + + OWN_CLIENT + INT32 + + + OWN_CLIENT + + WEAPON_TYPE + NULLABLE_VECTOR3 + NULLABLE_VECTOR3 + BOOL + BOOL + + + + OWN_CLIENT + + WEAPON_TYPE + VECTOR3 + VECTOR3 + + + + OWN_CLIENT + + + OWN_CLIENT + FLOAT + FLOAT + + + OWN_CLIENT + UINT8 + UINT8 + + + OWN_CLIENT + WEAPON_TYPE + GAMEPARAMS_ID + + + OWN_CLIENT + + + OWN_CLIENT + VECTOR3 + + + OWN_CLIENT + INT8 + INT8 + TARGET_ID + VECTOR3 + + + OWN_CLIENT + VECTOR3 + WEAPON_TYPE + VECTOR3 + + + FLOAT + OWN_CLIENT + + + FLOAT + OWN_CLIENT + + + INT8 + OWN_CLIENT + + + ENTITY_ID + true + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + INT8 + FLOAT + FLOAT + BOOL + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + PLANE_ID + VECTOR3 + FLOAT + VECTOR3 + FLOAT + + + + OWN_CLIENT + PLANE_ID + UINT8 + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + + + OWN_CLIENT + PLANE_ID + INT8 + + + OWN_CLIENT + PLANE_ID + FLOAT + + + OWN_CLIENT + INT8 + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + UINT8 + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + BLOB + FLOAT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + UINT64 + OWN_CLIENT + + + OWN_CLIENT + TARGET_ID + + + OWN_CLIENT + STRING + FLOAT + + + OWN_CLIENT + + BOOL + + + + OWN_CLIENT + + BOOL + + + + OWN_CLIENT + INT8 + ARRAY + UINT8 + + FLOAT + + + OWN_CLIENT + PLANE_ID + VECTOR3 + NULLABLE_FLOAT + + + OWN_CLIENT + UINT16 + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + TEAM_ID + + + OWN_CLIENT + UINT8 + ARRAY + UINT8 + + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + ENTITY_ID + BOOL + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + ENTITY_ID + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + BOOL + + + OWN_CLIENT + STRING + + + OWN_CLIENT + + QUICK_COMMAND + + + + + + OWN_CLIENT + + + OWN_CLIENT + UINT8 + PLAYER_ID + UINT8 + + + OWN_CLIENT + + + OWN_CLIENT + STRING + STRING + + + UINT64 + OWN_CLIENT + + + UINT16 + UINT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT16 + UNICODE_STRING + UNICODE_STRING + OWN_CLIENT + + + UINT32 + OWN_CLIENT + OWN_CLIENT + + + + STRING + TEAM_ID + INT16 + INT16 + INT16 + UINT16 + STRING + ARRAY + STRING + + + OWN_CLIENT + + + OWN_CLIENT + + UINT32 + + + + + UINT32 + UINT32 + + OWN_CLIENT + + + + UINT8 + UINT8 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + + UINT32 + + OWN_CLIENT + + + OWN_CLIENT + + + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + INT64 + OWN_CLIENT + + + UINT8 + UINT8 + INT64 + OWN_CLIENT + + + INT64 + OWN_CLIENT + + + UINT32 + OWN_CLIENT + + + UINT8 + OWN_CLIENT + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleEntity.def new file mode 100644 index 0000000..d43c0ec --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleEntity.def @@ -0,0 +1,50 @@ + + + + + BattleLogicEntityOwner + AviationOwner + DamageDealerOwner + StatsOwner + WeatherOwner + VisionOwner + + true + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + GAMEPARAMS_ID + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + 1 + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleLogic.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleLogic.def new file mode 100644 index 0000000..a4c32e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/BattleLogic.def @@ -0,0 +1,71 @@ + + + + + StatsOwner + + true + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BATTLE_LOGIC_STATE + ALL_CLIENTS + + + TEAMS_DEF + ALL_CLIENTS + + + ARRAY + BATTLE_LOGIC_DEBUG_TEXT + + ALL_CLIENTS + + + PREREQUISITE_DATA + ALL_CLIENTS + + + MAP_BORDER + ALL_CLIENTS + + + BATTLE_RESULT + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + + + STRING + VECTOR3 + FLOAT + + + STRING + VECTOR3 + FLOAT + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Building.def new file mode 100644 index 0000000..3b564a8 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Building.def @@ -0,0 +1,76 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BattleLogicEntityOwner + WeatherOwner + ModelOwner + StatsOwner + + true + + + GAMEPARAMS_ID + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + BOOL + ALL_CLIENTS + + + VECTOR3 + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + WEATHER_LOGIC_PARAMS + ALL_CLIENTS + + + + + UINT32 + UINT32 + + + UINT16 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/InteractiveZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/InteractiveZone.def new file mode 100644 index 0000000..ac418ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/InteractiveZone.def @@ -0,0 +1,60 @@ + + + + + BattleLogicEntityOwner + + True + + + FLOAT32 + ALL_CLIENTS + 5.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + TARGET_ID + ALL_CLIENTS + 0 + + + STRING + ALL_CLIENTS + "" + + + TEAM_ID + ALL_CLIENTS + 0 + + + INTERACTIVE_ZONE_ENTITY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + INTERACTIVE_ZONE_STATE + ALL_CLIENTS + + + ARRAY + BUOYANCY_STATE + + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Login.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Login.def new file mode 100644 index 0000000..c0a05f5 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Login.def @@ -0,0 +1,41 @@ + + + + + GiveClientHelper + + + + + + UINT32 + UINT8 + STRING + + + + + UINT8 + UINT64 + + + + + UINT32 + UINT64 + ARRAY + STRING + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/MasterChanger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/MasterChanger.def new file mode 100644 index 0000000..73afe59 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/MasterChanger.def @@ -0,0 +1,42 @@ + + + + + GiveClientHelper + + + + UINT8 + BASE_AND_CLIENT + + + UINT32 + BASE_AND_CLIENT + + + + + + UINT32 + UINT8!-- Disconnect reason description. --> + STRING + + + + UINT64 + + + UINT8 + UINT32 + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/OfflineEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/OfflineEntity.def new file mode 100644 index 0000000..c5b133b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/OfflineEntity.def @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayConnectionHandler.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayConnectionHandler.def new file mode 100644 index 0000000..168963d --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayConnectionHandler.def @@ -0,0 +1,24 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + + + + + + + UINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayLeech.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayLeech.def new file mode 100644 index 0000000..c815da4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/ReplayLeech.def @@ -0,0 +1,31 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + BLOB + + + BLOB + + + + + + + UINT64 + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/SmokeScreen.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/SmokeScreen.def new file mode 100644 index 0000000..4249db0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/SmokeScreen.def @@ -0,0 +1,43 @@ + + + + + BattleLogicEntityOwner + WeatherOwner + + true + + + FLOAT32 + ALL_CLIENTS + + + ARRAY + VECTOR3 + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + INT8 + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + STRING + ALL_CLIENTS + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Vehicle.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Vehicle.def new file mode 100644 index 0000000..7fe299c --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/Vehicle.def @@ -0,0 +1,505 @@ + + + + + VisionOwner + AtbaOwner + AirDefenceOwner + BattleLogicEntityOwner + DamageDealerOwner + DebugDrawEntity + HitLocationManagerOwner + AviationOwner + BuoyancyOwner + WeatherOwner + ModelOwner + StatsOwner + + + 0.1 + + + + + + + + + + true + + + BOOL + ALL_CLIENTS + 0 + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + + + VISIBILITY_FLAG + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + + + UINT16 + ALL_CLIENTS + 0 + + + ENTITY_ID + ALL_CLIENTS + + + SHIP_CONFIG + ALL_CLIENTS + + + CREW_MODIFIERS_COMPACT_PARAMS + ALL_CLIENTS + + + TEAM_ID + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + True + + + UINT32 + ALL_CLIENTS + 0 + + + + UINT16 + ALL_CLIENTS + + + + UINT32 + ALL_CLIENTS + 0 + + true + + + INT8 + ALL_CLIENTS + + + + UINT8 + ALL_CLIENTS + + + + INT8 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + ARRAY + ENTITY_DEBUG_TEXT + + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + ARRAY + STRING + + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + PICKLED_BLOB + ALL_CLIENTS + true + + + BOOL + ALL_CLIENTS + + + BOOL + ALL_CLIENTS + False + + + UINT16 + ALL_CLIENTS + + + GAMEPARAMS + ALL_CLIENTS + + + VEHICLE_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + + + + BOOL + + + ARRAY + SUBMARINE_HYDROPHONE_TARGET_INFO + + UINT16 + + + WEAPON_TYPE + GAMEPARAMS_ID + BOOL + + + WEAPON_TYPE + UINT8 + + + ARRAY + UINT64 + + + + ARRAY + DAMAGES + + 2 + + + UINT8 + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + ARRAY + STRING + + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + + + INT32 + FLOAT32 + FLOAT32 + BOOL + FLOAT32 + INT32 + + + UINT8 + + + INT8 + UINT32 + UINT32 + FLOAT + UINT8 + VECTOR2 + VECTOR3 + VECTOR3 + ENTITY_ID + + + FLOAT + + + FLOAT + + + INT32 + VECTOR3 + INT32 + INT32 + BOOL + + + INT32 + UINT16 + + + INT32 + + + INT32 + FLOAT + FLOAT + + + WEAPON_TYPE + GUN_BITS + + + WEAPON_TYPE + GUN_BITS + + + UINT8 + VECTOR3 + + + WEAPON_TYPE + GUN_BITS + + + BLOB + BLOB + + + + INT8 + BLOB + 2 + + + WEAPON_TYPE + BLOB + 2 + + + BLOB + + + BLOB + + + PLANE_ID + BLOB + + + + UINT64 + + + FLOAT + + + + + + CONSUMABLE_ID + BOOL + + + + CONSUMABLE_ID + BOOL + + + CONSUMABLE_ID + + + + CONSUMABLE_ID + FLOAT32 + + + + BOOL + + + BLOB + + + INT8 + FLOAT + + + INT8 + + + VECTOR3 + FLOAT + BOOL + + + FLOAT + + + UINT8 + FLOAT + + + WEAPON_TYPE + GUN_DIRECTIONS + + + + ENTITY_ID + + + ENTITY_ID + + + ENTITY_ID + FLOAT + FLOAT + VECTOR3 + INT8 + UINT8 + + + ENTITY_ID + FLOAT + FLOAT + UINT8 + + + ENTITY_ID + NULLABLE_VECTOR3 + + + ARRAY + ATTACHED_PINGER_WAVE + + + + PLAYER_ID + VECTOR3 + INT8 + FLOAT + FLOAT + UINT8 + FLOAT + + + PLAYER_ID + FLOAT + FLOAT + UINT8 + FLOAT + + + INT8 + INT8 + FLOAT + + + + WILD_FIRE_STATE + + + + + + + + + + + + + + + + + + + + + + VECTOR3 + NULLABLE_FLOAT + + + + + ENTITY_ID + + + + + INT32 + + + + OWN_CLIENT + + + + + BOOL + NULLABLE_FLOAT + PICKLED_BLOB + + + + + false + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/alias.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/alias.xml new file mode 100644 index 0000000..c264348 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/alias.xml @@ -0,0 +1,2042 @@ + + UINT8 + UINT32 + INT32 + INT8 + UINT32 + UINT32 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + UINT32 + INT32 + INT64 + UINT8 + INT32 + UINT8 + UINT8 + UINT16 + INT64 + INT64 + UINT32 + UINT32 + INT64 + UINT32 + UINT64 + UINT32 + UINT32 + UINT32 + UINT16 + UINT32 + UINT32 + UINT8 + UINT16 + UINT16 + UINT8 + UINT8 + INT8 + UINT8 + UINT16 + UINT8 + UINT8 + UINT64 + UINT8 + + + USER_TYPE + BLOB + ZippedBlobConverter.converter + + + + USER_TYPE + BLOB + BoundServiceUtils.CachedZippedBlobConverter.CachedZippedBlobConverter + + + + USER_TYPE + GameParams.converter + + + + USER_TYPE + VECTOR2 + FlatVectorDef.converter + + + + ARRAYUINT32 + + + + ARRAYTEAM_ID + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + + + + + ARRAYAVATAR_ID + + + + ARRAYENTITY_ID + + + + ARRAYDB_ID + + + + FIXED_DICT + + VECTOR3 + FLOAT + INT8 + + INT8 + + + + + ARRAY PLANE_WAYPOINT + + + + FIXED_DICT + + TEAM_ID + TEAM_INFO + + + + + FIXED_DICT + + TEAM_INFO + ARRAYTEAM_STATE + + TeamsDef.converter + + + + FIXED_DICT + + WEAPON_TYPE + UINT8 + TARGET_ID + VECTOR3 + + + + + FIXED_DICT + + MAP_ID + INT16 + INT16 + INT8 + INT8 + UINT8 + STRING + ARRAYSTRING + ARRAYTEAM_ID + GAMEPARAMS_ID + + BattleDef.converter + + + + USER_TYPE + BattleEventDef.converter + + + + USER_TYPE + ShipConfig.converter + + + + FIXED_DICT + + DB_ID + UNICODE_STRING + UINT32 + + PlayerClanInfo.converter + true + + + + FIXED_DICT + + DB_ID + STRING + UINT32 + UINT32 + BOOL + STRING + PLAYER_CLAN_INFO + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + DB_ID + UINT16 + + + + + + FIXED_DICT + + UINT32 + BOOL + ARRAYARRAYUINT8 + + CrewModifiers.crewModifiersCompactParamsConverter + + + + FIXED_DICT + + BOOL + INT8 + BOOL + UINT8 + ARRAYAI_CATEGORY + + AIConfigDef.converter + true + + + + FIXED_DICT + + MAILBOX + PLAYER_ID + STRING + ARRAYGAMEPARAMS_ID + SHIP_CONFIG + CREW_MODIFIERS_COMPACT_PARAMS + AI_CONFIG + DB_ID + DB_ID + PLAYER_CLAN_INFO + PYTHON + STRING true + BOOL + BOOL + + PlayerDef.converter + true + + + + ARRAY PLAYER_DEF + + + + + ARRAY PLAYERS_DEFS + + + + FIXED_DICT + + DB_ID + PYTHON + + true + + + + FIXED_DICT + + STRING + PLAYER_ID + DB_ID + UINT32 + UINT32 + BOOL + DB_ID + UNICODE_STRING + UINT32 + + true + + + + FIXED_DICT + + OBJECT_ID + INT8 + INT8 + UINT32 + PRE_BATTLE_CREATOR_DEF + PRE_BATTLE_SENDER_DEF + STRING + + + + + + FIXED_DICT + + OBJECT_ID + DB_ID + PLAYER_ID + STRING + DB_ID + UNICODE_STRING + BATTLE_DEF + INT8 + INT8 + UINT16 + INT8 + BOOL + BOOL + INT32 + INT8 + INT8 + GAMEPARAMS_ID + BOOL + + true + PreBattleDef.converter + + + + FIXED_DICT + + UINT32 + UINT32 + + + + + FIXED_DICT + + ENTITY_ID + FLOAT + + + + + FIXED_DICT + + SHIP_ID + FLOAT + + + + + ARRAY MINIMAP_USER_INFO + + + ARRAY MAILBOX + + + + FIXED_DICT + + UINT8 + TARGET_ID + VECTOR3 + TEAM_ID + UINT8 + + GoalDef.converter + true + + + + FIXED_DICT + + UINT8 + UINT8 + GOAL_DEF + GOAL_DEF + + OrderDef.converter + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + VECTOR3 + SHOT_ID + UINT16 + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + ARRAYSHOT + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + VECTOR3 + VECTOR3 + + true + + + + FIXED_DICT + + BOOL + BOOL + UINT8 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + BOOL + TORPEDO_MANEUVER_DUMP + TORPEDO_ACOUSTIC_DUMP + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAYTORPEDO + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + FLOAT + FLOAT + + + + + FIXED_DICT + + PLAYER_ID + INT32 + GAMEPARAMS_ID + ARRAY DEPTH_CHARGE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + BOOL + FLOAT + + true + + + + FIXED_DICT + + VECTOR3 + SHOT_ID + TERMINAL_BALLISTICS_INFO + + + + + FIXED_DICT + + PLAYER_ID + HIT_TYPE + ARRAYSHOTKILL + + + + + FIXED_DICT + + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + GAMEPARAMS_ID + HIT_TYPE + PLAYER_ID + GUN_ID + BOOL + + + + + FIXED_DICT + + PLAYER_ID + SHOT_ID + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + VECTOR3 + VECTOR3 + SHOT_ID + PLAYER_ID + HIT_TYPE + + + + + FIXED_DICT + + FLOAT + FLOAT + + + + + FIXED_DICT + + SHOT_ID + FLOAT + FLOAT + FLOAT + VECTOR3 + FLOAT + ARRAY SECTOR + + WaveDef.sectorConverter + false + + + + FIXED_DICT + + PLAYER_ID + GAMEPARAMS_ID + ARRAYSECTOR_WAVE_SHOT + + + + + FIXED_DICT + + INT64 + INT8 + BLOB + BLOB + BLOB + + + + + FIXED_DICT + + INT32 + FLOAT + PLAYER_ID + TARGET_ID + + + + + FIXED_DICT + + INT32 + INT64 + STRING + DB_ID_LIST + + + + + FIXED_DICT + + PLANE_ID + GAMEPARAMS_ID + BOOL + UINT8 + VECTOR3 + FLOAT + INT8 + INT8 + INT8 + UINT8 + BOOL + BOOL + UINT8 + BOOL + + + AirPlanes.AirplaneUtils.squadronStateConverter + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + UINT32 + UINT8 + STRING + + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + STRING + + + + + FIXED_DICT + + INT32 + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR3 + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + + + + FIXED_DICT + + UINT8 + VECTOR3 + VECTOR3 + VECTOR3 + BOOL + ENTITY_ID + INT32 + BOOL + + + + + USER_TYPE + ShotDecalDef.converter + + + + FIXED_DICT + + UINT8 + FLOAT + SHOT_DECAL_STATE + + + + + FIXED_DICT + + UINT8 + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + VECTOR2 + + + + + FIXED_DICT + + ENTITY_ID + GAMEPARAMS_ID + VECTOR3 + FLOAT + FLOAT + + + + + + ARRAYENTITY_ID + + + + FIXED_DICT + + STRING + UINT8 + UINT8 + STRING + VECTOR2 + UINT8 + ENTITY_ID + TEAM_ID + STRING + + AttentionMarkerDef.converter + + + + + + + + + + FIXED_DICT + + INT8 + ARRAYENTITY_ID + + + + + FIXED_DICT + + STRING + + true + + + + FIXED_DICT + + ENTITY_ID + INT32 + INT32 + INT32 + + + + + FIXED_DICT + + UINT8 + ARRAYRESOURCE_RECORD + + true + + + + FIXED_DICT + + UINT8 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT8 + ENTITY_ID + FLOAT + ARRAYUINT8 + FLOAT + + true + + + + FIXED_DICT + + INT16 + STRING + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT16 + INT16 + STRING + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + + + + + FIXED_DICT + + INT16 + INT16 + ARRAYUINT8 + INT16 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + ARRAYENTITY_ID + TEAM_ID + + + + + FIXED_DICT + + UINT32 + STATE + UINT8 + UINT8 + TARGET_ID + FLOAT + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + TEAM_ID + UINT32 + UINT8 + ARRAYPULL_TARGET_STATE + UINT8 + + + + + FIXED_DICT + + ARRAYFLAT_VECTOR + + + + + FIXED_DICT + + TEAM_ID + UINT16 + + + + + FIXED_DICT + + ARRAYHOLD_CONTROL_POINT_MISSION_STATE + ARRAYCAPTURE_CONTROL_POINT_MISSION_STATE + ARRAYKILL_SPECIFIC_SHIP_MISSION_STATE + ARRAYREACH_DESTINATION_MISSION_STATE + ARRAYPULL_TARGETS_MISSION_STATE + ARRAYPROTECT_MISSION_STATE + ARRAYTEAM_SCORE + INT16 + INT16 + + true + + + + FIXED_DICT + + ARRAYPRIVATE_PATH_MISSION_STATE + ARRAYPRIVATE_PATH_MISSION_STATE + + true + + + + FIXED_DICT + + STRING + BOOL + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + UINT8 + ENTITY_ID + STRING + + true + + + + FIXED_DICT + + UINT8 + STRING + UINT8 + UINT32 + UINT16 + UINT16 + UINT8 + UINT8 + UINT8 + STRING + UINT8 + TEAM_ID + STRING + ZIPPED_BLOB + + true + + + + FIXED_DICT + + ENTITY_ID + UINT8 + UINT8 + STRING + + true + + + + FIXED_DICT + + UINT8 + ARRAYVECTOR2 + + + + + FIXED_DICT + + UINT32 + ARRAYFIELD_LAYER_PACK + + + + + FIXED_DICT + + STRING + VECTOR2 + FLOAT + UINT32 + + + + + FIXED_DICT + + GAMEPARAMS_ID + GAMEPARAMS_ID + INT16 + INT16 + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_ITEM + GLOBAL_WEATHER_NOTIFICATION + + + + + FIXED_DICT + + ENTITY_ID + STRING + STRING + TEAM_ID + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + WeatherParamsDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + GLOBAL_WEATHER_STATE + ARRAYLOCAL_WEATHER_STATE + + + + + FIXED_DICT + + FLOAT + FLOAT + TEAM_ID + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ENTITY_ID + UINT8 + STRING + INT8 + + true + + + + FIXED_DICT + + FLOAT + TEAM_ID + BOOL + BOOL + BOOL + BOOL + FLOAT + FLOAT + + true + + + + FIXED_DICT + + CONTROL_POINT_STATE + CAPTURE_LOGIC_STATE + + + + + USER_TYPE + Modifiers.ModifierDef.converter + + + + FIXED_DICT + + INT8 + GAMEPARAMS_ID + ENTITY_ID + INT16 + BOOL + DROP_CAPTURE_LOGIC_STATE + GAMEPARAMS_ID + + + + + FIXED_DICT + + VECTOR2 + GAMEPARAMS_ID + FLOAT + + true + + + + FIXED_DICT + + GAMEPARAMS_ID + ARRAYENTITY_ID + + + + + FIXED_DICT + + ARRAYDROP_ITEM_STATE + DROP_PLANE_STATE + ARRAYPICKED_DROP_STATE + + true + + + + USER_TYPE + BattleItemDef.converter + + + + FIXED_DICT + + UINT8 + BATTLE_ITEM_STATE + + + + + FIXED_DICT + + ARRAYTEAM_ID + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + true + + + + FIXED_DICT + + UINT8 + + + + + FIXED_DICT + + ARRAYATTENTION_MARKER_STATE + CLIENT_ANIMATION_STATE + ARRAYENTITY_ID + ARRAYENTITY_STATE_STATE + EXPECTED_ACTION_STATE + WEATHER_STATE + ARRAYKEY_OBJECT_STATE + MISSIONS_STATE + ARRAYRESOURCE_STATE + ARRAYSUCCESS_STORY_PROGRESS_STATE + ARRAYTASKS_STATE + ARRAYBATTLE_LOGIC_ENTITY_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + ARRAYWORLD_CLIENT_ACTION_STATE + DROP_STATE + DIPLOMACY_STATE + UI_INFO_STATE + PHYSICS_STATE + + + + + FIXED_DICT + + MODIFIER_STATE + + true + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + + DiplomacyTicketDef.converter + + + + FIXED_DICT + + ARRAYDIPLOMACY_TICKET + ARRAYDIPLOMACY_TICKET + + true + + + + FIXED_DICT + + UINT32 + + true + + + + + FIXED_DICT + + ARRAY STASHED_BATTLE_ITEM_STATE + TRIGGERS_STATE + DIPLOMACY_TICKETS_STATE + BATTLE_LEVELING_STATE + PRIVATE_MISSIONS_STATE + + + + + FIXED_DICT + + DB_ID + INT32 + DB_ID + INT8 + INT8 + INT8 + DB_ID + MASTER_ID + + EvaluationDef.converter + + + + FIXED_DICT + + STRING + STRING + + + + + FIXED_DICT + + STRING + STRING + VECTOR2 + + + + + FIXED_DICT + + STRING + ARRAYBATTLE_LOGIC_DEBUG_CHANNEL + + + + + FIXED_DICT + + INT32 + INT32 + ARRAYSHIP_TYPE_ID + + + + + FIXED_DICT + + SHIP_TYPE_ID + INT32 + INT32 + + + + + FIXED_DICT + + SHIP_LEVEL + INT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + INT32 + + + + + FIXED_DICT + + ARRAYINT32 + ARRAYINT32 + ARRAYSHIP_TYPE_ID + ARRAYINT8 + ARRAYSHIP_NATION_ID + + + + + FIXED_DICT + ShipRestrictions.ShipRestrictionsDefConverter.converter + + INT32 + INT32 + INT32 + ARRAYSHIP_CLASS_RESTRICTION + ARRAYSHIP_LEVEL_RESTRICTION + ARRAYSHIP_LIMIT_RESTRICTION + COMBINED_CLASSES_RESTRICTION + ARRAYRESTRICTION_FILTER + + true + + + + FIXED_DICT + TrainingRoomDataTypes.trainingRoomPropertiesConverter + + INT32 + UNICODE_STRING + INT32 + INT32 + INT32 + BOOL + BOOL + UNICODE_STRING + SHIP_RESTRICTIONS + BOOL + INT8 + UNICODE_STRING + BOOL + + + + + FIXED_DICT + TrainingRoomDef.converter + + BOOL + SHIP_RESTRICTIONS + BOOL + UNICODE_STRING + INT32 + PRE_BATTLE_DEF + INT32 + INT32 + INT32 + BOOL + BOOL + + true + + + + TUPLEINT322 + + + + FIXED_DICT + + ENTITY_ID + FLOAT + FLOAT + BUOYANCY_STATE + + true + + + + FIXED_DICT + + UINT32 + UINT32 + UINT32 + UINT8 + UINT8 + + + + + FIXED_DICT + + STRING + UINT16 + INT8 + INT8 + UINT32 + STRING + STRING + + ReplayMetadataDef.converter + + + + ARRAYREPLAY_METADATA + + + FIXED_DICT + + INT8 + BOOL + + + + + FIXED_DICT + + GAMEPARAMS_ID + BOOL + GAMEPARAMS_ID + + + + + FIXED_DICT + + ARRAYPREREQUISITE_SHIP_DATA + ARRAYSTRING + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + ARRAYGAMEPARAMS_ID + + + + + FIXED_DICT + + INT16 + STRING + STRING + + + + + FIXED_DICT + + STRING + ARRAYMAILBOX + + true + + + + FIXED_DICT + + VECTOR3 + FLOAT + + + + + FIXED_DICT + + INT8 + ARRAYBUBBLE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_PROJECTILE + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + ARRAYVECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + FLOAT + FLOAT + ARRAYPLANE_SKIP_BOMB + + + + + FIXED_DICT + + SHOT_ID + VECTOR3 + UINT8 + + + + + FIXED_DICT + + GAMEPARAMS_ID + PLANE_ID + VECTOR3 + VECTOR3 + FLOAT + FLOAT + FLOAT + ARRAYPLANE_ROCKET + + + + + USER_TYPE + BLOB + MsgPackCustomConverter.converter + + + + USER_TYPE + BLOB + PickledBlobConverter.converter + + + + FIXED_DICT + + STRING + UINT8 + UINT32 + STRING + UINT8 + UINT8 + UINT64 + + PlayerDigestDef.digestConverter + + + + FIXED_DICT + + BOOL + UINT64 + + PlayerDigestDef.statusConverter + + + + FIXED_DICT + + DB_ID + PLAYER_DIGEST + PLAYER_STATUS + + PlayerDigestDef.converter + + + + FIXED_DICT + + GAMEPARAMS_ID + VECTOR3 + + MapBorderDef.converter + true + + + + FIXED_DICT + + ARENA_UNIQUE_ID + ARRAYDB_ID + MSGPACK_BLOB + BLOB + + ReplayInfoDef.converter + + + + FIXED_DICT + + UINT8 + TEAM_ID + + + + + + USER_TYPE + AutoCompensationDataTypes.restartInfoConverterInstance + + + + FIXED_DICT + + FLOAT + ARRAY VECTOR3 + + + + + FIXED_DICT + + VECTOR3 + UINT16 + UINT16 + ARRAY NAVIGATION_UNPASSABLE_CELLS + FLOAT + + + + + USER_TYPE + FLOAT + NullableDef.nullableFloatConverter + + + + TUPLESTRING3 + + + + USER_TYPE + UINT16 + Converters.GunDirectionsConverter.converter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + MAILBOX + INTERCLUSTER_ID + PLAYERS_DEFS + PRE_BATTLE_CREATOR_DEF + GAMEPARAMS_ID + + EnqueueProcess.DataTypes.EnqueueRequestConverter + + + + FIXED_DICT + + STRING + QUEUE_TYPE + SHIP_ID + PYTHON + PYTHON + GAMEPARAMS_ID + MAILBOX + + EnqueueProcess.DataTypes.EnqueueDataConverter + true + + + + USER_TYPE + VECTOR3 + NullableDef.nullableVector3Converter + + + + FIXED_DICT + + FLOAT + UINT8 + + true + + + + UINT8 + true + + + + FIXED_DICT + + GAMEPARAMS_ID + UINT8 + INT8 + INT16 + INT16 + + BuffDef.converter + + + + FIXED_DICT + + ARRAY BUFF_STATE + + true + + + + FIXED_DICT + + RIBBON_ID + UINT16 + + + + + ARRAY RIBBON_STATE + true + + + + FIXED_DICT + + FLOAT + + true + + + + FIXED_DICT + + BATTERY_STATE + BUFFS_STATE + VEHICLE_VISUAL_STATE + + + + + FIXED_DICT + + BUFFS_STATE + RAGE_MODE_STATE + RIBBONS_STATE + + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + INT8 + FLOAT + UINT8 + FLOAT + VECTOR3 + + + + + FIXED_DICT + + FLOAT + FLOAT + FLOAT + FLOAT + FLOAT + + true + WildFireDef.converter + + + + FIXED_DICT + + ENTITY_ID + VECTOR3 + UINT8 + WEAPON_TYPE + UINT8 + FLOAT + FLOAT + PLANE_ID + PLANE_ID + + false + HeatMapConstants.squadronEventDataConverter + + + + FIXED_DICT + + UINT8 + PLANE_ID + ENTITY_ID + FLOAT + + false + HeatMapConstants.planeProjectileEventDataConverter + + + + FIXED_DICT + + STRING + UINT32 + UINT32 + STRING + STRING + STRING + STRING + + false + + + + FIXED_DICT + + TEAM_ID + UINT8 + + + + + FIXED_DICT + + FIELD_ID + ENTITY_ID + VECTOR3 + FLOAT + BOOL + FLOAT + UINT16 + UINT16 + FLOAT + UINT16 + FLOAT + UINT16 + UINT16 + UINT16 + + false + MinefieldStatistics.converter + + + + USER_TYPE + CommonQuickCommands.QuickCommandConverter.converter + + + + USER_TYPE + Fields.MinefieldInfo.converter + + + + FIXED_DICT + + BATTLE_DEF + ENTITY_ID + + + + + FIXED_DICT + + PRE_BATTLE_DEF + PLAYER_DEF + + + + + FIXED_DICT + + TRAINING_ROOM_DEF + PLAYER_DEF + UNICODE_STRING + + + + + FIXED_DICT + + INT32 + UINT32 + UINT64 + PYTHON + ARRAY UINT64 + UINT64 + UINT32 + PYTHON + UINT32 + PYTHON + + RestorePointConverter.converter + + + + USER_TYPE + EntityAPI.EntityAPITimeoutDef.converter + + + + FIXED_DICT + + UINT8 + BOOL + ENTITYAPI_TIMEOUT + PICKLED_BLOB + + EntityAPIDefs.loadConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.lookupConverter + + + + FIXED_DICT + + PICKLED_BLOB + ENTITYAPI_TIMEOUT + + EntityAPIDefs.createConverter + + + + USER_TYPE + CommonConsumables.UsageConverter.converter + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountCMDs.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountCMDs.def new file mode 100644 index 0000000..b2d214b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountCMDs.def @@ -0,0 +1,382 @@ + + + + + + + + + + + + + UINT8 + UINT8 + + + + + UINT8 + UINT8 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + INT32 + + + + + UINT8 + UINT8 + INT64 + INT64 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + + + + + UINT8 + UINT8 + INT64 + UINT32 + INT32 + INT32 + INT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + INT64 + INT64 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + INT32 + UINT32 + UINT32 + UINT64 + UINT32 + UNICODE_STRING + + + + + UINT8 + UINT8 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UINT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + + + + + UINT8 + UINT8 + BLOB + + + + + UINT8 + UINT8 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT32 + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + UNICODE_STRING + + + + + UINT8 + UINT8 + UNICODE_STRING + INT32 + + + + + UINT8 + UINT8 + DB_ID_LIST + + + + + UINT8 + UINT8 + DB_ID_LIST + UNICODE_STRING + + + + + UINT8 + UINT8 + INT64 + INT64 + ARRAY UINT8 + + + + + UINT8 + UINT8 + INT32 + INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + ARRAY INT32 + + + + + UINT8 + UINT8 + SHIP_ID + INT32 + INT32 + INT32 + INT32 + INT32 + INT32 + UNICODE_STRING + SHIP_RESTRICTIONS + + + + + UINT8 + UINT8 + TRAINING_ROOM_PROPERTIES + + + + + UINT8 + UINT8 + ARRAY GAMEPARAMS_ID + + + + + UINT8 + UINT8 + ARRAYUINT64 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountPData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountPData.def new file mode 100644 index 0000000..de981b9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AccountPData.def @@ -0,0 +1,154 @@ + + + + + + + STRING + BASE_AND_CLIENT + True + 96 + + + + + + STRING + BASE + true + 96 + true + + + + + DB_ID + BASE_AND_CLIENT + true + + + + + DB_ID + BASE + true + 0 + + + + + INT16 + BASE + True + + + + + UINT32 + BASE + true + + + + + UINT64 + BASE_AND_CLIENT + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT8 + BASE + true + 0 + + + + + UINT32 + BASE + true + 0 + + + + + UINT32 + BASE + True + 0 + + + + + STRING + BASE + True + 1000 + + + + + STRING + BASE + True + 100000 + + + + + UINT64 + BASE + true + + + + + UINT64 + BASE + true + 1 + + + + UINT32 + BASE + true + 0 + + + + UINT64 + BASE + true + 0 + + + <_destroyResponseCode> + UINT8 + BASE + + + + UINT8 + BASE + true + 0 + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AirDefenceOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AirDefenceOwner.def new file mode 100644 index 0000000..41e917f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AirDefenceOwner.def @@ -0,0 +1,49 @@ + + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYARRAYPLANE_ID + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + BOOL + ALL_CLIENTS + 0 + + + ARRAYAIR_DEFENCE_AURA + ALL_CLIENTS + + + + + + + + + BUBBLE_PACK + UINT8 + + + + + + + BOOL + + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AtbaOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AtbaOwner.def new file mode 100644 index 0000000..4723f29 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AtbaOwner.def @@ -0,0 +1,24 @@ + + + + ATBA_TARGETS + ALL_CLIENTS + + + + + + + + + + UINT32 + + + + + + UINT8 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AviationOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AviationOwner.def new file mode 100644 index 0000000..780c0d6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/AviationOwner.def @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + <_AviationOwner__spottedMinimapSquadrons/> + <_AviationOwner__spottedMinimapFighters/> + <_AviationOwner__planeRegenPercentVaryId/> + <_AviationOwner__planeHealCoef/> + + + + + + + + + + UINT8 + UINT8 + VECTOR3 + FLOAT + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def new file mode 100644 index 0000000..d716467 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def @@ -0,0 +1,32 @@ + + + + ENTITY_ID + CELL_PRIVATE + + + ENTITY_ID + BASE + + + UINT8 + CELL_PRIVATE + + + + + + + + + + + + BOOL + + + BOOL + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleStarterClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleStarterClient.def new file mode 100644 index 0000000..f5f209e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BattleStarterClient.def @@ -0,0 +1,23 @@ + + + + + UINT8 + + + + + STRING + MAILBOX + + + + + PYTHON + + + INT64 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BuoyancyOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BuoyancyOwner.def new file mode 100644 index 0000000..2ddf199 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/BuoyancyOwner.def @@ -0,0 +1,68 @@ + + + + + + + + + + BUOYANCY_STATE + ALL_CLIENTS + + + UINT8 + ALL_CLIENTS + + + FLOAT + ALL_CLIENTS + + + + + + + <_BuoyancyOwner__oldBuoyancyState/> + <_BuoyancyOwner__currentBuoyancySpeedTime/> + <_BuoyancyOwner__targetBuoyancySpeedCoef/> + <_BuoyancyOwner__prevBuoyancySpeedCoef/> + <_BuoyancyOwner__buoyancySpeedTime/> + <_BuoyancyOwner__newBuoyancyLevelLock/> + <_BuoyancyOwner__currentStateIndex/> + <_BuoyancyOwner__availableStates/> + + + + + + + + + + + + + + + + <_BuoyancyOwner__isUsingFakeTargetWaterline/> + + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DamageDealerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DamageDealerOwner.def new file mode 100644 index 0000000..8ffbc9f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DamageDealerOwner.def @@ -0,0 +1,28 @@ + + + + BOOL + CELL_PUBLIC + + + + ARRAYFLOAT324 + CELL_PUBLIC + + 1.0 + 1.0 + 1.0 + 0.0 + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DebugDrawEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DebugDrawEntity.def new file mode 100644 index 0000000..1b25f64 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/DebugDrawEntity.def @@ -0,0 +1,92 @@ + + + + + + STRING + BLOB + + + + + + ARRAY VECTOR3 + UINT32 + UINT32 + BOOL + BOOL + + + + + + VECTOR3 + VECTOR3 + UINT32 + UINT32 + BOOL + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + UINT32 + + + + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + +
VECTOR3
+ FLOAT32 + UINT32 + UINT32 + BOOL +
+
+ + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + + + + VECTOR3 + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + +
+
diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/GiveClientHelper.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/GiveClientHelper.def new file mode 100644 index 0000000..9db2889 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/GiveClientHelper.def @@ -0,0 +1,21 @@ + + + TransactionAPI + + + + + + + <_GiveClientHelper__logName/> + + + + + MAILBOX + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def new file mode 100644 index 0000000..e41533b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def @@ -0,0 +1,180 @@ + + + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + STRING + FLOAT32 + BOOL + INT32 + STRING + + + + + STRING + INT8 + + + + + + + + UINT8 + BOOL + OWN_CLIENT + + + UINT8 + BOOL + + + + + + STRING + INT32 + STRING + + + + + OWN_CLIENT + + GAMEPARAMS_ID + VECTOR3 + VECTOR3 + FLOAT32 + + + + + + OWN_CLIENT + + + + + + + VECTOR3 + FLOAT32 + UINT32 + BOOL + + + BLOB + BOOL + BOOL + + + ARRAY UINT8 + ARRAY UINT32 + 2 + + + UINT16 + UINT32 + + + UINT32 + STRING + UINT32 + + + ARRAY FLOAT + + + + + + FLOAT32 + ALL_CLIENTS + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + UINT16 + ALL_CLIENTS + 0 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PUBLIC + 1 + + + BOOL + CELL_PRIVATE + False + + + FLOAT32 + CELL_PUBLIC + 0.0 + + + + ARRAY HEAT_INFO_STATE + ALL_CLIENTS + + + + FLOAT32 + ALL_CLIENTS + 0.0 + + + + + + + + + + + + + + + + + + + + + + + + + <_HitLocationManagerOwner__regenVary/> + <_HitLocationManagerOwner__healthRegenPercent/> + <_HitLocationManagerOwner__healthRegenSpeed/> + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/ModelOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/ModelOwner.def new file mode 100644 index 0000000..926e8ab --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/ModelOwner.def @@ -0,0 +1,32 @@ + + + + + + + STRING + STRING + + + STRING + STRING + + + + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + ARRAYENTITY_CLIENT_ACTION_STATE + ALL_CLIENTS + + + + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsOwner.def new file mode 100644 index 0000000..51ed150 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsOwner.def @@ -0,0 +1,23 @@ + + + + BLOB + + + + + + + BLOB + BLOB + + + + + + + + + <_StatsOwner__sendStatsVary/> + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsPublisher.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsPublisher.def new file mode 100644 index 0000000..94adaac --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/StatsPublisher.def @@ -0,0 +1,29 @@ + + + + + + STRING + INT32 + BOOL + + + + + + STRING + FLOAT + BOOL + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/TransactionAPI.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/TransactionAPI.def new file mode 100644 index 0000000..35c6bbf --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/TransactionAPI.def @@ -0,0 +1,39 @@ + + + + + + UINT16 + BASE + 0 + + + + + + + + + + UINT64 + UINT8 + UINT8 + UINT8 + ARRAY MAILBOX + BOOL + + + + + + + UINT64 + UINT8 + UINT8 + MAILBOX + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VisionOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VisionOwner.def new file mode 100644 index 0000000..8bcd78f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VisionOwner.def @@ -0,0 +1,52 @@ + + + + + + <_events/> + <_collectedVision/> + <_spotVaryId/> + <_visibilityUpdateVaryId/> + <_visionToEntityUpdateVaryId/> + <_visionToProjectileVaryId/> + + <_visionFlag/> + + + + + + + + + + + + + + + + + + + + + + + + ENTITY_ID + VISIBILITY_FLAG + + + ENTITY_ID + + + + BOOL + + + + BOOL + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VoiceChatClient.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VoiceChatClient.def new file mode 100644 index 0000000..83196ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/VoiceChatClient.def @@ -0,0 +1,23 @@ + + + + + + + + + + + + BLOB + + + + + + BLOB + 2 + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletOwner.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletOwner.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletProperties.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletProperties.def new file mode 100644 index 0000000..912ea90 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WalletProperties.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WeatherOwner.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WeatherOwner.def new file mode 100644 index 0000000..edf71ca --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WeatherOwner.def @@ -0,0 +1,20 @@ + + + + + + + + + + + + + WEATHER_LOGIC_PARAMS + CELL_PRIVATE + + + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WritableEntity.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WritableEntity.def new file mode 100644 index 0000000..9adef0a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/entity_defs/interfaces/WritableEntity.def @@ -0,0 +1,11 @@ + + + + <_WritableEntity__logID/> + <_WritableEntity__accountDataAtomicCommitSemaphor/> + <_WritableEntity__lastCommittedDataRevision/> + <_WritableEntity__lastSavedDataRevision/> + <_WritableEntity__onDataCommitted/> + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/space_defs/GeneralSpaceData.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/space_defs/GeneralSpaceData.def new file mode 100644 index 0000000..2113b3c --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/space_defs/GeneralSpaceData.def @@ -0,0 +1,15 @@ + + + + + + STRING + + + + UINT32 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/spaces.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/spaces.xml new file mode 100644 index 0000000..d4be0b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/spaces.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Barge.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Barge.def new file mode 100644 index 0000000..259fa18 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Barge.def @@ -0,0 +1,36 @@ + + CLIENT + Enable + + + STRING + True + + + + STRING + True + content/ports/ship/vessel/OSV3002/OSV3002.model + + + + + STRING + True + content/gameplay/europe/character/WH001_Sweden_sailor/WH001_Sweden_sailor.model + + + + + VECTOR3 + True + 0.0 0.0 0.0 + + + + FLOAT + True + 0.0 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Building.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Building.def new file mode 100644 index 0000000..2377917 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Building.def @@ -0,0 +1,58 @@ + + BASE + + Enable + + + tag + name + + + + + + STRING + true + + + + INT8 + true + + + + STRING + true + + + + + UINT32 + False + 0 + + + + STRING + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ControlPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ControlPoint.def new file mode 100644 index 0000000..37103b4 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ControlPoint.def @@ -0,0 +1,98 @@ + + + BASE + Enable + + + tag + name + + + + + + + STRING + True + + + + ARRAY UDO_REF + True + + + + STRING + true + + + + INT8 + true + -1 + + + + FLOAT + true + + RADIUS + 255 0 0 192 + 1 + + 10.0 + + + + FLOAT + true + + RADIUS + 0 255 0 192 + 1 + + 0.0 + + + + UINT16 + true + + + + UINT16 + true + + + + STRING + true + + + + STRING + True + + + + UINT8 + true + 10 + + + + STRING + true + PCOU001_Buoy_LMY003 + + + + + BOOL + True + False + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ConvoyWayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ConvoyWayPoint.def new file mode 100644 index 0000000..b90d1fc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/ConvoyWayPoint.def @@ -0,0 +1,67 @@ + + Enable + + + 0x5503a6bf + radius + + + 0x55660066 + catchRadius + + + BASE + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + UINT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + FLOAT + 1.0 + true + + + FLOAT + 15 + + RADIUS + 255 168 0 192 + 1 + + true + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/DropZone.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/DropZone.def new file mode 100644 index 0000000..06d6cd0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/DropZone.def @@ -0,0 +1,65 @@ + + BASE + Enable + + + tag + name + + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + STRING + True + + + + STRING + True + + + + BOOL + True + + + + STRING + true + PCOE001_Default + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/FogPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/FogPoint.def new file mode 100644 index 0000000..682783a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/FogPoint.def @@ -0,0 +1,25 @@ + + BASE + + + STRING + true + + + + FLOAT32 + true + 15 + RADIUS + 0 255 0 255 + 1.5 + + + + + FLOAT32 + true + 0.05 + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapBorder.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapBorder.def new file mode 100644 index 0000000..a268f2f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapBorder.def @@ -0,0 +1,15 @@ + + BASE + + + STRING + True + + + + STRING + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapPartInfo.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapPartInfo.def new file mode 100644 index 0000000..691e52a --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapPartInfo.def @@ -0,0 +1,71 @@ + + Enable + + + CLIENT + + + + STRING + true + + + + STRING + true + + + + ARRAY UDO_REF + + True + + + + VECTOR3 + false + + + + VECTOR3 + false + + + + FLOAT + false + 1.0472 + + + + STRING + True + 0x811177ff + + + + STRING + True + 0x90b1c231 + + + + FLOAT32 + True + 7.0 + + + + ARRAY VECTOR3 + + True + + + + ARRAY VECTOR3 + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapSeparator.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapSeparator.def new file mode 100644 index 0000000..0dc46dc --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/MapSeparator.def @@ -0,0 +1,20 @@ + + Enable + + + BASE + + + ARRAY STRING + + True + + + + ARRAY UDO_REF + + True + + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Minefield.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Minefield.def new file mode 100644 index 0000000..7421af3 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Minefield.def @@ -0,0 +1,91 @@ + + BASE + Enable + + + + + STRING + true + + + + STRING + true + + PBPM001_SeaMine + + + + STRING + false + + + + UINT16 + false + 0 + + + + STRING + false + + + + FLOAT + true + 1000.0 + + + + FLOAT + true + 1000.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + VECTOR3 + false + 0.0 0.0 0.0 + + + + FLOAT + true + 0.0 + + + + FLOAT + true + 40.0 + 20.0 + + + + STRING + true + + + + BOOL + true + 1 + + + + FLOAT + true + 0.5 + 0.0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Prefab.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Prefab.def new file mode 100644 index 0000000..0cdba86 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Prefab.def @@ -0,0 +1,31 @@ + + BASE + Enable + + + name + + + + + STRING + true + + + + ARRAY UDO_REF + true + + + + STRING + true + + + + STRING + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpaceDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpaceDebugTool.def new file mode 100644 index 0000000..ca0e448 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpaceDebugTool.def @@ -0,0 +1,55 @@ + + Enable + + CLIENT + + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 1 + + + BOOL + true + 0 + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpatialUIDebugTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpatialUIDebugTool.def new file mode 100644 index 0000000..83f1b6f --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpatialUIDebugTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + FLOAT + true + 1 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpawnPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpawnPoint.def new file mode 100644 index 0000000..7e95937 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SpawnPoint.def @@ -0,0 +1,84 @@ + + + BASE + + Enable + + + tag + + + + + + STRING + true + + + + UINT8 + true + 0 + + + + STRING + true + + + + ARRAY UINT8 + True + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 1 + + + + UINT8 + true + 0 + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SquadronReticleTool.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SquadronReticleTool.def new file mode 100644 index 0000000..3f24f57 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/SquadronReticleTool.def @@ -0,0 +1,13 @@ + + Enable + + CLIENT + + + + VECTOR3 + True + 1.0 1.0 1.0 + + + \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Trigger.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Trigger.def new file mode 100644 index 0000000..5649ec9 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/Trigger.def @@ -0,0 +1,47 @@ + + BASE + Enable + + + 0x55bd8d06 + radius + + + tag + name + + + + + STRING + true + + + + STRING + true + + + + INT8 + True + + + + STRING + true + + + + FLOAT + 10 + + RADIUS + 0 192 96 192 + 1 + + true + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/WayPoint.def b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/WayPoint.def new file mode 100644 index 0000000..9078b56 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_object_defs/WayPoint.def @@ -0,0 +1,66 @@ + + CLIENT + Enable + + + STRING + true + + + + + ARRAY UDO_REF + True + + + + FLOAT32 + 20 + True + + + + STRING + True + + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + STRING + True + + + + UINT8 + 1 + True + + + + FLOAT32 + 1.0 + True + + + + FLOAT32 + 2.0 + True + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_objects.xml b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_objects.xml new file mode 100644 index 0000000..30347e6 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Definitions/Versions/13_3_0/scripts/user_data_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Core/Entities/Entity.cs b/Nodsoft.WowsReplaysUnpack.Core/Entities/Entity.cs index 5b02510..d76dd9e 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Entities/Entity.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Entities/Entity.cs @@ -1,18 +1,17 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using Nodsoft.WowsReplaysUnpack.Core.Abstractions; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Core.Exceptions; using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; -using System.Diagnostics.CodeAnalysis; using System.Numerics; -using System.Reflection; -using System.Text; namespace Nodsoft.WowsReplaysUnpack.Core.Entities; /// /// Represents an entity in the game. /// -[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] // Most elements are exposed to userspace, so shouldn't be restricted past public/protected. +[PublicAPI] public class Entity { /// @@ -25,31 +24,21 @@ public class Entity /// protected EntityDefinition EntityDefinition { get; } - /// - /// Methods subscribed to the entity. - /// - protected Dictionary MethodSubscriptions { get; } - - /// - /// Methods subscribed to the entity's property changes. - /// - protected Dictionary PropertyChangedSubscriptions { get; } - /// /// Definitions of the entity's properties, as scoped for public use from the client. /// protected PropertyDefinition[] ClientPropertyDefinitions { get; } - + /// /// Definitions of the entity's properties, as scoped for internal use from the client. /// protected PropertyDefinition[] InternalClientPropertyDefinitions { get; } - + /// /// Definitions of the entity's properties, as scoped for the cell. /// protected PropertyDefinition[] CellPropertyDefinitions { get; } - + /// /// Definitions of the entity's base properties. /// @@ -59,7 +48,7 @@ public class Entity /// ID of the entity. /// public uint Id { get; } - + /// /// Name of the entity. /// @@ -74,22 +63,22 @@ public class Entity /// Entity properties, as scoped for public use from the client. /// public Dictionary ClientProperties { get; } = new(); - + /// /// Entity properties, as scoped for internal use from the client. /// public Dictionary CellProperties { get; } = new(); - + /// /// Entity base properties. /// public Dictionary BaseProperties { get; } = new(); - + /// /// Volatile properties of the entity. /// public Dictionary VolatileProperties { get; } - + /// /// Public method definitions exposed for this entity. /// @@ -103,7 +92,7 @@ public class Entity /// public Vector3 VPosition { - get => VolatileProperties.ContainsKey("position") ? (Vector3)VolatileProperties["position"] : new(); + get => VolatileProperties.TryGetValue("position", out object? value) ? (Vector3)value : new(); set => VolatileProperties["position"] = value; } @@ -112,7 +101,7 @@ public Vector3 VPosition /// public float Yaw { - get => VolatileProperties.ContainsKey("yaw") ? (float)VolatileProperties["yaw"] : 0f; + get => VolatileProperties.TryGetValue("yaw", out object? value) ? (float)value : 0f; set => VolatileProperties["yaw"] = value; } @@ -121,7 +110,7 @@ public float Yaw /// public float Pitch { - get => VolatileProperties.ContainsKey("pitch") ? (float)VolatileProperties["pitch"] : 0f; + get => VolatileProperties.TryGetValue("pitch", out object? value) ? (float)value : 0f; set => VolatileProperties["pitch"] = value; } @@ -130,28 +119,24 @@ public float Pitch /// public float Roll { - get => VolatileProperties.ContainsKey("roll") ? (float)VolatileProperties["roll"] : 0f; + get => VolatileProperties.TryGetValue("roll", out object? value) ? (float)value : 0f; set => VolatileProperties["roll"] = value; } public Entity(uint id, string name, EntityDefinition entityDefinition, - Dictionary methodSubscriptions, - Dictionary propertyChangedSubscriptions, ILogger logger) { Id = id; Name = name; EntityDefinition = entityDefinition; - MethodSubscriptions = methodSubscriptions; - PropertyChangedSubscriptions = propertyChangedSubscriptions; Logger = logger; VolatileProperties = EntityDefinition.VolatileProperties.ToDictionary(kv => kv.Key, kv => kv.Value); ClientPropertyDefinitions = EntityDefinition.GetPropertiesByFlags(EntityFlag.ALL_CLIENTS - | EntityFlag.BASE_AND_CLIENT - | EntityFlag.OTHER_CLIENTS - | EntityFlag.OWN_CLIENT - | EntityFlag.CELL_PUBLIC_AND_OWN, true + | EntityFlag.BASE_AND_CLIENT + | EntityFlag.OTHER_CLIENTS + | EntityFlag.OWN_CLIENT + | EntityFlag.CELL_PUBLIC_AND_OWN, true ); InternalClientPropertyDefinitions = EntityDefinition.GetPropertiesByFlags(EntityFlag.ALL_CLIENTS @@ -160,7 +145,8 @@ public Entity(uint id, string name, EntityDefinition entityDefinition, | EntityFlag.CELL_PUBLIC_AND_OWN ); - CellPropertyDefinitions = EntityDefinition.GetPropertiesByFlags(EntityFlag.CELL_PUBLIC_AND_OWN | EntityFlag.CELL_PUBLIC); + CellPropertyDefinitions = + EntityDefinition.GetPropertiesByFlags(EntityFlag.CELL_PUBLIC_AND_OWN | EntityFlag.CELL_PUBLIC); BasePropertyDefinitions = EntityDefinition.GetPropertiesByFlags(EntityFlag.BASE_AND_CLIENT); } @@ -186,214 +172,97 @@ public Entity(uint id, string name, EntityDefinition entityDefinition, /// Time of the packet. /// Packet binary reader. /// Subscription target (Shouldn't be null). - public virtual void CallClientMethod(uint index, float packetTime, BinaryReader reader, object? subscriptionTarget) + public virtual void CallClientMethod(uint index, float packetTime, BinaryReader reader, + IReplayController subscriptionTarget) { - if (subscriptionTarget is null) - { - return; - } - EntityMethodDefinition? methodDefinition = MethodDefinitions.ElementAtOrDefault((int)index); if (methodDefinition is null) { - Logger.LogError("Method with index {Index} was not found on entity with name {Name} ({Id})", index, Name, Id); + Logger.LogError("Method with index {Index} was not found on entity with name {Name} ({Id})", index, Name, + Id); return; } string hash = $"{Name}_{methodDefinition.Name}"; - if (MethodSubscriptions.TryGetValue(hash, out MethodInfo[]? methodInfos)) - { - foreach (MethodInfo methodInfo in methodInfos) - { - MethodSubscriptionAttribute attribute = methodInfo.GetCustomAttribute()!; - - if (attribute.ParamsAsDictionary) - { - CallClientMethodWithDictionary(reader, packetTime, subscriptionTarget, methodDefinition, hash, methodInfo, attribute); - } - else - { - CallClientMethodWithParameters(reader, packetTime, subscriptionTarget, methodDefinition, hash, methodInfo, attribute); - } - - reader.BaseStream.Seek(0, SeekOrigin.Begin); - } - } - } - private void CallClientMethodWithParameters(BinaryReader reader, float packetTime, object? subscriptionTarget, - EntityMethodDefinition methodDefinition, string hash, MethodBase methodInfo, MethodSubscriptionAttribute attribute) - { - if (!ValidateParameterTypes(methodDefinition, methodInfo, attribute)) - { - return; - } + Dictionary arguments = + methodDefinition.Arguments.ToDictionary(a => a.Name, a => a.GetValue(reader)); try { - IEnumerable methodArgumentValues = methodDefinition.Arguments.Select(a => a.GetValue(reader)); - - if (attribute.IncludePacketTime) - { - methodArgumentValues = methodArgumentValues.Prepend(packetTime); - } - - if (attribute.IncludeEntity) - { - methodArgumentValues = methodArgumentValues.Prepend(this); - } - - Logger.LogDebug("Calling method subscription with hash {Hash}", hash); - methodInfo.Invoke(subscriptionTarget, methodArgumentValues.ToArray()); - } - catch (Exception ex) - { - if (ex.InnerException is CveSecurityException) - { - throw ex.InnerException; - } - - Logger.LogError(ex, "Error when calling method subscription with hash {Hash}", hash); - } - } - - private void CallClientMethodWithDictionary(BinaryReader reader, float packetTime, object? subscriptionTarget, - EntityMethodDefinition methodDefinition, string hash, MethodBase methodInfo, MethodSubscriptionAttribute attribute) - { - if (!ValidateParameterTypes(methodDefinition, methodInfo, attribute)) - { - return; + subscriptionTarget.CallSubscription(hash, this, packetTime, arguments); } - - try + catch (Exception exception) { - IEnumerable methodArgumentValues = new object[] { methodDefinition.Arguments.ToDictionary(a => a.Name, a => a.GetValue(reader)) }; - - if (attribute.IncludePacketTime) + if (exception is CveSecurityException) { - methodArgumentValues = methodArgumentValues.Prepend(packetTime); + throw; } - if (attribute.IncludeEntity) + if (exception is ArgumentOutOfRangeException or InvalidCastException) { - methodArgumentValues = methodArgumentValues.Prepend(this); + var expectedParameters = methodDefinition.Arguments.Select(a => new { Type = a.DataType.ClrType, a.Name }) + .ToArray(); + + Logger.LogError(exception, """ + Arguments of method definition and method subscription do not match + Entity Name: {entityName} + Method Name: {methodName} + Expected Parameters: {expectedParameters} + """, + Name, + methodDefinition.Name, + string.Join(", ", expectedParameters.Select(t => $"{t.Type.Name} {t.Name}"))); } - - Logger.LogDebug("Calling method subscription with hash {Hash}", hash); - methodInfo.Invoke(subscriptionTarget, methodArgumentValues.ToArray()); - } - catch (Exception ex) - { - if (ex.InnerException is CveSecurityException) + else { - throw ex.InnerException; + Logger.LogError(exception, "Error when calling method subscription with hash {Hash}", hash); } - - Logger.LogError(ex, "Error when calling method subscription with hash {Hash}", hash); } } - private bool ValidateParameterTypes(EntityMethodDefinition methodDefinition, MethodBase methodInfo, MethodSubscriptionAttribute attribute) - { - Type[] actualParameterTypes = methodInfo.GetParameters().Select(p => p.ParameterType).ToArray(); - var expectedParameterTypes = new[] - { - attribute.IncludeEntity ? new { Type = typeof(Entity), Name = "entity" } : null, - attribute.IncludePacketTime ? new { Type = typeof(float), Name = "packetTime" } : null - }; - - if (attribute.ParamsAsDictionary) - { - expectedParameterTypes = expectedParameterTypes.Append(new { Type = typeof(Dictionary), Name = "arguments" }) - .Where(t => t is not null) - .ToArray(); - } - else - { - expectedParameterTypes = expectedParameterTypes - .Concat(methodDefinition.Arguments.Select(a => new { Type = a.DataType.ClrType, a.Name })) - .Where(t => t is not null) - .ToArray(); - } - - if (!actualParameterTypes.SequenceEqual(expectedParameterTypes.Select(t => t!.Type))) - { - StringBuilder sb = new StringBuilder("Arguments of method definition and method subscription do not match") - .AppendLine() - .Append("Method Name: ") - .AppendLine(methodDefinition.Name) - .Append("Subscription Name: ") - .AppendLine(methodInfo.Name) - .Append("Expected Arguments: ") - .AppendLine(string.Join(", ", expectedParameterTypes.Select((t, i) => $"{t!.Type.Name} {t.Name}"))) - .Append("Actual Parameters: ") - .AppendLine(string.Join(", ", methodInfo.GetParameters().Select(a => $"{a.ParameterType.Name} {a.Name}"))); - Logger.LogError(sb.ToString()); - - return false; - } - - return true; - } - /// /// Sets a client property's value by its exposed index. /// /// Exposed index of the property. /// Binary reader to read the value from. /// Target object to set the property on. - public virtual void SetClientProperty(uint index, BinaryReader reader, object? subscriptionTarget) + public virtual void SetClientProperty(uint index, BinaryReader reader, IReplayController subscriptionTarget) { Logger.LogDebug("Setting client property with index {Index} on entity {Name} ({Id})", index, Name, Id); PropertyDefinition propertyDefinition = ClientPropertyDefinitions[index]; object? propertyValue = propertyDefinition.GetValue(reader, propertyDefinition.XmlNode); ClientProperties[propertyDefinition.Name] = propertyValue; - if (subscriptionTarget is null) + string hash = $"{Name}_{propertyDefinition.Name}"; + try { - return; + subscriptionTarget.PropertyChanged(hash, this, propertyValue); } - - string hash = $"{Name}_{propertyDefinition.Name}"; - - if (PropertyChangedSubscriptions.TryGetValue(hash, out MethodInfo[]? methodInfos)) + catch (Exception exception) { - foreach (MethodInfo methodInfo in methodInfos) + if (exception is CveSecurityException) { - ParameterInfo[] methodParameters = methodInfo.GetParameters(); - - if (methodParameters.Length is not 2 - || methodParameters[0].ParameterType != typeof(Entity) - || methodParameters[1].ParameterType != propertyDefinition.DataType.ClrType - ) - { - StringBuilder sb = new StringBuilder("Arguments of property definition and property changed subscription does not match") - .AppendLine() - .Append("Property Name: ") - .AppendLine(propertyDefinition.Name) - .Append("Subscription Name: ") - .AppendLine(methodInfo.Name) - .Append("Expected Arguments: ") - .AppendLine($"Entity entity, {propertyDefinition.DataType.ClrType.Name} value") - .Append("Actual Parameters: ") - .AppendLine(string.Join(", ", methodParameters.Select(a => $"{a.ParameterType.Name} {a.Name}"))); - Logger.LogError(sb.ToString()); - - return; - } - - try - { - Logger.LogDebug("Calling property changed subscription with hash {Hash}", hash); - methodInfo.Invoke(subscriptionTarget, new[] { this, propertyValue }); - } - catch (Exception ex) - { - Logger.LogError(ex, "Error when calling property changed subscription with hash {Hash}", hash); - } + throw; + } + + if (exception is InvalidCastException) + { + Logger.LogError(exception, """ + Parameter type of property changed subscription does not match + Entity Name: {entityName} + Method Name: {methodName} + Expected Parameter: {expectedParameter} + """, + Name, + propertyDefinition.Name, propertyDefinition.DataType.ClrType); + } + else + { + Logger.LogError(exception, "Error when calling property subscription with hash {Hash}", hash); } } } @@ -476,7 +345,7 @@ public virtual void SetInternalClientProperties(BinaryReader reader) public void SetPosition(PositionContainer position) { VPosition = position.Position; - + (Pitch, Yaw, Roll) = (position.Pitch, position.Yaw, position.Roll); } diff --git a/Nodsoft.WowsReplaysUnpack.Core/Entities/ISerializableEntity.cs b/Nodsoft.WowsReplaysUnpack.Core/Entities/ISerializableEntity.cs new file mode 100644 index 0000000..bc01f9b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Entities/ISerializableEntity.cs @@ -0,0 +1,6 @@ +namespace Nodsoft.WowsReplaysUnpack.Core.Entities; + +public interface ISerializableEntity +{ + void SetProperty(string name, object? value, int[] indexes); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Entities/MethodSubscriptionAttribute.cs b/Nodsoft.WowsReplaysUnpack.Core/Entities/MethodSubscriptionAttribute.cs index bc0383a..1feceb7 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Entities/MethodSubscriptionAttribute.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Entities/MethodSubscriptionAttribute.cs @@ -1,32 +1,35 @@ -namespace Nodsoft.WowsReplaysUnpack.Core.Entities; +using System.Diagnostics; + +namespace Nodsoft.WowsReplaysUnpack.Core.Entities; /// /// Defines a method subscription for entity events. /// [AttributeUsage(AttributeTargets.Method)] +[Conditional("NODSOFT_GENERATORS_USAGES")] public sealed class MethodSubscriptionAttribute : Attribute { /// /// Name of the entity. /// public string EntityName { get; } - + /// /// Name of the entity's method. /// public string MethodName { get; } - + /// /// Whether method parameters should be passed as a dictionary. /// public bool ParamsAsDictionary { get; set; } - + /// /// Whether entity information should be included. /// public bool IncludeEntity { get; set; } - + /// /// Whether packet time should be included. /// diff --git a/Nodsoft.WowsReplaysUnpack.Core/Models/ArenaInfo.cs b/Nodsoft.WowsReplaysUnpack.Core/Models/ArenaInfo.cs index 92e29cd..d9624dc 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Models/ArenaInfo.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Models/ArenaInfo.cs @@ -1,58 +1,155 @@ -namespace Nodsoft.WowsReplaysUnpack.Core.Models; +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Json; +using System.Text.Json.Serialization; + +namespace Nodsoft.WowsReplaysUnpack.Core.Models; /// /// The structure if the ArenaInfo property of a replay. /// -/// The match group of the replay, for example pvp. -/// The numeric identifier for the game mode of the replay. -/// The client version from the game executable. -/// The numeric id of the current map. -/// The client version from the xml specification. -/// Weather parameters affecting the current game. -/// The number of players per team. -/// The maximum duration of the game in seconds. -/// The subtype of the game mode, for example Domination. -/// The name of the game, for example 12x12. -/// The specific game scenario, like Domination_3point. -/// A list of all ships and players that are part of the replay. -/// A string representing the game mode, for example RandomBattle. -/// The date when the battle started. In format 'dd.MM.yyyy HH:mm:ss'. -/// The name of the player. -/// The ID of the game scenario. -/// The number of teams in the game. This considers the actual teams, not divisions. -/// The type of the game mode, usually the same as . -/// The internal name of the ship, underscores of the internal name are replaced by hyphens. -/// The maximum duration of the game in seconds, usually the same as . -public sealed record ArenaInfo( - string MatchGroup, - uint GameMode, - string ClientVersionFromExe, - uint MapId, - string ClientVersionFromXml, - Dictionary> WeatherParams, - int PlayersPerTeam, - int Duration, - string? GameLogic, - string Name, - string Scenario, - List Vehicles, - string GameType, - DateTime DateTime, - string PlayerName, - int ScenarioConfigId, - int TeamsCount, - string? Logic, - string PlayerVehicle, - int BattleDuration, - object[]? DisabledShipClasses, - object? MapBorder -); +[PublicAPI] +public sealed class ArenaInfo +{ + public ArenaInfo(string matchGroup, + uint gameMode, + string clientVersionFromExe, + uint mapId, + string clientVersionFromXml, + Dictionary> weatherParams, + int playersPerTeam, + int duration, + string? gameLogic, + string name, + string scenario, + List vehicles, + string gameType, + DateTime dateTime, + string playerName, + int scenarioConfigId, + int teamsCount, + string? logic, + string playerVehicle, + int battleDuration, + object[]? disabledShipClasses, + object? mapBorder) + { + MatchGroup = matchGroup; + GameMode = gameMode; + ClientVersionFromExe = clientVersionFromExe; + MapId = mapId; + ClientVersionFromXml = clientVersionFromXml; + WeatherParams = weatherParams; + PlayersPerTeam = playersPerTeam; + Duration = duration; + GameLogic = gameLogic; + Name = name; + Scenario = scenario; + Vehicles = vehicles; + GameType = gameType; + DateTime = dateTime; + PlayerName = playerName; + ScenarioConfigId = scenarioConfigId; + TeamsCount = teamsCount; + Logic = logic; + PlayerVehicle = playerVehicle; + BattleDuration = battleDuration; + DisabledShipClasses = disabledShipClasses; + MapBorder = mapBorder; + + ClientVersion = Version.Parse(string.Join('.', ClientVersionFromExe.Split(',')[..3])); + } + + /// The match group of the replay, for example pvp. + public string MatchGroup { get; } + + /// The numeric identifier for the game mode of the replay. + public uint GameMode { get; } + + /// The client version from the game executable. + public string ClientVersionFromExe { get; } + + /// The numeric id of the current map. + public uint MapId { get; } + + /// The client version from the xml specification. + public string ClientVersionFromXml { get; } + + /// Weather parameters affecting the current game. + public Dictionary> WeatherParams { get; } + + /// The number of players per team. + public int PlayersPerTeam { get; } + + /// The maximum duration of the game in seconds. + public int Duration { get; } + + /// The subtype of the game mode, for example Domination. + public string? GameLogic { get; } + + /// The name of the game, for example 12x12. + public string Name { get; } + + /// The specific game scenario, like Domination_3point. + public string Scenario { get; } + + /// A list of all ships and players that are part of the replay. + public List Vehicles { get; } + + /// A string representing the game mode, for example RandomBattle. + public string GameType { get; } + + /// The date when the battle started. In format 'dd.MM.yyyy HH:mm:ss'. + [JsonConverter(typeof(ReplayDateTimeJsonConverter))] + public DateTime DateTime { get; } + + /// The name of the player. + public string PlayerName { get; } + + /// The ID of the game scenario. + public int ScenarioConfigId { get; } + + /// The number of teams in the game. This considers the actual teams, not divisions. + public int TeamsCount { get; } + + /// The type of the game mode, usually the same as . + public string? Logic { get; } + + /// The internal name of the ship, underscores of the internal name are replaced by hyphens. + public string PlayerVehicle { get; } + + /// The maximum duration of the game in seconds, usually the same as . + public int BattleDuration { get; } + + public object[]? DisabledShipClasses { get; } + public object? MapBorder { get; } + + /// The parsed client version + public Version ClientVersion { get; } +} /// /// Represents a vehicle in the replay. /// -/// The numeric ID of the ship. -/// The relation of the ship to the player. -/// The numeric ID of the player. -/// The name of the player. -public sealed record VehicleDetails(uint ShipId, uint Relation, uint Id, string Name); \ No newline at end of file +[PublicAPI] +public sealed class VehicleDetails +{ + public VehicleDetails(uint shipId, uint relation, uint id, string name) + { + ShipId = shipId; + Relation = relation; + Id = id; + Name = name; + } + + /// The numeric ID of the ship. + public uint ShipId { get; } + + /// The relation of the ship to the player. + public uint Relation { get; } + + /// The numeric ID of the player. + public uint Id { get; } + + /// The name of the player. + public string Name { get; } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Models/JsonSerializerContext.cs b/Nodsoft.WowsReplaysUnpack.Core/Models/JsonSerializerContext.cs new file mode 100644 index 0000000..47b2e55 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Core/Models/JsonSerializerContext.cs @@ -0,0 +1,10 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Nodsoft.WowsReplaysUnpack.Core.Models; + +[JsonSerializable(typeof(ArenaInfo))] +[JsonSerializable(typeof(JsonElement?))] +public partial class UnpackerJsonSerializerContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Core/Models/UnpackedReplay.cs b/Nodsoft.WowsReplaysUnpack.Core/Models/UnpackedReplay.cs index 8a203ba..94d97f1 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Models/UnpackedReplay.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Models/UnpackedReplay.cs @@ -1,4 +1,5 @@ -using Nodsoft.WowsReplaysUnpack.Core.Entities; +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Entities; using System.Text.Json; namespace Nodsoft.WowsReplaysUnpack.Core.Models; @@ -6,18 +7,19 @@ namespace Nodsoft.WowsReplaysUnpack.Core.Models; /// /// Represents an unpacked replay file. /// -public record UnpackedReplay +[PublicAPI] +public class UnpackedReplay { /// /// Game client version. /// - public Version ClientVersion { get; } - + public Version ClientVersion { get; init; } = null!; + /// /// Arena info associated to the replay. /// Contains useful information about the battle that took place. /// - public ArenaInfo ArenaInfo { get; } + public ArenaInfo ArenaInfo { get; init; } = null!; /// /// Additional info about the replay. @@ -38,10 +40,4 @@ public record UnpackedReplay /// Name of the map the replay was played on. /// public string? MapName { get; set; } - - public UnpackedReplay(ArenaInfo arenaInfo) - { - ArenaInfo = arenaInfo; - ClientVersion = Version.Parse(string.Join('.', ArenaInfo.ClientVersionFromExe.Split(',')[..3])); - } } diff --git a/Nodsoft.WowsReplaysUnpack.Core/Network/NetworkPacketTypes.cs b/Nodsoft.WowsReplaysUnpack.Core/Network/NetworkPacketTypes.cs index 09706e3..a86438d 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Network/NetworkPacketTypes.cs +++ b/Nodsoft.WowsReplaysUnpack.Core/Network/NetworkPacketTypes.cs @@ -1,11 +1,11 @@ -using System.Diagnostics.CodeAnalysis; -using System.Reflection; +using JetBrains.Annotations; namespace Nodsoft.WowsReplaysUnpack.Core.Network; /// /// Type definitions and utilities for working with network packets. /// +[PublicAPI] public static class NetworkPacketTypes { public static IReadOnlyDictionary BasePackets { get; } = new Dictionary @@ -46,6 +46,7 @@ public static class NetworkPacketTypes /// Gets the name of a network packet type by its ID. /// /// The ID of the packet type. + /// The game version /// The name of the packet type. public static string GetTypeName(uint id, Version version) =>(version switch { diff --git a/Nodsoft.WowsReplaysUnpack.Core/Nodsoft.WowsReplaysUnpack.Core.csproj b/Nodsoft.WowsReplaysUnpack.Core/Nodsoft.WowsReplaysUnpack.Core.csproj index e61cd0a..2869a47 100644 --- a/Nodsoft.WowsReplaysUnpack.Core/Nodsoft.WowsReplaysUnpack.Core.csproj +++ b/Nodsoft.WowsReplaysUnpack.Core/Nodsoft.WowsReplaysUnpack.Core.csproj @@ -2,13 +2,14 @@ Library - net6.0 + net8.0 enable enable - + + diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs index 6c0b34c..e4e59a8 100644 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs @@ -1,104 +1,100 @@ +using JetBrains.Annotations; using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Controllers; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Core.Entities; -using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; using Nodsoft.WowsReplaysUnpack.ExtendedData.VersionMappings; +using Nodsoft.WowsReplaysUnpack.Generators; using Razorvine.Pickle; using System.Collections; using System.Reflection; -namespace Nodsoft.WowsReplaysUnpack.ExtendedData +namespace Nodsoft.WowsReplaysUnpack.ExtendedData; + +[PublicAPI] +public class ExtendedDataController : ExtendedDataController { - /// - /// Defines a non-generic implementation of the . - /// - public sealed class ExtendedDataController : ExtendedDataController + public ExtendedDataController(VersionMappingFactory versionMappingFactory, + IDefinitionStore definitionStore, ILogger entityLogger) : base(versionMappingFactory, + definitionStore, entityLogger) { - // ReSharper disable once ContextualLoggerProblem - public ExtendedDataController(VersionMappingFactory versionMappingFactory, IDefinitionStore definitionStore, ILogger entityLogger) - : base(versionMappingFactory, definitionStore, entityLogger) { } } +} - public class ExtendedDataController : ReplayControllerBase - where TController : class, IReplayController - { - private readonly VersionMappingFactory _versionMappingFactory; - - static ExtendedDataController() => Unpickler.registerConstructor("CamouflageInfo", "CamouflageInfo", new CamouflageInfo()); +[ReplayController] +[PublicAPI] +public partial class ExtendedDataController : ReplayControllerBase + where TReplay : ExtendedDataReplay, new() +{ + private readonly VersionMappingFactory _versionMappingFactory; - public ExtendedDataController(VersionMappingFactory versionMappingFactory, IDefinitionStore definitionStore, ILogger entityLogger) - : base(definitionStore, entityLogger) - => _versionMappingFactory = versionMappingFactory; + static ExtendedDataController() => + Unpickler.registerConstructor("CamouflageInfo", "CamouflageInfo", new CamouflageInfo()); - public ExtendedDataReplay ExtendedReplay => (ExtendedDataReplay)Replay; + public ExtendedDataController(VersionMappingFactory versionMappingFactory, IDefinitionStore definitionStore, + ILogger entityLogger) + : base(definitionStore, entityLogger) + => _versionMappingFactory = versionMappingFactory; - /// - public override UnpackedReplay CreateUnpackedReplay(ArenaInfo arenaInfo) - { - Replay = new ExtendedDataReplay(arenaInfo); + /// + /// Triggered when a chat message is parsed from the replay. + /// + /// The time the packet was received. + /// The entity ID of the player who sent the message. + /// The message group of the message (All/). + /// The content of the message. + /// Parameter unused + [MethodSubscription("Avatar", "onChatMessage", IncludePacketTime = true)] + private void AvatarOnChatMessage(float packetTime, int entityId, string messageGroup, string messageContent, + string reserved1) + { + Replay.ChatMessages.Add(new((uint)entityId, packetTime, messageGroup, messageContent)); + } - return Replay; - } + /// + /// Triggered when arena data is parsed from the replay. + /// + /// The arguments of the event. + [MethodSubscription("Avatar", "onArenaStateReceived", ParamsAsDictionary = true)] + public void OnArenaStateReceived(Dictionary arguments) + { + byte[]? playerStatesData = (byte[]?)arguments["playersStates"]; - /// - /// Triggered when a chat message is parsed from the replay. - /// - /// The time the packet was received. - /// The entity ID of the player who sent the message. - /// The message group of the message (All/). - /// The content of the message. - /// Parameter unused - [MethodSubscription("Avatar", "onChatMessage", IncludePacketTime = true)] - public void OnChatMessage(float packetTime, int entityId, string messageGroup, string messageContent, string reserved1) + if (playerStatesData is null) { - ExtendedReplay.ChatMessages.Add(new((uint)entityId, packetTime, messageGroup, messageContent)); + return; } - /// - /// Triggered when arena data is parsed from the replay. - /// - /// The arguments of the event. - [MethodSubscription("Avatar", "onArenaStateReceived", ParamsAsDictionary = true)] - public void OnArenaStateReceived(Dictionary arguments) - { - byte[]? playerStatesData = (byte[]?)arguments["playersStates"]; - - if (playerStatesData is null) - { - return; - } + using Unpickler unpickler = new(); + using MemoryStream memoryStream = new(playerStatesData); + ArrayList players = unpickler.load(memoryStream) as ArrayList ?? new(); - using Unpickler unpickler = new(); - using MemoryStream memoryStream = new(playerStatesData); - ArrayList players = unpickler.load(memoryStream) as ArrayList ?? new(); - - foreach (ArrayList player in players) - { - AddPlayerToReplay(player); - } + foreach (ArrayList player in players) + { + AddPlayerToReplay(player); } + } + + private void AddPlayerToReplay(ArrayList properties) + { + IVersionMapping mapping = _versionMappingFactory.GetMappings(Replay.ClientVersion); + ReplayPlayer replayPlayer = new(mapping.ShipConfigMapping); - private void AddPlayerToReplay(ArrayList properties) + foreach (object[] propertyArray in properties) { - IVersionMapping mapping = _versionMappingFactory.GetMappings(Replay!.ClientVersion); - ReplayPlayer replayPlayer = new(mapping.ShipConfigMapping); + string? propertyName = mapping.ReplayPlayerPropertyMappings.GetValueOrDefault((int)propertyArray[0]); - foreach (object[] propertyArray in properties) + if (string.IsNullOrEmpty(propertyName)) { - string? propertyName = mapping.ReplayPlayerPropertyMappings.GetValueOrDefault((int)propertyArray[0]); - - if (string.IsNullOrEmpty(propertyName)) - { - continue; - } - - PropertyInfo? propertyInfo = ReplayPlayer.PropertyInfos.SingleOrDefault(x => x.Name == propertyName); - propertyInfo?.SetValue(replayPlayer, Convert.ChangeType(propertyArray[1], propertyInfo.PropertyType), null); + continue; } - ExtendedReplay.ReplayPlayers.Add(replayPlayer); + PropertyInfo? propertyInfo = ReplayPlayer.PropertyInfos.SingleOrDefault(x => x.Name == propertyName); + propertyInfo?.SetValue(replayPlayer, Convert.ChangeType(propertyArray[1], propertyInfo.PropertyType), + null); } + + Replay.ReplayPlayers.Add(replayPlayer); } } \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/Extensions.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/Extensions.cs deleted file mode 100644 index b73f683..0000000 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/Extensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Nodsoft.WowsReplaysUnpack.Services; - -namespace Nodsoft.WowsReplaysUnpack.ExtendedData; - -public static class Extensions -{ - /// - /// Gets the extended data unpacker service from a . - /// - /// The factory. - /// The extended data unpacker service. - public static IReplayUnpackerService GetExtendedDataUnpacker(this ReplayUnpackerFactory factory) => factory.GetUnpacker(); -} diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ExtendedDataReplay.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ExtendedDataReplay.cs index 7e9e9d7..e722939 100644 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ExtendedDataReplay.cs +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ExtendedDataReplay.cs @@ -1,11 +1,11 @@ -using Nodsoft.WowsReplaysUnpack.Core.Models; +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Models; namespace Nodsoft.WowsReplaysUnpack.ExtendedData.Models; -public record ExtendedDataReplay : UnpackedReplay +[PublicAPI] +public class ExtendedDataReplay : UnpackedReplay { - public ExtendedDataReplay(ArenaInfo arenaInfo) : base(arenaInfo) { } - public List ReplayPlayers { get; } = new(); public List ChatMessages { get; } = new(); } \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ReplayPlayer.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ReplayPlayer.cs index b70f8db..047cd10 100644 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ReplayPlayer.cs +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/Models/ReplayPlayer.cs @@ -5,8 +5,20 @@ namespace Nodsoft.WowsReplaysUnpack.ExtendedData.Models; +// TODO: Source Gen public record ReplayPlayer { + // // Source Gen + // static void SetProperty(ReplayPlayer player, string name, object value) + // { + // switch (name) + // { + // case "AccountId" when value is uint v1: + // player.AccountId = v1; + // break; + // } + // } + public static IEnumerable PropertyInfos { get; } = typeof(ReplayPlayer).GetProperties(); public uint AccountId { get; set; } @@ -90,7 +102,7 @@ public record ReplayPlayer * FIXME: This is a hack to get replays to parse correctly post 0.11.11+. * No idea what it is for now, my assumption was on the new Key Target / Cookie feature. */ - public object IsCookie { get; set; } + public object? IsCookie { get; set; } public ReplayPlayer(ShipConfigMapping shipConfigMapping) { diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj b/Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj index 64b904f..d069df3 100644 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/Nodsoft.WowsReplaysUnpack.ExtendedData.csproj @@ -2,17 +2,20 @@ Library - net6.0 + net8.0 enable enable + true - + + diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/ReplayUnpackerFactoryExtensions.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/ReplayUnpackerFactoryExtensions.cs new file mode 100644 index 0000000..55ca50b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/ReplayUnpackerFactoryExtensions.cs @@ -0,0 +1,15 @@ +using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; +using Nodsoft.WowsReplaysUnpack.Services; + +namespace Nodsoft.WowsReplaysUnpack.ExtendedData; + +public static class ReplayUnpackerFactoryExtensions +{ + /// + /// Gets the extended data unpacker service from a . + /// + /// The factory. + /// The extended data unpacker service. + public static IReplayUnpackerService GetExtendedDataUnpacker(this IReplayUnpackerFactory factory) => factory + .GetUnpacker(); +} diff --git a/Nodsoft.WowsReplaysUnpack.ExtendedData/ServiceCollectionExtensions.cs b/Nodsoft.WowsReplaysUnpack.ExtendedData/ServiceCollectionExtensions.cs index 6ca36e9..0ee3dca 100644 --- a/Nodsoft.WowsReplaysUnpack.ExtendedData/ServiceCollectionExtensions.cs +++ b/Nodsoft.WowsReplaysUnpack.ExtendedData/ServiceCollectionExtensions.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.DependencyInjection; +using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; using Nodsoft.WowsReplaysUnpack.ExtendedData.VersionMappings; -using static Nodsoft.WowsReplaysUnpack.ServiceCollectionExtensions; namespace Nodsoft.WowsReplaysUnpack.ExtendedData; @@ -16,7 +16,7 @@ public static class ServiceCollectionExtensions /// The replay unpacker builder. public static ReplayUnpackerBuilder AddExtendedData(this ReplayUnpackerBuilder builder) { - builder.AddReplayController(); + builder.AddReplayController(); builder.Services.AddSingleton(); foreach (Type? versionMappingType in VersionMappingFactory.VersionMappingTypes) diff --git a/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoader.cs b/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoader.cs index bec5271..605fc6a 100644 --- a/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoader.cs +++ b/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoader.cs @@ -1,6 +1,6 @@ -using Microsoft.Extensions.Options; +using JetBrains.Annotations; +using Microsoft.Extensions.Options; using Nodsoft.WowsReplaysUnpack.Core.Definitions; -using System.Runtime.CompilerServices; using System.Xml; namespace Nodsoft.WowsReplaysUnpack.FileStore.Definitions; @@ -8,13 +8,12 @@ namespace Nodsoft.WowsReplaysUnpack.FileStore.Definitions; /// /// Provides a definition loader using the filesystem as a backing store. /// +[PublicAPI] public class FileSystemDefinitionLoader : IDefinitionLoader { - private static readonly XmlReaderSettings _xmlReaderSettings = new() - { - IgnoreComments = true - }; - + private static readonly object _lockObject = new(); + private static readonly XmlReaderSettings _xmlReaderSettings = new() { IgnoreComments = true }; + private readonly IOptionsMonitor _options; public FileSystemDefinitionLoader(IOptionsMonitor options) @@ -25,19 +24,26 @@ public FileSystemDefinitionLoader(IOptionsMonitor public XmlDocument GetFileAsXml(Version clientVersion, string name, params string[] directoryNames) { - string path = Path.Combine(_options.CurrentValue.RootDirectory, clientVersion.ToString().Replace('.', '_'), "scripts", Path.Combine(directoryNames), name); - + string path = Path.Combine(_options.CurrentValue.RootDirectory, clientVersion.ToString().Replace('.', '_'), + "scripts", Path.Combine(directoryNames), name); + if (!File.Exists(path)) { throw new FileNotFoundException($"Could not find definition file {name} in {path}"); } - using Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); - - // Use an XmlReader to load the file, as it is more efficient than loading the entire file into memory. - using XmlReader reader = XmlReader.Create(stream, _xmlReaderSettings); XmlDocument document = new(); - document.Load(reader); + + // This lock is not an issue because this method is only called once for the first time a definition is required + // Subsequent calls are cached in the DefaultDefinitionStore + lock (_lockObject) + { + using Stream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); + // Use an XmlReader to load the file, as it is more efficient than loading the entire file into memory. + using XmlReader reader = XmlReader.Create(stream, _xmlReaderSettings); + document.Load(reader); + } + return document; } @@ -51,7 +57,7 @@ public Version[] GetSupportedVersions() .Select(static dir => new Version(dir.Name.Replace('_', '.'))) .OrderByDescending(static version => version) .ToArray(); - + return versions; } } \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoaderOptions.cs b/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoaderOptions.cs index cf32637..0e2afdf 100644 --- a/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoaderOptions.cs +++ b/Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoaderOptions.cs @@ -8,7 +8,7 @@ public class FileSystemDefinitionLoaderOptions /// /// Gets or sets the path to the directory containing the definitions. /// - public string RootDirectory { get; set; } + public required string RootDirectory { get; set; } /// /// Gets or sets whether the loader should poll the filesystem for changes. diff --git a/Nodsoft.WowsReplaysUnpack.FileStore/Nodsoft.WowsReplaysUnpack.FileStore.csproj b/Nodsoft.WowsReplaysUnpack.FileStore/Nodsoft.WowsReplaysUnpack.FileStore.csproj index 692e682..8ff765d 100644 --- a/Nodsoft.WowsReplaysUnpack.FileStore/Nodsoft.WowsReplaysUnpack.FileStore.csproj +++ b/Nodsoft.WowsReplaysUnpack.FileStore/Nodsoft.WowsReplaysUnpack.FileStore.csproj @@ -2,7 +2,7 @@ Library - net6.0 + net8.0 enable enable @@ -12,7 +12,7 @@ - + diff --git a/Nodsoft.WowsReplaysUnpack.Generators/EquitableArray.cs b/Nodsoft.WowsReplaysUnpack.Generators/EquitableArray.cs new file mode 100644 index 0000000..3c3b3ba --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/EquitableArray.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Immutable; + +namespace Nodsoft.WowsReplaysUnpack.Generators; + +public readonly struct EquatableArray : IEquatable>, IEnumerable + where T : IEquatable +{ + /// + /// The underlying array. + /// + private readonly T[]? _array; + + /// + /// Creates a new instance. + /// + /// The input to wrap. + public EquatableArray(T[] array) + { + _array = array; + } + + /// + public bool Equals(EquatableArray array) + { + return AsSpan().SequenceEqual(array.AsSpan()); + } + + /// + public override bool Equals(object? obj) + { + return obj is EquatableArray array && Equals(this, array); + } + + /// + public override int GetHashCode() + { + if (_array is not T[] array) + { + return 0; + } + + HashCode hashCode = default; + + foreach (T item in array) + { + hashCode.Add(item); + } + + return hashCode.ToHashCode(); + } + + /// + /// Returns a wrapping the current items. + /// + /// A wrapping the current items. + public ReadOnlySpan AsSpan() + { + return _array.AsSpan(); + } + + /// + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)(_array ?? Array.Empty())).GetEnumerator(); + } + + /// + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)(_array ?? Array.Empty())).GetEnumerator(); + } + + public int Count => _array?.Length ?? 0; + + /// + /// Checks whether two values are the same. + /// + /// The first value. + /// The second value. + /// Whether and are equal. + public static bool operator ==(EquatableArray left, EquatableArray right) + { + return left.Equals(right); + } + + /// + /// Checks whether two values are not the same. + /// + /// The first value. + /// The second value. + /// Whether and are not equal. + public static bool operator !=(EquatableArray left, EquatableArray right) + { + return !left.Equals(right); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/Extensions.cs b/Nodsoft.WowsReplaysUnpack.Generators/Extensions.cs new file mode 100644 index 0000000..ef3ea76 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/Extensions.cs @@ -0,0 +1,49 @@ +using Microsoft.CodeAnalysis; +using System.Collections.Immutable; + +namespace Nodsoft.WowsReplaysUnpack.Generators; + +public static class Extensions +{ + public static bool GetBoolValue(this ImmutableDictionary dictionary, string name) + { + if (dictionary.TryGetValue(name, out TypedConstant constant) && constant.Value is bool value) + { + return value; + } + + return false; + } + + public static int? GetIntValue(this ImmutableDictionary dictionary, string name) + { + if (dictionary.TryGetValue(name, out TypedConstant constant) && constant.Value is int value) + { + return value; + } + + return null; + } + + public static string? GetStringValue(this ImmutableDictionary dictionary, string name) + { + if (dictionary.TryGetValue(name, out TypedConstant constant) && constant.Value is string value) + { + return value; + } + + return null; + } + + public static string GetTypeName(this IParameterSymbol parameterSymbol) => parameterSymbol.Type.GetTypeName(); + + public static string GetTypeName(this ITypeSymbol typeSymbol) + { + if (typeSymbol is INamedTypeSymbol { IsGenericType: true, Name: "Nullable" } namedTypeSymbol) + { + return namedTypeSymbol.TypeArguments[0].Name + "?"; + } + + return typeSymbol.Name; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/HashCode.cs b/Nodsoft.WowsReplaysUnpack.Generators/HashCode.cs new file mode 100644 index 0000000..68dfb95 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/HashCode.cs @@ -0,0 +1,183 @@ +using System; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; + +namespace Nodsoft.WowsReplaysUnpack.Generators; + +/// +/// A polyfill type that mirrors some methods from on .NET 6. +/// +internal struct HashCode +{ + private const uint Prime1 = 2654435761U; + private const uint Prime2 = 2246822519U; + private const uint Prime3 = 3266489917U; + private const uint Prime4 = 668265263U; + private const uint Prime5 = 374761393U; + + private static readonly uint seed = GenerateGlobalSeed(); + + private uint v1, v2, v3, v4; + private uint queue1, queue2, queue3; + private uint length; + + /// + /// Initializes the default seed. + /// + /// A random seed. + private static uint GenerateGlobalSeed() + { + byte[] bytes = new byte[4]; + + using (RandomNumberGenerator generator = RandomNumberGenerator.Create()) + { + generator.GetBytes(bytes); + } + + return BitConverter.ToUInt32(bytes, 0); + } + + /// + /// Adds a single value to the current hash. + /// + /// The type of the value to add into the hash code. + /// The value to add into the hash code. + public void Add(T value) + { + Add(value?.GetHashCode() ?? 0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void Initialize(out uint v1, out uint v2, out uint v3, out uint v4) + { + v1 = seed + Prime1 + Prime2; + v2 = seed + Prime2; + v3 = seed; + v4 = seed - Prime1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint Round(uint hash, uint input) + { + return RotateLeft(hash + input * Prime2, 13) * Prime1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint QueueRound(uint hash, uint queuedValue) + { + return RotateLeft(hash + queuedValue * Prime3, 17) * Prime4; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint MixState(uint v1, uint v2, uint v3, uint v4) + { + return RotateLeft(v1, 1) + RotateLeft(v2, 7) + RotateLeft(v3, 12) + RotateLeft(v4, 18); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint MixEmptyState() + { + return seed + Prime5; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint MixFinal(uint hash) + { + hash ^= hash >> 15; + hash *= Prime2; + hash ^= hash >> 13; + hash *= Prime3; + hash ^= hash >> 16; + + return hash; + } + + private void Add(int value) + { + uint val = (uint)value; + uint previousLength = this.length++; + uint position = previousLength % 4; + + if (position == 0) + { + this.queue1 = val; + } + else if (position == 1) + { + this.queue2 = val; + } + else if (position == 2) + { + this.queue3 = val; + } + else + { + if (previousLength == 3) + { + Initialize(out this.v1, out this.v2, out this.v3, out this.v4); + } + + this.v1 = Round(this.v1, this.queue1); + this.v2 = Round(this.v2, this.queue2); + this.v3 = Round(this.v3, this.queue3); + this.v4 = Round(this.v4, val); + } + } + + /// + /// Gets the resulting hashcode from the current instance. + /// + /// The resulting hashcode from the current instance. + public int ToHashCode() + { + uint length = this.length; + uint position = length % 4; + uint hash = length < 4 ? MixEmptyState() : MixState(this.v1, this.v2, this.v3, this.v4); + + hash += length * 4; + + if (position > 0) + { + hash = QueueRound(hash, this.queue1); + + if (position > 1) + { + hash = QueueRound(hash, this.queue2); + + if (position > 2) + { + hash = QueueRound(hash, this.queue3); + } + } + } + + hash = MixFinal(hash); + + return (int)hash; + } + + /// + [Obsolete("HashCode is a mutable struct and should not be compared with other HashCodes. Use ToHashCode to retrieve the computed hash code.", error: true)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => throw new NotSupportedException(); + + /// + [Obsolete("HashCode is a mutable struct and should not be compared with other HashCodes.", error: true)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object? obj) => throw new NotSupportedException(); + + /// + /// Rotates the specified value left by the specified number of bits. + /// Similar in behavior to the x86 instruction ROL. + /// + /// The value to rotate. + /// The number of bits to rotate by. + /// Any value outside the range [0..31] is treated as congruent mod 32. + /// The rotated value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint RotateLeft(uint value, int offset) + { + return (value << offset) | (value >> (32 - offset)); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/Nodsoft.WowsReplaysUnpack.Generators.csproj b/Nodsoft.WowsReplaysUnpack.Generators/Nodsoft.WowsReplaysUnpack.Generators.csproj new file mode 100644 index 0000000..cd45d00 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/Nodsoft.WowsReplaysUnpack.Generators.csproj @@ -0,0 +1,24 @@ + + + + netstandard2.0 + enable + latest + false + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/Nodsoft.WowsReplaysUnpack.Generators/Properties/launchSettings.json b/Nodsoft.WowsReplaysUnpack.Generators/Properties/launchSettings.json new file mode 100644 index 0000000..76e06c2 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "DebugRoslynSourceGenerator": { + "commandName": "DebugRoslynComponent", + "targetProject": "../Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj" + } + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ControllerToGenerate.cs b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ControllerToGenerate.cs new file mode 100644 index 0000000..0287ef1 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ControllerToGenerate.cs @@ -0,0 +1,24 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators.ReplayController; + +public record struct ControllerToGenerate +{ + public readonly string Name; + public readonly string ClassName; + public readonly string FullyQualifiedName; + public readonly string Namespace; + + public readonly EquatableArray Methods; + public readonly EquatableArray Properties; + + public ControllerToGenerate(string name, string className, string fullyQualifiedName, string @namespace, + MethodSubscriptionData[] methods, + PropertyChangedSubscriptionData[] properties) + { + Name = name; + ClassName = className; + FullyQualifiedName = fullyQualifiedName; + Namespace = @namespace; + Methods = new EquatableArray(methods); + Properties = new EquatableArray(properties); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/MethodSubscriptionData.cs b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/MethodSubscriptionData.cs new file mode 100644 index 0000000..79f0692 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/MethodSubscriptionData.cs @@ -0,0 +1,26 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators.ReplayController; + +public record struct MethodSubscriptionData +{ + public readonly string CallName; + public readonly string EntityName; + public readonly string MethodName; + public readonly bool ParamsAsDictionary; + public readonly bool IncludeEntity; + public readonly bool IncludePacketTime; + public readonly int? Priority; + public EquatableArray ParameterTypes; + + public MethodSubscriptionData(string callName, string entityName, string methodName, bool paramsAsDictionary, + bool includeEntity, bool includePacketTime, int? priority, string[] parameterTypes) + { + CallName = callName; + EntityName = entityName; + MethodName = methodName; + ParamsAsDictionary = paramsAsDictionary; + IncludeEntity = includeEntity; + IncludePacketTime = includePacketTime; + Priority = priority; + ParameterTypes = new EquatableArray(parameterTypes); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/PropertyChangedSubscriptionData.cs b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/PropertyChangedSubscriptionData.cs new file mode 100644 index 0000000..4adb6d2 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/PropertyChangedSubscriptionData.cs @@ -0,0 +1,17 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators.ReplayController; + +public record struct PropertyChangedSubscriptionData +{ + public readonly string CallName; + public readonly string EntityName; + public readonly string PropertyName; + public string ParameterType; + + public PropertyChangedSubscriptionData(string callName, string entityName, string propertyName, string parameterType) + { + CallName = callName; + EntityName = entityName; + PropertyName = propertyName; + ParameterType = parameterType; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerGenerator.cs b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerGenerator.cs new file mode 100644 index 0000000..ca11358 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerGenerator.cs @@ -0,0 +1,138 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Text; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Text; +using System.Threading; + +namespace Nodsoft.WowsReplaysUnpack.Generators.ReplayController; + +[Generator] +public class ReplayControllerGenerator : IIncrementalGenerator +{ + private const string ReplayControllerAttribute = + "Nodsoft.WowsReplaysUnpack.Generators.ReplayControllerAttribute"; + + private const string MethodSubscriptionAttribute = + "Nodsoft.WowsReplaysUnpack.Core.Entities.MethodSubscriptionAttribute"; + public void Initialize(IncrementalGeneratorInitializationContext context) + { + context.RegisterPostInitializationOutput(ctx => ctx.AddSource( + "ReplayControllerAttribute.g.cs", + SourceText.From(SourceGenerationHelper.ReplayControllerAttribute, Encoding.UTF8))); + + IncrementalValuesProvider provider = context.SyntaxProvider + .ForAttributeWithMetadataName(ReplayControllerAttribute, + predicate: (node, _) => node is ClassDeclarationSyntax, + transform: Transform) + .WithTrackingName(TrackingNames.InitialExtraction) + .Where(static c => c is not null) + .WithTrackingName(TrackingNames.RemovingNulls); + + //context.RegisterSourceOutput(context.CompilationProvider.Combine(provider.Collect()), + context.RegisterSourceOutput(provider, (ctx, controllerInput) => + { + if (!controllerInput.HasValue) + { + return; + } + + ctx.AddSource(controllerInput.Value.Name + ".g.cs", + ReplayControllerSourceWriter.Generate(controllerInput.Value)); + }); + } + + private static ControllerToGenerate? Transform(GeneratorAttributeSyntaxContext context, + CancellationToken cancellationToken) + { + if (context.TargetSymbol is not INamedTypeSymbol symbol || + context.TargetNode is not ClassDeclarationSyntax node || !node.Modifiers.Any(t => t.Text is "partial")) + { + return null; + } + + List methodSubscriptions = ExtractMethodSubscriptions(symbol); + List propertyChangedSubscriptions = ExtractPropertyChangedSubscriptions(symbol); + + if (methodSubscriptions.Count is 0 && propertyChangedSubscriptions.Count is 0) + { + return null; + } + + string? fullName = symbol.ToString(); + return new ControllerToGenerate(symbol.Name, fullName.Substring(fullName.LastIndexOf('.') + 1), fullName, + symbol.ContainingNamespace.IsGlobalNamespace ? string.Empty : symbol.ContainingNamespace.ToString(), + [..methodSubscriptions], [..propertyChangedSubscriptions]); + } + + private static List ExtractMethodSubscriptions(INamedTypeSymbol symbol) + { + List subscriptions = new(); + foreach (ISymbol? member in symbol.GetMembers()) + { + if (member is not IMethodSymbol method) + { + continue; + } + + ImmutableArray attributes = method.GetAttributes(); + foreach (AttributeData? attribute in attributes) + { + if (attribute.AttributeClass?.ToString() is not MethodSubscriptionAttribute) + { + continue; + } + + string entityName = (string)attribute.ConstructorArguments[0].Value!; + string methodName = (string)attribute.ConstructorArguments[1].Value!; + + ImmutableDictionary arguments = attribute.NamedArguments.ToImmutableDictionary(); + bool paramsAsDict = arguments.GetBoolValue("ParamsAsDictionary"); + bool includeEntity = arguments.GetBoolValue("IncludeEntity"); + bool includePacketTime = arguments.GetBoolValue("IncludePacketTime"); + int? priority = arguments.GetIntValue("Priority"); + + int skipParams = includeEntity && includePacketTime ? 2 : includeEntity | includePacketTime ? 1 : 0; + string[] parameters = method.Parameters + .Skip(skipParams).Select(Extensions.GetTypeName) + .ToArray(); + + subscriptions.Add(new(method.Name, entityName, methodName, paramsAsDict, includeEntity, + includePacketTime, + priority, parameters)); + } + } + + return subscriptions; + } + + private static List ExtractPropertyChangedSubscriptions(INamedTypeSymbol symbol) + { + List subscriptions = new(); + foreach (ISymbol? member in symbol.GetMembers()) + { + if (member is not IMethodSymbol method) + { + continue; + } + + ImmutableArray attributes = method.GetAttributes(); + foreach (AttributeData? attribute in attributes) + { + string fullName = attribute.AttributeClass!.ContainingNamespace + "." + attribute.AttributeClass.Name; + if (fullName is not "Nodsoft.WowsReplaysUnpack.Core.Entities.PropertyChangedSubscriptionAttribute") + { + continue; + } + + string entityName = (string)attribute.ConstructorArguments[0].Value!; + string propertyName = (string)attribute.ConstructorArguments[1].Value!; + subscriptions.Add(new(method.Name, entityName, propertyName, method.Parameters[1].GetTypeName())); + } + } + + return subscriptions; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerSourceWriter.cs b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerSourceWriter.cs new file mode 100644 index 0000000..cb0c9c0 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/ReplayController/ReplayControllerSourceWriter.cs @@ -0,0 +1,134 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Nodsoft.WowsReplaysUnpack.Generators.ReplayController; + +internal static class ReplayControllerSourceWriter +{ + public static string Generate(ControllerToGenerate controller) + { + IEnumerable> methods = + controller.Methods.GroupBy(m => $"{m.EntityName}_{m.MethodName}"); + + IEnumerable> properties = + controller.Properties.GroupBy(m => $"{m.EntityName}_{m.PropertyName}"); + + StringBuilder sb = new StringBuilder(SourceGenerationHelper.Header).AppendLine(); + sb.AppendLine("using Nodsoft.WowsReplaysUnpack.Core.Entities;"); + sb.Append("namespace ").Append(controller.Namespace).AppendLine(";").AppendLine(); + + sb.Append("public partial class ").Append(controller.ClassName).AppendLine(); + sb.AppendLine("{").AppendLine(); + + bool isBaseController = + controller.FullyQualifiedName is "Nodsoft.WowsReplaysUnpack.Controllers.ReplayControllerBase"; + + string methodModifier = isBaseController ? "virtual" : "override"; + + WriteMethodSubscriptions(sb, methodModifier, isBaseController, methods); + WritePropertyChangedSubscriptions(sb, methodModifier, isBaseController, properties); + + sb.AppendLine("}"); + + return sb.ToString(); + } + + private static void WriteMethodSubscriptions(StringBuilder sb, + string methodModifier, + bool isBaseController, + IEnumerable> methods) + { + sb.AppendLine( + $" public {methodModifier} void CallSubscription(string hash, Entity entity, float packetTime, Dictionary arguments)"); + sb.AppendLine(" {"); + + if (!isBaseController) + { + sb.AppendLine(" base.CallSubscription(hash, entity, packetTime, arguments);"); + } + + sb.AppendLine(" switch (hash)"); + sb.AppendLine(" {"); + + foreach (IGrouping? methodGroup in methods) + { + sb.AppendLine($" case \"{methodGroup.Key}\":"); + foreach (MethodSubscriptionData sub in methodGroup.OrderBy(m => m.Priority ?? 999)) + { + sb.Append(" ").Append(sub.CallName).Append('('); + + if (sub.IncludeEntity) + { + sb.Append("entity, "); + } + + if (sub.IncludePacketTime) + { + sb.Append("packetTime, "); + } + + if (sub.ParamsAsDictionary) + { + sb.AppendLine("arguments);"); + } + else + { + for (int i = 0; i < sub.ParameterTypes.Count; i++) + { + string type = sub.ParameterTypes.ElementAt(i); + string postFix = type.EndsWith("?") ? string.Empty : "!"; + sb.Append($"({sub.ParameterTypes.ElementAt(i)})arguments.Values.ElementAt({i}){postFix}"); + if (i < sub.ParameterTypes.Count - 1) + { + sb.Append(", "); + } + } + + sb.AppendLine(");"); + } + } + + sb.AppendLine(" break;"); + } + + sb.AppendLine(" }"); + sb.AppendLine(" }"); + sb.AppendLine(); + } + + private static void WritePropertyChangedSubscriptions(StringBuilder sb, + string methodModifier, + bool isBaseController, IEnumerable> methods) + { + sb.AppendLine( + $" public {methodModifier} void PropertyChanged(string hash, Entity entity, object? value)"); + sb.AppendLine(" {"); + + if (!isBaseController) + { + sb.AppendLine(" base.PropertyChanged(hash, entity, value);"); + } + + sb.AppendLine(" switch (hash)"); + sb.AppendLine(" {"); + + foreach (IGrouping? methodGroup in methods) + { + sb.AppendLine($" case \"{methodGroup.Key}\":"); + foreach (PropertyChangedSubscriptionData sub in methodGroup) + { + sb.Append(" ").Append(sub.CallName).Append("(entity, "); + string postFix = sub.ParameterType.EndsWith("?") ? string.Empty : "!"; + sb.Append($"({sub.ParameterType})value{postFix}"); + sb.AppendLine(");"); + } + + sb.AppendLine(" break;"); + } + + sb.AppendLine(" }"); + sb.AppendLine(" }"); + sb.AppendLine(); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/EntityToGenerate.cs b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/EntityToGenerate.cs new file mode 100644 index 0000000..3829457 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/EntityToGenerate.cs @@ -0,0 +1,15 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators.SerializableEntity; + +public record struct EntityToGenerate +{ + public readonly string ClassName; + public readonly string Namespace; + public readonly EquatableArray Properties; + + public EntityToGenerate(string className, string ns, PropertyData[] properties) + { + ClassName = className; + Namespace = ns; + Properties = new EquatableArray(properties); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/PropertyData.cs b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/PropertyData.cs new file mode 100644 index 0000000..fc15324 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/PropertyData.cs @@ -0,0 +1,26 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators.SerializableEntity; + +public record struct PropertyData +{ + public readonly string Name; + public readonly string Path; + public readonly string MappedPath; + public readonly bool IsClass; + public readonly bool IsAdd; + public readonly string Type; + public readonly string TypeNamespace; + public readonly int? ListLevel; + + public PropertyData(string name, string path, string mappedPath, bool isClass, string type, string typeNamespace, int? listLevel, bool isAdd = false) + { + Name = name; + Path = path; + MappedPath = mappedPath; + Path = path; + IsClass = isClass; + Type = type; + ListLevel = listLevel; + IsAdd = isAdd; + TypeNamespace = typeNamespace; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntityGenerator.cs b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntityGenerator.cs new file mode 100644 index 0000000..c0760b7 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntityGenerator.cs @@ -0,0 +1,164 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Text; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Text; +using System.Threading; + +namespace Nodsoft.WowsReplaysUnpack.Generators.SerializableEntity; + +[Generator] +public class SerializableEntityGenerator : IIncrementalGenerator +{ + private const string SerializableEntityAttribute = + "Nodsoft.WowsReplaysUnpack.Generators.SerializableEntityAttribute"; + + private const string DataMemberAttribute = "System.Runtime.Serialization.DataMemberAttribute"; + public void Initialize(IncrementalGeneratorInitializationContext context) + { + context.RegisterPostInitializationOutput(ctx => ctx.AddSource( + "SerializableEntityAttribute.g.cs", + SourceText.From(SourceGenerationHelper.SerializableEntityAttribute, Encoding.UTF8))); + + IncrementalValuesProvider provider = context.SyntaxProvider + .ForAttributeWithMetadataName(SerializableEntityAttribute, + predicate: (node, _) => node is ClassDeclarationSyntax, + transform: Transform) + .WithTrackingName(TrackingNames.InitialExtraction) + .Where(static c => c is not null) + .WithTrackingName(TrackingNames.RemovingNulls); + + //context.RegisterSourceOutput(context.CompilationProvider.Combine(provider.Collect()), + context.RegisterSourceOutput(provider, (ctx, entityInput) => + { + if (!entityInput.HasValue) + { + return; + } + + + ctx.AddSource(entityInput.Value.ClassName + ".g.cs", + SerializableEntitySourceWriter.Generate(entityInput.Value)); + }); + } + + private static EntityToGenerate? Transform(GeneratorAttributeSyntaxContext context, + CancellationToken cancellationToken) + { + if (context.TargetSymbol is not INamedTypeSymbol symbol || + context.TargetNode is not ClassDeclarationSyntax node || !node.Modifiers.Any(t => t.Text is "partial")) + { + return null; + } + + PropertyData[] properties = GetPropertiesRecursive(symbol, 0).ToArray(); + return new EntityToGenerate(symbol.Name, symbol.ContainingNamespace.ToString(), properties); + } + + private static IEnumerable GetPropertiesRecursive(INamedTypeSymbol symbol, + int depth, + string? parentPath = null, + string? parentMappedPath = null, + int? listLevel = null, + bool requiresIndex = false) + { + if (depth > 15) + { + yield break; + } + + foreach (ISymbol? member in symbol.GetMembers()) + { + if (member is not IPropertySymbol propertySymbol) + { + continue; + } + + string mappedPropertyPath = + GetMappedPropertyPath(parentMappedPath, listLevel, requiresIndex, propertySymbol); + string propertyPath = GetPropertyPath(parentPath, propertySymbol); + + if (propertySymbol.Type is INamedTypeSymbol { IsReferenceType: true } propertyTypeSymbol) + { + if (propertyTypeSymbol is { IsGenericType: true, Name: "List" }) + { + yield return new PropertyData(propertySymbol.Name, propertyPath, mappedPropertyPath, true, + propertyTypeSymbol.Name, string.Empty, listLevel); + + if (propertyTypeSymbol.TypeArguments[0] is INamedTypeSymbol { IsReferenceType: true } itemSymbol) + { + yield return new PropertyData(propertySymbol.Name, propertyPath + ".#Add", mappedPropertyPath, + true, + itemSymbol.Name, itemSymbol.ContainingNamespace.ToString(), listLevel, true); + + foreach (PropertyData child in GetPropertiesRecursive(itemSymbol, depth++, propertyPath, + mappedPropertyPath, + (listLevel ?? 0) + 1, true)) + { + yield return child; + } + } + else + { + yield return new PropertyData(propertySymbol.Name, propertyPath + ".#Add", mappedPropertyPath, + false, + propertyTypeSymbol.TypeArguments[0].GetTypeName(), + propertyTypeSymbol.TypeArguments[0].ContainingNamespace.ToString(), listLevel, true); + } + } + else + { + yield return new PropertyData(propertySymbol.Name, propertyPath, mappedPropertyPath, true, + propertyTypeSymbol.Name, propertyTypeSymbol.ContainingNamespace.ToString(), listLevel); + + foreach (PropertyData child in GetPropertiesRecursive(propertyTypeSymbol, depth++, propertyPath, + mappedPropertyPath)) + { + yield return child; + } + } + } + else + { + yield return new PropertyData(propertySymbol.Name, propertyPath, mappedPropertyPath, false, + propertySymbol.Type.GetTypeName(), propertySymbol.Type.ContainingNamespace.ToString(), listLevel); + } + } + } + + private static string GetPropertyPath(string? parentPath, ISymbol propertySymbol) + { + string mappedName = propertySymbol.Name; + if (propertySymbol.GetAttributes() is { Length: > 0 } attributes && + attributes.FirstOrDefault(a => a.AttributeClass?.ToString() is DataMemberAttribute) is { } attribute && + attribute.NamedArguments.ToImmutableDictionary().GetStringValue("Name") is { } value) + { + mappedName = value; + } + + string propertyPath = string.IsNullOrEmpty(parentPath) + ? mappedName + : parentPath + "." + mappedName; + return propertyPath; + } + + private static string GetMappedPropertyPath(string? parentMappedPath, int? listLevel, bool requiresIndex, + ISymbol propertySymbol) + { + string mappedPropertyPath; + if (requiresIndex) + { + mappedPropertyPath = parentMappedPath + $"[indexes[{listLevel - 1}]]." + propertySymbol.Name; + } + else + { + mappedPropertyPath = string.IsNullOrEmpty(parentMappedPath) + ? propertySymbol.Name + : parentMappedPath + "." + propertySymbol.Name; + } + + return mappedPropertyPath; + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntitySourceWriter.cs b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntitySourceWriter.cs new file mode 100644 index 0000000..03ede0b --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/SerializableEntity/SerializableEntitySourceWriter.cs @@ -0,0 +1,83 @@ +using System.Linq; +using System.Text; + +namespace Nodsoft.WowsReplaysUnpack.Generators.SerializableEntity; + +internal static class SerializableEntitySourceWriter +{ + public static string Generate(EntityToGenerate entity) + { + StringBuilder sb = new StringBuilder(SourceGenerationHelper.Header).AppendLine(); + + string[] namespaces = entity.Properties.Select(p => p.TypeNamespace) + .Where(ns => !string.IsNullOrEmpty(ns) && !ns.Equals(entity.Namespace)) + .Distinct() + .ToArray(); + + foreach (string ns in namespaces) + { + sb.Append("using ").Append(ns).AppendLine(";"); + } + + sb.AppendLine("using System.Diagnostics;"); + sb.AppendLine("using Nodsoft.WowsReplaysUnpack.Core.Entities;"); + sb.AppendLine(); + + if (!string.IsNullOrEmpty(entity.Namespace)) + { + sb.Append("namespace ").Append(entity.Namespace).AppendLine(";").AppendLine(); + } + + sb.Append("public partial class ").Append(entity.ClassName).Append(": ISerializableEntity").AppendLine(); + sb.AppendLine("{").AppendLine(); + + sb.AppendLine(" public void SetProperty(string name, object? value, int[] indexes)"); + sb.AppendLine(" {"); + + sb.AppendLine(" switch (name)"); + sb.AppendLine(" {"); + + foreach (PropertyData property in entity.Properties) + { + sb.Append($" case \"{property.Path}\""); + + if (!property.IsClass) + { + sb.AppendLine($" when value is {property.Type} castedValue:"); + } + else + { + sb.AppendLine(":"); + } + + sb.Append($" {property.MappedPath}"); + + if (property.IsAdd) + { + sb.AppendLine($".Add({(property.IsClass ? "new()" : "castedValue")});"); + } + else if (property.IsClass) + { + sb.AppendLine(" = new();"); + } + else + { + sb.AppendLine($" = castedValue;"); + } + + sb.AppendLine($" break;"); + } + + sb.AppendLine(" default:") + .AppendLine(" Debug.WriteLine($\"Property {name} not found\");") + .AppendLine($" break;"); + + sb.AppendLine(" }"); + + sb.AppendLine(" }"); + + sb.AppendLine("}"); + + return sb.ToString(); + } +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/SourceGenerationHelper.cs b/Nodsoft.WowsReplaysUnpack.Generators/SourceGenerationHelper.cs new file mode 100644 index 0000000..1962d9d --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/SourceGenerationHelper.cs @@ -0,0 +1,29 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators; + +public static class SourceGenerationHelper +{ + public const string Header = @"//------------------------------------------------------------------------------ +// +// This code was generated by the Nodsoft.WowsReplaysUnpack.Generators source generator +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +#nullable enable"; + + + public const string ReplayControllerAttribute = Header + @" +namespace Nodsoft.WowsReplaysUnpack.Generators; + +[global::System.AttributeUsage(global::System.AttributeTargets.Class)] +internal class ReplayControllerAttribute : global::System.Attribute;"; + + public const string SerializableEntityAttribute = Header + @" +namespace Nodsoft.WowsReplaysUnpack.Generators; + +[global::System.AttributeUsage(global::System.AttributeTargets.Class)] +internal class SerializableEntityAttribute : global::System.Attribute;"; + +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Generators/TrackingNames.cs b/Nodsoft.WowsReplaysUnpack.Generators/TrackingNames.cs new file mode 100644 index 0000000..60d59fe --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack.Generators/TrackingNames.cs @@ -0,0 +1,8 @@ +namespace Nodsoft.WowsReplaysUnpack.Generators; + +public class TrackingNames +{ + public const string InitialExtraction = nameof(InitialExtraction); + public const string RemovingNulls = nameof(RemovingNulls); + +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack.Tests/Nodsoft.WowsReplaysUnpack.Tests.csproj b/Nodsoft.WowsReplaysUnpack.Tests/Nodsoft.WowsReplaysUnpack.Tests.csproj index 0ebd0ef..5802971 100644 --- a/Nodsoft.WowsReplaysUnpack.Tests/Nodsoft.WowsReplaysUnpack.Tests.csproj +++ b/Nodsoft.WowsReplaysUnpack.Tests/Nodsoft.WowsReplaysUnpack.Tests.csproj @@ -1,22 +1,22 @@ - net6.0 + net8.0 enable enable false - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.1.wowsreplay b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.1.wowsreplay new file mode 100644 index 0000000..5ab6a35 Binary files /dev/null and b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.1.wowsreplay differ diff --git a/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.2.wowsreplay b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.2.wowsreplay new file mode 100644 index 0000000..b75cb14 Binary files /dev/null and b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.2.wowsreplay differ diff --git a/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.3.wowsreplay b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.3.wowsreplay new file mode 100644 index 0000000..e4f94bf Binary files /dev/null and b/Nodsoft.WowsReplaysUnpack.Tests/Replay-Samples/13.3.wowsreplay differ diff --git a/Nodsoft.WowsReplaysUnpack.Tests/ReplayParsingExecutionTests.cs b/Nodsoft.WowsReplaysUnpack.Tests/ReplayParsingExecutionTests.cs index 0cda896..b14abfa 100644 --- a/Nodsoft.WowsReplaysUnpack.Tests/ReplayParsingExecutionTests.cs +++ b/Nodsoft.WowsReplaysUnpack.Tests/ReplayParsingExecutionTests.cs @@ -25,7 +25,7 @@ public void TestDefaultParsing() .BuildServiceProvider(); ReplayUnpackerFactory unpackerFactory = services.GetRequiredService(); - IReplayUnpackerService service = unpackerFactory.GetUnpacker(); + IReplayUnpackerService service = unpackerFactory.GetUnpacker(); // Act UnpackedReplay metadata = service.Unpack(Utilities.LoadReplay("good.wowsreplay")); @@ -56,7 +56,7 @@ public void TestFilesystemParsing() .BuildServiceProvider(); ReplayUnpackerFactory unpackerFactory = services.GetRequiredService(); - IReplayUnpackerService service = unpackerFactory.GetUnpacker(); + IReplayUnpackerService service = unpackerFactory.GetUnpacker(); // Act UnpackedReplay metadata = service.Unpack(Utilities.LoadReplay("good.wowsreplay")); diff --git a/Nodsoft.WowsReplaysUnpack.Tests/ReplayUnpackerTests.cs b/Nodsoft.WowsReplaysUnpack.Tests/ReplayUnpackerTests.cs index c870152..8fe6a1f 100644 --- a/Nodsoft.WowsReplaysUnpack.Tests/ReplayUnpackerTests.cs +++ b/Nodsoft.WowsReplaysUnpack.Tests/ReplayUnpackerTests.cs @@ -1,6 +1,5 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Nodsoft.WowsReplaysUnpack.Core.Exceptions; using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.ExtendedData; using Nodsoft.WowsReplaysUnpack.ExtendedData.Models; @@ -16,10 +15,6 @@ namespace Nodsoft.WowsReplaysUnpack.Tests; public sealed class ReplayUnpackerTests { private readonly string _sampleFolder = Path.Join(Directory.GetCurrentDirectory(), "Replay-Samples"); - - public ReplayUnpackerTests() - { } - /// /// Test parsing a working replay using the default controller. @@ -39,6 +34,9 @@ public ReplayUnpackerTests() InlineData("12.11.1.wowsreplay"), InlineData("13.0.wowsreplay"), InlineData("13.0.1.wowsreplay"), + InlineData("13.1.wowsreplay"), + InlineData("13.2.wowsreplay"), + InlineData("13.3.wowsreplay"), ] public void TestReplay_Pass(string replayPath) { @@ -52,11 +50,11 @@ public void TestReplay_Pass(string replayPath) ms.Position = 0; - ReplayUnpackerFactory replayUnpackerFactory = new ServiceCollection() + IReplayUnpackerFactory replayUnpackerFactory = new ServiceCollection() .AddLogging(l => l.ClearProviders()) .AddWowsReplayUnpacker() .BuildServiceProvider() - .GetRequiredService(); + .GetRequiredService(); UnpackedReplay replay = replayUnpackerFactory.GetUnpacker().Unpack(ms); @@ -82,6 +80,9 @@ public void TestReplay_Pass(string replayPath) InlineData("12.11.1.wowsreplay"), InlineData("13.0.wowsreplay"), InlineData("13.0.1.wowsreplay"), + InlineData("13.1.wowsreplay"), + InlineData("13.2.wowsreplay"), + InlineData("13.3.wowsreplay"), ] public void TestReplay_ExtendedData_Pass(string replayPath) { @@ -95,14 +96,14 @@ public void TestReplay_ExtendedData_Pass(string replayPath) ms.Position = 0; - ReplayUnpackerFactory replayUnpackerFactory = new ServiceCollection() + IReplayUnpackerFactory replayUnpackerFactory = new ServiceCollection() .AddLogging(l => l.ClearProviders()) .AddWowsReplayUnpacker(builder => { builder.AddExtendedData(); }) .BuildServiceProvider() - .GetRequiredService(); + .GetRequiredService(); UnpackedReplay replay = replayUnpackerFactory.GetExtendedDataUnpacker().Unpack(ms); diff --git a/Nodsoft.WowsReplaysUnpack/Controllers/CVECheckOnlyController.cs b/Nodsoft.WowsReplaysUnpack/Controllers/CVECheckOnlyController.cs index 5a30547..f4f9e95 100644 --- a/Nodsoft.WowsReplaysUnpack/Controllers/CVECheckOnlyController.cs +++ b/Nodsoft.WowsReplaysUnpack/Controllers/CVECheckOnlyController.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Core.Entities; using Nodsoft.WowsReplaysUnpack.Core.Extensions; @@ -11,8 +12,11 @@ namespace Nodsoft.WowsReplaysUnpack.Controllers; /// Lightweight implementation of a replay controller, designed to analyse a replay for vulnerabilities.
/// Currently scans for signs of CVE-2022-31265. ///
-public class CveCheckOnlyController : ReplayControllerBase +[PublicAPI] +public class CveCheckOnlyController : ReplayControllerBase { + public class CveCheckReplay : UnpackedReplay; + // ReSharper disable once ContextualLoggerProblem public CveCheckOnlyController(IDefinitionStore definitionStore, ILogger entityLogger) : base(definitionStore, entityLogger) { } diff --git a/Nodsoft.WowsReplaysUnpack/Controllers/DefaultReplayController.cs b/Nodsoft.WowsReplaysUnpack/Controllers/DefaultReplayController.cs index d2618db..a9f09f8 100644 --- a/Nodsoft.WowsReplaysUnpack/Controllers/DefaultReplayController.cs +++ b/Nodsoft.WowsReplaysUnpack/Controllers/DefaultReplayController.cs @@ -1,13 +1,16 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Core.Entities; +using Nodsoft.WowsReplaysUnpack.Core.Models; namespace Nodsoft.WowsReplaysUnpack.Controllers; /// /// Default implementation of the . /// -public sealed class DefaultReplayController : ReplayControllerBase +[UsedImplicitly] +public sealed class DefaultReplayController : ReplayControllerBase { // ReSharper disable once ContextualLoggerProblem public DefaultReplayController(IDefinitionStore definitionStore, ILogger entityLogger) : base(definitionStore, entityLogger) { } diff --git a/Nodsoft.WowsReplaysUnpack/Controllers/IReplayController.cs b/Nodsoft.WowsReplaysUnpack/Controllers/IReplayController.cs deleted file mode 100644 index 33d4357..0000000 --- a/Nodsoft.WowsReplaysUnpack/Controllers/IReplayController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Nodsoft.WowsReplaysUnpack.Core.Models; -using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; - -namespace Nodsoft.WowsReplaysUnpack.Controllers; - -/// -/// Specifies a replay controller, responsible for handling the replay data extraction. -/// -public interface IReplayController -{ - /// - /// Creates a instance from the specified arenaInfo. - /// - /// Arena info to create the replay from. - /// A instance. - UnpackedReplay CreateUnpackedReplay(ArenaInfo arenaInfo); - - /// - /// Handles a network packet, based on its type and properties. - /// - /// Network packet to handle. - /// Options to use when handling the packet. - void HandleNetworkPacket(NetworkPacketBase networkPacket, ReplayUnpackerOptions options); -} diff --git a/Nodsoft.WowsReplaysUnpack/Controllers/ReplayControllerBase.cs b/Nodsoft.WowsReplaysUnpack/Controllers/ReplayControllerBase.cs index 12f083d..088b7bb 100644 --- a/Nodsoft.WowsReplaysUnpack/Controllers/ReplayControllerBase.cs +++ b/Nodsoft.WowsReplaysUnpack/Controllers/ReplayControllerBase.cs @@ -1,80 +1,56 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using Nodsoft.WowsReplaysUnpack.Core.Abstractions; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Core.Entities; using Nodsoft.WowsReplaysUnpack.Core.Extensions; using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; using Nodsoft.WowsReplaysUnpack.Core.Security; -using System.Reflection; +using Nodsoft.WowsReplaysUnpack.Generators; namespace Nodsoft.WowsReplaysUnpack.Controllers; -// ReSharper disable VirtualMemberNeverOverridden.Global +// ReSharper disable VirtualMemberNeverOverridden.Global /// /// Defines a base class for a replay controller. /// -/// The type of the controller. -public abstract class ReplayControllerBase : IReplayController - where TController : class, IReplayController +/// +[PublicAPI] +[ReplayController] +public abstract partial class ReplayControllerBase : IReplayController where T : UnpackedReplay, new() { - private static readonly Dictionary _methodSubscriptions; - private static readonly Dictionary _propertyChangedSubscriptions; - /// /// Definition store used by the controller. /// protected IDefinitionStore DefinitionStore { get; } - + /// /// Logger used to log processing related events. /// protected ILogger EntityLogger { get; } /// - /// Unpoacked replay being processed. + /// Unpacked replay being processed. /// - public UnpackedReplay Replay { get; protected set; } - - static ReplayControllerBase() - { - _methodSubscriptions = typeof(TController).GetMethods() - .Select(m => new { Attribute = m.GetCustomAttribute(), MethodInfo = m }) - .Where(m => m.Attribute is not null) - .GroupBy(m => $"{m.Attribute!.EntityName}_{m.Attribute.MethodName}") - .ToDictionary( - m => m.Key, - m => m.OrderBy(m => m.Attribute?.Priority).Select(m => m.MethodInfo).ToArray()); - - _propertyChangedSubscriptions = typeof(TController).GetMethods() - .Select(m => new { Attribute = m.GetCustomAttribute(), MethodInfo = m }) - .Where(m => m.Attribute is not null) - .GroupBy(m => $"{m.Attribute!.EntityName}_{m.Attribute.PropertyName}") - .ToDictionary( - m => m.Key, - m => m.Select(m => m.MethodInfo).ToArray()); - } + public T Replay { get; protected set; } = null!; -#pragma warning disable CS8618 // Replay Property is never null because after creating the controller, CreateUnpackedReplay is called - - // ReSharper disable once ContextualLoggerProblem - protected ReplayControllerBase(IDefinitionStore definitionStore, ILogger entityLogger) + protected ReplayControllerBase(IDefinitionStore definitionStore, ILogger entityLogger) => (DefinitionStore, EntityLogger) = (definitionStore, entityLogger); -#pragma warning restore CS8618 - - /// - /// Creates an out of an existing . - /// - /// The arena info. - /// The unpacked replay. - public virtual UnpackedReplay CreateUnpackedReplay(ArenaInfo arenaInfo) + /// + public T CreateUnpackedReplay(ArenaInfo arenaInfo) { - Replay = new(arenaInfo); + Replay = new() + { + ArenaInfo = arenaInfo, + ClientVersion = Version.Parse(string.Join('.', arenaInfo.ClientVersionFromExe.Split(',')[..3])) + }; return Replay; } #region Packet Handling - + /// public virtual void HandleNetworkPacket(NetworkPacketBase networkPacket, ReplayUnpackerOptions options) { @@ -83,8 +59,10 @@ public virtual void HandleNetworkPacket(NetworkPacketBase networkPacket, ReplayU MapPacket p => () => OnMap(p), BasePlayerCreatePacket p => () => OnBasePlayerCreate(p), CellPlayerCreatePacket p => () => OnCellPlayerCreate(p), - EntityEnterPacket p when Replay.Entities.ContainsKey(p.EntityId) => () => Replay.Entities[p.EntityId].IsInAoI = true, - EntityLeavePacket p when Replay.Entities.ContainsKey(p.EntityId) => () => Replay.Entities[p.EntityId].IsInAoI = false, + EntityEnterPacket p when Replay.Entities.ContainsKey(p.EntityId) => () => + Replay.Entities[p.EntityId].IsInAoI = true, + EntityLeavePacket p when Replay.Entities.ContainsKey(p.EntityId) => () => + Replay.Entities[p.EntityId].IsInAoI = false, EntityCreatePacket p => () => OnEntityCreate(p), PositionPacket p => () => OnPosition(p), PlayerPositionPacket p => () => OnPlayerPosition(p), @@ -94,22 +72,28 @@ EntityLeavePacket p when Replay.Entities.ContainsKey(p.EntityId) => () => Replay _ => null }; - action?.Invoke(); + action?.Invoke(); } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnMap(MapPacket packet) => Replay.MapName = packet.Name; /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnBasePlayerCreate(BasePlayerCreatePacket packet) { - Replay.Entities.GetOrAddValue(packet.EntityId, out Entity? entity, () => CreateEntity(packet.EntityId, "Avatar")); + Replay.Entities.GetOrAddValue(packet.EntityId, out Entity? entity, + () => CreateEntity(packet.EntityId, "Avatar")); + + if (entity is null) + { + return; + } using BinaryReader binaryReader = packet.Data.GetBinaryReader(); entity.SetBaseProperties(binaryReader); @@ -117,19 +101,25 @@ protected virtual void OnBasePlayerCreate(BasePlayerCreatePacket packet) } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnCellPlayerCreate(CellPlayerCreatePacket packet) { - Replay.Entities.GetOrAddValue(packet.EntityId, out Entity? entity, () => CreateEntity(packet.EntityId, "Avatar")); + Replay.Entities.GetOrAddValue(packet.EntityId, out Entity? entity, + () => CreateEntity(packet.EntityId, "Avatar")); + + if (entity is null) + { + return; + } using BinaryReader binaryReader = packet.Data.GetBinaryReader(); entity.SetInternalClientProperties(binaryReader); } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnEntityCreate(EntityCreatePacket packet) @@ -148,98 +138,93 @@ protected virtual void OnEntityCreate(EntityCreatePacket packet) } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnPosition(PositionPacket packet) { - if (!Replay.Entities.ContainsKey(packet.EntityId)) + if (!Replay.Entities.TryGetValue(packet.EntityId, out Entity? entity)) { return; } - Entity entity = Replay.Entities[packet.EntityId]; entity.SetPosition(packet.Position); } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnPlayerPosition(PlayerPositionPacket packet) { - /* + /* Entity at ID 1 is the primary one's position being updated - Avatar-only packets have no position until death, and - are linked to a vehicle. After death they have no ID for a + Avatar-only packets have no position until death, and + are linked to a vehicle. After death they have no ID for a Vehicle anymore, and a position instead. Before death only "Vehicle in ID 1" packets have a position. */ - if (packet.EntityId2 is not 0 && Replay.Entities.ContainsKey(packet.EntityId1) && Replay.Entities.ContainsKey(packet.EntityId2)) + if (packet.EntityId2 is not 0 && Replay.Entities.TryGetValue(packet.EntityId1, out Entity? slaveEntity) && + Replay.Entities.TryGetValue(packet.EntityId2, out Entity? masterEntity)) { /* - This serves to link the positions of the two entities + This serves to link the positions of the two entities where the position of entity 1 is set by wherever entity 2 is, rather than by the position field. e.g. Assigning the Avatar the position of the Vehicle */ - Entity masterEntity = Replay.Entities[packet.EntityId2]; - Entity slaveEntity = Replay.Entities[packet.EntityId1]; slaveEntity.SetPosition(masterEntity.GetPosition()); } - else if (packet is { EntityId1: not 0, EntityId2: 0 } && Replay.Entities.ContainsKey(packet.EntityId1)) + else if (packet is { EntityId1: not 0, EntityId2: 0 } && + Replay.Entities.TryGetValue(packet.EntityId1, out Entity? entity)) { // This is a regular update for entity 1, without entity 2 - Entity entity = Replay.Entities[packet.EntityId1]; entity.SetPosition(packet.Position); } } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnEntityMethod(EntityMethodPacket packet) { - if (!Replay.Entities.ContainsKey(packet.EntityId)) + if (!Replay.Entities.TryGetValue(packet.EntityId, out Entity? entity)) { return; } - Entity entity = Replay.Entities[packet.EntityId]; using BinaryReader methodDataReader = packet.Data.GetBinaryReader(); entity.CallClientMethod(packet.MessageId, packet.PacketTime, methodDataReader, this); } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnEntityProperty(EntityPropertyPacket packet) { - if (!Replay.Entities.ContainsKey(packet.EntityId)) + if (!Replay.Entities.TryGetValue(packet.EntityId, out Entity? entity)) { return; } - Entity entity = Replay.Entities[packet.EntityId]; using BinaryReader propertyData = packet.Data.GetBinaryReader(); entity.SetClientProperty(packet.MessageId, propertyData, this); } /// - /// Trigerred when a is handled by . + /// Triggered when a is handled by . /// /// The packet. protected virtual void OnNestedProperty(NestedPropertyPacket packet) { - if (!Replay.Entities.ContainsKey(packet.EntityId)) + if (!Replay.Entities.TryGetValue(packet.EntityId, out Entity? entity)) { return; } - Entity entity = Replay.Entities[packet.EntityId]; packet.Apply(entity); } @@ -250,7 +235,10 @@ protected virtual void OnNestedProperty(NestedPropertyPacket packet) /// The name of the entity. /// The entity object. protected virtual Entity CreateEntity(uint id, string name) - => new(id, name, DefinitionStore.GetEntityDefinition(Replay.ClientVersion, name), _methodSubscriptions, _propertyChangedSubscriptions, EntityLogger); + => new(id, name, DefinitionStore.GetEntityDefinition(Replay.ClientVersion, name), + // _methodSubscriptions, + // _propertyChangedSubscriptions, + EntityLogger); /// /// Creates an entity object for the given ID and index. @@ -261,7 +249,10 @@ protected virtual Entity CreateEntity(uint id, string name) protected virtual Entity CreateEntity(uint id, int index) { EntityDefinition definition = DefinitionStore.GetEntityDefinition(Replay.ClientVersion, index - 1); - return new(id, definition.Name, definition, _methodSubscriptions, _propertyChangedSubscriptions, EntityLogger); + return new(id, definition.Name, definition, + // _methodSubscriptions, + // _propertyChangedSubscriptions, + EntityLogger); } #endregion @@ -269,16 +260,20 @@ protected virtual Entity CreateEntity(uint id, int index) #region Subscriptions /// - /// Trigerred when a CVE is handled by . + /// Triggered when a CVE is handled by . /// /// The arguments. - [MethodSubscription("Avatar", "onArenaStateReceived", ParamsAsDictionary = true, Priority = -1)] + [MethodSubscription("Avatar", "onArenaStateReceived", ParamsAsDictionary = true)] public void OnArenaStateReceivedCVECheck(Dictionary arguments) { - CveChecks.ScanForCVE_2022_31265((byte[])arguments["preBattlesInfo"]!, "Avatar_onArenaStateReceived_preBattlesInfo"); - CveChecks.ScanForCVE_2022_31265((byte[])arguments["playersStates"]!, "Avatar_onArenaStateReceived_playersStates"); - CveChecks.ScanForCVE_2022_31265((byte[])arguments["observersState"]!, "Avatar_onArenaStateReceived_observersState"); - CveChecks.ScanForCVE_2022_31265((byte[])arguments["buildingsInfo"]!, "Avatar_onArenaStateReceived_buildingsInfo"); + CveChecks.ScanForCVE_2022_31265((byte[])arguments["preBattlesInfo"]!, + "Avatar_onArenaStateReceived_preBattlesInfo"); + CveChecks.ScanForCVE_2022_31265((byte[])arguments["playersStates"]!, + "Avatar_onArenaStateReceived_playersStates"); + CveChecks.ScanForCVE_2022_31265((byte[])arguments["observersState"]!, + "Avatar_onArenaStateReceived_observersState"); + CveChecks.ScanForCVE_2022_31265((byte[])arguments["buildingsInfo"]!, + "Avatar_onArenaStateReceived_buildingsInfo"); } #endregion -} +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntityPropertyExtensions.cs b/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntityPropertyExtensions.cs new file mode 100644 index 0000000..7aa2fed --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntityPropertyExtensions.cs @@ -0,0 +1,20 @@ +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Models; + +namespace Nodsoft.WowsReplaysUnpack.EntitySerializer; + +[PublicAPI] +public static class EntityPropertyExtensions +{ + public static FixedDictionary? GetAsDict(this Dictionary dict, string key) => + dict.TryGetValue(key, out object? value) && value is FixedDictionary fixedDict ? fixedDict : null; + + public static FixedList? GetAsArr(this Dictionary dict, string key) => + dict.TryGetValue(key, out object? value) && value is FixedList fixedList ? fixedList : null; + + public static FixedDictionary? GetAsDict(this FixedList list, int index) => + list.Length > index && list[index] is FixedDictionary fixedDict ? fixedDict : null; + + public static T? GetAsValue(this FixedDictionary dict, string key) => + dict.TryGetValue(key, out object? rawValue) && rawValue is T value ? value : default; +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntitySerializer.cs b/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntitySerializer.cs index b6c713c..0589a30 100644 --- a/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntitySerializer.cs +++ b/Nodsoft.WowsReplaysUnpack/EntitySerializer/EntitySerializer.cs @@ -1,95 +1,74 @@ using Nodsoft.WowsReplaysUnpack.Core.Entities; using Nodsoft.WowsReplaysUnpack.Core.Models; -using System.Reflection; -using System.Runtime.Serialization; +using System.Diagnostics; namespace Nodsoft.WowsReplaysUnpack.EntitySerializer; + public static class EntitySerializer { - public static T Deserialize(Entity entity) where T : class + public static T Deserialize(Entity entity) where T : class, ISerializableEntity, new() { - Dictionary clientProperties = entity.ClientProperties; - PropertyInfo[] properties = typeof(T).GetProperties(); - T obj = Activator.CreateInstance(); - DeserializeDictionaryProperties(clientProperties, properties, obj); + T obj = new(); + DeserializeDictionaryProperties(entity.ClientProperties, obj); return obj; } - public static T[] Deserialize(IEnumerable entities) where T : class + public static T[] Deserialize(IEnumerable entities) where T : class, ISerializableEntity, new() { - var result = new List(); - foreach(var entity in entities) + List result = new(); + foreach (Entity entity in entities) + { result.Add(Deserialize(entity)); + } + return result.ToArray(); } - private static void DeserializeDictionaryProperties(Dictionary entityProperties, PropertyInfo[] propertyInfos, object obj) + private static void DeserializeDictionaryProperties(Dictionary entityProperties, T obj) + where T : class, ISerializableEntity { - Dictionary invariantDictionary = entityProperties.ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase); - - foreach (PropertyInfo? propertyInfo in propertyInfos) + Dictionary invariantDictionary = + entityProperties.ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase); + + foreach (KeyValuePair property in invariantDictionary) { - string propertyName = propertyInfo.Name; - DataMemberAttribute? dataMemberAttribute = propertyInfo.GetCustomAttribute(); - if (dataMemberAttribute is { Name.Length: > 0 }) - { - propertyName = dataMemberAttribute.Name; - } - if (invariantDictionary.TryGetValue(propertyName, out object? value)) - { - DeserializeProperty(value, propertyInfo, obj); - } + SetProperty(obj, property.Key, property.Value, []); } } - private static void DeserializeProperty(object? entityPropertyValue, PropertyInfo propertyInfo, object obj) + private static void SetProperty(T instance, string propertyName, object? propertyValue, int[] indexes, bool listItem = false) + where T : class, ISerializableEntity { - if (entityPropertyValue is null) + if (propertyValue is null) { return; } - else if (entityPropertyValue is FixedDictionary dict) - { - propertyInfo.SetValue(obj, DeserializeFixedDictionary(dict, propertyInfo.PropertyType)); - } - else if (entityPropertyValue is FixedList list) - { - propertyInfo.SetValue(obj, DeserializeFixedList(list, propertyInfo.PropertyType.GenericTypeArguments[0])); - } - else - { - propertyInfo.SetValue(obj, entityPropertyValue); - } - } - private static object? DeserializeFixedDictionary(FixedDictionary dict, Type propertyType) - { - object propertyObj = Activator.CreateInstance(propertyType)!; - DeserializeDictionaryProperties(dict, propertyType.GetProperties(), propertyObj); - return propertyObj; - } - - private static object? DeserializeFixedList(FixedList list, Type elementType) - { - Type listType = typeof(List<>).MakeGenericType(elementType); - MethodInfo addMethod = listType.GetMethod("Add")!; - object values = Activator.CreateInstance(listType)!; - foreach (object? item in list) + if (propertyValue is FixedDictionary dict) { - if (item is FixedDictionary itemDict) + if (!listItem) { - object itemObj = Activator.CreateInstance(elementType)!; - addMethod.Invoke(values, new[] { DeserializeFixedDictionary(itemDict, elementType) }); + instance.SetProperty(propertyName, null, []); } - else if (item is FixedList itemList) + + foreach (KeyValuePair dictProperty in dict) { - throw new NotSupportedException("List in list not supported"); + SetProperty(instance, propertyName + "." + dictProperty.Key, dictProperty.Value, indexes); } - else + } + else if (propertyValue is FixedList { Count: > 0 } list) + { + instance.SetProperty(propertyName, null, indexes); + + for (int i = 0; i < list.Count; i++) { - addMethod.Invoke(values, new[] { item }); + instance.SetProperty(propertyName + ".#Add", null, indexes); + SetProperty(instance, propertyName, list[i], [..indexes, i], true); } } - return values; + else + { + instance.SetProperty(propertyName, propertyValue, indexes); + } } -} +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/EntitySerializer/Extensions.cs b/Nodsoft.WowsReplaysUnpack/EntitySerializer/UnpackedReplayExtensions.cs similarity index 53% rename from Nodsoft.WowsReplaysUnpack/EntitySerializer/Extensions.cs rename to Nodsoft.WowsReplaysUnpack/EntitySerializer/UnpackedReplayExtensions.cs index 6f5c497..f81ceb0 100644 --- a/Nodsoft.WowsReplaysUnpack/EntitySerializer/Extensions.cs +++ b/Nodsoft.WowsReplaysUnpack/EntitySerializer/UnpackedReplayExtensions.cs @@ -1,34 +1,44 @@ -using Nodsoft.WowsReplaysUnpack.Core.Entities; +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Core.Entities; using Nodsoft.WowsReplaysUnpack.Core.Models; namespace Nodsoft.WowsReplaysUnpack.EntitySerializer; -public static class Extensions + +[PublicAPI] +public static class UnpackedReplayExtensions { - public static T SerializeEntity(this UnpackedReplay replay, string entityName) where T : class + public static T DeserializeEntity(this UnpackedReplay replay, string entityName) + where T : class, ISerializableEntity, new() { - if (!replay.Entities.Any(e => e.Value.Name == entityName)) + if (replay.Entities.All(e => e.Value.Name != entityName)) { throw new InvalidOperationException("No entity found with name " + entityName); } + return EntitySerializer.Deserialize(replay.Entities.Single(e => e.Value.Name == entityName).Value); } - public static T[] SerializeEntities(this UnpackedReplay replay, string entityName) where T : class + public static T[] SerializeEntities(this UnpackedReplay replay, string entityName) + where T : class, ISerializableEntity, new() { - if (!replay.Entities.Any(e => e.Value.Name == entityName)) + if (replay.Entities.All(e => e.Value.Name != entityName)) { throw new InvalidOperationException("No entity found with name " + entityName); } - return EntitySerializer.Deserialize(replay.Entities.Where(e => e.Value.Name == entityName).Select(e => e.Value)); + + return EntitySerializer.Deserialize(replay.Entities.Where(e => e.Value.Name == entityName) + .Select(e => e.Value)); } - public static T SerializeEntity(this UnpackedReplay replay, uint entityId) where T : class + public static T DeserializeEntity(this UnpackedReplay replay, uint entityId) + where T : class, ISerializableEntity, new() { if (!replay.Entities.TryGetValue(entityId, out Entity? entity)) { throw new InvalidOperationException("No entity found with id " + entityId); } + return EntitySerializer.Deserialize(entity); } -} +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj b/Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj index d8766a0..79cf174 100644 --- a/Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj +++ b/Nodsoft.WowsReplaysUnpack/Nodsoft.WowsReplaysUnpack.csproj @@ -1,25 +1,29 @@  - + Library - net6.0 + net8.0 enable enable README.md true + true - + + - - + + - + + diff --git a/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilder.cs b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilder.cs index fe6c553..18fde79 100644 --- a/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilder.cs +++ b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilder.cs @@ -1,6 +1,9 @@ -using Microsoft.Extensions.DependencyInjection; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; using Nodsoft.WowsReplaysUnpack.Controllers; +using Nodsoft.WowsReplaysUnpack.Core.Abstractions; using Nodsoft.WowsReplaysUnpack.Core.Definitions; +using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.Services; namespace Nodsoft.WowsReplaysUnpack; @@ -8,6 +11,7 @@ namespace Nodsoft.WowsReplaysUnpack; /// /// Provides a fluent API to build a WOWS replay data unpacker. /// +[PublicAPI] public class ReplayUnpackerBuilder { private bool replayDataParserAdded; @@ -17,14 +21,14 @@ public class ReplayUnpackerBuilder public IServiceCollection Services { get; } /// - /// Intializes a new instance of the class, + /// Initializes a new instance of the class, /// by registering a as baseline. /// /// public ReplayUnpackerBuilder(IServiceCollection services) { Services = services; - AddReplayController(); + AddReplayController(); } /// @@ -34,7 +38,7 @@ public ReplayUnpackerBuilder(IServiceCollection services) /// The builder. public ReplayUnpackerBuilder WithReplayDataParser() where TParser : class, IReplayDataParser { - Services.AddScoped(); + Services.AddTransient(); replayDataParserAdded = true; return this; } @@ -43,11 +47,25 @@ public ReplayUnpackerBuilder WithReplayDataParser() where TParser : cla /// Registers a for use in the WOWS replay data unpacker. /// /// The type of the replay controller. + /// /// The builder. - public ReplayUnpackerBuilder AddReplayController() where TController : class, IReplayController + public ReplayUnpackerBuilder AddReplayController() + where TController : class, IReplayController + where TReplay : UnpackedReplay, new() { - Services.AddScoped>(); - Services.AddScoped(); + ServiceDescriptor[] existingControllers = Services.Where(s => + s.ServiceType.IsGenericType && + s.ServiceType.GetGenericTypeDefinition() == typeof(IReplayController<>)) + .ToArray(); + + foreach (ServiceDescriptor existingController in existingControllers) + { + if (existingController.ServiceType.GenericTypeArguments[0] == typeof(TReplay)) + throw new Exception("There can only be one controller per replay type registered"); + } + + Services.AddScoped, ReplayUnpackerService>(); + Services.AddScoped, TController>(); return this; } @@ -74,22 +92,7 @@ public ReplayUnpackerBuilder WithDefinitionStore() where TStore : class, definitionStoreAdded = true; return this; } - - - // stewie says: No need for that since they will be added either way if you don't add other ones - ///// - ///// Registers the Assembly definition loader and the default definition store for the WOWS replay data unpacker. - ///// These are considered the default definition services for the unpacker. - ///// - ///// The replay unpacker builder. - ///// The service collection. - //public static ReplayUnpackerBuilder WithDefaultDefinitions(this ReplayUnpackerBuilder builder) - //{ - // builder.WithDefinitionLoader(); - // builder.WithDefinitionStore(); - // return builder; - //} - + /// /// Builds the WOWS replay data unpacker, registering any missing services. /// diff --git a/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilderExtensions.cs b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilderExtensions.cs new file mode 100644 index 0000000..5748f5e --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerBuilderExtensions.cs @@ -0,0 +1,11 @@ +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Controllers; + +namespace Nodsoft.WowsReplaysUnpack; + +[PublicAPI] +public static class ReplayUnpackerBuilderExtensions +{ + public static ReplayUnpackerBuilder AddCveCheckController(this ReplayUnpackerBuilder builder) + => builder.AddReplayController(); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/ReplayUnpackerFactoryExtensions.cs b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerFactoryExtensions.cs new file mode 100644 index 0000000..08e1f89 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack/ReplayUnpackerFactoryExtensions.cs @@ -0,0 +1,18 @@ +using JetBrains.Annotations; +using Nodsoft.WowsReplaysUnpack.Controllers; +using Nodsoft.WowsReplaysUnpack.Services; + +namespace Nodsoft.WowsReplaysUnpack; + +[PublicAPI] +public static class ReplayUnpackerFactoryExtensions +{ + /// + /// Gets the cve check only unpacker service from a . + /// + /// The factory. + /// The cve check only unpacker service. + public static IReplayUnpackerService GetCveCheckUnpacker( + this IReplayUnpackerFactory factory) => factory + .GetUnpacker(); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/ServiceCollectionExtensions.cs b/Nodsoft.WowsReplaysUnpack/ServiceCollectionExtensions.cs index e8ee16e..dee53c1 100644 --- a/Nodsoft.WowsReplaysUnpack/ServiceCollectionExtensions.cs +++ b/Nodsoft.WowsReplaysUnpack/ServiceCollectionExtensions.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; +using Nodsoft.WowsReplaysUnpack.Controllers; using Nodsoft.WowsReplaysUnpack.Core.Definitions; using Nodsoft.WowsReplaysUnpack.Services; @@ -7,6 +9,7 @@ namespace Nodsoft.WowsReplaysUnpack; /// /// Various extension methods for Dependency Injection. /// +[PublicAPI] public static class ServiceCollectionExtensions { /// @@ -16,7 +19,7 @@ public static class ServiceCollectionExtensions /// /// The service collection. /// The service collection. - public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection services) + public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection services) => services.AddWowsReplayUnpacker(); /// @@ -29,7 +32,8 @@ public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection s /// The type of the definition store. /// The type of the definition loader. /// The service collection. - public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection services) + public static IServiceCollection AddWowsReplayUnpacker( + this IServiceCollection services) where TReplayDataParser : class, IReplayDataParser where TDefinitionStore : class, IDefinitionStore where TDefinitionLoader : class, IDefinitionLoader @@ -41,7 +45,7 @@ public static IServiceCollection AddWowsReplayUnpacker(); } ); - + /// /// Builds the WOWS replay data unpacker using the , /// and a builder action to configure the unpacker. @@ -49,13 +53,15 @@ public static IServiceCollection AddWowsReplayUnpackerThe service collection to add the services to. /// The builder action to configure the unpacker. /// The service collection. - public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection services, Action builderAction) + public static IServiceCollection AddWowsReplayUnpacker(this IServiceCollection services, + Action builderAction) { ReplayUnpackerBuilder builder = new(services); builderAction(builder); builder.Build(); services.AddScoped(); + services.AddScoped(s => s.GetRequiredService()); return services; } -} +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Services/DefaultReplayDataParser.cs b/Nodsoft.WowsReplaysUnpack/Services/DefaultReplayDataParser.cs index 0e99a73..a038d15 100644 --- a/Nodsoft.WowsReplaysUnpack/Services/DefaultReplayDataParser.cs +++ b/Nodsoft.WowsReplaysUnpack/Services/DefaultReplayDataParser.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Logging; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.Core.Network; using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; @@ -8,16 +9,19 @@ namespace Nodsoft.WowsReplaysUnpack.Services; /// /// Represents the default implementation for a data parser. /// +[UsedImplicitly] public class DefaultReplayDataParser : IReplayDataParser { private readonly ILogger _logger; private readonly MemoryStream _packetBuffer = new(); private readonly BinaryReader _packetBufferReader; - public DefaultReplayDataParser(ILogger logger) => (_logger, _packetBufferReader) = (logger, new(_packetBuffer)); + public DefaultReplayDataParser(ILogger logger) => + (_logger, _packetBufferReader) = (logger, new(_packetBuffer)); /// - public virtual IEnumerable ParseNetworkPackets(MemoryStream replayDataStream, ReplayUnpackerOptions options, Version gameVersion) + public virtual IEnumerable ParseNetworkPackets(MemoryStream replayDataStream, + ReplayUnpackerOptions options, Version gameVersion) { int packetIndex = 0; using BinaryReader binaryReader = new(replayDataStream); @@ -27,7 +31,8 @@ public virtual IEnumerable ParseNetworkPackets(MemoryStream r uint packetType = binaryReader.ReadUInt32(); float packetTime = binaryReader.ReadSingle(); // Time in seconds from battle start - _logger.LogDebug("Packet parsed of type '{PacketType}' with size '{PacketSize}' and timestamp '{PacketTime}'", + _logger.LogDebug( + "Packet parsed of type '{PacketType}' with size '{PacketSize}' and timestamp '{PacketTime}'", NetworkPacketTypes.GetTypeName(packetType, gameVersion), packetSize, packetTime); byte[] packetData = binaryReader.ReadBytes((int)packetSize); @@ -38,26 +43,11 @@ public virtual IEnumerable ParseNetworkPackets(MemoryStream r _packetBuffer.Write(packetData); _packetBuffer.Seek(0, SeekOrigin.Begin); - yield return PacketTypeMap.TryGetValue(NetworkPacketTypes.GetTypeName(packetType, gameVersion), out var packetTypeFunc) + yield return PacketTypeMap.TryGetValue(NetworkPacketTypes.GetTypeName(packetType, gameVersion), + out Func? packetTypeFunc) ? packetTypeFunc(packetIndex, packetTime, _packetBufferReader) : new UnknownPacket(packetIndex, _packetBufferReader); - -// yield return packetType switch -// { -// 0x0 => new BasePlayerCreatePacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.CellPlayerCreate => new CellPlayerCreatePacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityControl => new EntityControlPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityEnter => new EntityEnterPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityLeave => new EntityLeavePacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityCreate => new EntityCreatePacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityProperty => new EntityPropertyPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.EntityMethod => new EntityMethodPacket(packetIndex, packetTime, _packetBufferReader), -// NetworkPacketTypes.Map => new MapPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.NestedProperty => new NestedPropertyPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.Position => new PositionPacket(packetIndex, _packetBufferReader), -// NetworkPacketTypes.PlayerPosition => new PlayerPositionPacket(packetIndex, _packetBufferReader), -// _ => new UnknownPacket(packetIndex, _packetBufferReader) -// }; + packetIndex++; } } @@ -78,7 +68,7 @@ public virtual IEnumerable ParseNetworkPackets(MemoryStream r { "Position", static (index, _, reader) => new PositionPacket(index, reader) }, { "PlayerPosition", static (index, _, reader) => new PlayerPositionPacket(index, reader) } }; - + /// /// Disposes the data parser. /// @@ -87,4 +77,4 @@ public void Dispose() _packetBufferReader.Dispose(); GC.SuppressFinalize(this); } -} +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Services/IReplayDataParser.cs b/Nodsoft.WowsReplaysUnpack/Services/IReplayDataParser.cs index 8e2acee..03a0c77 100644 --- a/Nodsoft.WowsReplaysUnpack/Services/IReplayDataParser.cs +++ b/Nodsoft.WowsReplaysUnpack/Services/IReplayDataParser.cs @@ -13,6 +13,7 @@ public interface IReplayDataParser : IDisposable /// /// The data stream to parse. /// The options to use when parsing. + /// The game version to use /// The parsed packets. IEnumerable ParseNetworkPackets(MemoryStream replayDataStream, ReplayUnpackerOptions options, Version gameVersion); } \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerFactory.cs b/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerFactory.cs new file mode 100644 index 0000000..89480e5 --- /dev/null +++ b/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerFactory.cs @@ -0,0 +1,21 @@ +using Nodsoft.WowsReplaysUnpack.Core.Models; + +namespace Nodsoft.WowsReplaysUnpack.Services; + +/// +/// Represents a factory for creating instances. +/// +public interface IReplayUnpackerFactory +{ + /// + /// Gets an with the specified . + /// + /// The type of the controller. + IReplayUnpackerService GetUnpacker() where TReplay : UnpackedReplay; + + /// + /// Gets the default . + /// + /// An instance of . + IReplayUnpackerService GetUnpacker(); +} \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerService.cs b/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerService.cs index 5ecef5f..e341ab6 100644 --- a/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerService.cs +++ b/Nodsoft.WowsReplaysUnpack/Services/IReplayUnpackerService.cs @@ -5,7 +5,7 @@ namespace Nodsoft.WowsReplaysUnpack.Services; /// /// Specifies a service for unpacking World of Warships replay files. /// -public interface IReplayUnpackerService +public interface IReplayUnpackerService : IDisposable where TReplay : UnpackedReplay { /// /// Unpacks a replay file (in the form of a byte array) into a object. @@ -13,13 +13,13 @@ public interface IReplayUnpackerService /// The buffered replay file. /// Options to use when unpacking the replay. /// The unpacked replay. - UnpackedReplay Unpack(byte[] data, ReplayUnpackerOptions? options = null); - + TReplay Unpack(byte[] data, ReplayUnpackerOptions? options = null); + /// /// Unpacks a replay file (in the form of a data stream) into a object. /// /// The streamed replay file. /// Options to use when unpacking the replay. /// The unpacked replay. - UnpackedReplay Unpack(Stream stream, ReplayUnpackerOptions? options = null); + TReplay Unpack(Stream stream, ReplayUnpackerOptions? options = null); } \ No newline at end of file diff --git a/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerFactory.cs b/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerFactory.cs index 25c1b6d..3b0cfbd 100644 --- a/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerFactory.cs +++ b/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerFactory.cs @@ -1,28 +1,19 @@ using Microsoft.Extensions.DependencyInjection; -using Nodsoft.WowsReplaysUnpack.Controllers; +using Nodsoft.WowsReplaysUnpack.Core.Models; namespace Nodsoft.WowsReplaysUnpack.Services; -/// -/// Represents a factory for creating instances. -/// -public class ReplayUnpackerFactory +/// +public class ReplayUnpackerFactory : IReplayUnpackerFactory { private readonly IServiceProvider _serviceProvider; public ReplayUnpackerFactory(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider; - /// - /// Gets an with the specified . - /// - /// The type of the controller. - /// An instance of . - public IReplayUnpackerService GetUnpacker() where TController : IReplayController - => _serviceProvider.GetRequiredService>(); + /// + public IReplayUnpackerService GetUnpacker() where TReplay : UnpackedReplay + => _serviceProvider.GetRequiredService>(); - /// - /// Gets the default . - /// - /// An instance of . - public IReplayUnpackerService GetUnpacker() => GetUnpacker(); + /// + public IReplayUnpackerService GetUnpacker() => GetUnpacker(); } diff --git a/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerService.cs b/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerService.cs index f92b9b4..5aec8ab 100644 --- a/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerService.cs +++ b/Nodsoft.WowsReplaysUnpack/Services/ReplayUnpackerService.cs @@ -1,40 +1,34 @@ -using Nodsoft.WowsReplaysUnpack.Controllers; -using Nodsoft.WowsReplaysUnpack.Core; +using Nodsoft.WowsReplaysUnpack.Core; +using Nodsoft.WowsReplaysUnpack.Core.Abstractions; using Nodsoft.WowsReplaysUnpack.Core.Exceptions; using Nodsoft.WowsReplaysUnpack.Core.Extensions; -using Nodsoft.WowsReplaysUnpack.Core.Json; using Nodsoft.WowsReplaysUnpack.Core.Models; using Nodsoft.WowsReplaysUnpack.Core.Network.Packets; using System.Diagnostics; using System.IO.Compression; using System.Text; using System.Text.Json; -using System.Threading; namespace Nodsoft.WowsReplaysUnpack.Services; /// /// Provides a controllable service for unpacking World of Warships replays. /// -/// Type of the controller, responsible for data extraction. -public sealed class ReplayUnpackerService : ReplayUnpackerService, IReplayUnpackerService - where TController : IReplayController +/// +public sealed class ReplayUnpackerService : ReplayUnpackerService, IReplayUnpackerService + where TReplay : UnpackedReplay { - private readonly JsonSerializerOptions _jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; private readonly IReplayDataParser _replayDataParser; - private readonly IReplayController _replayController; - private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1); - private const int _semephoreTimeOut = 2000; + private readonly IReplayController _replayController; - public ReplayUnpackerService(IReplayDataParser replayDataParser, TController replayController) + public ReplayUnpackerService(IReplayDataParser replayDataParser, IReplayController replayController) { - _jsonSerializerOptions.Converters.Add(new ReplayDateTimeJsonConverter()); _replayDataParser = replayDataParser; _replayController = replayController; } /// - public UnpackedReplay Unpack(byte[] data, ReplayUnpackerOptions? options = null) + public TReplay Unpack(byte[] data, ReplayUnpackerOptions? options = null) { // Stream is disposed in Unpack method MemoryStream memoryStream = new(data); @@ -43,7 +37,7 @@ public UnpackedReplay Unpack(byte[] data, ReplayUnpackerOptions? options = null) } /// - public UnpackedReplay Unpack(Stream stream, ReplayUnpackerOptions? options = null) + public TReplay Unpack(Stream stream, ReplayUnpackerOptions? options = null) { /* # Header @@ -51,14 +45,14 @@ public UnpackedReplay Unpack(Stream stream, ReplayUnpackerOptions? options = nul magic number - An unsigned 32 bit integer (4 bytes) block count - An unsigned 32 bit integer (4 bytes) - The block count is an indication of how many data blocks (excluding the real replay data) are stored inside the replay. + The block count is an indication of how many data blocks (excluding the real replay data) are stored inside the replay. For replays generated by a World of Tanks version before 0.8.1, the presence of 2 blocks means the replay is considered "complete", - meaning it has the match start information, as well as a match result. + meaning it has the match start information, as well as a match result. Replays generated by 0.8.1 and later versions are guaranteed to be complete if there are 2 or more blocks present. # Blocks - Every data block starts with an unsigned 32 bit integer that holds the length of the data for the given block. - The first block consists of a JSON encoded structure. + Every data block starts with an unsigned 32 bit integer that holds the length of the data for the given block. + The first block consists of a JSON encoded structure. In versions before 0.8.1, the second block is also a JSON encoded structure. # Reading @@ -73,13 +67,11 @@ Seek to offset 4 in the replay file (skipping the magic number) See http://wiki.vbaddict.net/pages/File_Replays for more details. */ options ??= new(); - _semaphore.Wait(_semephoreTimeOut); BinaryReader binaryReader = new(stream); byte[] signature = binaryReader.ReadBytes(4); int jsonBlockCount = binaryReader.ReadInt32(); - _semaphore.Release(); // Verify replay signature if (!signature.SequenceEqual(ReplaySignature)) { @@ -89,14 +81,12 @@ Seek to offset 4 in the replay file (skipping the magic number) // The first block is the arena info // Read it and create the unpacked replay model ArenaInfo arenaInfo = ReadJsonBlock(binaryReader); - UnpackedReplay replay = _replayController.CreateUnpackedReplay(arenaInfo); - _semaphore.Wait(_semephoreTimeOut); + TReplay replay = _replayController.CreateUnpackedReplay(arenaInfo); ReadExtraJsonBlocks(replay, binaryReader, jsonBlockCount); MemoryStream decryptedStream = new(); Decrypt(binaryReader, decryptedStream); - _semaphore.Release(); // Initial stream and reader not used anymore binaryReader.Dispose(); @@ -107,26 +97,27 @@ Seek to offset 4 in the replay file (skipping the magic number) decryptedStream.Dispose(); Version gameclientVersion = Version.Parse(arenaInfo.ClientVersionFromExe.Replace(',', '.')); - _semaphore.Wait(_semephoreTimeOut); - foreach (NetworkPacketBase networkPacket in _replayDataParser.ParseNetworkPackets(replayDataStream, options, gameclientVersion)) + foreach (NetworkPacketBase networkPacket in _replayDataParser.ParseNetworkPackets(replayDataStream, options, + gameclientVersion)) { _replayController.HandleNetworkPacket(networkPacket, options); } - _semaphore.Release(); + return replay; } private void ReadExtraJsonBlocks(UnpackedReplay replay, BinaryReader binaryReader, int jsonBlockCount) { - if (jsonBlockCount > 1) + if (jsonBlockCount <= 1) + { + return; + } + + for (int i = 0; i < jsonBlockCount - 1; i++) { - for (int i = 0; i < jsonBlockCount - 1; i++) + if (ReadJsonBlock(binaryReader) is { } jsonElement) { - if (ReadJsonBlock(binaryReader) is { } jsonElement) - { - replay.ExtraJsonData.Add(jsonElement); - } - + replay.ExtraJsonData.Add(jsonElement); } } } @@ -134,23 +125,23 @@ private void ReadExtraJsonBlocks(UnpackedReplay replay, BinaryReader binaryReade private T ReadJsonBlock(BinaryReader binaryReader) { int blockSize = binaryReader.ReadInt32(); - Span jsonData = binaryReader.ReadBytes(blockSize); - // If empty and T is nullable, return null - if (jsonData.Length is 0 && typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Nullable<>)) + if (blockSize is 0 && typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Nullable<>)) { return default!; } - + + Span jsonData = binaryReader.ReadBytes(blockSize); Utf8JsonReader jsonReader = new(jsonData); // Debug string - string message = Encoding.UTF8.GetString(jsonData); - Debug.WriteLine(message); - - return JsonSerializer.Deserialize(ref jsonReader, _jsonSerializerOptions) ?? throw new InvalidReplayException(); + Debug.WriteLine(Encoding.UTF8.GetString(jsonData)); + + return JsonSerializer.Deserialize(ref jsonReader, JsonSerializerOptions) ?? + throw new InvalidReplayException(); } + // ReSharper disable once CommentTypo /// /// Replay Data is encrypted in 8 byte sized blocks /// These blocks were xor'd before encryption @@ -188,7 +179,7 @@ private static void Decrypt(BinaryReader binaryReader, Stream targetStream) } } - private static void Decompress(MemoryStream compressedStream, MemoryStream decompressedStream) + private static void Decompress(Stream compressedStream, Stream decompressedStream) { // DeflateStream doesn't strip the header so we strip it manually. compressedStream.Seek(2, SeekOrigin.Begin); @@ -196,6 +187,8 @@ private static void Decompress(MemoryStream compressedStream, MemoryStream decom deflateStream.CopyTo(decompressedStream); decompressedStream.Seek(0, SeekOrigin.Begin); } + + public void Dispose() => _replayDataParser.Dispose(); } /// @@ -204,9 +197,14 @@ private static void Decompress(MemoryStream compressedStream, MemoryStream decom /// public class ReplayUnpackerService { - private static readonly byte[] BlowfishKey = "\x29\xB7\xC9\x09\x38\x3F\x84\x88\xFA\x98\xEC\x4E\x13\x19\x79\xFB".Select(Convert.ToByte).ToArray(); - protected static readonly byte[] ReplaySignature = Encoding.UTF8.GetBytes("\x12\x32\x34\x11"); + private static readonly byte[] BlowfishKey = "\x29\xB7\xC9\x09\x38\x3F\x84\x88\xFA\x98\xEC\x4E\x13\x19\x79\xFB" + .Select(Convert.ToByte).ToArray(); + + protected static readonly byte[] ReplaySignature = "\x12\x32\x34\x11"u8.ToArray(); protected static readonly Blowfish Blowfish = new(BlowfishKey); - private protected ReplayUnpackerService() { } + protected static readonly JsonSerializerOptions JsonSerializerOptions = new() + { + PropertyNameCaseInsensitive = true, TypeInfoResolver = UnpackerJsonSerializerContext.Default + }; } \ No newline at end of file diff --git a/README.md b/README.md index 476f08c..5a8afdf 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,9 @@ Add the service to an `IServiceCollection` ```csharp services.AddWowsReplayUnpacker(); ``` -Get the factory with DI, get the `IReplayUnpackerService` from the factory and call the `Unpack` method with either a `Stream` or `byte[]` +Get the factory, get the unpacker from the factory and call the `Unpack` method with either a `Stream` or `byte[]` ```csharp -ReplayUnpackerFactory replayUnpackerFactory = serviceProvider.GetService(); +ReplayUnpackerFactory replayUnpackerFactory = serviceProvider.GetService(); UnpackedReplay unpackedReplay = replayUnpackerFactory .GetUnpacker() .Unpack(File.OpenRead("my-replay.wowsreplay")); @@ -38,16 +38,26 @@ You can provide custom implementations of certain services. ```csharp services.Snippet.AddWowsReplayUnpacker(builder => { - builder.AddReplayController(); + builder.AddReplayController(); builder.WithReplayDataParser(); + builder.WithDefinitionLoader(); builder.WithDefinitionStore(); }) ``` ### DefinitionStore -Responsible for managing, accessing and caching the `.def` files (used for type and property mapping). +Responsible for managing, giving access and caching the `.def` files (used for type and property mapping). +Uses the `IDefinitionLoader` for resolving non-cached files once. Your custom definition store has to implement `IDefinitionStore` or extend `DefaultDefinitionStore` +### DefinitionLoader +Responsible for loading the actual definition files. + +Your custom definition store has to implement `IDefinitionLoader`. +The default loader is the [AssemblyDefinitionLoader](Nodsoft.WowsReplaysUnpack.Core/Definitions/AssemblyDefinitionLoader.cs). + +You can optionally use the [FileSystemDefinitionLoader](Nodsoft.WowsReplaysUnpack.FileStore/Definitions/FileSystemDefinitionLoader.cs) +by installing the `Nodsoft.WowsReplaysUnpack.FileStore` nuget package. ### ReplayDataParser Responsible for parsing the binary packets to the specific [network packets](Nodsoft.WowsReplaysUnpack.Core/Network/Packets). @@ -57,12 +67,16 @@ Your custom replay data parser has to implement `IReplayDataParser` or extend `D ### ReplayController Responsible for handling parsed network packets and filling the UnpackedReplay with information. -Your custom replay controller has to implement `IReplayController` but it is strongly suggested to use `ReplayControllerBase` where T is your custom controller class. +Your custom replay controller has to implement `IReplayController` but it is strongly suggested +to use `ReplayControllerBase` where T is your custom replay class. +Only one controller can be registered for any replay type. -To use your custom controller add the type to the `GetUnpacker()` method. +An example of this is the [ExtendedDataController](Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs). + +To use your custom controller add the replay type to the `GetUnpacker()` method. ```csharp UnpackedReplay unpackedReplay = replayUnpackerFactory - .GetUnpacker() + .GetUnpacker() .Unpack(File.OpenRead("my-replay.wowsreplay")); ``` **CVE Check Only Implementation** @@ -72,29 +86,24 @@ In the library you get a custom implementation ready to use for when you only wa It skips all network packets except the affected ones. -You have to add it with the `AddReplayController()` method and get the unpacker with `GetUnpacker()` +You can add it with the `AddCveCheckController()` method and get the unpacker with `GetCveCheckUnpacker()` **Extend the replay data** -When implementing your own controller and extending `ReplayControllerBase` you can overwrite the `CreateUnpackedReplay` method to create an instance of your own replay class. +When implementing your own controller and extending `ReplayControllerBase`; The replay class has to extend `UnpackedReplay`. That way you can add extra properties. -It is important that you set the `Replay` property so the ReplayControllerBase can work with it. -Example: -```csharp -public override UnpackedReplay CreateUnpackedReplay(ArenaInfo arenaInfo) -{ - Replay = new MyCustomUnpackedReplay(arenaInfo); - return Replay; -} -``` You can see this in action [here](Nodsoft.WowsReplaysUnpack.ExtendedData/ExtendedDataController.cs) -**Method/Property Subscriptions** +### Method/Property Subscriptions When implementing your own controller and extending `ReplayControllerBase` you can subscribe to `EntityMethods` and `EntityProperty` calls by adding a method with an attribute. +You will have to install the `Nodsoft.WowsReplaysUnpack.Generators` nuget package and add the `[ReplayController]` attribute to your controller class. +This will generate the required logic to make the dynamic subscriptions work. + +#### Methods `MethodSubscription("EntityName", "MethodName")` You have a few extra properties on the attribute to configure how the method will be called: @@ -114,6 +123,7 @@ public void OnArenaStateReceived(Entity entity, float packetTime, ...) } ``` +#### Properties `PropertySubscription("EntityName", "PropertyName")` There are no extra properties available and the `Entity entity` parameter is always there. @@ -142,7 +152,47 @@ services.AddWowsReplayUnpacker(builder => builder.AddExtendedData(); }); -ExtendedDataReplay unpackedReplay = (ExtendedDataReplay)replayUnpackerFactory +ExtendedDataReplay unpackedReplay = replayUnpackerFactory .GetExtendedDataUnpacker() .Unpack(File.OpenRead("my-replay.wowsreplay")); ``` + +## Additional Entities +The replay contains a multitude of other entities. If you want to retreive those you have two convenient options we provide. + +### Option 1 - Extension Methods + +```csharp +// Step 1 - Retreive the entity properties you're interested in +var battleLogicProperties = replay.Entities.Single(e => e.Value.Name == "BattleLogic").Value.Properties; +// Step 2 - Use extension methods to cast the properties to their actual type +battleLogicProperties.GetAsDict("propertyName"); +battleLogicProperties.GetAsArr("propertyName"); +battleLogicProperties.GetAsValue("propertyName"); +``` + +An example of this can be seen [here](Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/EntitySerializerSample.cs) in the `ManualExtensions` method. + +### Option 2 - Strong Type Serializing + +Requires the `Nodsoft.WowsReplaysUnpack.Generators` nuget package. + +```csharp +// Step 1 - Create a class representing the entity annotated with the SerializableEntity attribute +[SerializableEntity] +public class BattleLogic { + [DataMember(Name = "state")] + public State State { get; set; } = null!; + + ... +} + +// Step 2 - Use extension method on the replay to deserialize the entity +var battleLogic = replay.DeserializeEntity("BattleLogic"); +``` + +For collections only `List` is currently supported. + +The property mapping is case-sensitive. So you either have to name your properties exactly like they are in the entities properties dictionary or use the `DataMember` attribute. + +An example of this can be seen [here](Nodsoft.WowsReplaysUnpack.Console/Samples/EntitySerializer/EntitySerializerSample.cs) in the `Serializer` method. diff --git a/WoWS-ReplaysUnpack.sln b/WoWS-ReplaysUnpack.sln index cc4aa9b..9f8aa0f 100644 --- a/WoWS-ReplaysUnpack.sln +++ b/WoWS-ReplaysUnpack.sln @@ -26,6 +26,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nodsoft.WowsReplaysUnpack.E EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nodsoft.WowsReplaysUnpack.FileStore", "Nodsoft.WowsReplaysUnpack.FileStore\Nodsoft.WowsReplaysUnpack.FileStore.csproj", "{5278C904-639B-4368-A98C-6F7F79B1683E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nodsoft.WowsReplaysUnpack.Generators", "Nodsoft.WowsReplaysUnpack.Generators\Nodsoft.WowsReplaysUnpack.Generators.csproj", "{3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -60,6 +62,10 @@ Global {5278C904-639B-4368-A98C-6F7F79B1683E}.Debug|Any CPU.Build.0 = Debug|Any CPU {5278C904-639B-4368-A98C-6F7F79B1683E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5278C904-639B-4368-A98C-6F7F79B1683E}.Release|Any CPU.Build.0 = Release|Any CPU + {3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +75,7 @@ Global {18EF6FA2-5AF1-4277-81F4-7104BB35B3BD} = {367BF192-3EC3-4A87-B8E4-3E444E7019D0} {A9D51B91-8D9E-4E8E-A1A7-26BD5223EC53} = {367BF192-3EC3-4A87-B8E4-3E444E7019D0} {5278C904-639B-4368-A98C-6F7F79B1683E} = {367BF192-3EC3-4A87-B8E4-3E444E7019D0} + {3D00DE6B-9FB2-4585-8249-6B28E6D3F3F7} = {367BF192-3EC3-4A87-B8E4-3E444E7019D0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {26B5CF6B-2C64-417B-8149-3DFD8E93D497} diff --git a/WoWS-ReplaysUnpack.sln.DotSettings b/WoWS-ReplaysUnpack.sln.DotSettings new file mode 100644 index 0000000..9294f93 --- /dev/null +++ b/WoWS-ReplaysUnpack.sln.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file