diff --git a/replay_unpack/clients/wows/versions/12_9_0/__init__.py b/replay_unpack/clients/wows/versions/12_9_0/__init__.py
new file mode 100644
index 0000000..298eeee
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py b/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py
new file mode 100644
index 0000000..c462a40
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/battle_controller.py
@@ -0,0 +1,240 @@
+# coding=utf-8
+import copy
+import logging
+import pickle
+
+from replay_unpack.core import IBattleController
+from replay_unpack.core.entity import Entity
+from .constants import DamageStatsType, Category, TaskType, Status
+
+try:
+ from .constants import DEATH_TYPES, SHIP_TYPE_BY_ID, SKILL_TYPE_ID_TO_NAME
+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_map = {}
+ self._shots_damage_map = {}
+ self._death_map = []
+ self._map = {}
+ self._player_id = None
+ self._arena_id = None
+ self.postBattleResult = None
+
+ 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('Vehicle', 'onRibbon', self.onRibbon)
+ 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)
+
+ def onSetConsumable(self, vehicle, blob):
+ print(pickle.loads(blob))
+
+ @property
+ def entities(self):
+ return self._entities
+
+ @property
+ def battle_logic(self):
+ return next(e for e in self._entities.values() if e.get_name() == 'BattleLogic')
+
+ def create_entity(self, entity: Entity):
+ self._entities[entity.id] = entity
+
+ def destroy_entity(self, entity: Entity):
+ self._entities.pop(entity.id)
+
+ def on_player_enter_world(self, entity_id: int):
+ self._player_id = entity_id
+
+ def get_info(self):
+
+ # use avatar id here for backward compatibility
+ avatar = next(entity for entity in self.entities.values() if entity.get_name() == 'Avatar')
+ self._ribbons[avatar.id] = {}
+ for ribbon_info in avatar.properties['client']['privateVehicleState']['ribbons']:
+ self._ribbons[avatar.id][ribbon_info['ribbonId']] = ribbon_info['count']
+
+ # adding killed planes data
+ players = copy.deepcopy(self._players.get_info())
+ for player in players.values():
+ player['planesCount'] = self._dead_planes.get(
+ player.get('shipId', 0), 0)
+
+ return dict(
+ achievements=self._achievements,
+ ribbons=self._ribbons,
+ players=players,
+ battle_result=self._battle_result,
+ damage_map=self._damage_map,
+ shots_damage_map=self._shots_damage_map,
+ death_map=self._death_map,
+ death_info=self._getDeathsInfo(),
+ map=self._map,
+ player_id=self._player_id,
+ control_points=self._getCapturePointsInfo(),
+ tasks=list(self._getTasksInfo()),
+ skills=dict(),
+ crew=dict(self.getCrewInformation()),
+ arena_id=self._arena_id,
+ post_battle=self.postBattleResult
+ )
+
+ def _getCrewInfo(self, vehicle):
+ learned_skills_packed = vehicle.properties['client']['crewModifiersCompactParams']['learnedSkills']
+
+ learned_skills = {}
+ for type_id, type_name in SHIP_TYPE_BY_ID.items():
+ if not learned_skills_packed[type_id]:
+ continue
+
+ learned_skills[type_name] = [
+ SKILL_TYPE_ID_TO_NAME.get(skill_id)
+ for skill_id in learned_skills_packed[type_id]
+ ]
+
+ return {
+ 'crew_id': vehicle.properties['client']['crewModifiersCompactParams']['paramsId'],
+ 'learned_skills': learned_skills
+ }
+
+ def getCrewInformation(self):
+ for e in self.entities.values():
+ if e.get_name() != 'Vehicle':
+ continue
+ yield e.id, self._getCrewInfo(e)
+
+ def _getDeathsInfo(self):
+ deaths = {}
+ for killedVehicleId, fraggerVehicleId, typeDeath in self._death_map:
+ death_type = DEATH_TYPES.get(typeDeath)
+ if death_type is None:
+ logging.warning('Unknown death type %s', typeDeath)
+ continue
+
+ deaths[killedVehicleId] = {
+ 'killer_id': fraggerVehicleId,
+ 'icon': death_type['icon'],
+ 'name': death_type['name'],
+ }
+ return deaths
+
+ def _getCapturePointsInfo(self):
+ return self.battle_logic.properties['client']['state'].get('controlPoints', [])
+
+ def _getTasksInfo(self):
+ tasks = self.battle_logic.properties['client']['state'].get('tasks', [])
+ for task in tasks:
+ if not task['showOnHUD']:
+ continue
+
+ yield {
+ "category": Category.names[task['category']],
+ "status": Status.names[task['status']],
+ "name": task['id'],
+ "type": TaskType.names[task['type']]
+ }
+
+ def onBattleEnd(self, avatar):
+ self._battle_result = dict(
+ winner_team_id=self.battle_logic.properties['client']['battleResult']['winnerTeamId'],
+ victory_type=self.battle_logic.properties['client']['battleResult']['finishReason'],
+ )
+
+ def onNewPlayerSpawnedInBattle(self, avatar, playersData, botsData, observersData):
+ self._players.create_or_update_players(
+ pickle.loads(playersData, encoding='latin1'),
+ PlayerType.PLAYER
+ )
+ self._players.create_or_update_players(
+ pickle.loads(botsData, encoding='latin1'),
+ PlayerType.BOT
+ )
+ self._players.create_or_update_players(
+ pickle.loads(observersData, encoding='latin1'),
+ PlayerType.OBSERVER
+ )
+
+ def onArenaStateReceived(self, avatar, arenaUniqueId, teamBuildTypeId, preBattlesInfo, playersStates, botsStates,
+ observersState, buildingsInfo):
+ self._arena_id = arenaUniqueId
+ self._players.create_or_update_players(
+ pickle.loads(playersStates, encoding='latin1'),
+ PlayerType.PLAYER
+ )
+ self._players.create_or_update_players(
+ pickle.loads(botsStates, encoding='latin1'),
+ PlayerType.BOT
+ )
+ self._players.create_or_update_players(
+ pickle.loads(observersState, encoding='latin1'),
+ PlayerType.OBSERVER
+ )
+
+ def onPlayerInfoUpdate(self, avatar, playersData, botsData, observersData):
+ self._players.create_or_update_players(
+ pickle.loads(playersData, encoding='latin1'),
+ PlayerType.PLAYER
+ )
+ self._players.create_or_update_players(
+ pickle.loads(botsData, encoding='latin1'),
+ PlayerType.BOT
+ )
+ self._players.create_or_update_players(
+ pickle.loads(observersData, encoding='latin1'),
+ PlayerType.OBSERVER
+ )
+
+ def receiveDamageStat(self, avatar, blob):
+ normalized = {}
+ for (type_, bool_), value in pickle.loads(blob).items():
+ # TODO: improve damage_map and list other damage types too
+ if bool_ != DamageStatsType.DAMAGE_STATS_ENEMY:
+ continue
+ normalized.setdefault(type_, {}).setdefault(bool_, 0)
+ normalized[type_][bool_] = value
+ self._damage_map.update(normalized)
+
+ def onAchievementEarned(self, avatar, avatar_id, achievement_id):
+ # also rearrange ids for backward compatibility
+ player = self._players.get_info()[avatar_id]
+ self._achievements.setdefault(player['avatarId'], {}).setdefault(achievement_id, 0)
+ self._achievements[player['avatarId']][achievement_id] += 1
+
+ def receiveVehicleDeath(self, avatar, killedVehicleId, fraggerVehicleId, typeDeath):
+ self._death_map.append((killedVehicleId, fraggerVehicleId, typeDeath))
+
+ def g_receiveDamagesOnShip(self, vehicle, damages):
+ for damage_info in damages:
+ self._shots_damage_map.setdefault(vehicle.id, {}).setdefault(damage_info['vehicleID'], 0)
+ self._shots_damage_map[vehicle.id][damage_info['vehicleID']] += damage_info['damage']
+
+ def receive_planeDeath(self, avatar, squadronID, planeIDs, reason, attackerId):
+ self._dead_planes.setdefault(attackerId, 0)
+ self._dead_planes[attackerId] += len(planeIDs)
+
+ @property
+ def map(self):
+ raise NotImplemented()
+
+ @map.setter
+ def map(self, value):
+ self._map = value.lstrip('spaces/')
diff --git a/replay_unpack/clients/wows/versions/12_9_0/constants.py b/replay_unpack/clients/wows/versions/12_9_0/constants.py
new file mode 100644
index 0000000..eba95e3
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/constants.py
@@ -0,0 +1,150 @@
+# coding=utf-8
+
+id_property_map = {0: 'accountDBID', 1: 'antiAbuseEnabled', 2: 'avatarId', 3: 'camouflageInfo',
+ 4: 'clanColor', 5: 'clanID', 6: 'clanTag', 7: 'crewParams', 8: 'dogTag',
+ 9: 'fragsCount', 10: 'friendlyFireEnabled', 11: 'id', 12: 'invitationsEnabled',
+ 13: 'isAbuser', 14: 'isAlive', 15: 'isBot', 16: 'isClientLoaded', 17: 'isConnected',
+ 18: 'isHidden', 19: 'isLeaver', 20: 'isPreBattleOwner', 21: 'isTShooter', 22: 'keyTargetMarkers',
+ 23: 'killedBuildingsCount', 24: 'maxHealth', 25: 'name', 26: 'playerMode', 27: 'preBattleIdOnStart',
+ 28: 'preBattleSign', 29: 'prebattleId', 30: 'realm', 31: 'shipComponents', 32: 'shipConfigDump',
+ 33: 'shipId', 34: 'shipParamsId', 35: 'skinId', 36: 'teamId', 37: 'ttkStatus'}
+property_id_map = {value: key for key, value in id_property_map.items()}
+
+# ModsShell.API_v_1_0.battleGate.PlayersInfo.gSharedBotInfo._numMemberMap
+id_property_map_bots = {0: 'accountDBID', 1: 'antiAbuseEnabled', 2: 'camouflageInfo', 3: 'clanColor',
+ 4: 'clanID', 5: 'clanTag', 6: 'crewParams', 7: 'dogTag', 8: 'fragsCount',
+ 9: 'friendlyFireEnabled', 10: 'id', 11: 'isAbuser', 12: 'isAlive',
+ 13: 'isBot', 14: 'isHidden', 15: 'isTShooter', 16: 'keyTargetMarkers',
+ 17: 'killedBuildingsCount', 18: 'maxHealth', 19: 'name', 20: 'realm',
+ 21: 'shipComponents', 22: 'shipConfigDump', 23: 'shipId', 24: 'shipParamsId',
+ 25: 'skinId', 26: 'teamId', 27: 'ttkStatus'}
+property_id_map_bots = {value: key for key, value in id_property_map.items()}
+
+
+# ModsShell.API_v_1_0.battleGate.PlayersInfo.gSharedObserverInfo._numMemberMap
+id_property_map_observer = {0: 'accountDBID', 1: 'avatarId', 2: 'dogTag', 3: 'id', 4: 'invitationsEnabled', 5: 'isAlive',
+ 6: 'isClientLoaded', 7: 'isConnected', 8: 'isLeaver', 9: 'isPreBattleOwner', 10: 'name',
+ 11: 'playerMode', 12: 'preBattleIdOnStart', 13: 'preBattleSign', 14: 'prebattleId',
+ 15: 'realm', 16: 'teamId'}
+property_id_map_bots_observer = {value: key for key, value in id_property_map.items()}
+
+
+
+class DamageStatsType:
+ """See Avatar.DamageStatsType"""
+ DAMAGE_STATS_ENEMY = 0
+ DAMAGE_STATS_ALLY = 1
+ DAMAGE_STATS_SPOT = 2
+ DAMAGE_STATS_AGRO = 3
+
+
+class Category(object):
+ """Category of task to separate for UI"""
+
+ CHALLENGE = 4
+ PRIMARY = 1
+ SECONDARY = 2
+ TERTIARY = 3
+
+ ids = {'Challenge': 4, 'Primary': 1, 'Secondary': 2, 'Tertiary': 3}
+ names = {1: 'Primary', 2: 'Secondary', 3: 'Tertiary', 4: 'Challenge'}
+
+
+class Status(object):
+ CANCELED = 4
+ FAILURE = 3
+ IN_PROGRESS = 1
+ NOT_STARTED = 0
+ SUCCESS = 2
+ UPDATED = 5
+
+ ids = {'Updated': 5, 'Success': 2, 'Canceled': 4, 'NotStarted': 0, 'Failure': 3, 'InProgress': 1}
+ names = {0: 'NotStarted', 1: 'InProgress', 2: 'Success', 3: 'Failure', 4: 'Canceled', 5: 'Updated'}
+
+
+class TaskType(object):
+ DIGIT = 1
+ DIGIT_SINGLE = 5
+ NO_TYPE = 0
+ PROGRESS_BAR = 4
+ REVERSED_TIMER = 3
+ TIMER = 2
+
+ names = {0: 'NoType', 1: 'Digit', 2: 'Timer', 3: 'ReversedTimer', 4: 'ProgressBar', 5: 'DigitSingle'}
+ ids = {'ReversedTimer': 3, 'Digit': 1, 'DigitSingle': 5, 'Timer': 2, 'ProgressBar': 4, 'NoType': 0}
+
+
+# {i: vars(j) for i,j in Vehicle.DeathReason._DeathReason__byId.items()}
+DEATH_TYPES = {
+ 0: {'sound': 'Health', 'icon': 'frags', 'id': 0, 'name': 'NONE'},
+ 1: {'sound': 'Health', 'icon': 'frags', 'id': 1, 'name': 'ARTILLERY'},
+ 2: {'sound': 'ATBA', 'icon': 'icon_frag_atba', 'id': 2, 'name': 'ATBA'},
+ 3: {'sound': 'Torpedo', 'icon': 'icon_frag_torpedo', 'id': 3, 'name': 'TORPEDO'},
+ 4: {'sound': 'Bomb', 'icon': 'icon_frag_bomb', 'id': 4, 'name': 'BOMB'},
+ 5: {'sound': 'Torpedo', 'icon': 'icon_frag_torpedo', 'id': 5, 'name': 'TBOMB'},
+ 6: {'sound': 'Burning', 'icon': 'icon_frag_burning', 'id': 6, 'name': 'BURNING'},
+ 7: {'sound': 'RAM', 'icon': 'icon_frag_ram', 'id': 7, 'name': 'RAM'},
+ 8: {'sound': 'Health', 'icon': 'frags', 'id': 8, 'name': 'TERRAIN'},
+ 9: {'sound': 'Flood', 'icon': 'icon_frag_flood', 'id': 9, 'name': 'FLOOD'},
+ 10: {'sound': 'Health', 'icon': 'frags', 'id': 10, 'name': 'MIRROR'},
+ 11: {'sound': 'Torpedo', 'icon': 'icon_frag_naval_mine', 'id': 11, 'name': 'SEA_MINE'},
+ 12: {'sound': 'Health', 'icon': 'frags', 'id': 12, 'name': 'SPECIAL'},
+ 13: {'sound': 'DepthCharge', 'icon': 'icon_frag_depthbomb', 'id': 13, 'name': 'DBOMB'},
+ 14: {'sound': 'Rocket', 'icon': 'icon_frag_rocket', 'id': 14, 'name': 'ROCKET'},
+ 15: {'sound': 'Detonate', 'icon': 'icon_frag_detonate', 'id': 15, 'name': 'DETONATE'},
+ 16: {'sound': 'Health', 'icon': 'frags', 'id': 16, 'name': 'HEALTH'},
+ 17: {'sound': 'Shell_AP', 'icon': 'icon_frag_main_caliber', 'id': 17, 'name': 'AP_SHELL'},
+ 18: {'sound': 'Shell_HE', 'icon': 'icon_frag_main_caliber', 'id': 18, 'name': 'HE_SHELL'},
+ 19: {'sound': 'Shell_CS', 'icon': 'icon_frag_main_caliber', 'id': 19, 'name': 'CS_SHELL'},
+ 20: {'sound': 'Fel', 'icon': 'icon_frag_fel', 'id': 20, 'name': 'FEL'},
+ 21: {'sound': 'Portal', 'icon': 'icon_frag_portal', 'id': 21, 'name': 'PORTAL'},
+ 22: {'sound': 'SkipBomb', 'icon': 'icon_frag_skip', 'id': 22, 'name': 'SKIP_BOMB'},
+ 23: {'sound': 'SECTOR_WAVE', 'icon': 'icon_frag_wave', 'id': 23, 'name': 'SECTOR_WAVE'},
+ 24: {'sound': 'Health', 'icon': 'icon_frag_acid', 'id': 24, 'name': 'ACID'},
+ 25: {'sound': 'LASER', 'icon': 'icon_frag_laser', 'id': 25, 'name': 'LASER'},
+ 26: {'sound': 'Match', 'icon': 'icon_frag_octagon', 'id': 26, 'name': 'MATCH'},
+ 27: {'sound': 'Timer', 'icon': 'icon_timer', 'id': 27, 'name': 'TIMER'},
+ 28: {'sound': 'DepthCharge', 'icon': 'icon_frag_depthbomb', 'id': 28, 'name': 'ADBOMB'}
+}
+
+# >>> CrewModifiers.SkillTypeEnum.ID_TO_NAME
+SKILL_TYPE_ID_TO_NAME = {
+ 0: 'NoneSkill', 1: 'GmReloadAaDamageConstant', 2: 'DefenceCritFireFlooding', 3: 'GmTurn', 4: 'TorpedoReload',
+ 5: 'ConsumablesCrashcrewRegencrewReload', 6: 'ConsumablesDuration', 7: 'DetectionTorpedoRange',
+ 8: 'HeFireProbability',
+ 9: 'GmRangeAaDamageBubbles', 10: 'PlanesDefenseDamageConstant', 11: 'PlanesForsageDuration',
+ 12: 'DetectionVisibilityRange', 13: 'ConsumablesReload', 14: 'DefenceFireProbability', 15: 'PlanesAimingBoost',
+ 16: 'PlanesSpeed', 17: 'ConsumablesAdditional', 18: 'DefenseCritProbability', 19: 'DetectionAlert',
+ 20: 'Maneuverability', 21: 'GmShellReload', 22: 'PlanesConsumablesCallfightersUpgrade',
+ 23: 'ArmamentReloadAaDamage',
+ 24: 'TorpedoSpeed', 25: 'DefenseHp', 26: 'AtbaAccuracy', 27: 'AaPrioritysectorDamageConstant',
+ 28: 'DetectionAiming',
+ 29: 'PlanesReload', 30: 'TorpedoDamage', 31: 'ConsumablesFighterAdditional',
+ 32: 'PlanesConsumablesSpeedboosterReload',
+ 33: 'HePenetration', 34: 'DetectionDirection', 35: 'AaDamageConstantBubbles', 36: 'AaDamageConstantBubblesCv',
+ 37: 'ApDamageBb', 38: 'ApDamageCa', 39: 'ApDamageDd', 40: 'AtbaRange', 41: 'AtbaUpgrade',
+ 42: 'ConsumablesCrashcrewRegencrewUpgrade', 43: 'ConsumablesSpotterUpgrade', 44: 'DefenceUw',
+ 45: 'DetectionVisibilityCrashcrew', 46: 'HeFireProbabilityCv', 47: 'HeSapDamage', 48: 'PlanesApDamage',
+ 49: 'PlanesConsumablesCallfightersAdditional', 50: 'PlanesConsumablesCallfightersPreparationtime',
+ 51: 'PlanesConsumablesCallfightersRange', 52: 'PlanesConsumablesRegeneratehealthUpgrade',
+ 53: 'PlanesDefenseDamageBubbles', 54: 'PlanesDivebomberSpeed', 55: 'PlanesForsageRenewal', 56: 'PlanesHp',
+ 57: 'PlanesTorpedoArmingrange', 58: 'PlanesTorpedoSpeed', 59: 'PlanesTorpedoUwReduced',
+ 60: 'TorpedoFloodingProbability', 61: 'TriggerSpeedBb', 62: 'TriggerGmAtbaReloadBb', 63: 'TriggerGmAtbaReloadCa',
+ 64: 'TriggerGmReload', 65: 'TriggerSpeed', 66: 'TriggerSpeedAccuracy', 67: 'TriggerSpreading',
+ 68: 'TriggerPingerReloadBuff', 69: 'TriggerPingerSpeedBuff', 70: 'SubmarineHoldSectors',
+ 71: 'TriggerConsSonarTimeCoeff', 72: 'TriggerSeenTorpedoReload', 73: 'SubmarineTorpedoPingDamage',
+ 74: 'TriggerConsRudderTimeCoeff', 75: 'SubmarineBatteryCapacity', 76: 'SubmarineDangerAlert',
+ 77: 'SubmarineBatteryBurnDown', 78: 'SubmarineSpeed', 79: 'SubmarineConsumablesReload',
+ 80: 'SubmarineConsumablesDuration', 81: 'TriggerBurnGmReload', 82: 'ArmamentReloadSubmarine'
+}
+
+
+# CrewModifiers.ShipTypes.TYPE_BY_ID
+SHIP_TYPE_BY_ID = {
+ 0: 'AirCarrier',
+ 1: 'Battleship',
+ 2: 'Cruiser',
+ 3: 'Destroyer',
+ 4: 'Auxiliary',
+ 5: 'Submarine'
+}
diff --git a/replay_unpack/clients/wows/versions/12_9_0/players_info.py b/replay_unpack/clients/wows/versions/12_9_0/players_info.py
new file mode 100644
index 0000000..63a394d
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/players_info.py
@@ -0,0 +1,45 @@
+# coding=utf-8
+from .constants import (
+ id_property_map,
+ id_property_map_bots,
+ id_property_map_observer
+)
+
+
+class PlayerType:
+ PLAYER = 1
+ BOT = 2
+ OBSERVER = 3
+
+
+class PlayersInfo(object):
+ def __init__(self):
+ self._players = {}
+
+ def _convert_to_dict(self, player_info, player_type):
+ # type: (list[tuple], int) -> 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.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)
+
+ 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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AccountReviverComponent.def
new file mode 100644
index 0000000..a55a784
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AchievementsComponent.def
new file mode 100644
index 0000000..5ac40fc
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/AlmanacComponent.def
new file mode 100644
index 0000000..860a1e2
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BattlePassComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BattlePassComponent.def
new file mode 100644
index 0000000..781cdee
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def
new file mode 100644
index 0000000..d71595b
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/BrawlBattlesComponent.def
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ControllerToAccountConnector.def
new file mode 100644
index 0000000..7bc4f2f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponent.def
new file mode 100644
index 0000000..c913f4f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def
new file mode 100644
index 0000000..d9ae622
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DivisionsManagerComponentAvatar.def
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ENTITY_ID
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def
new file mode 100644
index 0000000..e84c4f4
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/DockComponent.def
@@ -0,0 +1,13 @@
+
+
+
+
+
+ UINT8
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def
new file mode 100644
index 0000000..11df2da
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/GiftListsComponent.def
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ UINT8
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def
new file mode 100644
index 0000000..7b89c1b
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/HotFixComponent.def
@@ -0,0 +1,28 @@
+
+
+
+ BLOB
+
+
+
+
+
+ BOOL
+
+
+
+
+
+
+
+
+ PYTHON
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def
new file mode 100644
index 0000000..de0e975
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/KeyTargetComponent.def
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ UINT32
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/LootboxComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/LootboxComponent.def
new file mode 100644
index 0000000..ffd9cbd
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MasterEntityAPIComponent.def
new file mode 100644
index 0000000..1e377c7
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/MatchmakerComponent.def
new file mode 100644
index 0000000..cf41028
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/NewbieQuestComponent.def
new file mode 100644
index 0000000..8a393ea
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def
new file mode 100644
index 0000000..d71595b
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PVEBattlesComponent.def
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PdataResetComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/PdataResetComponent.def
new file mode 100644
index 0000000..076cf6a
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RankedBattlesComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RankedBattlesComponent.def
new file mode 100644
index 0000000..9622027
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RequestPerformerComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/RequestPerformerComponent.def
new file mode 100644
index 0000000..15110b3
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ShipAcesComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/ShipAcesComponent.def
new file mode 100644
index 0000000..ca3a438
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def
new file mode 100644
index 0000000..d2ef68a
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/StrategicActionsComponent.def
@@ -0,0 +1,59 @@
+
+
+
+
+
+ STRING
+
+
+ BOOL
+
+
+
+
+
+ STRING
+
+
+ BOOL
+
+
+
+
+
+ BOOL
+
+
+
+
+
+ UINT16
+
+
+
+
+
+
+
+
+
+
+
+ STRING
+
+ ARRAYSTRING
+
+
+
+
+ STRING
+ UINT8
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SuperEntityAPIComponent.def
new file mode 100644
index 0000000..dea1003
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/SurveysComponent.def
new file mode 100644
index 0000000..3defdaf
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomComponent.def
new file mode 100644
index 0000000..29cf0ba
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomsManagerComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/TrainingRoomsManagerComponent.def
new file mode 100644
index 0000000..ef17df9
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/UserDataComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/UserDataComponent.def
new file mode 100644
index 0000000..26dfdfb
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def
new file mode 100644
index 0000000..ac91dff
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/VSEventComponent.def
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ INT8
+
+
+
+
+
+
+
+ BOOL
+
+
+
+
+
+ STRING
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/component_defs/XmppComponent.def
new file mode 100644
index 0000000..abe4a5f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml b/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml
new file mode 100644
index 0000000..db2d64a
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/components.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml b/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml
new file mode 100644
index 0000000..dadadb8
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/entities.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Account.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Account.def
new file mode 100644
index 0000000..04ca791
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Avatar.def
new file mode 100644
index 0000000..77f648f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleEntity.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleEntity.def
new file mode 100644
index 0000000..d43c0ec
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleLogic.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/BattleLogic.def
new file mode 100644
index 0000000..a4c32e6
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Building.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Building.def
new file mode 100644
index 0000000..3b564a8
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/InteractiveZone.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/InteractiveZone.def
new file mode 100644
index 0000000..ac418ba
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Login.def
new file mode 100644
index 0000000..c0a05f5
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/MasterChanger.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/MasterChanger.def
new file mode 100644
index 0000000..73afe59
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def
new file mode 100644
index 0000000..c5b133b
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/OfflineEntity.def
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def
new file mode 100644
index 0000000..168963d
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayConnectionHandler.def
@@ -0,0 +1,24 @@
+
+
+
+
+ GiveClientHelper
+
+
+
+
+ UINT64
+
+
+
+
+
+
+
+
+ UINT64
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/ReplayLeech.def
new file mode 100644
index 0000000..c815da4
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/SmokeScreen.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/SmokeScreen.def
new file mode 100644
index 0000000..cc5e3ea
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/Vehicle.def
new file mode 100644
index 0000000..949637f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/alias.xml
new file mode 100644
index 0000000..1b7da7c
--- /dev/null
+++ b/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
+
+
+ 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
+ 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
+
+
+ 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
+
+
+
+ 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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountCMDs.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountCMDs.def
new file mode 100644
index 0000000..b2d214b
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountPData.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AccountPData.def
new file mode 100644
index 0000000..de981b9
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AirDefenceOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AirDefenceOwner.def
new file mode 100644
index 0000000..41e917f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AtbaOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AtbaOwner.def
new file mode 100644
index 0000000..4723f29
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AviationOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/AviationOwner.def
new file mode 100644
index 0000000..09420ce
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleLogicEntityOwner.def
new file mode 100644
index 0000000..d716467
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BattleStarterClient.def
new file mode 100644
index 0000000..f5f209e
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/BuoyancyOwner.def
new file mode 100644
index 0000000..051f8cc
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DamageDealerOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DamageDealerOwner.def
new file mode 100644
index 0000000..8ffbc9f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/DebugDrawEntity.def
new file mode 100644
index 0000000..b071be0
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/GiveClientHelper.def
new file mode 100644
index 0000000..9db2889
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/HitLocationManagerOwner.def
new file mode 100644
index 0000000..e41533b
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/ModelOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/ModelOwner.def
new file mode 100644
index 0000000..926e8ab
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsOwner.def
new file mode 100644
index 0000000..51ed150
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/StatsPublisher.def
new file mode 100644
index 0000000..94adaac
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/TransactionAPI.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/TransactionAPI.def
new file mode 100644
index 0000000..35c6bbf
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VisionOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VisionOwner.def
new file mode 100644
index 0000000..8bcd78f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/VoiceChatClient.def
new file mode 100644
index 0000000..83196ca
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletOwner.def
new file mode 100644
index 0000000..912ea90
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WalletProperties.def
new file mode 100644
index 0000000..912ea90
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WeatherOwner.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/entity_defs/interfaces/WeatherOwner.def
new file mode 100644
index 0000000..edf71ca
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def
new file mode 100644
index 0000000..2113b3c
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/space_defs/GeneralSpaceData.def
@@ -0,0 +1,15 @@
+
+
+
+
+
+ STRING
+
+
+
+ UINT32
+
+
+
+
+
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml b/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml
new file mode 100644
index 0000000..d4be0b4
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/spaces.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Barge.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Barge.def
new file mode 100644
index 0000000..259fa18
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Building.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Building.def
new file mode 100644
index 0000000..2377917
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ControlPoint.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ControlPoint.def
new file mode 100644
index 0000000..a93df24
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ConvoyWayPoint.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/ConvoyWayPoint.def
new file mode 100644
index 0000000..b90d1fc
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/DropZone.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/DropZone.def
new file mode 100644
index 0000000..06d6cd0
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/FogPoint.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/FogPoint.def
new file mode 100644
index 0000000..682783a
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapBorder.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapBorder.def
new file mode 100644
index 0000000..a268f2f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapPartInfo.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapPartInfo.def
new file mode 100644
index 0000000..691e52a
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapSeparator.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/MapSeparator.def
new file mode 100644
index 0000000..0dc46dc
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Minefield.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Minefield.def
new file mode 100644
index 0000000..7421af3
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Prefab.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Prefab.def
new file mode 100644
index 0000000..0cdba86
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpaceDebugTool.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpaceDebugTool.def
new file mode 100644
index 0000000..ca0e448
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpatialUIDebugTool.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpatialUIDebugTool.def
new file mode 100644
index 0000000..83f1b6f
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpawnPoint.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SpawnPoint.def
new file mode 100644
index 0000000..7e95937
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SquadronReticleTool.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/SquadronReticleTool.def
new file mode 100644
index 0000000..3f24f57
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/StaticSoundEmitter.def
new file mode 100644
index 0000000..d66df87
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Trigger.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/Trigger.def
new file mode 100644
index 0000000..5649ec9
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/WayPoint.def b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_object_defs/WayPoint.def
new file mode 100644
index 0000000..9078b56
--- /dev/null
+++ b/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/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml
new file mode 100644
index 0000000..de1ba94
--- /dev/null
+++ b/replay_unpack/clients/wows/versions/12_9_0/scripts/user_data_objects.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+