1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
| import re
from collections import namedtuple
############################## DEFINITION LIST ##############################################################################################
Init_Event = namedtuple("Init_Event", "tik, date")
liste_init_event = []
Hit_Event = namedtuple("Hit_Event", "tik, ammo, attacker_id, target_id")
liste_hit_event = []
Damaged_Event = namedtuple("Damaged_Event", "tik, damage, attacker_id, target_id, posx, posy, posz")
liste_damaged_event = []
Kill_Event = namedtuple("Kill_Event", "tik, attacker_id, target_id, posx, posy, posz")
liste_kill_event = []
Player_End_Event = namedtuple("Player_End_Event", "tik, aircraft_id, bot_id, cartridges, shells, bombs, rockets, posx, posy, posz")
liste_player_end_event = []
Take_Off_Event = namedtuple("Take_Off_Event", "tik, aircraft_id, posx, posy, posz")
liste_take_off_event = []
Land_Event = namedtuple("Land_Event", "tik, aircraft_id, posx, posy, posz")
liste_land_event = []
Mission_End_Event = namedtuple("Mission_End_Event", "tik, ")
Airfield_Event = namedtuple("Airfield_Event", "tik, airfield_id, country_id, posx, posy, posz, aircraft_id_list")
liste_airfield_event = []
Player_Plane_Event = namedtuple("Player_Plane_Event", "tik, aircraft_id, bot_id, name, aircraft_name, country_id, airfield_id, cartridges, shells, bombs, rockets, posx, posy, posz, payload_id, fuel, weapon_mods_id")
liste_player_plane_event = []
Group_Init_Event = namedtuple("Group_Init_Event", "tik, group_id, members_id, leader_id")
liste_group_init_event = []
Object_Spawn_Event = namedtuple("Object_Spawn_Event", "tik, object_id, object_name, country_id, name, parent_id, posx, posy, posz")
liste_object_spawn_event = []
Influence_Aera_Event = namedtuple("Influence_Aera_Event", "tik, aera_id, country_id, enabled, in_air")
liste_influence_aera_event = []
Influence_Boundary_Event = namedtuple("Influence_Boundary_Event", "tik, aera_id, boundary")
liste_influence_boundary_event = []
Bot_Uninit_Event = namedtuple("Bot_Uninit_Event", "tik, bot_id, posx, posy, posz")
liste_bot_uninit_event = []
Position_Changed_Event = namedtuple("Position_Changed_Event", "tik, object_id, posx, posy, posz")
liste_position_changed_event = []
Bot_Leave_Event = namedtuple("Bot_Leave_Event", "tik, bot_id, parent_id, posx, posy, posz")
liste_bot_leave_event = []
liste = []
############################## CREATE LIST OF NAMEDTUPLE ##############################################################################################
while 1:
line = missionreport.readline()
# "INITIAL" Event Type
# T:0 AType:0 GDate:1943.11.2 GTime:15:45:0 MFile:Multiplayer/Kuban_4\Kuban_4_Welcome_to_crimea2.msnbin MID: GType:2 CNTRS:0:0,101:1,201:2 SETTS:000000000010000100000000110 MODS:0 PRESET:0 AQMID:0 ROUNDS: 1 POINTS: 5000
Atype_0= r"^T:(?P<tik>\d+) AType:0 GDate:(?P<date>\d{4}.\d{1,2}.\d{1,2}) GTime:\d{1,2}:\d{1,2}:\d{1,2} MFile:(?P<file_path>.+) MID:\d* GType:(?P<game_type_id>\d+) CNTRS:(?P<countries>[,:\d]+) SETTS:(?P<settings>\d+) MODS:(?P<mods>\d) PRESET:(?P<preset_id>\d)"
regex = re.compile(Atype_0)
match = regex.search(line)
if match != None:
init_event = Init_Event(match.group("tik"), match.group("date"))
liste_init_event = liste_init_event + [init_event]
# "HIT" Event Type
# T:130277 AType:1 AMMO:BULLET_GER_7-92x57_AP AID:781354 TID:1040430
Atype_1 = r"^T:(?P<tik>\d+) AType:1 AMMO:(?P<ammo>[-\w]+) AID:(?P<attacker_id>\d+) TID:(?P<target_id>\d+)$"
regex = re.compile(Atype_1)
match = regex.search(line)
if match != None:
hit_event = Hit_Event(match.group("tik"), match.group("ammo"), match.group("attacker_id"), match.group("target_id"))
liste_hit_event = liste_hit_event + [hit_event]
# "DAMAGED" Event Type
# T:194164 AType:2 DMG:0.0040 AID:1202220 TID:1178645 POS(280906.0000,5691.9624,145361.6250)
Atype_2 = r"^T:(?P<tik>\d+) AType:2 DMG:(?P<damage>\S{5,6}) AID:(?P<attacker_id>[-\d]+) TID:(?P<target_id>[-\d]+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_2)
match = regex.search(line)
if match != None:
damaged_event = Damaged_Event(match.group("tik"), match.group("damage"), match.group("attacker_id"), match.group("target_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_damaged_event = liste_damaged_event +[damaged_event]
# "KILL" Event Type
# T:203 AType:3 AID:-1 TID:220160 POS(225177.4063,12.3517,239741.1250)
Atype_3 = r"^T:(?P<tik>\d+) AType:3 AID:(?P<attacker_id>[-\d]+) TID:(?P<target_id>[-\d]+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_3)
match = regex.search(line)
if match != None:
kill_event = Kill_Event(match.group("tik"), match.group("attacker_id"), match.group("target_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_kill_event = liste_kill_event +[kill_event]
# "PLAYER END" Event Type
# T:149016 AType:4 PLID:781354 PID:782378 BUL:2098 SH:0 BOMB:0 RCT:0 (241224.7031,56.4326,112470.3594)
Atype_4 = r"^T:(?P<tik>\d+) AType:4 PLID:(?P<aircraft_id>\d+) PID:(?P<bot_id>\d+) BUL:(?P<cartridges>\d+) SH:(?P<shells>\d+) BOMB:(?P<bombs>\d+) RCT:(?P<rockets>\d+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_4)
match = regex.search(line)
if match != None:
player_end_event = Player_End_Event(match.group("tik"), match.group("aircraft_id"), match.group("bot_id"), match.group("cartridges"), match.group("shells"), match.group("bombs"), match.group("rockets"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_player_end_event = liste_player_end_event +[player_end_event]
# "TAKE OFF" Event Type
# T:91410 AType:5 PID:780326 POS(258321.4219, 63.3613, 48782.1484)
Atype_5 = r"^T:(?P<tik>\d+) AType:5 PID:(?P<aircraft_id>\d+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_5)
match = regex.search(line)
if match != None:
take_off_event = Take_Off_Event(match.group("tik"), match.group("aircraft_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_take_off_event = liste_take_off_event +[take_off_event]
# "LAND" Event Type
# T:146520 AType:6 PID:781354 POS(241226.5000, 56.3776, 112472.2734)
Atype_6 = r"^T:(?P<tik>\d+) AType:6 PID:(?P<aircraft_id>\d+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_6)
match = regex.search(line)
if match != None:
land_event = Land_Event(match.group("tik"), match.group("aircraft_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_land_event = liste_land_event +[land_event]
# "MISSION END" Event Type
# T:450003 AType:7
Atype_7 = r"^T:(?P<tik>\d+) AType:7.?$"
regex = re.compile(Atype_7)
match = regex.search(line)
if match != None:
mission_end_event = Mission_End_Event(match.group("tik"), )
# "AIRFIELD" Event Type
# T:10 AType:9 AID:39936 COUNTRY:101 POS(184785.5938, 2.6443, 240943.4375) IDS()
Atype_9 = r"^T:(?P<tik>\d+) AType:9 AID:(?P<airfield_id>\d+) COUNTRY:(?P<country_id>\d{1,3}) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\) IDS\((?P<aircraft_id_list>[,\-\d]*)\)$"
regex = re.compile(Atype_9)
match = regex.search(line)
if match != None:
airfield_event = Airfield_Event(match.group("tik"), match.group("airfield_id"), match.group("country_id"), match.group("posx"), match.group("posy"), match.group("posz"), match.group("aircraft_id_list"))
liste_airfield_event = liste_airfield_event +[airfield_event]
# "PLAYER PLANE" Event Type
# T:68510 AType:10 PLID:700446 PID:701470 BUL:6450 SH:0 BOMB:6 RCT:0 (259973.9219,49.4752,54857.3555) IDS:34c54268-1f3f-4206-ad8f-5d3c0370bcc2 LOGIN:828dfc6b-8f3d-466e-ad09-d4901ff60abe NAME:player_name TYPE:Bf 110 G-2 COUNTRY:201 FORM:0 FIELD:573440 INAIR:2 PARENT:-1 ISPL:1 ISTSTART:1 PAYLOAD:2 FUEL:0.6500 SKIN:bf110g2/bf110g2_skin_13.dds WM:3
Atype_10 = r"^T:(?P<tik>\d+) AType:10 PLID:(?P<aircraft_id>\d+) PID:(?P<bot_id>\d+) BUL:(?P<cartridges>\d+) SH:(?P<shells>\d+) BOMB:(?P<bombs>\d+) RCT:(?P<rockets>\d+) \((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\) IDS:(?P<profile_id>[-\w]{36}) LOGIN:(?P<account_id>[-\w]{36}) NAME:(?P<name>.*) TYPE:(?P<aircraft_name>[\w\(\) .\-_/]+) COUNTRY:(?P<country_id>\d{1,3}) FORM:(?P<form>\d+) FIELD:(?P<airfield_id>\d+) INAIR:(?P<airstart>\d) PARENT:(?P<parent_id>[-\d]+) ISPL:(?P<is_player>\d+) ISTSTART:(?P<is_tracking_stat>\d+) PAYLOAD:(?P<payload_id>\d+) FUEL:(?P<fuel>\S{5,6}) SKIN:(?P<skin>[\S ]*) WM:(?P<weapon_mods_id>\d+)"
regex = re.compile(Atype_10)
match = regex.search(line)
if match != None:
player_plane_event = Player_Plane_Event(match.group("tik"), match.group("aircraft_id"), match.group("bot_id"), match.group("name"), match.group("aircraft_name"), match.group("country_id"), match.group("airfield_id"), match.group("cartridges"), match.group("shells"), match.group("bombs"), match.group("rockets"), match.group("posx"), match.group("posy"), match.group("posz"), match.group("payload_id"), match.group("fuel"), match.group("weapon_mods_id"))
liste_player_plane_event = liste_player_plane_event +[player_plane_event]
# "GROUP INIT" Event Type
# T:1 AType:11 GID:115711 IDS:17407,26623,35839 LID:17407
Atype_11 = r"^T:(?P<tik>\d+) AType:11 GID:(?P<group_id>\d+) IDS:(?P<members_id>[,\d]*) LID:(?P<leader_id>\d+)$"
regex = re.compile(Atype_11)
match = regex.search(line)
if match != None:
group_init_event = Group_Init_Event(match.group("tik"), match.group("group_id"), match.group("members_id"), match.group("leader_id"))
liste_group_init_event = liste_group_init_event +[group_init_event]
# "OBJECT SPAWN" Event Type
# T:203 AType:12 ID:220160 TYPE:dugout[32266,0] COUNTRY:201 NAME:Bunker PID:-1 POS(225177.4063,12.3517,239741.1250)
Atype_12 = r"^T:(?P<tik>\d+) AType:12 ID:(?P<object_id>\d+) TYPE:(?P<object_name>[ .\'\-\w\(\)/]*)(\[-?\d+,-?\d+\])* COUNTRY:(?P<country_id>\d{1,3}) NAME:(?P<name>.*) PID:(?P<parent_id>[-\d]+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_12)
match = regex.search(line)
if match != None:
object_spawn_event = Object_Spawn_Event(match.group("tik"), match.group("object_id"), match.group("object_name"), match.group("country_id"), match.group("name"), match.group("parent_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_object_spawn_event = liste_object_spawn_event +[object_spawn_event]
# "INFLUENCE AERA" Event Type
# T:0 AType:13 AID:39936 COUNTRY:501 ENABLED:1 BC(0,0,0,0,0,0,0,0)
Atype_13 = r"^T:(?P<tik>\d+) AType:13 AID:(?P<area_id>\d+) COUNTRY:(?P<country_id>\d{1,3}) ENABLED:(?P<enabled>\d) BC\((?P<in_air>[,\d]+)\)$"
regex = re.compile(Atype_13)
match = regex.search(line)
if match != None:
influence_aera_event = Influence_Aera_Event(match.group("tik"), match.group("aera_id"), match.group("country_id"), match.group("enabled"), match.group("in_air"))
liste_influence_aera_event = liste_influence_aera_event +[influence_aera_event]
# "INFLUENCE BOUNDARY" Event Type
# T:1 AType:14 AID:39936 BP((26968.0,74.3,22949.0),(30848.0,74.3,23891.0),(35717.0,74.3,23876.0),(55007.0,74.3,15026.0),
# (55001.0,74.3,55020.0),(-5018.0,74.3,55042.0),(-4991.0,74.3,34620.0),(2552.0,74.3,34401.0),(8185.0,74.3,29341.0),
# (17968.0,74.3,26690.0),(21055.0,74.3,27434.0),(22561.0,74.3,24669.0),(25287.6,74.3,24965.3))
Atype_14 = r"^T:(?P<tik>\d+) AType:14 AID:(?P<area_id>\d+) BP(?P<boundary>[-,\(\)\.\d]+)$"
regex = re.compile(Atype_14)
match = regex.search(line)
if match != None:
influence_boundary_event = Influence_Boundary_Event(match.group("tik"), match.group("aera_id"), match.group("boundary"))
liste_influence_boundary_event = liste_influence_boundary_event +[influence_boundary_event]
# "BOT UNINIT" Event Type
# T:87224 AType:16 BOTID:993309 POS(0.0000,0.0000,0.0000)
Atype_16 = r"^T:(?P<tik>\d+) AType:16 BOTID:(?P<bot_id>\d+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_16)
match = regex.search(line)
if match != None:
bot_uninit_event = Bot_Uninit_Event(match.group("tik"), match.group("bot_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_bot_uninit_event = liste_bot_uninit_event +[bot_uninit_event]
# "POSITION CHANGED" Event Type
# T:58 AType:17 ID:107519 POS(39013.016,45.535,16807.107)
Atype_17 = r"^T:(?P<tik>\d+) AType:17 ID:(?P<object_id>\d+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_17)
match = regex.search(line)
if match != None:
position_changed_event = Position_Changed_Event(match.group("tik"), match.group("object_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_position_changed_event = liste_position_changed_event +[position_changed_event]
# "BOT LEAVE" Event Type (Eject ??)
# T:168858 AType:18 BOTID:1204267 PARENTID:1203243 POS(277889.3750,6450.9058,129604.6172)
Atype_18 = r"^T:(?P<tik>\d+) AType:18 BOTID:(?P<bot_id>\d+) PARENTID:(?P<parent_id>[-\d]+) POS\((?P<posx>\d+\.\d+)\, ?(?P<posy>\d+\.\d+)\, ?(?P<posz>\d+\.\d+)\)$"
regex = re.compile(Atype_18)
match = regex.search(line)
if match != None:
bot_leave_event = Bot_Leave_Event(match.group("tik"), match.group("bot_id"), match.group("parent_id"), match.group("posx"), match.group("posy"), match.group("posz"))
liste_bot_leave_event = liste_bot_leave_event +[bot_leave_event]
if line == "":
break |
Partager