diff options
Diffstat (limited to 'lib/PacketManager')
| -rw-r--r-- | lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py | 27 | ||||
| -rw-r--r-- | lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py | 149 | ||||
| -rw-r--r-- | lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py | 8 |
3 files changed, 115 insertions, 69 deletions
diff --git a/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py b/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py index ef7f785..61e2b3f 100644 --- a/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py +++ b/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py @@ -46,7 +46,34 @@ class FSNETCMD_ADDOBJECT: #5 #There is an extra short, but it's just set to 0 if len(self.buffer) >= 176: self.pilot = unpack("32s", self.buffer[124:156])[0].decode().strip('\x00') + + def to_dict(self): + return { + "object_type": self.object_type, + "net_type": self.net_type, + "object_id": self.object_id, + "iff": self.iff, + "pos": self.pos, + "atti": self.atti, + "identifier": self.identifier, + "substrname": self.substrname, + "ysfid": self.ysfid, + "flags": self.flags, + "flags0": self.flags0, + "outside_radius": self.outsideRadius, + "aircraft_class": self.aircraft_class, + "aircraft_category": self.aircraft_category, + "pilot": self.pilot + } + def to_packet(self, with_size:bool=True): + return FSNETCMD_ADDOBJECT.encode(self.object_type, self.net_type, + self.object_id, self.iff, self.pos, + self.atti, self.identifier, self.substrname, + self.ysfid, self.flags, self.flags0, + self.outsideRadius, self.aircraft_class, + self.aircraft_category, self.pilot, with_size) + @staticmethod def encode(object_type, net_type, object_id, iff, pos, atti, identifier, substrname, ysfid, flags, flags0, outside_radius, aircraft_class=None, aircraft_category=None, diff --git a/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py b/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py index 3ebf8d6..ebb2a6d 100644 --- a/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py +++ b/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py @@ -74,7 +74,6 @@ class FSNETCMD_AIRPLANESTATE: #11 # self.atti = list(unpack("HHH", self.buffer[26:32])) self.atti = list(map(lambda x: x * (pi / 32768.0), unpack("HHH", self.buffer[26:32]))) - debug(self.atti) self.velocity = list(map(lambda x: x/10, unpack("HHH", self.buffer[32:38]))) @@ -218,6 +217,12 @@ class FSNETCMD_AIRPLANESTATE: #11 packet = self.buffer[:74] + pack('h',flag) + self.buffer[76:] return pack('I',len(packet)) + packet + def to_packet(self, with_size:bool=True): + return FSNETCMD_AIRPLANESTATE.encode(self.remote_time, self.player_id, self.packet_version, self.position, self.atti, self.velocity, self.atti_velocity, + self.smoke_oil, self.fuel, self.payload, self.flight_state, self.vgw, self.spoiler, self.landing_gear, self.flap, self.brake, + self.flags, self.gun_ammo, self.rocket_ammo, self.aam, self.agm, self.bomb, self.life, self.g_value, self.throttle, self.elev, self.ail, self.rud, + self.trim, self.thrust_vector, self.bomb_bay_info, with_size) + @staticmethod def get_life(buffer:bytes): version = unpack("h", buffer[12:14])[0] @@ -232,73 +237,81 @@ class FSNETCMD_AIRPLANESTATE: #11 smoke_oil, fuel, payload, flight_state, vgw, spoiler, landing_gear, flap, brake, flags, gun_ammo, rocket_ammo, aam, agm, bomb, life, g_value, throttle, elev, ail, rud, trim, thrust_vector, bomb_bay_info, with_size:bool=False): - buffer = pack("IfI", 11, remote_time, player_id) - buffer += pack("H", packet_version) - if packet_version == 4 or packet_version == 5: - buffer += pack("fffhhhhhhhhh", *position, *atti, *velocity, *atti_velocity) - buffer += pack("hhhh", smoke_oil, fuel, payload, 0) - buffer += pack("BB", flight_state, int(vgw*255)) - buffer += pack("BB", int(spoiler*15)<<4 | int(landing_gear*15), int(flap*15)<<4 | int(brake*15)) - flagschar = 0 - if flags["ab"]: - flagschar |= 1 - if flags["firing"]: - flagschar |= 8 - if flags["smoke"]: - flagschar |= flags["smoke"] << 8 - if flags["beacon"]: - flagschar |= 16 - if flags["nav_lights"]: - flagschar |= 32 - if flags["strobe"]: - flagschar |= 64 - if flags["landing_lights"]: - flagschar |= 128 - buffer += pack("h", flagschar) - buffer += pack("HHBBB", gun_ammo, rocket_ammo, aam, agm, bomb) - buffer += pack("B", life) - buffer += pack("b", int(g_value*10)) - buffer += pack("B", int(throttle*99)) - buffer += pack("b", int(elev*99)) - buffer += pack("b", int(ail*99)) - buffer += pack("b", int(rud*99)) - buffer += pack("b", int(trim*99)) - - if packet_version == 4: - buffer += pack("BB", int(thrust_vector["vector"]*15)<<4 | int(thrust_vector["reverser"]*15), - int(bomb_bay_info*15)) - - else: - buffer += pack("fffhhhfff", *position, *atti, *velocity, *atti_velocity) - buffer += pack("HHHHH", gun_ammo, aam, agm, bomb, smoke_oil) - buffer += pack("f", payload) - buffer += pack("H", life) - buffer += pack("BB", flight_state, int(vgw*255)) - buffer += pack("BBBB", int(spoiler*15), int(landing_gear*15), - int(flap*15), int(brake*15)) - flagschar = 0 - if flags["ab"]: - flagschar |= 1 - if flags["firing"]: - flagschar |= 8 - if flags["smoke"]: - flagschar |= flags["smoke"] << 8 - buffer += pack("H", flagschar) - buffer += pack("B", int(throttle*99)) - buffer += pack("b", int(elev*99)) - buffer += pack("b", int(ail*99)) - buffer += pack("b", int(rud*99)) - buffer += pack("b", int(trim*99)) - buffer += pack("H", rocket_ammo) - if packet_version >= 1: - buffer += pack("fff", *atti_velocity) - if packet_version >= 2: - buffer += pack("BBB", int(thrust_vector["vector"]*255), int(thrust_vector["reverser"]*255), - int(bomb_bay_info*255)) - - if with_size: - return pack("I",len(buffer))+buffer - return buffer + try: + buffer = pack("IfI", 11, remote_time, player_id) + buffer += pack("H", packet_version) + if packet_version == 4 or packet_version == 5: + buffer += pack("fffhhhhhhhhh", *position, *atti, *velocity, *atti_velocity) + buffer += pack("hhhh", smoke_oil, fuel, payload, 0) + buffer += pack("BB", flight_state, int(vgw*255)) + buffer += pack("BB", int(spoiler*15)<<4 | int(landing_gear*15), int(flap*15)<<4 | int(brake*15)) + flagschar = 0 + if flags["ab"]: + flagschar |= 1 + if flags["firing"]: + flagschar |= 8 + if flags["smoke"]: + flagschar |= flags["smoke"] << 8 + if flags["beacon"]: + flagschar |= 16 + if flags["nav_lights"]: + flagschar |= 32 + if flags["strobe"]: + flagschar |= 64 + if flags["landing_lights"]: + flagschar |= 128 + buffer += pack("h", flagschar) + buffer += pack("HHBBB", gun_ammo, rocket_ammo, aam, agm, bomb) + buffer += pack("B", life) + buffer += pack("b", int(g_value*10)) + buffer += pack("B", int(throttle*99)) + buffer += pack("b", int(elev*99)) + buffer += pack("b", int(ail*99)) + buffer += pack("b", int(rud*99)) + buffer += pack("b", int(trim*99)) + + if packet_version == 4: + buffer += pack("BB", int(thrust_vector["vector"]*15)<<4 | int(thrust_vector["reverser"]*15), + int(bomb_bay_info*15)) + + else: + buffer += pack("fff", *position) + buffer += pack("HHH", *map(lambda x: int(x*32768.0/pi), atti)) + buffer += pack("HHH", *map(lambda x: int(x*10), velocity)) + buffer += pack("HHH", *map(lambda x: int(x*32768.0/pi), atti_velocity)) + buffer += pack("H", int(g_value)) + buffer += pack("HHHHH", gun_ammo, aam, agm, bomb, smoke_oil) + buffer += pack("f", payload) + buffer += pack("H", life) + buffer += pack("BB", flight_state, int(vgw*255)) + buffer += pack("BBBB", int(spoiler*15), int(landing_gear*15), + int(flap*15), int(brake*15)) + flagschar = 0 + if flags["ab"]: + flagschar |= 1 + if flags["firing"]: + flagschar |= 8 + if flags["smoke"]: + flagschar |= flags["smoke"] << 8 + buffer += pack("H", flagschar) + buffer += pack("B", int(throttle*99)) + buffer += pack("b", int(elev*99)) + buffer += pack("b", int(ail*99)) + buffer += pack("b", int(rud*99)) + buffer += pack("b", int(trim*99)) + buffer += pack("H", rocket_ammo) + if packet_version >= 1: + buffer += pack("fff", *atti_velocity) + if packet_version >= 2: + buffer += pack("BBB", int(thrust_vector["vector"]*255), int(thrust_vector["reverser"]*255), + int(bomb_bay_info*255)) + + if with_size: + return pack("I",len(buffer))+buffer + return buffer + except Exception as e: + import traceback + traceback.print_exc() def __str__(self): return f"Player ID : {self.player_id}; Remote Time : {self.remote_time}; \ diff --git a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py index 7796599..15848fa 100644 --- a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py +++ b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py @@ -20,10 +20,16 @@ class FSNETCMD_JOINREQUEST: #8 self.start_pos = self.start_pos.decode().strip('\x00') self.aircraft = self.aircraft.decode().strip('\x00') + def to_packet(self, with_size:bool=True): + return FSNETCMD_JOINREQUEST.encode(self.iff, self.aircraft, self.start_pos, self.fuel, self.smoke, with_size) + @staticmethod def encode(iff, aircraft, start_pos, fuel, smoke, with_size:bool=False): buffer = pack("IHH32s32sHHH", 8, iff, 0, aircraft.encode(), start_pos.encode(), 1, fuel, smoke) if with_size: return pack("I",len(buffer))+buffer - return buffer
\ No newline at end of file + return buffer + + def __str__(self): + return f"JoinRequest: {self.iff} {self.aircraft} {self.start_pos} {self.fuel} {self.smoke}"
\ No newline at end of file |
