From 10d357829e0122a587073529d0d3c3a599212c4f Mon Sep 17 00:00:00 2001 From: ReinWD Date: Sun, 15 Oct 2023 03:52:01 +0800 Subject: [PATCH 1/9] add 12.9.0 files --- .../clients/wows/versions/12_9_0/__init__.py | 5 + .../wows/versions/12_9_0/battle_controller.py | 1085 +++++++++ .../clients/wows/versions/12_9_0/constants.py | 312 +++ .../wows/versions/12_9_0/players_info.py | 51 + .../AccountReviverComponent.def | 26 + .../component_defs/AchievementsComponent.def | 26 + .../component_defs/AlmanacComponent.def | 32 + .../component_defs/BattlePassComponent.def | 50 + .../component_defs/BrawlBattlesComponent.def | 11 + .../ControllerToAccountConnector.def | 53 + .../DivisionsManagerComponent.def | 107 + .../DivisionsManagerComponentAvatar.def | 16 + .../scripts/component_defs/DockComponent.def | 13 + .../component_defs/GiftListsComponent.def | 17 + .../component_defs/HotFixComponent.def | 28 + .../component_defs/KeyTargetComponent.def | 18 + .../component_defs/LootboxComponent.def | 56 + .../MasterEntityAPIComponent.def | 90 + .../component_defs/MatchmakerComponent.def | 93 + .../component_defs/NewbieQuestComponent.def | 12 + .../component_defs/PVEBattlesComponent.def | 11 + .../component_defs/PdataResetComponent.def | 71 + .../component_defs/RankedBattlesComponent.def | 73 + .../RequestPerformerComponent.def | 23 + .../component_defs/ShipAcesComponent.def | 38 + .../StrategicActionsComponent.def | 59 + .../SuperEntityAPIComponent.def | 72 + .../component_defs/SurveysComponent.def | 29 + .../component_defs/TrainingRoomComponent.def | 111 + .../TrainingRoomsManagerComponent.def | 32 + .../component_defs/UserDataComponent.def | 38 + .../component_defs/VSEventComponent.def | 67 + .../scripts/component_defs/XmppComponent.def | 23 + .../versions/12_9_0/scripts/components.xml | 31 + .../wows/versions/12_9_0/scripts/entities.xml | 20 + .../12_9_0/scripts/entity_defs/Account.def | 511 +++++ .../12_9_0/scripts/entity_defs/Avatar.def | 1246 ++++++++++ .../scripts/entity_defs/BattleEntity.def | 50 + .../scripts/entity_defs/BattleLogic.def | 71 + .../12_9_0/scripts/entity_defs/Building.def | 76 + .../scripts/entity_defs/InteractiveZone.def | 60 + .../12_9_0/scripts/entity_defs/Login.def | 41 + .../scripts/entity_defs/MasterChanger.def | 42 + .../scripts/entity_defs/OfflineEntity.def | 10 + .../entity_defs/ReplayConnectionHandler.def | 24 + .../scripts/entity_defs/ReplayLeech.def | 31 + .../scripts/entity_defs/SmokeScreen.def | 43 + .../12_9_0/scripts/entity_defs/Vehicle.def | 484 ++++ .../12_9_0/scripts/entity_defs/alias.xml | 2019 +++++++++++++++++ .../entity_defs/interfaces/AccountCMDs.def | 382 ++++ .../entity_defs/interfaces/AccountPData.def | 154 ++ .../interfaces/AirDefenceOwner.def | 49 + .../entity_defs/interfaces/AtbaOwner.def | 24 + .../entity_defs/interfaces/AviationOwner.def | 41 + .../interfaces/BattleLogicEntityOwner.def | 32 + .../interfaces/BattleStarterClient.def | 23 + .../entity_defs/interfaces/BuoyancyOwner.def | 67 + .../interfaces/DamageDealerOwner.def | 28 + .../interfaces/DebugDrawEntity.def | 43 + .../interfaces/GiveClientHelper.def | 21 + .../interfaces/HitLocationManagerOwner.def | 180 ++ .../entity_defs/interfaces/ModelOwner.def | 32 + .../entity_defs/interfaces/StatsOwner.def | 23 + .../entity_defs/interfaces/StatsPublisher.def | 29 + .../entity_defs/interfaces/TransactionAPI.def | 39 + .../entity_defs/interfaces/VisionOwner.def | 52 + .../interfaces/VoiceChatClient.def | 23 + .../entity_defs/interfaces/WalletOwner.def | 3 + .../interfaces/WalletProperties.def | 3 + .../entity_defs/interfaces/WeatherOwner.def | 20 + .../scripts/space_defs/GeneralSpaceData.def | 15 + .../wows/versions/12_9_0/scripts/spaces.xml | 3 + .../scripts/user_data_object_defs/Barge.def | 36 + .../user_data_object_defs/Building.def | 58 + .../user_data_object_defs/ControlPoint.def | 98 + .../user_data_object_defs/ConvoyWayPoint.def | 67 + .../user_data_object_defs/DropZone.def | 65 + .../user_data_object_defs/FogPoint.def | 25 + .../user_data_object_defs/MapBorder.def | 15 + .../user_data_object_defs/MapPartInfo.def | 71 + .../user_data_object_defs/MapSeparator.def | 20 + .../user_data_object_defs/Minefield.def | 91 + .../scripts/user_data_object_defs/Prefab.def | 31 + .../user_data_object_defs/SoundedEffect.def | 31 + .../user_data_object_defs/SoundedModel.def | 42 + .../user_data_object_defs/SpaceDebugTool.def | 55 + .../SpatialUIDebugTool.def | 13 + .../user_data_object_defs/SpawnPoint.def | 84 + .../SquadronReticleTool.def | 13 + .../StaticSoundEmitter.def | 17 + .../scripts/user_data_object_defs/Trigger.def | 47 + .../user_data_object_defs/WayPoint.def | 66 + .../12_9_0/scripts/user_data_objects.xml | 19 + 93 files changed, 9757 insertions(+) create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/__init__.py create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/constants.py create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/players_info.py create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BattlePassComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/LootboxComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PdataResetComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RankedBattlesComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RequestPerformerComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ShipAcesComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomsManagerComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/UserDataComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Account.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleEntity.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleLogic.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Building.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/InteractiveZone.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/MasterChanger.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/SmokeScreen.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountCMDs.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountPData.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AirDefenceOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AtbaOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AviationOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DamageDealerOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/ModelOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/TransactionAPI.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VisionOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WeatherOwner.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Barge.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Building.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ControlPoint.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ConvoyWayPoint.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/DropZone.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/FogPoint.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapBorder.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapPartInfo.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapSeparator.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Minefield.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Prefab.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedEffect.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedModel.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpaceDebugTool.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpatialUIDebugTool.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpawnPoint.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SquadronReticleTool.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Trigger.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/WayPoint.def create mode 100644 src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/__init__.py b/src/replay_unpack/clients/wows/versions/12_9_0/__init__.py new file mode 100644 index 00000000..298eeeeb --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/__init__.py @@ -0,0 +1,5 @@ +# coding=utf-8 + +from .battle_controller import BattleController + +__all__ = ['BattleController'] diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py new file mode 100644 index 00000000..fe4853d2 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py @@ -0,0 +1,1085 @@ +# coding=utf-8 +import copy +import logging +import math +import struct + +from io import BytesIO +from replay_unpack.core import IBattleController +from replay_unpack.core.entity import Entity +from replay_unpack.core.entity_def.data_types.nested_types import PyFixedDict +from .constants import DamageStatsType, Category, TaskType, Status + +from renderer.data import ( + PlayerInfo, + Vehicle, + ReplayData, + Events, + Smoke, + Shot, + Torpedo, + Consumable, + Plane, + Ward, + ControlPoint, + Score, + Frag, + Message, + BattleResult, + BuildingInfo, + Building, + Units, + Skills, + AcousticTorpedo, +) +from replay_unpack.utils import ( + unpack_values, + unpack_plane_id, + restricted_loads, +) + + +try: + from .constants import DEATH_TYPES +except ImportError: + DEATH_TYPES = {} +from .players_info import PlayersInfo, PlayerType + + +class BattleController(IBattleController): + def __init__(self): + self._entities = {} + self._achievements = {} + self._ribbons = {} + self._players = PlayersInfo() + self._battle_result = None + self._damage_maps = {name: {} for name in DamageStatsType.ids} + self._shots_damage_map = {} + self._death_map = [] + self._map = "" + self._player_id = None + self._arena_id: int = 0 + self._dead_planes = {} + + Entity.subscribe_method_call("Avatar", "onBattleEnd", self.onBattleEnd) + Entity.subscribe_method_call( + "Avatar", "onArenaStateReceived", self.onArenaStateReceived + ) + Entity.subscribe_method_call( + "Avatar", "onGameRoomStateChanged", self.onPlayerInfoUpdate + ) + Entity.subscribe_method_call( + "Avatar", "receiveVehicleDeath", self.receiveVehicleDeath + ) + Entity.subscribe_method_call( + "Vehicle", "setConsumables", self.onSetConsumable + ) + Entity.subscribe_method_call( + "Avatar", "onAchievementEarned", self.onAchievementEarned + ) + Entity.subscribe_method_call( + "Avatar", "receiveDamageStat", self.receiveDamageStat + ) + Entity.subscribe_method_call( + "Avatar", "receive_planeDeath", self.receive_planeDeath + ) + Entity.subscribe_method_call( + "Avatar", + "onNewPlayerSpawnedInBattle", + self.onNewPlayerSpawnedInBattle, + ) + Entity.subscribe_method_call( + "Vehicle", "receiveDamagesOnShip", self.g_receiveDamagesOnShip + ) + + ####################################################################### + self._owner: dict = {} + self._durations: list[int] = [] + self._time_left: int = 0 + self._battle_stage: int = -1 + self._dict_info: dict[int, PlayerInfo] = {} + self._dict_building_info: dict[int, BuildingInfo] = {} + self._dict_vehicle: dict[int, Vehicle] = {} + self._dict_building: dict[int, Building] = {} + self._dict_smoke: dict[int, Smoke] = {} + self._dict_plane: dict[int, Plane] = {} + self._dict_ward: dict[int, Ward] = {} + self._dict_score: dict[int, Score] = {} + self._dict_control: dict[int, ControlPoint] = {} + self._vehicle_to_id: dict[int, int] = {} + self._dict_events: dict[int, Events] = {} + self._version: str = "" + self._battle_type: int = 0 + self._win_score: int = 1000 + self._packet_time: float = 0.0 + self._battle_result_nt: BattleResult = BattleResult(-1, -1) + + # ACCUMULATORS # + + self._acc_shots: list[Shot] = [] + self._acc_torpedoes: dict[int, Torpedo] = {} + self._acc_hits: list[int] = [] + self._acc_consumables: dict[int, list[Consumable]] = {} + self._acc_frags: list[Frag] = [] + self._acc_message: list[Message] = [] + self._acc_acoustic_torpedoes: dict[int, AcousticTorpedo] = {} + + ####################################################################### + + Entity.subscribe_property_change( + "BattleLogic", "timeLeft", self._update + ) + Entity.subscribe_property_change( + "BattleLogic", "duration", self._set_durations + ) + Entity.subscribe_property_change( + "BattleLogic", "battleStage", self._set_battle_stage + ) + Entity.subscribe_property_change( + "BattleLogic", "battleResult", self._set_battle_result + ) + Entity.subscribe_property_change("Vehicle", "health", self._set_health) + Entity.subscribe_property_change( + "Vehicle", "isAlive", self._set_is_alive + ) + Entity.subscribe_method_call( + "Avatar", "updateMinimapVisionInfo", self._update_position + ) + Entity.subscribe_property_change( + "Vehicle", "isInvisible", self._set_is_invisible + ) + Entity.subscribe_method_call( + "Avatar", + "receiveArtilleryShots", + self._r_shots, + ) + Entity.subscribe_method_call( + "Avatar", "receiveTorpedoes", self._receiveTorpedoes + ) + + Entity.subscribe_property_change( + "Vehicle", "shipConfig", self._modernization + ) + + Entity.subscribe_property_change( + "Vehicle", "crewModifiersCompactParams", self._crew_skills + ) + + Entity.subscribe_method_call( + "Avatar", "receiveShotKills", self._set_hits + ) + + Entity.subscribe_property_change( + "Vehicle", "visibilityFlags", self._set_visibility_flag + ) + + Entity.subscribe_method_call( + "Vehicle", + "consumableUsed", + self._on_consumable_used, + ) + Entity.subscribe_method_call( + "Avatar", + "receive_addMinimapSquadron", + self._add_plane, + ) + Entity.subscribe_method_call( + "Avatar", + "receive_addMinimapSquadron", + self._add_plane, + ) + Entity.subscribe_method_call( + "Avatar", "receive_updateMinimapSquadron", self._update_plane + ) + Entity.subscribe_method_call( + "Avatar", "receive_removeMinimapSquadron", self._remove_plane + ) + + Entity.subscribe_method_call( + "Avatar", "receive_wardAdded", self._add_ward + ) + + Entity.subscribe_method_call( + "Avatar", "receive_wardRemoved", self._remove_ward + ) + Entity.subscribe_nested_property_change( + "SmokeScreen", "points", self._set_smoke_points + ) + Entity.subscribe_property_change( + "BattleLogic", "state", self._set_state + ) + Entity.subscribe_property_change( + "BattleLogic", "battleType", self._set_battle_type + ) + + Entity.subscribe_nested_property_change( + "BattleLogic", + "state.missions.teamsScore", + self._set_score, + ) + Entity.subscribe_property_change( + "Vehicle", "regeneratedHealth", self._set_regenerated_health + ) + Entity.subscribe_property_change( + "Vehicle", "regenCrewHpLimit", self._set_regen_crew_hp_limit + ) + Entity.subscribe_property_change( + "Vehicle", "regenerationHealth", self._set_regeneration_health + ) + Entity.subscribe_method_call( + "Avatar", "onChatMessage", self._on_chat_message + ) + Entity.subscribe_property_change( + "Vehicle", "burningFlags", self._set_burning_flags + ) + Entity.subscribe_property_change( + "Building", "isSuppressed", self._is_suppressed + ) + Entity.subscribe_property_change("Building", "isAlive", self._is_alive) + Entity.subscribe_method_call( + "Avatar", "receiveTorpedoDirection", self._receive_torpedo_dir + ) + Entity.subscribe_property_change( + "Vehicle", "maxHealth", self._set_max_health + ) + Entity.subscribe_property_change( + "InteractiveZone", "componentsState", self._set_caps + ) + Entity.subscribe_nested_property_change( + "InteractiveZone", "componentsState.captureLogic", self._update_caps + ) + Entity.subscribe_nested_property_change( + "Avatar", "privateVehicleState.ribbons", self._update_ribbons + ) + + ########################################################################### + + def _update_caps(self, entity: Entity, cp_l): + cp = entity.properties["client"] + + if not cp["componentsState"]["controlPoint"]: + return + + if cp["teamId"] == self._owner["teamId"] and cp["teamId"] != -1: + relation = 0 + elif cp["teamId"] != self._owner["teamId"] and cp["teamId"] != -1: + relation = 1 + else: + relation = -1 + + cid = cp["componentsState"]["controlPoint"]["index"] + self._dict_control[cid] = ControlPoint( + position=(round(entity.position.x), round(entity.position.z)), + radius=cp["radius"], + team_id=cp["teamId"], + invader_team=cp_l["invaderTeam"], + control_point_type=cp["componentsState"]["controlPoint"]["type"], + progress=cp_l["progress"], + both_inside=cp_l["bothInside"], + has_invaders=cp_l["hasInvaders"], + capture_time=cp_l["captureTime"], + capture_speed=cp_l["captureSpeed"], + relation=relation, + is_visible=cp_l["isVisible"], + ) + + def _set_caps(self, entity: Entity, state): + if not state["controlPoint"]: + return + + cp = entity.properties["client"] + cp_l = state["captureLogic"] + + if cp["teamId"] == self._owner["teamId"] and cp["teamId"] != -1: + relation = 0 + elif cp["teamId"] != self._owner["teamId"] and cp["teamId"] != -1: + relation = 1 + else: + relation = -1 + + cid = state["controlPoint"]["index"] + + self._dict_control[cid] = ControlPoint( + position=(round(entity.position.x), round(entity.position.z)), + radius=cp["radius"], + team_id=cp["teamId"], + invader_team=cp_l["invaderTeam"], + control_point_type=state["controlPoint"]["type"], + progress=cp_l["progress"], + both_inside=cp_l["bothInside"], + has_invaders=cp_l["hasInvaders"], + capture_time=cp_l["captureTime"], + capture_speed=cp_l["captureSpeed"], + relation=relation, + is_visible=cp_l["isVisible"], + ) + + def _set_max_health(self, entity: Entity, max_health): + pid = self._vehicle_to_id[entity.id] + self._dict_info[pid] = self._dict_info[pid]._replace( + max_health=max_health + ) + + # receiveTorpedoDirection(self, ownerId, torpedoId, serverPos, targetYaw, + # targetDepth, speedCoef, curYawSpeed, curPitchSpeed, canReachDepth) + + def _receive_torpedo_dir( + self, + entity: Entity, + vehicle_id: int, + shot_id: int, + pos: tuple, + t_yaw, + t_depth, + speed_coef, + cur_yaw_speed, + cur_pitch_speed, + can_reach_depth, + ): + x, y = map(round, pos[::2]) + self._acc_acoustic_torpedoes[ + int(f"{vehicle_id}{shot_id}") + ] = AcousticTorpedo( + vehicle_id, + int(f"{vehicle_id}{shot_id}"), + x, + y, + t_yaw, + cur_yaw_speed, + ) + + def _is_suppressed(self, entity: Entity, val): + self._dict_building[entity.id] = self._dict_building[ + entity.id + ]._replace(is_suppressed=val) + + def _is_alive(self, entity: Entity, val): + self._dict_building[entity.id] = self._dict_building[ + entity.id + ]._replace(is_alive=val) + + def _on_chat_message( + self, entity: Entity, player_id, namespace, message, unk + ): + if player_id in [0, -1]: + return + + self._acc_message.append( + Message(player_id=player_id, namespace=namespace, message=message) + ) + + def set_packet_time(self, t: float): + self._packet_time = t + + def _set_burning_flags(self, entity, flags): + self._dict_vehicle[entity.id] = self._dict_vehicle[entity.id]._replace( + burn_flags=flags + ) + + def _set_regenerated_health(self, entity, health): + self._dict_vehicle[entity.id] = self._dict_vehicle[entity.id]._replace( + regenerated_health=health + ) + + def _set_regen_crew_hp_limit(self, entity, health): + self._dict_vehicle[entity.id] = self._dict_vehicle[entity.id]._replace( + regen_crew_hp_limit=health + ) + + def _set_regeneration_health(self, entity, health): + self._dict_vehicle[entity.id] = self._dict_vehicle[entity.id]._replace( + regeneration_health=health + ) + + def _set_score(self, entity, score): + if score["teamId"] == self._owner["teamId"]: + relation = 0 + else: + relation = 1 + self._dict_score[relation] = self._dict_score[relation]._replace( + score=score["score"] + ) + + def _set_battle_type(self, entity, battle_type): + self._battle_type = battle_type + + def _set_state(self, entity, state): + self._win_score = state["missions"]["teamWinScore"] + + for team_score in state["missions"]["teamsScore"]: + if team_score["teamId"] == self._owner["teamId"]: + relation = 0 + else: + relation = 1 + self._dict_score[relation] = Score(relation, team_score["score"]) + + def _add_ward( + self, entity, plane_id, position, radius, duration, team_id, vehicle_id + ): + radius = radius if radius else 60 + self._dict_ward[plane_id] = Ward( + plane_id=plane_id, + position=tuple(map(round, position[::2])), + radius=radius, + relation=self._dict_info[self._vehicle_to_id[vehicle_id]].relation, + vehicle_id=vehicle_id, + ) + + def _remove_ward(self, entity, plane_id): + self._dict_ward.pop(plane_id) + + @staticmethod + def _time_to_win(reward, period, score_left): + if not reward: + return -1 + + return period * score_left / reward + + def _times_to_win(self): + if not self._time_left: + return None + + try: + # TODO: drop assumption that all caps have same property? + mission = self.battle_logic.properties["client"]["state"][ + "missions" + ]["hold"][0] + reward, period = mission["reward"], mission["period"] + except (TypeError, IndexError, KeyError): + return None + + ally_tick, enemy_tick = 0, 0 + for cap in self._dict_control.values(): + if not cap.both_inside and cap.team_id != -1: + if cap.relation == 0: + ally_tick += reward + else: + enemy_tick += reward + + ally_ttw = self._time_to_win( + ally_tick, period, self._win_score - self._dict_score[0].score + ) + enemy_ttw = self._time_to_win( + enemy_tick, period, self._win_score - self._dict_score[1].score + ) + return ally_ttw, enemy_ttw + + def _update(self, entity, time_left): + self._time_left = time_left + + if self._battle_stage != 0: + return + + battle_time = self._durations[-1] - self._time_left + evt = Events( + time_left=self._time_left, + evt_vehicle=copy.copy(self._dict_vehicle), + evt_building=copy.copy(self._dict_building), + evt_smoke=copy.copy(self._dict_smoke), + evt_shot=copy.copy(self._acc_shots), + evt_torpedo=copy.copy(self._acc_torpedoes), + evt_hits=copy.copy(self._acc_hits), + evt_consumable=copy.copy(self._acc_consumables), + evt_plane=copy.copy(self._dict_plane), + evt_ward=copy.copy(self._dict_ward), + evt_control=dict(sorted(self._dict_control.items())), + evt_score=copy.copy(self._dict_score), + evt_damage_maps=copy.deepcopy(self._damage_maps), + evt_frag=copy.copy(self._acc_frags), + evt_ribbon=copy.deepcopy(self._ribbons), + evt_times_to_win=self._times_to_win(), + evt_achievement=copy.deepcopy(self._achievements), + evt_chat=copy.deepcopy(self._acc_message), + evt_acoustic_torpedo=copy.deepcopy(self._acc_acoustic_torpedoes), + ) + + self._dict_events[battle_time] = evt + self._acc_shots.clear() + self._acc_torpedoes.clear() + self._acc_hits.clear() + self._acc_consumables.clear() + self._acc_frags.clear() + self._acc_message.clear() + self._acc_acoustic_torpedoes.clear() + + def _add_plane( + self, entity: Entity, plane_id: int, team_id, params_id, pos, unk + ): + owner_id, index, purpose, departures = unpack_plane_id(plane_id) + + try: + relation = self._dict_info[self._vehicle_to_id[owner_id]].relation + except KeyError: + if self._owner["teamId"] == team_id and team_id != -1: + relation = 0 + elif self._owner["teamId"] != team_id and team_id != -1: + relation = 1 + else: + relation = -1 + + self._dict_plane[plane_id] = Plane( + plane_id=plane_id, + owner_id=owner_id, + params_id=params_id, + index=index, + purpose=purpose, + departures=departures, + relation=relation, + position=tuple(map(round, pos)), + ) + + def _update_plane(self, entity: Entity, plane_id: int, pos): + + self._dict_plane[plane_id] = self._dict_plane[plane_id]._replace( + position=tuple(map(round, pos)) + ) + + def _remove_plane(self, entity: Entity, plane_id: int): + self._dict_plane.pop(plane_id) + + def _on_consumable_used(self, entity: Entity, cid, dur): + consumables = self._acc_consumables.setdefault(entity.id, []) + consumables.append( + Consumable(ship_id=entity.id, consumable_id=cid, duration=dur) + ) + + def _set_visibility_flag(self, entity: Entity, flag: int): + self._dict_vehicle[entity.id] = self._dict_vehicle[entity.id]._replace( + visibility_flag=flag + ) + + def _set_hits(self, entity: Entity, data): + for item in data: + for kill in item["kills"]: + self._acc_hits.append( + int(f"{item['ownerID']}{kill['shotID']}") + ) + + def _receiveTorpedoes(self, entity: Entity, shots): + for shot in shots: + owner_id = shot["ownerID"] + for torpedo in shot["torpedoes"]: + x, y = map(round, torpedo["pos"][::2]) + a, b = torpedo["dir"][::2] + yaw = math.atan2(a, b) + speed_bw = math.hypot(a, b) + shot_id = torpedo["shotID"] + self._acc_torpedoes[int(f"{owner_id}{shot_id}")] = Torpedo( + params_id=shot["paramsID"], + owner_id=owner_id, + origin=(x, y), + shot_id=int(f"{owner_id}{torpedo['shotID']}"), + yaw=yaw, + speed_bw=speed_bw, + ) + + def _crew_skills(self, entity: Entity, params): + self._dict_info[self._vehicle_to_id[entity.id]] = self._dict_info[ + self._vehicle_to_id[entity.id] + ]._replace(skills=Skills(*params["learnedSkills"])) + + def _modernization(self, entity: Entity, config: bytes): + + with BytesIO(config) as bio: + # bio.seek(3 * 4, 1) + (unknown_1,) = struct.unpack(" dict + if player_type == PlayerType.PLAYER: + property_map = id_property_map + elif player_type == PlayerType.BOT: + property_map = id_property_map_bots + elif player_type == PlayerType.BUILDING: + property_map = id_property_map_buildings + elif player_type == PlayerType.OBSERVER: + property_map = id_property_map_observer + else: + raise RuntimeError("Unknown player") + + player_dict = dict() + for key, value in player_info: + player_dict[property_map[key]] = value + return player_dict + + def create_or_update_players( + self, players_info, players_type=PlayerType.PLAYER + ): + for player_info in players_info: + player_dict = self._convert_to_dict(player_info, players_type) + player_dict.update({"playerType": players_type}) + self._players.setdefault(player_dict["id"], {}).update(player_dict) + + def get_info(self): + return self._players + + def __repr__(self): + return str(self._players) diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def new file mode 100644 index 00000000..b8221da8 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + UINT8 + + + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def new file mode 100644 index 00000000..5f5fc136 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def @@ -0,0 +1,26 @@ + + + + + + + + + + + + + UINT64 + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def new file mode 100644 index 00000000..f21b6342 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def @@ -0,0 +1,32 @@ + + + + ZIPPED_BLOB + + none + + + + ZIPPED_BLOB + + none + + + + UINT16 + UINT8 + BOOL + + + + + + UINT16 + UINT8 + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BattlePassComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BattlePassComponent.def new file mode 100644 index 00000000..d5f5da07 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def new file mode 100644 index 00000000..4d7ec3a5 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def new file mode 100644 index 00000000..d6e98178 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def @@ -0,0 +1,53 @@ + + + + + <_pingAccountCounter/> + <_ControllerToAccountConnector__accountCheckVaryID/> + <_ControllerToAccountConnector__accountWaiter/> + + + + + + + + UINT16 + + + MAILBOX + + + + + + MAILBOX + + + + + + MASTER_ID + MAILBOX + ACCOUNT_LOAD_ARGS + + + MAILBOX + + + + + + ZIPPED_BLOB + UINT8 + MAILBOX + + + + + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponent.def new file mode 100644 index 00000000..736ce69d --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def new file mode 100644 index 00000000..219b8195 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def @@ -0,0 +1,16 @@ + + + + + + ENTITY_ID + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def new file mode 100644 index 00000000..0eebfe8b --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def @@ -0,0 +1,13 @@ + + + + + + UINT8 + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def new file mode 100644 index 00000000..b24b17d3 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def @@ -0,0 +1,17 @@ + + + + + + + UINT8 + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def new file mode 100644 index 00000000..0e0c1660 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def @@ -0,0 +1,28 @@ + + + + BLOB + + + + + + BOOL + + + + + + + + + PYTHON + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def new file mode 100644 index 00000000..9589ecff --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def @@ -0,0 +1,18 @@ + + + + + + + + + UINT32 + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/LootboxComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/LootboxComponent.def new file mode 100644 index 00000000..1ca8860d --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def new file mode 100644 index 00000000..c8e2dfe9 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def @@ -0,0 +1,90 @@ + + + <_MasterEntityAPIComponent__loadEntitiesHelper/> + + + + + CLUSTER_ID + STRING + ZIPPED_BLOB + + + MAILBOX + + + + + + DB_ID + BOOL + + + MAILBOX + + + + + DB_ID + ACCOUNT_LOAD_ARGS + + MAILBOX + + + + + + STRING + DB_ID + ZIPPED_BLOB + + + MAILBOX + + + + + + DB_ID + ZIPPED_BLOB + + + UINT8 + + + + + + CLUSTER_ID + CREATE_BATTLE_SESSION_PARAMS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_PRE_BATTLE_PARAMS + + + MAILBOX + + + + + + CLUSTER_ID + CREATE_TRAINING_ROOM_PARAMS + + + MAILBOX + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def new file mode 100644 index 00000000..4cd46130 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def @@ -0,0 +1,93 @@ + + + <_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 + + + + + + + + + + + QUEUE_TYPE + SHIP_LEVEL + UINT8 + INT32 + UNICODE_STRING + + + + + + ENQUEUE_DATA + + + + + + ENQUEUE_DATA + + + + + + UINT8 + + + + + + + + QUEUE_TYPE + SHIP_ID + PICKLED_BLOB + + + + + + GAMEPARAMS_ID + PICKLED_BLOB + + + + + + UINT8 + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def new file mode 100644 index 00000000..27076f69 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def new file mode 100644 index 00000000..4d7ec3a5 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PdataResetComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PdataResetComponent.def new file mode 100644 index 00000000..3a3a7703 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RankedBattlesComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RankedBattlesComponent.def new file mode 100644 index 00000000..25d3950a --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RequestPerformerComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RequestPerformerComponent.def new file mode 100644 index 00000000..0cbd7463 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ShipAcesComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ShipAcesComponent.def new file mode 100644 index 00000000..39558d90 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def new file mode 100644 index 00000000..cbf1e603 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def @@ -0,0 +1,59 @@ + + + + + + STRING + + + BOOL + + + + + + STRING + + + BOOL + + + + + + BOOL + + + + + + UINT16 + + + + + + + + + + + + STRING + UINT16 + ARRAYSTRING + + + + + STRING + UINT8 + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def new file mode 100644 index 00000000..704bac8d --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def @@ -0,0 +1,72 @@ + + + + + + + + + + + + + DB_ID + ACCOUNT_LOAD_ARGS + + + MAILBOX + + + + + + DB_ID + ACCOUNT_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def new file mode 100644 index 00000000..c8283cf1 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def @@ -0,0 +1,29 @@ + + + + + + + + + UINT32 + ARRAYUINT8 + + + + + + + UINT32 + UINT32 + ARRAYUINT8 + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomComponent.def new file mode 100644 index 00000000..28865c83 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomsManagerComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomsManagerComponent.def new file mode 100644 index 00000000..5736b90c --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/UserDataComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/UserDataComponent.def new file mode 100644 index 00000000..c33319ad --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def new file mode 100644 index 00000000..6a415c36 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def new file mode 100644 index 00000000..10ac5f76 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def @@ -0,0 +1,23 @@ + + + + MSGPACK_BLOB + + + BOOL + + + BOOL + + + BOOL + + + BOOL + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml new file mode 100644 index 00000000..da70c306 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml new file mode 100644 index 00000000..dadadb84 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Account.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Account.def new file mode 100644 index 00000000..04ca791d --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def new file mode 100644 index 00000000..77f648fc --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def @@ -0,0 +1,1246 @@ + + + + + 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 + + + + 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 + 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 + + + ARRAY + SUBMARINE_HYDROPHONE_TARGET_INFO + + + + + + + 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 + SHOOT_POSITION + SHOOT_POSITION + 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 + 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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleEntity.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleEntity.def new file mode 100644 index 00000000..d43c0ecf --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleLogic.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleLogic.def new file mode 100644 index 00000000..a4c32e62 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Building.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Building.def new file mode 100644 index 00000000..3b564a8c --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/InteractiveZone.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/InteractiveZone.def new file mode 100644 index 00000000..ac418ba5 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def new file mode 100644 index 00000000..c0a05f53 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def @@ -0,0 +1,41 @@ + + + + + GiveClientHelper + + + + + + UINT32 + UINT8 + STRING + + + + + UINT8 + UINT64 + + + + + UINT32 + UINT64 + ARRAY + STRING + + + + + + + + + UINT64 + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/MasterChanger.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/MasterChanger.def new file mode 100644 index 00000000..73afe59e --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def new file mode 100644 index 00000000..c5b133b5 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def new file mode 100644 index 00000000..168963dc --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def @@ -0,0 +1,24 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + + + + + + + UINT64 + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def new file mode 100644 index 00000000..c815da48 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def @@ -0,0 +1,31 @@ + + + + + GiveClientHelper + + + + + UINT64 + + + BLOB + + + BLOB + + + + + + + UINT64 + + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/SmokeScreen.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/SmokeScreen.def new file mode 100644 index 00000000..cc5e3eae --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def new file mode 100644 index 00000000..949637f9 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def @@ -0,0 +1,484 @@ + + + + + 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 + + + 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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml new file mode 100644 index 00000000..276c9187 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml @@ -0,0 +1,2019 @@ + + 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 + + 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 + + FIELD_ID + ARRAYFIELD_LAYER_PACK + + + + + FIXED_DICT + + UINT16 + ENTITY_ID + GAMEPARAMS_ID + VECTOR3 + FLOAT + + + + + 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 + ARRAYMINEFIELD_INFO + + + + + 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 + + + + FIXED_DICT + + UINT8 + BOOL + UINT8 + PICKLED_BLOB + + AccountLoadArgsDef.converter + + + + 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 + + + + USER_TYPE + Converters.ShootPositionConverter.converter + + + + 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 + + + + 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 + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountCMDs.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountCMDs.def new file mode 100644 index 00000000..d40a2a0b --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountPData.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountPData.def new file mode 100644 index 00000000..30b9900b --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AirDefenceOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AirDefenceOwner.def new file mode 100644 index 00000000..be028028 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AtbaOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AtbaOwner.def new file mode 100644 index 00000000..dbb40394 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AviationOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AviationOwner.def new file mode 100644 index 00000000..de1cdabe --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def new file mode 100644 index 00000000..eee35414 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def new file mode 100644 index 00000000..5b58fef5 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def @@ -0,0 +1,23 @@ + + + + + UINT8 + + + + + STRING + MAILBOX + + + + + PYTHON + + + INT64 + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def new file mode 100644 index 00000000..a4372583 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def @@ -0,0 +1,67 @@ + + + + + + + + + + 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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DamageDealerOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DamageDealerOwner.def new file mode 100644 index 00000000..e398f8ad --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def new file mode 100644 index 00000000..dc9a3987 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def @@ -0,0 +1,43 @@ + + + + STRING + BLOB + + + VECTOR3 + VECTOR3 + UINT32 + UINT32 + + + VECTOR3 + FLOAT32 + UINT32 + UINT8 + UINT32 + + + VECTOR3 + FLOAT32 + UINT32 + UINT32 + + + VECTOR3 + VECTOR3 + VECTOR3 + FLOAT32 + + + VECTOR3 + FLOAT32 + FLOAT32 + + + VECTOR3 + VECTOR3 + FLOAT32 + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def new file mode 100644 index 00000000..2436f8ce --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def @@ -0,0 +1,21 @@ + + + TransactionAPI + + + + + + + <_GiveClientHelper__logName/> + + + + + MAILBOX + + + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def new file mode 100644 index 00000000..567ab656 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/ModelOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/ModelOwner.def new file mode 100644 index 00000000..02f4bba8 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def new file mode 100644 index 00000000..0c5d2ca3 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def @@ -0,0 +1,23 @@ + + + + BLOB + + + + + + + BLOB + BLOB + + + + + + + + + <_StatsOwner__sendStatsVary/> + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def new file mode 100644 index 00000000..d8f1e989 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def @@ -0,0 +1,29 @@ + + + + + + STRING + INT32 + BOOL + + + + + + STRING + FLOAT + BOOL + + + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/TransactionAPI.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/TransactionAPI.def new file mode 100644 index 00000000..bbcd28d8 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VisionOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VisionOwner.def new file mode 100644 index 00000000..e71796b9 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def new file mode 100644 index 00000000..22266455 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def @@ -0,0 +1,23 @@ + + + + + + + + + + + + BLOB + + + + + + BLOB + 2 + + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def new file mode 100644 index 00000000..09db9d28 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def new file mode 100644 index 00000000..09db9d28 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WeatherOwner.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WeatherOwner.def new file mode 100644 index 00000000..e97f8916 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def new file mode 100644 index 00000000..2113b3c8 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def @@ -0,0 +1,15 @@ + + + + + + STRING + + + + UINT32 + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml new file mode 100644 index 00000000..d4be0b43 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Barge.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Barge.def new file mode 100644 index 00000000..ceefbfb7 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Building.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Building.def new file mode 100644 index 00000000..ee4197b3 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ControlPoint.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ControlPoint.def new file mode 100644 index 00000000..81599155 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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 + LMY003 + + + + + BOOL + True + False + + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ConvoyWayPoint.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ConvoyWayPoint.def new file mode 100644 index 00000000..12f1559b --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/DropZone.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/DropZone.def new file mode 100644 index 00000000..7dd947ab --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/FogPoint.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/FogPoint.def new file mode 100644 index 00000000..9e3d0f01 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapBorder.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapBorder.def new file mode 100644 index 00000000..d685eead --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapPartInfo.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapPartInfo.def new file mode 100644 index 00000000..49a49dc6 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapSeparator.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapSeparator.def new file mode 100644 index 00000000..41adc284 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Minefield.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Minefield.def new file mode 100644 index 00000000..c207ef32 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Prefab.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Prefab.def new file mode 100644 index 00000000..f99b1289 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedEffect.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedEffect.def new file mode 100644 index 00000000..d56c21a4 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedEffect.def @@ -0,0 +1,31 @@ + + CLIENT + + + + STRING + true + + + + STRING + true + + + + STRING + true + + + + BOOL + true + + + + FLOAT32 + true + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedModel.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedModel.def new file mode 100644 index 00000000..75aea60e --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SoundedModel.def @@ -0,0 +1,42 @@ + + CLIENT + Enable + + + STRING + true + + + + STRING + True + + + + + STRING + True + + + + STRING + True + + + + FLOAT32 + 1.0 + True + + + + STRING + True + + + + BOOL + False + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpaceDebugTool.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpaceDebugTool.def new file mode 100644 index 00000000..68e235a4 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpatialUIDebugTool.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpatialUIDebugTool.def new file mode 100644 index 00000000..1bf02987 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpawnPoint.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpawnPoint.def new file mode 100644 index 00000000..396fd682 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SquadronReticleTool.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SquadronReticleTool.def new file mode 100644 index 00000000..c5e1eec2 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def new file mode 100644 index 00000000..db225bca --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def @@ -0,0 +1,17 @@ + + CLIENT + + + + STRING + true + + + + STRING + + true + + + + diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Trigger.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Trigger.def new file mode 100644 index 00000000..2175204a --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/WayPoint.def b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/WayPoint.def new file mode 100644 index 00000000..f6a3ce91 --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_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/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml new file mode 100644 index 00000000..85c4407b --- /dev/null +++ b/src/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + From c678045f2ca70b7dfedb0a40f6e43803b16d8092 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Sun, 15 Oct 2023 20:04:29 +0800 Subject: [PATCH 2/9] first buggy version of interpolation --- src/interpolation/Interpolation.py | 60 ++++++ src/interpolation/interpolator/liner.py | 268 ++++++++++++++++++++++++ src/render.py | 29 ++- 3 files changed, 347 insertions(+), 10 deletions(-) create mode 100644 src/interpolation/Interpolation.py create mode 100644 src/interpolation/interpolator/liner.py diff --git a/src/interpolation/Interpolation.py b/src/interpolation/Interpolation.py new file mode 100644 index 00000000..7d4bdd16 --- /dev/null +++ b/src/interpolation/Interpolation.py @@ -0,0 +1,60 @@ +from renderer.data import ReplayData, Events +from interpolation.interpolator.liner import LinerInterpolationer +import math +import copy +import logging +import collections +from tqdm import tqdm + +class Interpolator(): + def interpolate(self, + replay_info: ReplayData, + fpsTarget=60, + speedScale=6.0, + method="liner" + ): + logging.info("started interpolating") + # add more frames in replays to support higher fps + # by default, one frame in game represents 1 second + origTotLen=len(replay_info.events) + # number of events in one sec + evtsPerSec=fpsTarget/speedScale + + # total events + afterLen=int((origTotLen - 1)/evtsPerSec) + 1 + + newRepInfo=[] + for i in tqdm(range(origTotLen)): + currentLenTarget=evtsPerSec*(i+1) + # in case speed scale is faster than 60 events per sec + if currentLenTarget <= len(newRepInfo): + continue + + originEvt=replay_info.events[i+2] + newRepInfo.append(originEvt) + if originEvt.last_frame : + break + nextEvt=replay_info.events[i+3] + + eventsToAdd=math.floor(currentLenTarget - len(newRepInfo)) - 1 + + match method: + case "liner": + # liner implementation + for item in (LinerInterpolationer().doLinerInterpolation(originEvt, nextEvt, eventsToAdd)): + newRepInfo.append(item) + case "bezier": + # todo + raise NotImplementedError("not implemented") + logging.info("interpolation complete") + tmp = replay_info._asdict() + tmp['events']=dict(zip(range(len(newRepInfo)), newRepInfo)) + return toNamedTuple('ReplayData', tmp) + +def toNamedTuple(name: str, evt: dict): + keyList=evt.keys() + valueList=evt.values() + tmpTuple=collections.namedtuple(name, keyList) + return tmpTuple._make(valueList) + + \ No newline at end of file diff --git a/src/interpolation/interpolator/liner.py b/src/interpolation/interpolator/liner.py new file mode 100644 index 00000000..68434a70 --- /dev/null +++ b/src/interpolation/interpolator/liner.py @@ -0,0 +1,268 @@ +from typing import NamedTuple, Optional +from renderer.data import ( + PlayerInfo, + Vehicle, + ReplayData, + Events, + Smoke, + Shot, + Torpedo, + Consumable, + Plane, + Ward, + ControlPoint, + Score, + Frag, + Message, + BattleResult, + BuildingInfo, + Building, + Units, + Skills, + AcousticTorpedo, +) +import math +import copy +import logging +import collections + +class VehicleDiff(NamedTuple): + x: float + y: float + yaw: float + regenerated_health: float + regen_crew_hp_limit: float + regeneration_health: float + +class PlaneDiff(NamedTuple): + x: float + y: float + +class ShotDiff(NamedTuple): + origX: float + origY: float + destX: float + destY: float + +class TorpedoDiff(NamedTuple): + x: float + y: float + yaw: float + +class AcousticTorpedoDiff(NamedTuple): + x: float + y: float + yaw: float + +# dict key is id of elements(vehicle_id, plane_id, etc.). +class LinerDiff(NamedTuple): + vehicleDiff: dict[int, VehicleDiff] + planeDiff: dict[int, PlaneDiff] + shotDiff: dict[int, ShotDiff] + torpedoDiff: dict[int, TorpedoDiff] + acousticTorpedoDiff: dict[int, AcousticTorpedoDiff] + +class LinerInterpolationer: + + def __init__(self) -> None: + pass + + def doLinerInterpolation(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result = [] + if eventsToAdd <= 0 : + return result + diffData=self.calcDiff(originEvt, nextEvt, eventsToAdd) + currentEvt = copy.deepcopy(originEvt) + for i in range(eventsToAdd): + tmpEvt = currentEvt._asdict() + self.applyDiffData(diffData, tmpEvt) + currentEvt = toNamedTuple('Events', tmpEvt) + result.append(currentEvt) + return result + + + def calcDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=LinerDiff( + vehicleDiff=self.calcVehicle(originEvt, nextEvt, eventsToAdd), + planeDiff=self.calcPlaneDiff(originEvt, nextEvt, eventsToAdd), + shotDiff=self.calcShotDiff(originEvt, nextEvt, eventsToAdd), + torpedoDiff=self.calcTorpedoDiff(originEvt, nextEvt, eventsToAdd), + acousticTorpedoDiff=self.calcAcousticTorpedoDiff(originEvt, nextEvt, eventsToAdd) + ) + return result + + def calcVehicle(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=dict() + if eventsToAdd <= 0: + return result + for id, vehicle in originEvt.evt_vehicle.items(): + nextVehicle=nextEvt.evt_vehicle.get(id) + if nextVehicle == None: + continue + result[id]=VehicleDiff( + float(nextVehicle.x - vehicle.x)/ float(eventsToAdd), + float(nextVehicle.y - vehicle.y)/ float(eventsToAdd), + (nextVehicle.yaw - vehicle.yaw )/ eventsToAdd, + (nextVehicle.regenerated_health - vehicle.regenerated_health)/ eventsToAdd, + (nextVehicle.regen_crew_hp_limit - vehicle.regen_crew_hp_limit)/ eventsToAdd, + (nextVehicle.regeneration_health - vehicle.regeneration_health)/ eventsToAdd + ) + + return result + + def calcPlaneDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=dict() + if eventsToAdd <= 0: + return result + for id, plane in originEvt.evt_plane.items(): + nextPlane=nextEvt.evt_plane.get(id) + if nextPlane == None: + continue + result[id]=PlaneDiff( + float(nextPlane.position[0] - plane.position[0])/ float(eventsToAdd), + float(nextPlane.position[1] - plane.position[1])/ float(eventsToAdd) + ) + + return result + + def calcShotDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=dict() + if eventsToAdd <= 0: + return result + for shot in originEvt.evt_shot: + id=shot.shot_id + + nextShot=None + for tmp in nextEvt.evt_shot: + if tmp.shot_id==id: + nextShot=tmp + break + if nextShot == None: + continue + result[id]=ShotDiff( + float(nextShot.origin[0] - shot.origin[0])/ float(eventsToAdd), + float(nextShot.origin[1] - shot.origin[1])/ float(eventsToAdd), + float(nextShot.destination[0] - shot.destination[0])/ float(eventsToAdd), + float(nextShot.destination[1] - shot.destination[1])/ float(eventsToAdd), + ) + + return result + + def calcTorpedoDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=dict() + if eventsToAdd <= 0: + return result + for id, torpedo in originEvt.evt_torpedo.items(): + nextTorpedo=nextEvt.evt_torpedo.get(id) + if nextTorpedo == None: + continue + result[id]=TorpedoDiff( + float(nextTorpedo.x - torpedo.x)/ float(eventsToAdd), + float(nextTorpedo.y - torpedo.y)/ float(eventsToAdd), + (nextTorpedo.yaw - torpedo.yaw )/ eventsToAdd, + ) + + return result + + def calcAcousticTorpedoDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): + result=dict() + if eventsToAdd <= 0: + return result + for id, acousticTorpedo in originEvt.evt_acoustic_torpedo.items(): + nextAcousticTorpedo=nextEvt.evt_acoustic_torpedo.get(id) + if nextAcousticTorpedo == None: + continue + result[id]=TorpedoDiff( + float(nextAcousticTorpedo.x - acousticTorpedo.x)/ float(eventsToAdd), + float(nextAcousticTorpedo.y - acousticTorpedo.y)/ float(eventsToAdd), + (nextAcousticTorpedo.yaw - acousticTorpedo.yaw )/ eventsToAdd, + ) + + return result + + + def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): + tmp=[] + for id, vehicle in currentEvt['evt_vehicle'].items(): + vehicle: Vehicle + diffVehicle = diffData.vehicleDiff.get(id) + diffVehicle: VehicleDiff + + if diffVehicle == None: + logging.debug("diffVehicle: id %s is none.", vehicle.vehicle_id) + continue + dic = vehicle._asdict() + dic['x']=round(dic['x'] + diffVehicle.x) + dic['y']=round(dic['y'] + diffVehicle.y) + dic['yaw']=round(dic['yaw'] + diffVehicle.yaw) + dic['regenerated_health']=dic['regenerated_health']+diffVehicle.regenerated_health + dic['regen_crew_hp_limit']=dic['regen_crew_hp_limit']+diffVehicle.regen_crew_hp_limit + dic['regeneration_health']=dic['regeneration_health']+diffVehicle.regeneration_health + + currentEvt['evt_vehicle'][id]=toNamedTuple('Vehicle', dic) + + for id, plane in currentEvt['evt_plane'].items(): + plane: Plane + diffPlane = diffData.planeDiff.get(id) + diffPlane: PlaneDiff + + if diffPlane == None: + logging.debug("diffPlane: id %s is none.", id) + continue + dic=plane._asdict() + dic['position']=tuple([ + dic['position'][0]+diffPlane.x, + dic['position'][1]+diffPlane.y] + ) + + currentEvt['evt_plane'][id]=toNamedTuple('Plane', dic) + for i in range(len(currentEvt['evt_shot'])): + shot = currentEvt['evt_shot'][i] + id = shot.shot_id + shot: Shot + diffShot = diffData.shotDiff.get(id) + diffShot: ShotDiff + + if diffShot == None: + logging.debug("diffShot: id %s is none.", id) + continue + dic=shot._asdict() + origOrigin=dic['origin'] + origDest=dic['destnation'] + dic['origin']=tuple([origOrigin[0]+diffShot.origX,origOrigin[1]+diffShot.origY]) + dic['destnation']=tuple([origDest[0]+diffShot.destX,origDest[1]+diffShot.destY]) + currentEvt['evt_shot'][i]=toNamedTuple('Shot', dic) + for id, torpedo in currentEvt['evt_torpedo'].items(): + torpedo: Torpedo + diffTorpedo = diffData.torpedoDiff.get(id) + diffTorpedo: TorpedoDiff + + if diffTorpedo == None: + logging.debug("diffTorpedo: id %s is none.", id) + continue + dic=torpedo._asdict() + origOrigin=dic['origin'] + dic['origin']=tuple(origOrigin[0]+diffTorpedo.x,origOrigin[1]+diffTorpedo.y) + dic['yaw']=dic['yaw']+diffTorpedo.yaw + currentEvt['evt_torpedo'][id]=toNamedTuple('Torpedo', dic) + + for id, acoustic_torpedo in currentEvt['evt_acoustic_torpedo'].items(): + acoustic_torpedo: Torpedo + diffAcousticTorpedo = diffData.acousticTorpedoDiff.get(id) + diffAcousticTorpedo: AcousticTorpedoDiff + + if diffAcousticTorpedo == None: + logging.debug("diffAcousticTorpedo: id %s is none.", id) + continue + dic=acoustic_torpedo._asdict() + dic['x']=dic['x']+diffAcousticTorpedo.x + dic['y']=dic['y']+diffAcousticTorpedo.y + dic['yaw']=dic['yaw']+diffTorpedo.yaw + currentEvt['evt_acoustic_torpedo'][id]=toNamedTuple('AcousticTorpedo', dic) + + +def toNamedTuple(name: str, evt: dict): + keyList=evt.keys() + valueList=evt.values() + tmpTuple=collections.namedtuple(name, keyList) + return tmpTuple._make(valueList) diff --git a/src/render.py b/src/render.py index 2ee163d4..573b3504 100644 --- a/src/render.py +++ b/src/render.py @@ -2,21 +2,21 @@ from renderer.render import Renderer from replay_parser import ReplayParser from renderer.utils import LOGGER +from interpolation.Interpolation import Interpolator - -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument("--replay", type=str, required=True) - namespace = parser.parse_args() - path = Path(namespace.replay) +def run(pathStr): + path = Path(pathStr) video_path = path.parent.joinpath(f"{path.stem}.mp4") - with open(namespace.replay, "rb") as f: + with open(path, "rb") as f: LOGGER.info("Parsing the replay file...") replay_info = ReplayParser( f, strict=True, raw_data_output=False ).get_info() + LOGGER.info("before interpolation: replay_info length: %d", len(replay_info["hidden"]["replay_data"].events)) + replay_info["hidden"]["replay_data"]=Interpolator().interpolate( + replay_info["hidden"]["replay_data"] + ) + LOGGER.info("after interpolation: replay_info length: %d", len(replay_info["hidden"]["replay_data"].events)) LOGGER.info("Rendering the replay file...") renderer = Renderer( replay_info["hidden"]["replay_data"], @@ -24,6 +24,15 @@ enable_chat=True, use_tqdm=True, ) - renderer.start(str(video_path)) + renderer.start(str(video_path), fps=60 ) LOGGER.info(f"The video file is at: {str(video_path)}") LOGGER.info("Done.") + +if __name__ == "__main__": + run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") +# import argparse + +# parser = argparse.ArgumentParser() +# parser.add_argument("--replay", type=str, required=True) +# namespace = parser.parse_args() +# run(namespace.replay) \ No newline at end of file From d1e9d55a4ebea7c61d896da71d6de15a251a7e86 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Mon, 16 Oct 2023 00:46:20 +0800 Subject: [PATCH 3/9] fix shot torpedo and other problems --- src/interpolation/Interpolation.py | 19 ++++++------ src/interpolation/interpolator/liner.py | 31 ++++++++++++++++--- src/render.py | 13 ++++++-- src/renderer/data.py | 5 +-- src/renderer/layers/shot.py | 7 ++++- src/renderer/layers/torpedo.py | 8 +++++ src/renderer/render.py | 14 +++++---- .../versions/0_11_10/battle_controller.py | 1 + .../versions/0_11_11/battle_controller.py | 1 + .../wows/versions/0_11_6/battle_controller.py | 1 + .../wows/versions/0_11_7/battle_controller.py | 1 + .../wows/versions/0_11_8/battle_controller.py | 1 + .../wows/versions/0_11_9/battle_controller.py | 1 + .../wows/versions/12_0_0/battle_controller.py | 1 + .../wows/versions/12_1_0/battle_controller.py | 1 + .../wows/versions/12_2_0/battle_controller.py | 1 + .../wows/versions/12_3_1/battle_controller.py | 1 + .../wows/versions/12_4_0/battle_controller.py | 1 + .../wows/versions/12_5_0/battle_controller.py | 1 + .../wows/versions/12_6_0/battle_controller.py | 1 + .../wows/versions/12_7_0/battle_controller.py | 1 + .../wows/versions/12_8_0/battle_controller.py | 1 + .../wows/versions/12_9_0/battle_controller.py | 1 + 23 files changed, 88 insertions(+), 25 deletions(-) diff --git a/src/interpolation/Interpolation.py b/src/interpolation/Interpolation.py index 7d4bdd16..2dae5223 100644 --- a/src/interpolation/Interpolation.py +++ b/src/interpolation/Interpolation.py @@ -14,29 +14,30 @@ def interpolate(self, method="liner" ): logging.info("started interpolating") + evtList=list(replay_info.events.values()) # add more frames in replays to support higher fps # by default, one frame in game represents 1 second - origTotLen=len(replay_info.events) + origTotLen=len(evtList) # number of events in one sec - evtsPerSec=fpsTarget/speedScale + framePerEvt=fpsTarget/speedScale + # total events - afterLen=int((origTotLen - 1)/evtsPerSec) + 1 - + afterLen=int((origTotLen - 1)/framePerEvt) + 1 newRepInfo=[] for i in tqdm(range(origTotLen)): - currentLenTarget=evtsPerSec*(i+1) + currentLenTarget=framePerEvt*(i+1) # in case speed scale is faster than 60 events per sec if currentLenTarget <= len(newRepInfo): continue - originEvt=replay_info.events[i+2] + originEvt=evtList[i] newRepInfo.append(originEvt) - if originEvt.last_frame : + if originEvt.last_frame or i+1 >= origTotLen: break - nextEvt=replay_info.events[i+3] + nextEvt=evtList[i+1] - eventsToAdd=math.floor(currentLenTarget - len(newRepInfo)) - 1 + eventsToAdd=math.floor(currentLenTarget - len(newRepInfo)) match method: case "liner": diff --git a/src/interpolation/interpolator/liner.py b/src/interpolation/interpolator/liner.py index 68434a70..daaafd8c 100644 --- a/src/interpolation/interpolator/liner.py +++ b/src/interpolation/interpolator/liner.py @@ -72,7 +72,7 @@ def doLinerInterpolation(self, originEvt: Events, nextEvt: Events, eventsToAdd: if eventsToAdd <= 0 : return result diffData=self.calcDiff(originEvt, nextEvt, eventsToAdd) - currentEvt = copy.deepcopy(originEvt) + currentEvt = self.initCurrentEvt(originEvt) for i in range(eventsToAdd): tmpEvt = currentEvt._asdict() self.applyDiffData(diffData, tmpEvt) @@ -80,6 +80,29 @@ def doLinerInterpolation(self, originEvt: Events, nextEvt: Events, eventsToAdd: result.append(currentEvt) return result + def initCurrentEvt(self, originEvt: Events): + currentEvt = Events( + time_left=originEvt.time_left, + evt_vehicle=originEvt.evt_vehicle, + evt_plane=originEvt.evt_plane, + evt_shot=[], + evt_torpedo=originEvt.evt_torpedo, + evt_acoustic_torpedo=originEvt.evt_acoustic_torpedo, + evt_building = dict(), + evt_ward = originEvt.evt_ward, + evt_smoke = originEvt.evt_smoke, + evt_hits = [], + evt_consumable = dict(), + evt_control = originEvt.evt_control, + evt_score = originEvt.evt_score, + evt_damage_maps = originEvt.evt_damage_maps, + evt_frag = [], + evt_ribbon = dict(), + evt_achievement = dict(), + evt_times_to_win = originEvt.evt_times_to_win, + evt_chat = [], + ) + return currentEvt def calcDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): result=LinerDiff( @@ -192,9 +215,9 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): logging.debug("diffVehicle: id %s is none.", vehicle.vehicle_id) continue dic = vehicle._asdict() - dic['x']=round(dic['x'] + diffVehicle.x) - dic['y']=round(dic['y'] + diffVehicle.y) - dic['yaw']=round(dic['yaw'] + diffVehicle.yaw) + dic['x']=dic['x'] + diffVehicle.x + dic['y']=dic['y'] + diffVehicle.y + dic['yaw']=dic['yaw'] + diffVehicle.yaw dic['regenerated_health']=dic['regenerated_health']+diffVehicle.regenerated_health dic['regen_crew_hp_limit']=dic['regen_crew_hp_limit']+diffVehicle.regen_crew_hp_limit dic['regeneration_health']=dic['regeneration_health']+diffVehicle.regeneration_health diff --git a/src/render.py b/src/render.py index 573b3504..b0906966 100644 --- a/src/render.py +++ b/src/render.py @@ -5,6 +5,8 @@ from interpolation.Interpolation import Interpolator def run(pathStr): + fps=60 + speed_scale=20.0 path = Path(pathStr) video_path = path.parent.joinpath(f"{path.stem}.mp4") with open(path, "rb") as f: @@ -14,7 +16,9 @@ def run(pathStr): ).get_info() LOGGER.info("before interpolation: replay_info length: %d", len(replay_info["hidden"]["replay_data"].events)) replay_info["hidden"]["replay_data"]=Interpolator().interpolate( - replay_info["hidden"]["replay_data"] + replay_info["hidden"]["replay_data"], + fpsTarget=fps, + speedScale=speed_scale ) LOGGER.info("after interpolation: replay_info length: %d", len(replay_info["hidden"]["replay_data"].events)) LOGGER.info("Rendering the replay file...") @@ -23,13 +27,16 @@ def run(pathStr): logs=True, enable_chat=True, use_tqdm=True, + fps=fps, + speed_scale=speed_scale ) - renderer.start(str(video_path), fps=60 ) + renderer.start(str(video_path)) LOGGER.info(f"The video file is at: {str(video_path)}") LOGGER.info("Done.") if __name__ == "__main__": - run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") + # run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") + run("/home/reinwd/replays/20231014/20231014_194451_PZSD110-Hsiang-Yang_45_Zigzag.wowsreplay") # import argparse # parser = argparse.ArgumentParser() diff --git a/src/renderer/data.py b/src/renderer/data.py index 79f514e7..836ea5be 100644 --- a/src/renderer/data.py +++ b/src/renderer/data.py @@ -62,8 +62,8 @@ class Vehicle(NamedTuple): vehicle_id: int health: int is_alive: bool - x: int - y: int + x: float + y: float yaw: float relation: int is_visible: bool @@ -125,6 +125,7 @@ class Shot(NamedTuple): destination: tuple[int, int] shot_id: int t_time: int + server_time_left: int class Torpedo(NamedTuple): diff --git a/src/renderer/layers/shot.py b/src/renderer/layers/shot.py index abc64db1..55a3d559 100644 --- a/src/renderer/layers/shot.py +++ b/src/renderer/layers/shot.py @@ -70,10 +70,15 @@ def draw(self, game_time: int, image: Image.Image): draw = ImageDraw.Draw(base) for shot in events[game_time].evt_shot: + # adapt for fps & speed configuration + server_time_left = shot.server_time_left + fps = self._renderer.fps + speed_scale = self._renderer.speed_scale + t_time = server_time_left / (speed_scale / fps) / 2.7 result = getEquidistantPoints( flip_y(shot.origin), flip_y(shot.destination), - shot.t_time, + round(t_time), ) p = self._projectiles.setdefault(shot.shot_id, []) prev_x, prev_y = self._renderer.get_scaled(shot.origin) diff --git a/src/renderer/layers/torpedo.py b/src/renderer/layers/torpedo.py index ed1cadaf..bef9f375 100644 --- a/src/renderer/layers/torpedo.py +++ b/src/renderer/layers/torpedo.py @@ -114,6 +114,14 @@ def draw(self, game_time: int, draw: ImageDraw.ImageDraw): angle = active_torpedo.yaw angle = angle - radians(90) m_s_bw = active_torpedo.speed_bw + + # adapt for fps & speed configuration + fps = self._renderer.fps + speed_scale = self._renderer.speed_scale + + + m_s_bw = m_s_bw / fps * speed_scale + (x2, y2) = ( x1 + m_s_bw * cos(angle), y1 + m_s_bw * sin(angle), diff --git a/src/renderer/render.py b/src/renderer/render.py index 099a3232..b96ff283 100644 --- a/src/renderer/render.py +++ b/src/renderer/render.py @@ -200,7 +200,6 @@ def __init__( def start( self, path: str, - fps: int = 20, quality: int = 7, progress_cb: Optional[Callable[[float], Any]] = None, ): @@ -246,7 +245,7 @@ def start( self, self.replay_r, "red" ) - video_writer = self.get_writer(path, fps, quality) + video_writer = self.get_writer(path, self.fps, quality) video_writer.send(None) if self.use_tqdm: @@ -313,6 +312,8 @@ def __init__( enable_chat: bool = True, team_tracers: bool = False, use_tqdm: bool = False, + fps: int = 60, + speed_scale: float = 6.0, ): """Orchestrates the rendering process. @@ -331,6 +332,8 @@ def __init__( self.bg_color: tuple[int, int, int] = (0, 0, 0) self.use_tqdm = use_tqdm self._builder = ShipBuilder(self.resman) + self.fps = fps + self.speed_scale = speed_scale if self.anon: for i, (pid, pi) in enumerate( @@ -367,7 +370,6 @@ def get_player_build(self) -> list[dict]: def start( self, path: str, - fps: int = 20, quality: int = 7, progress_cb: Optional[Callable[[float], Any]] = None, ): @@ -395,7 +397,7 @@ def start( layer_chat = self._load_layer("LayerChat")(self) layer_markers = self._load_layer("LayerMarkers")(self) - video_writer = self.get_writer(path, fps, quality) + video_writer = self.get_writer(path, self.fps, quality) video_writer.send(None) self._draw_header(self.minimap_bg) @@ -470,8 +472,8 @@ def start( offset_y = 6 px, py = mid_x - tw, mid_y - th - offset_y - for i in range(3 * fps): - per = min(1, i / (1.5 * fps)) + for i in range(3 * self.fps): + per = min(1, i / (1.5 * self.fps)) drw_win.text( (px, py), text=text, diff --git a/src/replay_unpack/clients/wows/versions/0_11_10/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_10/battle_controller.py index 87c70b5b..e96aead5 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_10/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_10/battle_controller.py @@ -613,6 +613,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/0_11_11/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_11/battle_controller.py index 18db9f5e..f3af4b3f 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_11/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_11/battle_controller.py @@ -624,6 +624,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/0_11_6/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_6/battle_controller.py index 27f06025..ff5b5aec 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_6/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_6/battle_controller.py @@ -593,6 +593,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/0_11_7/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_7/battle_controller.py index 27f06025..ff5b5aec 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_7/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_7/battle_controller.py @@ -593,6 +593,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/0_11_8/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_8/battle_controller.py index 87c70b5b..e96aead5 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_8/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_8/battle_controller.py @@ -613,6 +613,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/0_11_9/battle_controller.py b/src/replay_unpack/clients/wows/versions/0_11_9/battle_controller.py index 87c70b5b..e96aead5 100644 --- a/src/replay_unpack/clients/wows/versions/0_11_9/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/0_11_9/battle_controller.py @@ -613,6 +613,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_0_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_0_0/battle_controller.py index 383b03b5..fba685e9 100644 --- a/src/replay_unpack/clients/wows/versions/12_0_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_0_0/battle_controller.py @@ -627,6 +627,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_1_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_1_0/battle_controller.py index 383b03b5..fba685e9 100644 --- a/src/replay_unpack/clients/wows/versions/12_1_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_1_0/battle_controller.py @@ -627,6 +627,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_2_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_2_0/battle_controller.py index 383b03b5..fba685e9 100644 --- a/src/replay_unpack/clients/wows/versions/12_2_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_2_0/battle_controller.py @@ -627,6 +627,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_3_1/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_3_1/battle_controller.py index 383b03b5..fba685e9 100644 --- a/src/replay_unpack/clients/wows/versions/12_3_1/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_3_1/battle_controller.py @@ -627,6 +627,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_4_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_4_0/battle_controller.py index 383b03b5..fba685e9 100644 --- a/src/replay_unpack/clients/wows/versions/12_4_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_4_0/battle_controller.py @@ -627,6 +627,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_5_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_5_0/battle_controller.py index fe4853d2..0b9ac896 100644 --- a/src/replay_unpack/clients/wows/versions/12_5_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_5_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_6_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_6_0/battle_controller.py index fe4853d2..0b9ac896 100644 --- a/src/replay_unpack/clients/wows/versions/12_6_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_6_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_7_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_7_0/battle_controller.py index fe4853d2..0b9ac896 100644 --- a/src/replay_unpack/clients/wows/versions/12_7_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_7_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_8_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_8_0/battle_controller.py index fe4853d2..0b9ac896 100644 --- a/src/replay_unpack/clients/wows/versions/12_8_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_8_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py index fe4853d2..0b9ac896 100644 --- a/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + server_time_left=projectile["serverTimeLeft"] ) ) From 94201f4320be139e10971256eb51e5130f5a5a46 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Mon, 16 Oct 2023 01:25:05 +0800 Subject: [PATCH 4/9] fix main --- src/render.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/render.py b/src/render.py index b0906966..59db924d 100644 --- a/src/render.py +++ b/src/render.py @@ -36,10 +36,10 @@ def run(pathStr): if __name__ == "__main__": # run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") - run("/home/reinwd/replays/20231014/20231014_194451_PZSD110-Hsiang-Yang_45_Zigzag.wowsreplay") -# import argparse + # run("/home/reinwd/replays/20231014/20231015_203924_PZSD110-Hsiang-Yang_53_Shoreside.wowsreplay") + import argparse -# parser = argparse.ArgumentParser() -# parser.add_argument("--replay", type=str, required=True) -# namespace = parser.parse_args() -# run(namespace.replay) \ No newline at end of file + parser = argparse.ArgumentParser() + parser.add_argument("--replay", type=str, required=True) + namespace = parser.parse_args() + run(namespace.replay) \ No newline at end of file From 36a99f98c1b66faab8eed876078fba7f6c7035e7 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Mon, 16 Oct 2023 01:28:35 +0800 Subject: [PATCH 5/9] argument parsing --- src/render.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/render.py b/src/render.py index 59db924d..bcea755e 100644 --- a/src/render.py +++ b/src/render.py @@ -4,9 +4,7 @@ from renderer.utils import LOGGER from interpolation.Interpolation import Interpolator -def run(pathStr): - fps=60 - speed_scale=20.0 +def run(pathStr, fps: int = 60, speed_scale: float = 20.0): path = Path(pathStr) video_path = path.parent.joinpath(f"{path.stem}.mp4") with open(path, "rb") as f: @@ -41,5 +39,7 @@ def run(pathStr): parser = argparse.ArgumentParser() parser.add_argument("--replay", type=str, required=True) + parser.add_argument("--fps", type=int, required=False, default=60) + parser.add_argument("--speed", type=float, required=False, default=20.0) namespace = parser.parse_args() - run(namespace.replay) \ No newline at end of file + run(namespace.replay, namespace.fps, namespace.speed) \ No newline at end of file From b4d478d45b4409c90b846efc3201309edcd39e7f Mon Sep 17 00:00:00 2001 From: ReinWD Date: Fri, 20 Oct 2023 02:19:21 +0800 Subject: [PATCH 6/9] fix diffAcousticTorpedo --- src/interpolation/interpolator/liner.py | 22 ++++++++--------- src/render.py | 33 +++++++++++++++++++------ 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/interpolation/interpolator/liner.py b/src/interpolation/interpolator/liner.py index daaafd8c..9e3fdd8c 100644 --- a/src/interpolation/interpolator/liner.py +++ b/src/interpolation/interpolator/liner.py @@ -120,7 +120,7 @@ def calcVehicle(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): return result for id, vehicle in originEvt.evt_vehicle.items(): nextVehicle=nextEvt.evt_vehicle.get(id) - if nextVehicle == None: + if nextVehicle is None: continue result[id]=VehicleDiff( float(nextVehicle.x - vehicle.x)/ float(eventsToAdd), @@ -139,7 +139,7 @@ def calcPlaneDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): return result for id, plane in originEvt.evt_plane.items(): nextPlane=nextEvt.evt_plane.get(id) - if nextPlane == None: + if nextPlane is None: continue result[id]=PlaneDiff( float(nextPlane.position[0] - plane.position[0])/ float(eventsToAdd), @@ -160,7 +160,7 @@ def calcShotDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): if tmp.shot_id==id: nextShot=tmp break - if nextShot == None: + if nextShot is None: continue result[id]=ShotDiff( float(nextShot.origin[0] - shot.origin[0])/ float(eventsToAdd), @@ -177,7 +177,7 @@ def calcTorpedoDiff(self, originEvt: Events, nextEvt: Events, eventsToAdd: int): return result for id, torpedo in originEvt.evt_torpedo.items(): nextTorpedo=nextEvt.evt_torpedo.get(id) - if nextTorpedo == None: + if nextTorpedo is None: continue result[id]=TorpedoDiff( float(nextTorpedo.x - torpedo.x)/ float(eventsToAdd), @@ -193,7 +193,7 @@ def calcAcousticTorpedoDiff(self, originEvt: Events, nextEvt: Events, eventsToAd return result for id, acousticTorpedo in originEvt.evt_acoustic_torpedo.items(): nextAcousticTorpedo=nextEvt.evt_acoustic_torpedo.get(id) - if nextAcousticTorpedo == None: + if nextAcousticTorpedo is None: continue result[id]=TorpedoDiff( float(nextAcousticTorpedo.x - acousticTorpedo.x)/ float(eventsToAdd), @@ -211,7 +211,7 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): diffVehicle = diffData.vehicleDiff.get(id) diffVehicle: VehicleDiff - if diffVehicle == None: + if diffVehicle is None: logging.debug("diffVehicle: id %s is none.", vehicle.vehicle_id) continue dic = vehicle._asdict() @@ -229,7 +229,7 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): diffPlane = diffData.planeDiff.get(id) diffPlane: PlaneDiff - if diffPlane == None: + if diffPlane is None: logging.debug("diffPlane: id %s is none.", id) continue dic=plane._asdict() @@ -246,7 +246,7 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): diffShot = diffData.shotDiff.get(id) diffShot: ShotDiff - if diffShot == None: + if diffShot is None: logging.debug("diffShot: id %s is none.", id) continue dic=shot._asdict() @@ -260,7 +260,7 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): diffTorpedo = diffData.torpedoDiff.get(id) diffTorpedo: TorpedoDiff - if diffTorpedo == None: + if diffTorpedo is None: logging.debug("diffTorpedo: id %s is none.", id) continue dic=torpedo._asdict() @@ -274,13 +274,13 @@ def applyDiffData(self, diffData: LinerDiff, currentEvt: dict): diffAcousticTorpedo = diffData.acousticTorpedoDiff.get(id) diffAcousticTorpedo: AcousticTorpedoDiff - if diffAcousticTorpedo == None: + if diffAcousticTorpedo is None: logging.debug("diffAcousticTorpedo: id %s is none.", id) continue dic=acoustic_torpedo._asdict() dic['x']=dic['x']+diffAcousticTorpedo.x dic['y']=dic['y']+diffAcousticTorpedo.y - dic['yaw']=dic['yaw']+diffTorpedo.yaw + dic['yaw']=dic['yaw']+diffAcousticTorpedo.yaw currentEvt['evt_acoustic_torpedo'][id]=toNamedTuple('AcousticTorpedo', dic) diff --git a/src/render.py b/src/render.py index bcea755e..25831e7e 100644 --- a/src/render.py +++ b/src/render.py @@ -34,12 +34,29 @@ def run(pathStr, fps: int = 60, speed_scale: float = 20.0): if __name__ == "__main__": # run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") - # run("/home/reinwd/replays/20231014/20231015_203924_PZSD110-Hsiang-Yang_53_Shoreside.wowsreplay") - import argparse - parser = argparse.ArgumentParser() - parser.add_argument("--replay", type=str, required=True) - parser.add_argument("--fps", type=int, required=False, default=60) - parser.add_argument("--speed", type=float, required=False, default=20.0) - namespace = parser.parse_args() - run(namespace.replay, namespace.fps, namespace.speed) \ No newline at end of file + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-1_xmm-vs-prpru_game-2_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-3_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-1_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-2_xmm-vs-nyako_game-3_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-1_xmm-vs-prpru_game-1_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-2_xmm.wowsreplay") + # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-2_xmm-vs-nyako_game-1_xmm.wowsreplay") + run("/home/reinwd/replays//20231020/20231020_010901_PFSC111-Conde_22_tierra_del_fuego.wowsreplay") + + + + + + + + + + # import argparse + + # parser = argparse.ArgumentParser() + # parser.add_argument("--replay", type=str, required=True) + # parser.add_argument("--fps", type=int, required=False, default=60) + # parser.add_argument("--speed", type=float, required=False, default=20.0) + # namespace = parser.parse_args() + # run(namespace.replay, namespace.fps, namespace.speed) \ No newline at end of file From 9d6a580bbb39ae95991975ba74f4dce08c7751c1 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Fri, 20 Oct 2023 02:20:04 +0800 Subject: [PATCH 7/9] main method --- src/render.py | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/src/render.py b/src/render.py index 25831e7e..bc15490b 100644 --- a/src/render.py +++ b/src/render.py @@ -33,30 +33,10 @@ def run(pathStr, fps: int = 60, speed_scale: float = 20.0): LOGGER.info("Done.") if __name__ == "__main__": - # run("/home/reinwd/replays/20231014/20231014_191413_PZSD110-Hsiang-Yang_54_Faroe.wowsreplay") - - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-1_xmm-vs-prpru_game-2_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-3_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-1_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-2_xmm-vs-nyako_game-3_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-1_xmm-vs-prpru_game-1_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-3_xmm-vs-kusa_game-2_xmm.wowsreplay") - # run("/home/reinwd/replays//20231016/king-of-the-sea-xvi_apac_groups-stage_group-4_round-2_xmm-vs-nyako_game-1_xmm.wowsreplay") - run("/home/reinwd/replays//20231020/20231020_010901_PFSC111-Conde_22_tierra_del_fuego.wowsreplay") - - - - - - - - - - # import argparse - - # parser = argparse.ArgumentParser() - # parser.add_argument("--replay", type=str, required=True) - # parser.add_argument("--fps", type=int, required=False, default=60) - # parser.add_argument("--speed", type=float, required=False, default=20.0) - # namespace = parser.parse_args() - # run(namespace.replay, namespace.fps, namespace.speed) \ No newline at end of file + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--replay", type=str, required=True) + parser.add_argument("--fps", type=int, required=False, default=60) + parser.add_argument("--speed", type=float, required=False, default=20.0) + namespace = parser.parse_args() + run(namespace.replay, namespace.fps, namespace.speed) \ No newline at end of file From 8f0b78b97103f36d3d17498bf3d646a33513e73f Mon Sep 17 00:00:00 2001 From: ReinWD Date: Fri, 20 Oct 2023 02:25:36 +0800 Subject: [PATCH 8/9] add servertimeleft to shot constructor --- .../clients/wows/versions/12_9_0/battle_controller.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py index fe4853d2..8f059f51 100644 --- a/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py +++ b/src/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py @@ -630,6 +630,7 @@ def _r_shots(self, entity: Entity, shots: list): (x2, y2), int(f"{owner_id}{projectile['shotID']}"), t_time, + projectile["serverTimeLeft"], ) ) From 4f082cb86dbb54cfa270a930ee34da23acaf857d Mon Sep 17 00:00:00 2001 From: ReinWD Date: Fri, 20 Oct 2023 02:36:52 +0800 Subject: [PATCH 9/9] refresh ribbon and achievements --- src/interpolation/interpolator/liner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interpolation/interpolator/liner.py b/src/interpolation/interpolator/liner.py index 9e3fdd8c..5631515f 100644 --- a/src/interpolation/interpolator/liner.py +++ b/src/interpolation/interpolator/liner.py @@ -97,8 +97,8 @@ def initCurrentEvt(self, originEvt: Events): evt_score = originEvt.evt_score, evt_damage_maps = originEvt.evt_damage_maps, evt_frag = [], - evt_ribbon = dict(), - evt_achievement = dict(), + evt_ribbon = originEvt.evt_ribbon, + evt_achievement = originEvt.evt_achievement, evt_times_to_win = originEvt.evt_times_to_win, evt_chat = [], )