summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSkipper <[email protected]>2025-02-04 22:14:40 +0000
committerSkipper <[email protected]>2025-02-04 22:14:40 +0000
commit313338fc498c089da5860ba6b5b0673be848c45b (patch)
treecca9abead22cee416e9616344e98b3114ee053b5
parent85d07549622d37e8c133bfc9482f35f3f4b30239 (diff)
Updated some packets
-rw-r--r--lib/PacketManager/PacketManager.py33
-rw-r--r--lib/PacketManager/packets/FSNETCMD_AIRCMD.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py72
-rw-r--r--lib/PacketManager/packets/FSNETCMD_ERROR.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_GETDAMAGE.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_MISSILELAUNCH.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_WEAPONCONFIG.py2
-rw-r--r--lib/PacketManager/packets/__init__.py538
-rw-r--r--lib/PacketManager/packets/constants.py472
-rw-r--r--lib/YSchat.py2
-rw-r--r--proxy.py80
11 files changed, 633 insertions, 574 deletions
diff --git a/lib/PacketManager/PacketManager.py b/lib/PacketManager/PacketManager.py
index 847d55c..f019369 100644
--- a/lib/PacketManager/PacketManager.py
+++ b/lib/PacketManager/PacketManager.py
@@ -7,33 +7,6 @@ class PacketManager:
def __init__(self):
pass
- def decode(self, buffer:bytes, with_size:bool=False, should_decode=True):
- """
- Takes incomming packets from client or server and decodes them.
- If with_size is True, then the packet size is included in the buffer.
- If decode is False, then the packet is just returned as is.
- If it is true, then the packet will be decoded.
- """
-
- if with_size:
- # Strips away the size, so we've just got the message.
- buffer = buffer[4:]
-
- # Pull out the message type
- msg_type = unpack("I", buffer[:4])[0]
-
- # Find message type on the message_types list
- if msg_type < len(MESSAGE_TYPES):
- msg_type = MESSAGE_TYPES[msg_type]
- packet_class = None
- try:
- # Try to import the packet class
- packet_class = __import__("PacketManager.packets."+msg_type, fromlist=[msg_type])
- except ImportError as e:
- print(f"Error importing packet: {msg_type}")
- print(e)
- if packet_class:
- return packet_class(buffer, should_decode)
- return None
-
- return None
+ def get_packet_type(self, data: bytes):
+ #Returns the message type of that packet.
+ return MESSAGE_TYPES[unpack("<I", data[:4])[0]] \ No newline at end of file
diff --git a/lib/PacketManager/packets/FSNETCMD_AIRCMD.py b/lib/PacketManager/packets/FSNETCMD_AIRCMD.py
index 50340c1..98d782c 100644
--- a/lib/PacketManager/packets/FSNETCMD_AIRCMD.py
+++ b/lib/PacketManager/packets/FSNETCMD_AIRCMD.py
@@ -1,5 +1,5 @@
from struct import pack, unpack
-from . import AIRCMD_KEYWORDS
+from .constants import AIRCMD_KEYWORDS
class FSNETCMD_AIRCMD: #30
diff --git a/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py b/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py
index 382c876..7a1bf53 100644
--- a/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py
+++ b/lib/PacketManager/packets/FSNETCMD_AIRPLANESTATE.py
@@ -1,5 +1,6 @@
from struct import pack, unpack
from math import pi
+import math
class FSNETCMD_AIRPLANESTATE: #11
"""
@@ -64,30 +65,35 @@ class FSNETCMD_AIRPLANESTATE: #11
def decode(self):
self.remote_time, self.player_id = unpack("fI", self.buffer[4:12])
- self.packet_version = unpack("H", self.buffer[16:18])[0]
+ self.packet_version = unpack("h", self.buffer[12:14])[0]
+
if self.packet_version == 4 or self.packet_version == 5:
- self.position = list(unpack("fff", self.buffer[18:30]))
+ self.position = list(unpack("fff", self.buffer[14:26]))
self.atti = list(map(lambda x: x / (pi / 32768.0),
- unpack("hhh", self.buffer[30:36])))
+ unpack("hhh", self.buffer[26:32])))
self.velocity = list(map(lambda x: x/10,
- unpack("hhh", self.buffer[36:42])))
+ unpack("hhh", self.buffer[32:38])))
self.atti_velocity = list(map(lambda x: x / (pi / 32768.0),
- unpack("hhh", self.buffer[42:48])))
- self.smoke_oil, self.fuel, self.payload, _ = unpack("hhhh", self.buffer[48:56])
+ unpack("hhh", self.buffer[38:44])))
+ self.smoke_oil = unpack("h", self.buffer[44:46])[0]
+
+ self.fuel = unpack("I", self.buffer[46:50])[0]
- self.flight_state, self.vgw = unpack("BB", self.buffer[56:58])
+ self.payload = unpack("h", self.buffer[50:52])[0]
+
+ self.flight_state, self.vgw = unpack("BB", self.buffer[52:54])
self.vgw = self.vgw / 255.0
- c = unpack("B", self.buffer[58:59])[0]
+ c = unpack("B", self.buffer[54:55])[0]
self.spoiler = (c >> 4 & 15) / 15.0 #Bitshift 4 to the right, then mask with 15
self.landing_gear = (c & 15) / 15.0 #Mask with 15
- c = unpack("B", self.buffer[59:60])[0]
+ c = unpack("B", self.buffer[55:56])[0]
self.flap = (c >> 4 & 15) / 15.0
self.brake = (c & 15) / 15.0
- flags = unpack("h", self.buffer[60:62])[0]
+ flags = unpack("h", self.buffer[56:58])[0]
self.flags["ab"] = bool(flags & 1) # Last bit
self.flags["firing"] = bool(flags &8)
self.flags["smoke"] = 0
@@ -106,42 +112,42 @@ class FSNETCMD_AIRPLANESTATE: #11
if flags & 128:
self.flags["landing_lights"] = True
- self.gun_ammo, self.rocket_ammo, self.aam, self.agm, self.bomb = unpack("HHBBB", self.buffer[62:68])
- self.life = unpack("B", self.buffer[68:69])[0]
+ self.gun_ammo, self.rocket_ammo, self.aam, self.agm, self.bomb = unpack("HHBBB", self.buffer[58:65])
+ self.life = unpack("B", self.buffer[65:66])[0]
- self.g_value = unpack("b", self.buffer[69:70])[0]/10.0
+ self.g_value = unpack("b", self.buffer[66:67])[0]/10.0
- self.throttle = unpack("B", self.buffer[70:71])[0]/99.0
- self.elev = unpack("b", self.buffer[71:72])[0]/99.0
- self.ail = unpack("b", self.buffer[72:73])[0]/99.0
- self.rud = unpack("b", self.buffer[73:74])[0]/99.0
- self.trim = unpack("b", self.buffer[74:75])[0]/99.0
+ self.throttle = unpack("B", self.buffer[67:68])[0]/99.0
+ self.elev = unpack("b", self.buffer[68:69])[0]/99.0
+ self.ail = unpack("b", self.buffer[69:70])[0]/99.0
+ self.rud = unpack("b", self.buffer[70:71])[0]/99.0
+ self.trim = unpack("b", self.buffer[71:72])[0]/99.0
if self.packet_version == 4:
- c = unpack("B", self.buffer[75:76])[0]
+ c = unpack("B", self.buffer[71:72])[0]
self.thrust_vector["vector"] = (c >> 4 & 15) / 15.0
self.thrust_vector["reverser"] = (c & 15) / 15.0
- c = unpack("B", self.buffer[76:77])[0]
+ c = unpack("B", self.buffer[72:73])[0]
self.bomb_bay_info = (c >> 4 & 15) / 15.0
else:
- self.position = list(unpack("fff", self.buffer[20:32]))
+ self.position = list(unpack("fff", self.buffer[16:28]))
self.atti = list(map(lambda x: x / (pi / 32768.0),
- unpack("hhh", self.buffer[32:38])))
+ unpack("hhh", self.buffer[28:34])))
self.velocity = list(map(lambda x: x/10,
- unpack("hhh", self.buffer[38:44])))
+ unpack("hhh", self.buffer[34:40])))
self.atti_velocity = list(map(lambda x: x / (pi / 32768.0),
- unpack("hhh", self.buffer[44:50])))
- self.g_value = unpack("h", self.buffer[50:52])[0]/100.0
-
- self.gun_ammo, self.aam, self.agm, self.bomb, self.smoke_oil = unpack("HHHHH", self.buffer[52:62])
+ unpack("hhh", self.buffer[40:46])))
+ self.g_value = unpack("h", self.buffer[46:48])[0]/100.0
+ self.gun_ammo, self.aam, self.agm, self.bomb, self.smoke_oil = unpack("hhhhh", self.buffer[48:58])
+ self.fuel = unpack("f", self.buffer[58:62])[0]
self.payload = unpack("f", self.buffer[62:66])[0]
- self.life = unpack("H", self.buffer[66:68])[0]
+ self.life = unpack("h", self.buffer[66:68])[0]
self.flight_state, self.vgw = unpack("BB", self.buffer[68:70])
self.vgw = self.vgw / 255.0
@@ -168,6 +174,7 @@ class FSNETCMD_AIRPLANESTATE: #11
self.rocket_ammo = unpack("H", self.buffer[81:83])[0]
if self.packet_version >= 1:
+
self.atti_velocity = list(map(lambda x: x / (pi / 32768.0),
unpack("fff", self.buffer[83:95])))
@@ -177,6 +184,15 @@ class FSNETCMD_AIRPLANESTATE: #11
self.bomb_bay_info = unpack("B", self.buffer[97:98])[0]/255.0
@staticmethod
+ def get_life(buffer:bytes):
+ version = unpack("h", buffer[12:14])[0]
+ if version == 5 or version == 4:
+ return unpack("B", buffer[65:66])[0]
+ else:
+ return unpack("H", buffer[66:68])[0]
+
+
+ @staticmethod
def encode(remote_time, player_id, packet_version, position, atti, velocity, atti_velocity,
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,
diff --git a/lib/PacketManager/packets/FSNETCMD_ERROR.py b/lib/PacketManager/packets/FSNETCMD_ERROR.py
index 874ca51..327d38c 100644
--- a/lib/PacketManager/packets/FSNETCMD_ERROR.py
+++ b/lib/PacketManager/packets/FSNETCMD_ERROR.py
@@ -1,5 +1,5 @@
from struct import pack, unpack
-from . import ERROR_CODES
+from .constants import ERROR_CODES
class FSNETCMD_ERROR: #3
def __init__(self, buffer:bytes, should_decode:bool=True):
diff --git a/lib/PacketManager/packets/FSNETCMD_GETDAMAGE.py b/lib/PacketManager/packets/FSNETCMD_GETDAMAGE.py
index e7988a6..1becb40 100644
--- a/lib/PacketManager/packets/FSNETCMD_GETDAMAGE.py
+++ b/lib/PacketManager/packets/FSNETCMD_GETDAMAGE.py
@@ -1,5 +1,5 @@
from struct import pack, unpack
-from . import FSWEAPON_DICT
+from .constants import FSWEAPON_DICT
class FSNETCMD_GETDAMAGE: #22
"""
diff --git a/lib/PacketManager/packets/FSNETCMD_MISSILELAUNCH.py b/lib/PacketManager/packets/FSNETCMD_MISSILELAUNCH.py
index 7d7000a..4059773 100644
--- a/lib/PacketManager/packets/FSNETCMD_MISSILELAUNCH.py
+++ b/lib/PacketManager/packets/FSNETCMD_MISSILELAUNCH.py
@@ -1,5 +1,5 @@
from struct import pack, unpack
-from . import FSWEAPON_DICT, GUIDEDWEAPONS
+from .constants import FSWEAPON_DICT, GUIDEDWEAPONS
class FSNETCMD_MISSILELAUNCH: #20
"""
diff --git a/lib/PacketManager/packets/FSNETCMD_WEAPONCONFIG.py b/lib/PacketManager/packets/FSNETCMD_WEAPONCONFIG.py
index 1ea24e4..b6acf82 100644
--- a/lib/PacketManager/packets/FSNETCMD_WEAPONCONFIG.py
+++ b/lib/PacketManager/packets/FSNETCMD_WEAPONCONFIG.py
@@ -1,5 +1,5 @@
from struct import pack, unpack
-from . import FSWEAPON_DICT
+from .constants import FSWEAPON_DICT
class FSNETCMD_WEAPONCONFIG:
def __init__(self, buffer:bytes, should_decode:bool=True):
diff --git a/lib/PacketManager/packets/__init__.py b/lib/PacketManager/packets/__init__.py
index 007c6b4..43abcf0 100644
--- a/lib/PacketManager/packets/__init__.py
+++ b/lib/PacketManager/packets/__init__.py
@@ -1,472 +1,66 @@
-#Pass explicits here
-
-MESSAGE_TYPES = [
- "FSNETCMD_NULL", # 0
- "FSNETCMD_LOGON", # 1 Cli ->Svr", (Svr->Cli for log-on complete acknowledgement.)
- "FSNETCMD_LOGOFF", # 2
- "FSNETCMD_ERROR", # 3
- "FSNETCMD_LOADFIELD", # 4 Svr ->Cli", Cli->Svr for read back
- "FSNETCMD_ADDOBJECT", # 5 Svr ->Cli
- "FSNETCMD_READBACK", # 6 Svr<->Cli
- "FSNETCMD_SMOKECOLOR", # 7 Svr<->Cli
- "FSNETCMD_JOINREQUEST", # 8 Svr<- Cli
- "FSNETCMD_JOINAPPROVAL", # 9 Svr ->Cli
- "FSNETCMD_REJECTJOINREQ", # 10
- "FSNETCMD_AIRPLANESTATE", # 11 Svr<->Cli # Be careful in FsDeleteOldStatePacket when modify
- "FSNETCMD_UNJOIN", # 12 Svr<- Cli
- "FSNETCMD_REMOVEAIRPLANE", # 13 Svr<->Cli
- "FSNETCMD_REQUESTTESTAIRPLANE", # 14
- "FSNETCMD_KILLSERVER", # 15 Svr<- Cli
- "FSNETCMD_PREPARESIMULATION", # 16 Svr ->Cli
- "FSNETCMD_TESTPACKET", # 17
- "FSNETCMD_LOCKON", # 18 Svr<->Cli
- "FSNETCMD_REMOVEGROUND", # 19 Svr<->Cli
- "FSNETCMD_MISSILELAUNCH", # 20 Svr<->Cli # fsweapon.cpp is responsible for encoding/decoding
- "FSNETCMD_GROUNDSTATE", # 21 Svr<->Cli # Be careful in FsDeleteOldStatePacket when modify
- "FSNETCMD_GETDAMAGE", # 22 Svr<->Cli
- "FSNETCMD_GNDTURRETSTATE", # 23 Svr<->Cli
- "FSNETCMD_SETTESTAUTOPILOT", # 24 Svr ->Cli
- "FSNETCMD_REQTOBESIDEWINDOWOFSVR", # 25 Svr<- Cli
- "FSNETCMD_ASSIGNSIDEWINDOW", # 26 Svr ->Cli
- "FSNETCMD_RESENDAIRREQUEST", # 27 Svr<- Cli
- "FSNETCMD_RESENDGNDREQUEST", # 28 Svr<- Cli
- "FSNETCMD_VERSIONNOTIFY", # 29 Svr ->Cli
- "FSNETCMD_AIRCMD", # 30 Svr<->Cli # After 2001/06/24
- "FSNETCMD_USEMISSILE", # 31 Svr ->Cli # After 2001/06/24
- "FSNETCMD_TEXTMESSAGE", # 32 Svr<->Cli
- "FSNETCMD_ENVIRONMENT", # 33 Svr<->Cli (*1)
- "FSNETCMD_NEEDRESENDJOINAPPROVAL", # 34 Svr<- Cli
- "FSNETCMD_REVIVEGROUND", # 35 Svr ->Cli # After 2004
- "FSNETCMD_WEAPONCONFIG", # 36 Svr<->Cli # After 20040618
- "FSNETCMD_LISTUSER", # 37 Svr<->Cli # After 20040726
- "FSNETCMD_QUERYAIRSTATE", # 38 Cli ->Svr # After 20050207
- "FSNETCMD_USEUNGUIDEDWEAPON", # 39 Svr ->Cli # After 20050323
- "FSNETCMD_AIRTURRETSTATE", # 40 Svr<->Cli # After 20050701
- "FSNETCMD_CTRLSHOWUSERNAME", # 41 Svr ->Cli # After 20050914
- "FSNETCMD_CONFIRMEXISTENCE", # 42 Not Used
- "FSNETCMD_CONFIGSTRING", # 43 Svr ->Cli # After 20060514 Cli->Svr for read back
- "FSNETCMD_LIST", # 44 Svr ->Cli # After 20060514 Cli->Svr for read back
- "FSNETCMD_GNDCMD", # 45 Svr<->Cli
- "FSNETCMD_REPORTSCORE", # 46 Svr -> Cli # After 20100630 (Older version will ignore)
- "FSNETCMD_SERVER_FORCE_JOIN", # 47 Svr -> Cli
- "FSNETCMD_FOGCOLOR", # 48 Svr -> Cli
- "FSNETCMD_SKYCOLOR", # 49 Svr -> Cli
- "FSNETCMD_GNDCOLOR", # 50 Svr -> Cli
- "FSNETCMD_RESERVED_FOR_LIGHTCOLOR",# 51 Svr -> Cli
- "FSNETCMD_GENERATEATTACKER", # 52
- "FSNETCMD_RESERVED22", # 53
- "FSNETCMD_RESERVED23", # 54
- "FSNETCMD_RESERVED24", # 55
- "FSNETCMD_RESERVED25", # 56
- "FSNETCMD_RESERVED26", # 57
- "FSNETCMD_RESERVED27", # 58
- "FSNETCMD_RESERVED28", # 59
- "FSNETCMD_RESERVED29", # 60
- "FSNETCMD_RESERVED30", # 61
- "FSNETCMD_RESERVED31", # 62
- "FSNETCMD_RESERVED32", # 63
- "FSNETCMD_OPENYSF_RESERVED33", # 64 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED34", # 65 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED35", # 66 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED36", # 67 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED37", # 68 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED38", # 69 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED39", # 70 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED40", # 71 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED41", # 72 Reserved for OpenYSF
- "FSNETCMD_OPENYSF_RESERVED42", # 73 Reserved for OpenYSF
- "FSNETCMD_RESERVED43", # 74
- "FSNETCMD_RESERVED44", # 75
- "FSNETCMD_RESERVED45", # 76
- "FSNETCMD_RESERVED46", # 77
- "FSNETCMD_RESERVED47", # 78
- "FSNETCMD_RESERVED48", # 79
- "FSNETCMD_RESERVED49", # 80
- "FSNETCMD_NOP"
-]
-
-READBACKS = ["FSNETREADBACK_ADDAIRPLANE",
- "FSNETREADBACK_ADDGROUND",
- "FSNETREADBACK_REMOVEAIRPLANE",
- "FSNETREADBACK_REMOVEGROUND",
- "FSNETREADBACK_ENVIRONMENT",
- "FSNETREADBACK_JOINREQUEST",
- "FSNETREADBACK_JOINAPPROVAL",
- "FSNETREADBACK_PREPARE",
- "FSNETREADBACK____UNUSED____",
- "FSNETREADBACK_USEMISSILE",
- "FSNETREADBACK_USEUNGUIDEDWEAPON",
- "FSNETREADBACK_CTRLSHOWUSERNAME"]
-
-FSWEAPON_DICT = {
- 0: "FSWEAPON_GUN",
- 1: "FSWEAPON_AIM9",
- 2: "FSWEAPON_AGM65",
- 3: "FSWEAPON_BOMB",
- 4: "FSWEAPON_ROCKET",
- 5: "FSWEAPON_FLARE",
- 6: "FSWEAPON_AIM120",
- 7: "FSWEAPON_BOMB250",
- 8: "FSWEAPON_SMOKE",
- 9: "FSWEAPON_BOMB500HD",
- 10: "FSWEAPON_AIM9X",
- 11: "FSWEAPON_FLAREPOD",
- 12: "FSWEAPON_FUELTANK",
- 13: "FSWEAPON_RESERVED13",
- 14: "FSWEAPON_RESERVED14",
- 15: "FSWEAPON_RESERVED15",
- 16: "FSWEAPON_RESERVED16",
- 17: "FSWEAPON_RESERVED17",
- 18: "FSWEAPON_RESERVED18",
- 19: "FSWEAPON_RESERVED19",
- 20: "FSWEAPON_RESERVED20",
- 21: "FSWEAPON_RESERVED21",
- 22: "FSWEAPON_RESERVED22",
- 23: "FSWEAPON_RESERVED23",
- 24: "FSWEAPON_RESERVED24",
- 25: "FSWEAPON_RESERVED25",
- 26: "FSWEAPON_RESERVED26",
- 27: "FSWEAPON_RESERVED27",
- 28: "FSWEAPON_RESERVED28",
- 29: "FSWEAPON_RESERVED29",
- 30: "FSWEAPON_RESERVED30",
- 31: "FSWEAPON_RESERVED31",
- 32: "FSWEAPON_SMOKE0",
- 33: "FSWEAPON_SMOKE1",
- 34: "FSWEAPON_SMOKE2",
- 35: "FSWEAPON_SMOKE3",
- 36: "FSWEAPON_SMOKE4",
- 37: "FSWEAPON_SMOKE5",
- 38: "FSWEAPON_SMOKE6",
- 39: "FSWEAPON_SMOKE7",
- 40: "FSWEAPON_RESERVED40",
- 41: "FSWEAPON_RESERVED41",
- 42: "FSWEAPON_RESERVED42",
- 43: "FSWEAPON_RESERVED43",
- 44: "FSWEAPON_RESERVED44",
- 45: "FSWEAPON_RESERVED45",
- 46: "FSWEAPON_RESERVED46",
- 47: "FSWEAPON_RESERVED47",
- 48: "FSWEAPON_NUMWEAPONTYPE",
- 127: "FSWEAPON_NULL",
- 128: "FSWEAPON_DEBRIS",
- 200: "FSWEAPON_FLARE_INTERNAL"
-}
-
-GUIDEDWEAPONS = missiles = ["FSWEAPON_AGM65", "FSWEAPON_AIM9", "FSWEAPON_AIM120",
- "FSWEAPON_AIM9X", "FSWEAPON_ROCKET"]
-
-ERROR_CODES = ["FSNETERR_NOERR",
- "FSNETERR_VERSIONCONFLICT",
- "FSNETERR_CANNOTADDOBJECT",
- "FSNETERR_REJECT",
- "FSNETERR_CANNOTSUSTAIN"]
-
-AIRCMD_KEYWORDS = [
- "AFTBURNR", #TRUE/FALSE HAS AFTERBURNER
- "THRAFTBN", ###[N][KG][LB] AFTERBURNER POWER
- "THRMILIT", ###[N][KG][LB] MILITARY POWER
- "WEIGHCLN", ###[KG][LB] CLEAN WEIGHT
- "WEIGFUEL", ###[KG][LB] MAX WEIGHT OF FUEL
- "WEIGLOAD", ###[KG][LB] MAX WEIGHT OF PAYLOAD
- "FUELABRN", ###[KG][LB] FUEL CONSUMPTION/SEC WHEN BURNER ON
- "FUELMILI", ###[KG][LB] FUEL CONSUMPTION/SEC WHEN MIL POWER
-
- "LEFTGEAR", #X Y Z [M][IN] LEFT MAIN GEAR POSITION
- "RIGHGEAR", #X Y Z [M][IN] RIGHT MAIN GEAR POSITION
- "WHELGEAR", #X Y Z [M][IN] WHEEL POSITION
-
- "CRITAOAP", ###[RAD][DEG] CRITICAL AOA (PLUS)
- "CRITAOAM", ###[RAD][DEG] CRITICAL AOA (MINUS
-
- "CRITSPED", ###[KT][KM/H][M/S][MACH]CRITICAL AIRSPEED
- "MAXSPEED", ###[KT][KM/H][M/S][MACH]MAXIMUM AIRSPEED
-
- "HASSPOIL", #TRUE/FALSE HAS SPOILER
- "RETRGEAR", #TRUE/FALSE LANDING GEAR IS RETRACTABLE
- "VARGEOMW", #TRUE/FALSE HAS VARIABLE GEOMETRY WING
-
- "CLVARGEO", ###(DIMENSIONLESS) INCREASE OF CL WHEN VGW IS EXTENDED
- "CDVARGEO", ###(DIMENSIONLESS) INCREASE OF CD WHEN VGW IS EXTENDED
- "CLBYFLAP", ###(DIMENSIONLESS) INCREASE OF CL WHEN FLAP FULL DOWN
- "CDBYFLAP", ###(DIMENSIONLESS) INCREASE OF CD WHEN FLAP FULL DOWN
- "CDBYGEAR", ###(DIMENSIONLESS) INCREASE OF CD WHEN GEAR DOWN
- "CDSPOILR", ###(DIMENSIONLESS) INCREASE OF CD WHEN SPOILER IS DEPLOYED
-
- "WINGAREA", ###[M^2][IN^2] AREA OF WING
-
- "MXIPTAOA", ###[RAD][DEG] MAX INPUT AOA
- "MXIPTSSA", ###[RAD][DEG] MAX INPUT YAW
- "MXIPTROL", ###[RAD][DEG] MAX INPUT ROLL RATIO
-
- "CPITMANE", ###(DIMENSIONLESS) PITCH MANEUVABILITY CONSTANT
- "CPITSTAB", ###(DIMENSIONLESS) PITCH STABILITY CONSTANT
- "CYAWMANE", ###(DIMENSIONLESS) YAW MANEUVABILITY CONSTANT
- "CYAWSTAB", ###(DIMENSIONLESS) YAW STABILITY CONSTANT
- "CROLLMAN", ###(DIMENSIONLESS) ROLL MANEUVABILITY CONSTANT
-
-
- "CTLLDGEA", #TRUE/FALSE INITIAL GEAR
- "CTLBRAKE", #TRUE/FALSE INITIAL BRAKE
- "CTLSPOIL", #0.0-1.0 INITIAL SPOILER
- "CTLABRNR", #TRUE/FALSE INITIAL AFTERBURNER
- "CTLTHROT", #0.0-1.0 INITIAL THROTTLE
- "CTLIFLAP", #0.0-1.0 INITIAL FLAP
- "CTLINVGW", #0.0-1.0 INITIAL VGW
- "CTLATVGW", #TRUE/FALSE INITIAL AUTO VGW
-
- "POSITION", #X Y Z [M][IN]
- "ATTITUDE", #H P B [DEG][RAD]
- "INITFUEL", ###[KG][LB]
- "INITLOAD", ###[KG][LB]
- "INITSPED", ###[M/S][KT][MACH]
-
-
-
- "REFVCRUS", ###[M/S][KM/H][KT] CRUISING SPEED
- "REFACRUS", ###[M][FT] CRUISING ALTITUDE
- "REFVLAND", ###[M/S][KM/H][KT] LANDING SPEED
- "REFAOALD", ###[DEG][RAD] AOA WHILE APPROACHING
- "REFLNRWY", ###[M][FT][KM] RUNWAY LENGTH REQUIRED TO LAND
-
- "REM",
-
- "COCKPITP",
- "REFTHRLD",
- "REFTCRUS",
-
- "AUTOCALC",
-
- "IDENTIFY",
-
- "MANESPD1",
- "MANESPD2",
-
- "MACHNGUN",
- "SMOKEGEN",
- "HTRADIUS",
- "TRIGGER1",
- "TRIGGER2",
- "TRIGGER3",
- "TRIGGER4",
-
- "STRENGTH",
-
- "PROPELLR",
-
- "VAPORPO0",
- "VAPORPO1",
-
- "INITIGUN",
- "INITIAAM",
- "INITIAGM",
-
- "MANESPD3",
-
- "RADARCRS",
-
- "MACHNGN2",
-
- "SMOKEOIL",
- "WEAPONCH",
- "INITBOMB",
-
- "MONTRILS",
-
- "GUNPOWER",
-
- "CATEGORY", # Normal,Utility or Aerobatic (+fighter, attacker)
-
- "VGWSPED1", # Auto Vgw Reference Speed (Slower Speed)
- "VGWSPED2", # Auto Vgw Reference Speed (Faster Speed)
-
- "GUNDIREC", # GUN direction
-
- # 2001/05/06 >>
- "INITRCKT", # Initial number of rockets
- "MAXNMGUN", # chMaxNumGunBullet
- "MAXNMAAM", # chMaxNumAAM Deprecated 2010/08/04
- "MAXNMAGM", # chMaxNumAGM Deprecated 2010/08/04
- "MAXNMRKT", # chMaxNumRocket Deprecated 2010/08/04
-
- # 2001/06/05 >>
- "AAMSLOT_", # chAAMSlot[chNumAAMSlot++]
- "AGMSLOT_", # chAGMSlot[chNumAGMSlot++]
- "RKTSLOT_", # chRocketSlot[chNumRocketSlot++]
- "BOMBSLOT", # chBombSlot[chNumBombSlot++]
- "AAMVISIB", # chAAMVisible;
- "AGMVISIB", # chAGMVisible;
- "BOMVISIB", # chBombVisible;
- "RKTVISIB", # chRocketVisible
- "MAXNBOMB", # chMaxNumBomb Deprecated 2010/08/04
-
- # 2002/12/11 >>
- "ARRESTER", # chArrestingHook
-
- # 2003/02/02 >>
- "TRSTVCTR", # chHasThrustVector
- "TRSTDIR0", # chThrVec0
- "TRSTDIR1", # chThrVec1
- "PSTMPTCH", # Post-Stall VPitch
- "PSTMYAW_", # Post-Stall VYaw
- "PSTMROLL", # Post-Stall VRoll
-
- # 2003/02/12
- "AIRCLASS", # Aircraft class
-
- # 2003#02/15
- "PROPEFCY", # Propeller efficiency
- "PROPVMIN", # Minimum speed that T=P/v becomes valid
-
- # 2003/09/19
- "VRGMNOSE", # Variable Geometry Nose : Concorde only
-
-
- # 2003/11/25
- "THRSTREV", # Effectiveness of the Thrust Reverser
-
-
- # 2004/05/22
- "GUNSIGHT", # Lead Gun Sight
-
-
- # 2004/06/14
- "HRDPOINT", # Defining a hardpoint
- "LOADWEPN", # Load weapons
- "LMTBYHDP", # Limit weapons by hardpoint definition.
- "UNLOADWP", # Unload All Weapons (Missiles, Bombs, Rockets. Excluding Guns, Smokes, and Flare)
-
- # 2005/01/03
- "INSTPANL", # Draw an instrument panel instead of a hud. (av[1] for inst panel definition file.)
-
- # 2005/01/05
- "MACHNGN3",
- "MACHNGN4",
- "MACHNGN5",
- "MACHNGN6",
- "MACHNGN7",
- "MACHNGN8",
-
- # 2005/01/11
- "BOMINBAY",
- "BMBAYRCS",
-
- # 2005/01/23
- "INITAAMM", # Mid-Range AAM
- "MAXNAAMM", # Max # Mid-Range AAM
- "INITB250", # 250lb Bomb
- "MAXNB250", # Max # 250lb Bomb
-
- # 2005/03/08
- "GUNINTVL", # Gun Interval
-
- # 2005/06/26
- "NMTURRET", # Number of turret
- "TURRETPO", # 0 0m -0.8m 2.7m 0deg 0deg 0deg # Number x y z h p b
- "TURRETPT", # 0 -40deg 0deg 0deg # Number MinPitch MaxPitch NeutralPitch
- "TURRETHD", # 0 -120deg 120deg 0deg # Number MinHdg MaxHdg NeutralHdg
- "TURRETAM", # 0 0 # Ammo(zero -> staGunBullet will be used)
- "TURRETIV", # 0 0.5sec # Number ShootingInterval
- "TURRETNM", # 0 GUN # DNM Node Name
- "TURRETAR", # 0 FALSE # TRUE -> Anti Air Capable
- "TURRETGD", # 0 TRUE # TRUE -> Anti Ground Capable
- "TURRETCT", # "PILOT" or "GUNNER"
- "TURRETRG", # Range
- # 2005/09/28
- "TURRETNH", # DNM Node Name (Heading Rotation)
- "TURRETNP", # DNM Node Name (Pitch Rotation)
-
- # 2006/04/25
- "SETCNTRL", # Set Control eg. ILS TRIM:0.3 etc.
-
- # 2006/07/19
- "EXCAMERA", # Extra Camera
-
- # 2006/08/05
- "NMACHNGN", # Number of machine guns.
-
- # 2007/04/06
- "SMOKECOL", # Smoke Color #dmy# R G B
-
- # 2007/09/16
- "SUBSTNAM", # Substitute airplane (In case the airplane was not installed)
-
- # 2010/06/26
- "ISPNLPOS", # Instrument Panel Position
- "ISPNLSCL", # Instrument Panel Scaling
-
- # 2010/06/29
- "ISPNLHUD", # Use both inst panel and HUD
- "COCKPITA", # Neutral Head Direction
-
- # 2010/06/30
- "SCRNCNTR", # Screen center (Relative. (-1.0,-1.0)-(1.0,1.0)
- "ISPNLATT", # Instrument Panel Orientation
- "MAXNMFLR", # Maximum number of flare
-
- # 2010/07/01
- "FLAPPOSI", # Flap position
- "FLAREPOS", # Flare Dispenser Position and Direction
-
- # 2010/12/11
- "INITAAAM", # Initialize AIM9X
- "INITHDBM", # Initialize High-Drag bomb
- "ULOADAAM", # Unload all AAMs
- "ULOADAGM", # Unload all AGMs
- "ULOADBOM", # Unload all Bombs
- "ULOADFLR", # Unload all Flare
- "ULOADGUN", # Unload all Gun
- "ULOADRKT", # Unload all Rocket
-
- # 2011/12/25
- "LOOKOFST", # Look-at Offset
-
- # 2012/02/02
- "WPNSHAPE", # Weapon-shape override
-
- # 2012/02/21
- "GEARHORN", # Landing-gear warning horn
- "STALHORN", # Stall-warning horn
-
- # 2013/04/14
- "CKPITIST", # To Make inst panel available in only one of EXCAMERAs, it can be hidden in the default cockpit view.
- "CKPITHUD", # To Make HUD available in only one of EXCAMERAs, it can be hidden in the default cockpit view.
-
- # 2013/04/25
- "MALFUNCT", # Malfunction
- "REPAIRAL", # Repair all
-
- # 2013/04/25
- "REPAIRFN", # Repair functionality
-
- # 2013/06/02
- "NOLDGFLR", # No landing flare
-
- # 2014/06/05
- "NREALPRP", # Number of (real) propeller engines
- "REALPROP", # Support for realistic propeller engine
-
- # 2014/06/13
- "TIREFRIC", # Tire friction coefficient
-
- # 2014/06/24
- "PSTMSPD1", # Maximum speed that the direct attitude control is fully effective.
- "PSTMSPD2", # Speed at which the direct attitude control becomes ineffective.
- "PSTMPWR1", # Minimum required power setting for direct attitude control
- "PSTMPWR2", # Power setting at which the direct attitude control is fully effective
-
- # 2014/07/11
- "MAXCDAOA",
- "FLATCLR1",
- "FLATCLR2",
- "CLDECAY1",
- "CLDECAY2",
-
- # 2014/10/17
- "AIRSTATE", # I'm shocked that I didn't have it yet.
-
- # 2018/10/07
- "INITZOOM", # Initial zoom factor
-
- None
-] \ No newline at end of file
+from .FSNETCMD_LOGON import FSNETCMD_LOGON
+from .FSNETCMD_LOGOFF import FSNETCMD_LOGOFF
+from .FSNETCMD_ERROR import FSNETCMD_ERROR
+from .FSNETCMD_LOADFIELD import FSNETCMD_LOADFIELD
+from .FSNETCMD_ADDOBJECT import FSNETCMD_ADDOBJECT
+from .FSNETCMD_READBACK import FSNETCMD_READBACK
+from .FSNETCMD_SMOKECOLOR import FSNETCMD_SMOKECOLOR
+from .FSNETCMD_JOINREQUEST import FSNETCMD_JOINREQUEST
+from .FSNETCMD_JOINAPPROVAL import FSNETCMD_JOINAPPROVAL
+from .FSNETCMD_REJECTJOINREQ import FSNETCMD_REJECTJOINREQ
+from .FSNETCMD_AIRPLANESTATE import FSNETCMD_AIRPLANESTATE
+from .FSNETCMD_UNJOIN import FSNETCMD_UNJOIN
+from .FSNETCMD_REMOVEAIRPLANE import FSNETCMD_REMOVEAIRPLANE
+from .FSNETCMD_REQUESTTESTAIRPLANE import FSNETCMD_REQUESTTESTAIRPLANE
+from .FSNETCMD_KILLSERVER import FSNETCMD_KILLSERVER
+from .FSNETCMD_PREPARESIMULATION import FSNETCMD_PREPARESIMULATION
+from .FSNETCMD_TESTPACKET import FSNETCMD_TESTPACKET
+from .FSNETCMD_LOCKON import FSNETCMD_LOCKON
+from .FSNETCMD_REMOVEGROUND import FSNETCMD_REMOVEGROUND
+from .FSNETCMD_MISSILELAUNCH import FSNETCMD_MISSILELAUNCH
+#from .FSNETCMD_GROUNDSTATE import FSNETCMD_GROUNDSTATE
+from .FSNETCMD_GETDAMAGE import FSNETCMD_GETDAMAGE
+#from .FSNETCMD_GNDTURRETSTATE import FSNETCMD_GNDTURRETSTATE
+#from .FSNETCMD_SETTESTAUTOPILOT import FSNETCMD_SETTESTAUTOPILOT
+#from .FSNETCMD_REQTOBESIDEWINDOWOFSVR import FSNETCMD_REQTOBESIDEWINDOWOFSVR
+#from .FSNETCMD_ASSIGNSIDEWINDOW import FSNETCMD_ASSIGNSIDEWINDOW
+#from .FSNETCMD_RESENDAIRREQUEST import FSNETCMD_RESENDAIRREQUEST
+#from .FSNETCMD_RESENDGNDREQUEST import FSNETCMD_RESENDGNDREQUEST
+#from .FSNETCMD_VERSIONNOTIFY import FSNETCMD_VERSIONNOTIFY
+from .FSNETCMD_AIRCMD import FSNETCMD_AIRCMD
+#from .FSNETCMD_USEMISSILE import FSNETCMD_USEMISSILE
+from .FSNETCMD_TEXTMESSAGE import FSNETCMD_TEXTMESSAGE
+from .FSNETCMD_ENVIRONMENT import FSNETCMD_ENVIRONMENT
+#from .FSNETCMD_NEEDRESENDJOINAPPROVAL import FSNETCMD_NEEDRESENDJOINAPPROVAL
+#from .FSNETCMD_REVIVEGROUND import FSNETCMD_REVIVEGROUND
+from .FSNETCMD_WEAPONCONFIG import FSNETCMD_WEAPONCONFIG
+#from .FSNETCMD_LISTUSER import FSNETCMD_LISTUSER
+#from .FSNETCMD_QUERYAIRSTATE import FSNETCMD_QUERYAIRSTATE
+#from .FSNETCMD_USEUNGUIDEDWEAPON import FSNETCMD_USEUNGUIDEDWEAPON
+#from .FSNETCMD_AIRTURRETSTATE import FSNETCMD_AIRTURRETSTATE
+#from .FSNETCMD_CTRLSHOWUSERNAME import FSNETCMD_CTRLSHOWUSERNAME
+#from .FSNETCMD_CONFIRMEXISTENCE import FSNETCMD_CONFIRMEXISTENCE
+#from .FSNETCMD_CONFIGSTRING import FSNETCMD_CONFIGSTRING
+#from .FSNETCMD_LIST import FSNETCMD_LIST
+#from .FSNETCMD_GNDCMD import FSNETCMD_GNDCMD
+#from .FSNETCMD_REPORTSCORE import FSNETCMD_REPORTSCORE
+#from .FSNETCMD_SERVER_FORCE_JOIN import FSNETCMD_SERVER_FORCE_JOIN
+#from .FSNETCMD_FOGCOLOR import FSNETCMD_FOGCOLOR
+#from .FSNETCMD_SKYCOLOR import FSNETCMD_SKYCOLOR
+#from .FSNETCMD_GNDCOLOR import FSNETCMD_GNDCOLOR
+#from .FSNETCMD_RESERVED_FOR_LIGHTCOLOR import FSNETCMD_RESERVED_FOR_LIGHTCOLOR
+#from .FSNETCMD_GENERATEATTACKER import FSNETCMD_GENERATEATTACKER
+
+
+__all__ = ["FSNETCMD_LOGON", "FSNETCMD_LOGOFF", "FSNETCMD_ERROR",
+ "FSNETCMD_LOADFIELD", "FSNETCMD_ADDOBJECT",
+ "FSNETCMD_READBACK", "FSNETCMD_SMOKECOLOR",
+ "FSNETCMD_JOINREQUEST", "FSNETCMD_JOINAPPROVAL",
+ "FSNETCMD_REJECTJOINREQ", "FSNETCMD_AIRPLANESTATE",
+ "FSNETCMD_UNJOIN", "FSNETCMD_REMOVEAIRPLANE",
+ "FSNETCMD_REQUESTTESTAIRPLANE", "FSNETCMD_KILLSERVER",
+ "FSNETCMD_PREPARESIMULATION", "FSNETCMD_TESTPACKET",
+ "FSNETCMD_LOCKON", "FSNETCMD_REMOVEGROUND",
+ "FSNETCMD_MISSILELAUNCH", "FSNETCMD_GETDAMAGE",
+ "FSNETCMD_WEAPONCONFIG", "FSNETCMD_AIRCMD",
+ "FSNETCMD_TEXTMESSAGE", "FSNETCMD_ENVIRONMENT"]
diff --git a/lib/PacketManager/packets/constants.py b/lib/PacketManager/packets/constants.py
new file mode 100644
index 0000000..7a32e22
--- /dev/null
+++ b/lib/PacketManager/packets/constants.py
@@ -0,0 +1,472 @@
+
+
+MESSAGE_TYPES = [
+ "FSNETCMD_NULL", # 0
+ "FSNETCMD_LOGON", # 1 Cli ->Svr", (Svr->Cli for log-on complete acknowledgement.)
+ "FSNETCMD_LOGOFF", # 2
+ "FSNETCMD_ERROR", # 3
+ "FSNETCMD_LOADFIELD", # 4 Svr ->Cli", Cli->Svr for read back
+ "FSNETCMD_ADDOBJECT", # 5 Svr ->Cli
+ "FSNETCMD_READBACK", # 6 Svr<->Cli
+ "FSNETCMD_SMOKECOLOR", # 7 Svr<->Cli
+ "FSNETCMD_JOINREQUEST", # 8 Svr<- Cli
+ "FSNETCMD_JOINAPPROVAL", # 9 Svr ->Cli
+ "FSNETCMD_REJECTJOINREQ", # 10
+ "FSNETCMD_AIRPLANESTATE", # 11 Svr<->Cli # Be careful in FsDeleteOldStatePacket when modify
+ "FSNETCMD_UNJOIN", # 12 Svr<- Cli
+ "FSNETCMD_REMOVEAIRPLANE", # 13 Svr<->Cli
+ "FSNETCMD_REQUESTTESTAIRPLANE", # 14
+ "FSNETCMD_KILLSERVER", # 15 Svr<- Cli
+ "FSNETCMD_PREPARESIMULATION", # 16 Svr ->Cli
+ "FSNETCMD_TESTPACKET", # 17
+ "FSNETCMD_LOCKON", # 18 Svr<->Cli
+ "FSNETCMD_REMOVEGROUND", # 19 Svr<->Cli
+ "FSNETCMD_MISSILELAUNCH", # 20 Svr<->Cli # fsweapon.cpp is responsible for encoding/decoding
+ "FSNETCMD_GROUNDSTATE", # 21 Svr<->Cli # Be careful in FsDeleteOldStatePacket when modify
+ "FSNETCMD_GETDAMAGE", # 22 Svr<->Cli
+ "FSNETCMD_GNDTURRETSTATE", # 23 Svr<->Cli
+ "FSNETCMD_SETTESTAUTOPILOT", # 24 Svr ->Cli
+ "FSNETCMD_REQTOBESIDEWINDOWOFSVR", # 25 Svr<- Cli
+ "FSNETCMD_ASSIGNSIDEWINDOW", # 26 Svr ->Cli
+ "FSNETCMD_RESENDAIRREQUEST", # 27 Svr<- Cli
+ "FSNETCMD_RESENDGNDREQUEST", # 28 Svr<- Cli
+ "FSNETCMD_VERSIONNOTIFY", # 29 Svr ->Cli
+ "FSNETCMD_AIRCMD", # 30 Svr<->Cli # After 2001/06/24
+ "FSNETCMD_USEMISSILE", # 31 Svr ->Cli # After 2001/06/24
+ "FSNETCMD_TEXTMESSAGE", # 32 Svr<->Cli
+ "FSNETCMD_ENVIRONMENT", # 33 Svr<->Cli (*1)
+ "FSNETCMD_NEEDRESENDJOINAPPROVAL", # 34 Svr<- Cli
+ "FSNETCMD_REVIVEGROUND", # 35 Svr ->Cli # After 2004
+ "FSNETCMD_WEAPONCONFIG", # 36 Svr<->Cli # After 20040618
+ "FSNETCMD_LISTUSER", # 37 Svr<->Cli # After 20040726
+ "FSNETCMD_QUERYAIRSTATE", # 38 Cli ->Svr # After 20050207
+ "FSNETCMD_USEUNGUIDEDWEAPON", # 39 Svr ->Cli # After 20050323
+ "FSNETCMD_AIRTURRETSTATE", # 40 Svr<->Cli # After 20050701
+ "FSNETCMD_CTRLSHOWUSERNAME", # 41 Svr ->Cli # After 20050914
+ "FSNETCMD_CONFIRMEXISTENCE", # 42 Not Used
+ "FSNETCMD_CONFIGSTRING", # 43 Svr ->Cli # After 20060514 Cli->Svr for read back
+ "FSNETCMD_LIST", # 44 Svr ->Cli # After 20060514 Cli->Svr for read back
+ "FSNETCMD_GNDCMD", # 45 Svr<->Cli
+ "FSNETCMD_REPORTSCORE", # 46 Svr -> Cli # After 20100630 (Older version will ignore)
+ "FSNETCMD_SERVER_FORCE_JOIN", # 47 Svr -> Cli
+ "FSNETCMD_FOGCOLOR", # 48 Svr -> Cli
+ "FSNETCMD_SKYCOLOR", # 49 Svr -> Cli
+ "FSNETCMD_GNDCOLOR", # 50 Svr -> Cli
+ "FSNETCMD_RESERVED_FOR_LIGHTCOLOR",# 51 Svr -> Cli
+ "FSNETCMD_GENERATEATTACKER", # 52
+ "FSNETCMD_RESERVED22", # 53
+ "FSNETCMD_RESERVED23", # 54
+ "FSNETCMD_RESERVED24", # 55
+ "FSNETCMD_RESERVED25", # 56
+ "FSNETCMD_RESERVED26", # 57
+ "FSNETCMD_RESERVED27", # 58
+ "FSNETCMD_RESERVED28", # 59
+ "FSNETCMD_RESERVED29", # 60
+ "FSNETCMD_RESERVED30", # 61
+ "FSNETCMD_RESERVED31", # 62
+ "FSNETCMD_RESERVED32", # 63
+ "FSNETCMD_OPENYSF_RESERVED33", # 64 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED34", # 65 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED35", # 66 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED36", # 67 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED37", # 68 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED38", # 69 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED39", # 70 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED40", # 71 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED41", # 72 Reserved for OpenYSF
+ "FSNETCMD_OPENYSF_RESERVED42", # 73 Reserved for OpenYSF
+ "FSNETCMD_RESERVED43", # 74
+ "FSNETCMD_RESERVED44", # 75
+ "FSNETCMD_RESERVED45", # 76
+ "FSNETCMD_RESERVED46", # 77
+ "FSNETCMD_RESERVED47", # 78
+ "FSNETCMD_RESERVED48", # 79
+ "FSNETCMD_RESERVED49", # 80
+ "FSNETCMD_NOP"
+]
+
+READBACKS = ["FSNETREADBACK_ADDAIRPLANE",
+ "FSNETREADBACK_ADDGROUND",
+ "FSNETREADBACK_REMOVEAIRPLANE",
+ "FSNETREADBACK_REMOVEGROUND",
+ "FSNETREADBACK_ENVIRONMENT",
+ "FSNETREADBACK_JOINREQUEST",
+ "FSNETREADBACK_JOINAPPROVAL",
+ "FSNETREADBACK_PREPARE",
+ "FSNETREADBACK____UNUSED____",
+ "FSNETREADBACK_USEMISSILE",
+ "FSNETREADBACK_USEUNGUIDEDWEAPON",
+ "FSNETREADBACK_CTRLSHOWUSERNAME"]
+
+FSWEAPON_DICT = {
+ 0: "FSWEAPON_GUN",
+ 1: "FSWEAPON_AIM9",
+ 2: "FSWEAPON_AGM65",
+ 3: "FSWEAPON_BOMB",
+ 4: "FSWEAPON_ROCKET",
+ 5: "FSWEAPON_FLARE",
+ 6: "FSWEAPON_AIM120",
+ 7: "FSWEAPON_BOMB250",
+ 8: "FSWEAPON_SMOKE",
+ 9: "FSWEAPON_BOMB500HD",
+ 10: "FSWEAPON_AIM9X",
+ 11: "FSWEAPON_FLAREPOD",
+ 12: "FSWEAPON_FUELTANK",
+ 13: "FSWEAPON_RESERVED13",
+ 14: "FSWEAPON_RESERVED14",
+ 15: "FSWEAPON_RESERVED15",
+ 16: "FSWEAPON_RESERVED16",
+ 17: "FSWEAPON_RESERVED17",
+ 18: "FSWEAPON_RESERVED18",
+ 19: "FSWEAPON_RESERVED19",
+ 20: "FSWEAPON_RESERVED20",
+ 21: "FSWEAPON_RESERVED21",
+ 22: "FSWEAPON_RESERVED22",
+ 23: "FSWEAPON_RESERVED23",
+ 24: "FSWEAPON_RESERVED24",
+ 25: "FSWEAPON_RESERVED25",
+ 26: "FSWEAPON_RESERVED26",
+ 27: "FSWEAPON_RESERVED27",
+ 28: "FSWEAPON_RESERVED28",
+ 29: "FSWEAPON_RESERVED29",
+ 30: "FSWEAPON_RESERVED30",
+ 31: "FSWEAPON_RESERVED31",
+ 32: "FSWEAPON_SMOKE0",
+ 33: "FSWEAPON_SMOKE1",
+ 34: "FSWEAPON_SMOKE2",
+ 35: "FSWEAPON_SMOKE3",
+ 36: "FSWEAPON_SMOKE4",
+ 37: "FSWEAPON_SMOKE5",
+ 38: "FSWEAPON_SMOKE6",
+ 39: "FSWEAPON_SMOKE7",
+ 40: "FSWEAPON_RESERVED40",
+ 41: "FSWEAPON_RESERVED41",
+ 42: "FSWEAPON_RESERVED42",
+ 43: "FSWEAPON_RESERVED43",
+ 44: "FSWEAPON_RESERVED44",
+ 45: "FSWEAPON_RESERVED45",
+ 46: "FSWEAPON_RESERVED46",
+ 47: "FSWEAPON_RESERVED47",
+ 48: "FSWEAPON_NUMWEAPONTYPE",
+ 127: "FSWEAPON_NULL",
+ 128: "FSWEAPON_DEBRIS",
+ 200: "FSWEAPON_FLARE_INTERNAL"
+}
+
+GUIDEDWEAPONS = missiles = ["FSWEAPON_AGM65", "FSWEAPON_AIM9", "FSWEAPON_AIM120",
+ "FSWEAPON_AIM9X", "FSWEAPON_ROCKET"]
+
+ERROR_CODES = ["FSNETERR_NOERR",
+ "FSNETERR_VERSIONCONFLICT",
+ "FSNETERR_CANNOTADDOBJECT",
+ "FSNETERR_REJECT",
+ "FSNETERR_CANNOTSUSTAIN"]
+
+AIRCMD_KEYWORDS = [
+ "AFTBURNR", #TRUE/FALSE HAS AFTERBURNER
+ "THRAFTBN", ###[N][KG][LB] AFTERBURNER POWER
+ "THRMILIT", ###[N][KG][LB] MILITARY POWER
+ "WEIGHCLN", ###[KG][LB] CLEAN WEIGHT
+ "WEIGFUEL", ###[KG][LB] MAX WEIGHT OF FUEL
+ "WEIGLOAD", ###[KG][LB] MAX WEIGHT OF PAYLOAD
+ "FUELABRN", ###[KG][LB] FUEL CONSUMPTION/SEC WHEN BURNER ON
+ "FUELMILI", ###[KG][LB] FUEL CONSUMPTION/SEC WHEN MIL POWER
+
+ "LEFTGEAR", #X Y Z [M][IN] LEFT MAIN GEAR POSITION
+ "RIGHGEAR", #X Y Z [M][IN] RIGHT MAIN GEAR POSITION
+ "WHELGEAR", #X Y Z [M][IN] WHEEL POSITION
+
+ "CRITAOAP", ###[RAD][DEG] CRITICAL AOA (PLUS)
+ "CRITAOAM", ###[RAD][DEG] CRITICAL AOA (MINUS
+
+ "CRITSPED", ###[KT][KM/H][M/S][MACH]CRITICAL AIRSPEED
+ "MAXSPEED", ###[KT][KM/H][M/S][MACH]MAXIMUM AIRSPEED
+
+ "HASSPOIL", #TRUE/FALSE HAS SPOILER
+ "RETRGEAR", #TRUE/FALSE LANDING GEAR IS RETRACTABLE
+ "VARGEOMW", #TRUE/FALSE HAS VARIABLE GEOMETRY WING
+
+ "CLVARGEO", ###(DIMENSIONLESS) INCREASE OF CL WHEN VGW IS EXTENDED
+ "CDVARGEO", ###(DIMENSIONLESS) INCREASE OF CD WHEN VGW IS EXTENDED
+ "CLBYFLAP", ###(DIMENSIONLESS) INCREASE OF CL WHEN FLAP FULL DOWN
+ "CDBYFLAP", ###(DIMENSIONLESS) INCREASE OF CD WHEN FLAP FULL DOWN
+ "CDBYGEAR", ###(DIMENSIONLESS) INCREASE OF CD WHEN GEAR DOWN
+ "CDSPOILR", ###(DIMENSIONLESS) INCREASE OF CD WHEN SPOILER IS DEPLOYED
+
+ "WINGAREA", ###[M^2][IN^2] AREA OF WING
+
+ "MXIPTAOA", ###[RAD][DEG] MAX INPUT AOA
+ "MXIPTSSA", ###[RAD][DEG] MAX INPUT YAW
+ "MXIPTROL", ###[RAD][DEG] MAX INPUT ROLL RATIO
+
+ "CPITMANE", ###(DIMENSIONLESS) PITCH MANEUVABILITY CONSTANT
+ "CPITSTAB", ###(DIMENSIONLESS) PITCH STABILITY CONSTANT
+ "CYAWMANE", ###(DIMENSIONLESS) YAW MANEUVABILITY CONSTANT
+ "CYAWSTAB", ###(DIMENSIONLESS) YAW STABILITY CONSTANT
+ "CROLLMAN", ###(DIMENSIONLESS) ROLL MANEUVABILITY CONSTANT
+
+
+ "CTLLDGEA", #TRUE/FALSE INITIAL GEAR
+ "CTLBRAKE", #TRUE/FALSE INITIAL BRAKE
+ "CTLSPOIL", #0.0-1.0 INITIAL SPOILER
+ "CTLABRNR", #TRUE/FALSE INITIAL AFTERBURNER
+ "CTLTHROT", #0.0-1.0 INITIAL THROTTLE
+ "CTLIFLAP", #0.0-1.0 INITIAL FLAP
+ "CTLINVGW", #0.0-1.0 INITIAL VGW
+ "CTLATVGW", #TRUE/FALSE INITIAL AUTO VGW
+
+ "POSITION", #X Y Z [M][IN]
+ "ATTITUDE", #H P B [DEG][RAD]
+ "INITFUEL", ###[KG][LB]
+ "INITLOAD", ###[KG][LB]
+ "INITSPED", ###[M/S][KT][MACH]
+
+
+
+ "REFVCRUS", ###[M/S][KM/H][KT] CRUISING SPEED
+ "REFACRUS", ###[M][FT] CRUISING ALTITUDE
+ "REFVLAND", ###[M/S][KM/H][KT] LANDING SPEED
+ "REFAOALD", ###[DEG][RAD] AOA WHILE APPROACHING
+ "REFLNRWY", ###[M][FT][KM] RUNWAY LENGTH REQUIRED TO LAND
+
+ "REM",
+
+ "COCKPITP",
+ "REFTHRLD",
+ "REFTCRUS",
+
+ "AUTOCALC",
+
+ "IDENTIFY",
+
+ "MANESPD1",
+ "MANESPD2",
+
+ "MACHNGUN",
+ "SMOKEGEN",
+ "HTRADIUS",
+ "TRIGGER1",
+ "TRIGGER2",
+ "TRIGGER3",
+ "TRIGGER4",
+
+ "STRENGTH",
+
+ "PROPELLR",
+
+ "VAPORPO0",
+ "VAPORPO1",
+
+ "INITIGUN",
+ "INITIAAM",
+ "INITIAGM",
+
+ "MANESPD3",
+
+ "RADARCRS",
+
+ "MACHNGN2",
+
+ "SMOKEOIL",
+ "WEAPONCH",
+ "INITBOMB",
+
+ "MONTRILS",
+
+ "GUNPOWER",
+
+ "CATEGORY", # Normal,Utility or Aerobatic (+fighter, attacker)
+
+ "VGWSPED1", # Auto Vgw Reference Speed (Slower Speed)
+ "VGWSPED2", # Auto Vgw Reference Speed (Faster Speed)
+
+ "GUNDIREC", # GUN direction
+
+ # 2001/05/06 >>
+ "INITRCKT", # Initial number of rockets
+ "MAXNMGUN", # chMaxNumGunBullet
+ "MAXNMAAM", # chMaxNumAAM Deprecated 2010/08/04
+ "MAXNMAGM", # chMaxNumAGM Deprecated 2010/08/04
+ "MAXNMRKT", # chMaxNumRocket Deprecated 2010/08/04
+
+ # 2001/06/05 >>
+ "AAMSLOT_", # chAAMSlot[chNumAAMSlot++]
+ "AGMSLOT_", # chAGMSlot[chNumAGMSlot++]
+ "RKTSLOT_", # chRocketSlot[chNumRocketSlot++]
+ "BOMBSLOT", # chBombSlot[chNumBombSlot++]
+ "AAMVISIB", # chAAMVisible;
+ "AGMVISIB", # chAGMVisible;
+ "BOMVISIB", # chBombVisible;
+ "RKTVISIB", # chRocketVisible
+ "MAXNBOMB", # chMaxNumBomb Deprecated 2010/08/04
+
+ # 2002/12/11 >>
+ "ARRESTER", # chArrestingHook
+
+ # 2003/02/02 >>
+ "TRSTVCTR", # chHasThrustVector
+ "TRSTDIR0", # chThrVec0
+ "TRSTDIR1", # chThrVec1
+ "PSTMPTCH", # Post-Stall VPitch
+ "PSTMYAW_", # Post-Stall VYaw
+ "PSTMROLL", # Post-Stall VRoll
+
+ # 2003/02/12
+ "AIRCLASS", # Aircraft class
+
+ # 2003#02/15
+ "PROPEFCY", # Propeller efficiency
+ "PROPVMIN", # Minimum speed that T=P/v becomes valid
+
+ # 2003/09/19
+ "VRGMNOSE", # Variable Geometry Nose : Concorde only
+
+
+ # 2003/11/25
+ "THRSTREV", # Effectiveness of the Thrust Reverser
+
+
+ # 2004/05/22
+ "GUNSIGHT", # Lead Gun Sight
+
+
+ # 2004/06/14
+ "HRDPOINT", # Defining a hardpoint
+ "LOADWEPN", # Load weapons
+ "LMTBYHDP", # Limit weapons by hardpoint definition.
+ "UNLOADWP", # Unload All Weapons (Missiles, Bombs, Rockets. Excluding Guns, Smokes, and Flare)
+
+ # 2005/01/03
+ "INSTPANL", # Draw an instrument panel instead of a hud. (av[1] for inst panel definition file.)
+
+ # 2005/01/05
+ "MACHNGN3",
+ "MACHNGN4",
+ "MACHNGN5",
+ "MACHNGN6",
+ "MACHNGN7",
+ "MACHNGN8",
+
+ # 2005/01/11
+ "BOMINBAY",
+ "BMBAYRCS",
+
+ # 2005/01/23
+ "INITAAMM", # Mid-Range AAM
+ "MAXNAAMM", # Max # Mid-Range AAM
+ "INITB250", # 250lb Bomb
+ "MAXNB250", # Max # 250lb Bomb
+
+ # 2005/03/08
+ "GUNINTVL", # Gun Interval
+
+ # 2005/06/26
+ "NMTURRET", # Number of turret
+ "TURRETPO", # 0 0m -0.8m 2.7m 0deg 0deg 0deg # Number x y z h p b
+ "TURRETPT", # 0 -40deg 0deg 0deg # Number MinPitch MaxPitch NeutralPitch
+ "TURRETHD", # 0 -120deg 120deg 0deg # Number MinHdg MaxHdg NeutralHdg
+ "TURRETAM", # 0 0 # Ammo(zero -> staGunBullet will be used)
+ "TURRETIV", # 0 0.5sec # Number ShootingInterval
+ "TURRETNM", # 0 GUN # DNM Node Name
+ "TURRETAR", # 0 FALSE # TRUE -> Anti Air Capable
+ "TURRETGD", # 0 TRUE # TRUE -> Anti Ground Capable
+ "TURRETCT", # "PILOT" or "GUNNER"
+ "TURRETRG", # Range
+ # 2005/09/28
+ "TURRETNH", # DNM Node Name (Heading Rotation)
+ "TURRETNP", # DNM Node Name (Pitch Rotation)
+
+ # 2006/04/25
+ "SETCNTRL", # Set Control eg. ILS TRIM:0.3 etc.
+
+ # 2006/07/19
+ "EXCAMERA", # Extra Camera
+
+ # 2006/08/05
+ "NMACHNGN", # Number of machine guns.
+
+ # 2007/04/06
+ "SMOKECOL", # Smoke Color #dmy# R G B
+
+ # 2007/09/16
+ "SUBSTNAM", # Substitute airplane (In case the airplane was not installed)
+
+ # 2010/06/26
+ "ISPNLPOS", # Instrument Panel Position
+ "ISPNLSCL", # Instrument Panel Scaling
+
+ # 2010/06/29
+ "ISPNLHUD", # Use both inst panel and HUD
+ "COCKPITA", # Neutral Head Direction
+
+ # 2010/06/30
+ "SCRNCNTR", # Screen center (Relative. (-1.0,-1.0)-(1.0,1.0)
+ "ISPNLATT", # Instrument Panel Orientation
+ "MAXNMFLR", # Maximum number of flare
+
+ # 2010/07/01
+ "FLAPPOSI", # Flap position
+ "FLAREPOS", # Flare Dispenser Position and Direction
+
+ # 2010/12/11
+ "INITAAAM", # Initialize AIM9X
+ "INITHDBM", # Initialize High-Drag bomb
+ "ULOADAAM", # Unload all AAMs
+ "ULOADAGM", # Unload all AGMs
+ "ULOADBOM", # Unload all Bombs
+ "ULOADFLR", # Unload all Flare
+ "ULOADGUN", # Unload all Gun
+ "ULOADRKT", # Unload all Rocket
+
+ # 2011/12/25
+ "LOOKOFST", # Look-at Offset
+
+ # 2012/02/02
+ "WPNSHAPE", # Weapon-shape override
+
+ # 2012/02/21
+ "GEARHORN", # Landing-gear warning horn
+ "STALHORN", # Stall-warning horn
+
+ # 2013/04/14
+ "CKPITIST", # To Make inst panel available in only one of EXCAMERAs, it can be hidden in the default cockpit view.
+ "CKPITHUD", # To Make HUD available in only one of EXCAMERAs, it can be hidden in the default cockpit view.
+
+ # 2013/04/25
+ "MALFUNCT", # Malfunction
+ "REPAIRAL", # Repair all
+
+ # 2013/04/25
+ "REPAIRFN", # Repair functionality
+
+ # 2013/06/02
+ "NOLDGFLR", # No landing flare
+
+ # 2014/06/05
+ "NREALPRP", # Number of (real) propeller engines
+ "REALPROP", # Support for realistic propeller engine
+
+ # 2014/06/13
+ "TIREFRIC", # Tire friction coefficient
+
+ # 2014/06/24
+ "PSTMSPD1", # Maximum speed that the direct attitude control is fully effective.
+ "PSTMSPD2", # Speed at which the direct attitude control becomes ineffective.
+ "PSTMPWR1", # Minimum required power setting for direct attitude control
+ "PSTMPWR2", # Power setting at which the direct attitude control is fully effective
+
+ # 2014/07/11
+ "MAXCDAOA",
+ "FLATCLR1",
+ "FLATCLR2",
+ "CLDECAY1",
+ "CLDECAY2",
+
+ # 2014/10/17
+ "AIRSTATE", # I'm shocked that I didn't have it yet.
+
+ # 2018/10/07
+ "INITZOOM", # Initial zoom factor
+
+ None
+]
diff --git a/lib/YSchat.py b/lib/YSchat.py
index fb23208..d3db201 100644
--- a/lib/YSchat.py
+++ b/lib/YSchat.py
@@ -1,4 +1,6 @@
from struct import pack, unpack
+from lib.PacketManager.packets import FSNETCMD_TEXTMESSAGE
+#Re-write this to wrap the FSNETCMD_TEXTMESSAGE class
def send(buffer: bytes):
"""
diff --git a/proxy.py b/proxy.py
index b41355d..730a9b3 100644
--- a/proxy.py
+++ b/proxy.py
@@ -7,9 +7,12 @@ import asyncio
from struct import unpack, pack
from lib.parseFlightData import parseFlightData
from lib import YSchat, YSplayer, YSendFlight, YSundead, YSviaversion
+from lib.PacketManager.PacketManager import PacketManager
+from lib.PacketManager.packets import FSNETCMD_AIRPLANESTATE
import logging
from logging import critical, warning, info, debug
from config import *
+from time import sleep
# Configuration
SERVER_HOST = SERVER_HOST
@@ -37,20 +40,41 @@ async def handle_client(client_reader, client_writer):
async def forward(reader, writer, direction, player=player):
while True:
try:
- data = await reader.read(4096)
- if not data:
+ header = await reader.readexactly(4) # Ensures we always get 4 bytes
+ if not header:
+ break # Connection closed
+
+ length = unpack("I", header)[0]
+
+ packet = await reader.read(length)
+
+ if not packet:
break
+
+ data = header + packet
+
if direction == "client_to_server":
try:
+ packet_type = PacketManager().get_packet_type(data)
+ if packet_type == "FSNETCMD_AIRPLANESTATE":
+ life = FSNETCMD_AIRPLANESTATE.get_life(data)
+ if player.life == -1: #Uninitialised
+ player.life = life
+ elif life > player.life:
+ cheatingMsg = YSchat.message(f"{HEALTH_HACK_MESSAGE} by {player.username}")
+ writer.write(cheatingMsg)
+ await writer.drain()
+ player.life = life
+
length, packet_type = unpack("<I I", data[:8])
debug("C2S" + str(packet_type))
debug(data)
if packet_type == 11: # Flight data packet
playerData = parseFlightData(data)
player.playerId = playerData[1]
- player.setX(playerData[2])
- player.setY(playerData[3])
- player.setZ(playerData[4])
+ player.x = playerData[2]
+ player.y = playerData[3]
+ player.z = playerData[4]
player.throttle = playerData[22]
player.aam = playerData[18]
player.agm = playerData[19]
@@ -95,27 +119,20 @@ async def handle_client(client_reader, client_writer):
writer.write(endPacket)
await writer.drain()
-
- # parsed_data = parseFlightData(data)
- # tRemote, playerId, x, y, z, *_ = parsed_data
- # gunAmmo, rktAmmo, aam, agm, *_ = parsed_data[16:]
- # fuel = parsed_data[12]
- # throttle = parsed_data[22]
-
- # Print the parsed flight data
- # print(f"Player ID: {playerId}, X: {x}, Y: {y}, Z: {z}, "
- # f"Throttle: {throttle}, AAM: {aam}, AGM: {agm}, "
- # f"Gun Ammo: {gunAmmo}, Rocket Ammo: {rktAmmo}, Fuel: {fuel}")
elif packet_type == 1: # Connection Request
extracted = unpack("II16cI", data)
# username = (b''.join(unpack("II16cI", data)[2:16])).decode('ascii').strip('\x00')
username = b''.join(extracted[2:16]).decode('ascii').strip('\x00')
version = extracted[-1]
- info(f"Connection request by {player.username} : {ipAddr}; YSFVERSION = {version}")
+ info(f"Connection request by {username} : {ipAddr}; YSFVERSION = {version}")
player.username = username
player.ip = ipAddr
debug("Player object fixed!")
debug(player)
+ # targetWriter = player.streamWriterObject
+ # targetWriter.write(b'\x04\x00\x00\x00\x10\x00\x00\x00')
+ print("16 packet sent!")
+ # await targetWriter.drain()
if version != YSF_VERSION and VIA_VERSION:
info(f"ViaVersion enabled : Porting {username} from {YSF_VERSION} to {version}")
targetWriter = player.streamWriterObject
@@ -134,20 +151,10 @@ async def handle_client(client_reader, client_writer):
# here we patch the packet to have smoke forcefully
# This part also is for regen, so we disable cheat detection for health
player.life = -1
- """
- if player.life < 5:
- targetPlayer = player
- data = YSundead.undeadPatch(targetPlayer.playerId, data)
- writer.write(data)
- await writer.drain()
- """
- """
- elif packet_type == 32: # Char message
- # will be used for commands
- msg = YSchat.message("Pong!")
- writer.write(msg)
- await writer.drain()
- """
+ elif packet_type == 44:
+ # We drop the packets from YSFlight and use it for ourselves
+ debug("Packet verification unimplemented!")
+ continue
except Exception as e:
warning(f"Error parsing flight data: {e}")
@@ -158,13 +165,8 @@ async def handle_client(client_reader, client_writer):
if packet_type == 36:
# print("S2C ", str(data))
pass
- """
- targetWriter = player.streamWriterObject
- id = player.playerId
- data = YSundead.undeadPatch(id, data)
- targetWriter.write(data)
- await targetWriter.drain()
- """
+
+
# Forward the packet to the other endpoint
writer.write(data)
@@ -200,4 +202,4 @@ async def start_proxy():
if __name__ == "__main__":
- asyncio.run(start_proxy())
+ asyncio.run(start_proxy()) \ No newline at end of file