aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py27
-rw-r--r--lib/plugin_manager.py6
-rw-r--r--plugins/aircraft_replacer.py70
3 files changed, 100 insertions, 3 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/plugin_manager.py b/lib/plugin_manager.py
index 07e28e6..52fb1f7 100644
--- a/lib/plugin_manager.py
+++ b/lib/plugin_manager.py
@@ -58,16 +58,16 @@ class PluginManager:
If a callback returns False, then the original data is set to None
and not forwarded to the destination. This is useful for modifying
packets."""
- keep_orignal = True
+ keep_original = True
if hook_name in self.hooks:
for callback in self.hooks[hook_name]:
keep = callback(data, *args, **kwargs)
if type(keep) == bool:
if keep == False:
- keep_orignal = False
+ keep_original = False
else:
warning(f"Return value of {callback} is not a boolean")
- return keep_orignal
+ return keep_original
def trigger_command(self, command:str, player, full_message:str, message_to_client:list, message_to_server:list):
"""Triggers the command"""
diff --git a/plugins/aircraft_replacer.py b/plugins/aircraft_replacer.py
new file mode 100644
index 0000000..1515a6a
--- /dev/null
+++ b/plugins/aircraft_replacer.py
@@ -0,0 +1,70 @@
+"""This plugin will replace the aircraft of the player
+with the aircraft specified in the plugin. It is a template
+for creating plugins that modify the aircraft of the player."""
+from lib.PacketManager.packets import FSNETCMD_ADDOBJECT, FSNETCMD_JOINREQUEST, FSNETCMD_READBACK, FSNETCMD_AIRPLANESTATE
+from config import G_LIM
+import time
+
+# CONFIG
+ENABLED = False # Enable or disable the plugin
+
+class Plugin:
+ def __init__(self):
+ self.plugin_manager = None
+ self.first_add_object = False
+
+ def register(self, plugin_manager):
+ self.plugin_manager = plugin_manager
+ # self.plugin_manager.register_hook('on_flight_data', self.on_flight_data)
+ self.plugin_manager.register_hook('on_add_object_server', self.on_add_object_server)
+ # self.plugin_manager.register_hook('on_flight_data_server', self.on_flight_data_server)
+ self.plugin_manager.register_hook('on_join_request', self.on_join_request)
+
+
+ def on_add_object_server(self, data, player, messages_to_client, *args):
+ packet = FSNETCMD_ADDOBJECT(data)
+ #Swap the aircraft and position
+ if packet.pilot == player.username:
+ packet.identifier = "EUROFIGHTER_TYPHOON"
+ messages_to_client.append(packet.to_packet())
+ self.first_add_object = True
+ return False
+ return True
+
+ # def on_flight_data(self, data, player, messages_to_client, *args):
+ # packet = FSNETCMD_AIRPLANESTATE(data)
+ # if packet.player_id == player.aircraft.id:
+
+ # return True
+
+ # def on_flight_data_server(self, data, player, messages_to_client, *args):
+ # packet = FSNETCMD_AIRPLANESTATE(data)
+ # if packet.player_id == player.aircraft.id and self.first_add_object:
+ # packet.position = [0,2000.0,0]
+ # packet.velocity = [25,0,25]
+ # messages_to_client.append(packet.to_packet())
+
+ # self.first_add_object = False
+ # return False
+ # return True
+
+ def on_join_request(self, data, player, messages_to_client, message_to_server, *args):
+ packet = FSNETCMD_JOINREQUEST(data)
+ #Replace the aircraft:
+ packet.aircraft = "EUROFIGHTER_TYPHOON"
+ message_to_server.append(packet.to_packet())
+ return False
+
+ # def on_receive(self, data, player, messages_to_client, *args):
+ # if ENABLED:
+ # if abs(player.aircraft.last_packet.g_value)> G_LIM:
+ # if time.time() - player.aircraft.last_over_g_message > INTERVAL:
+ # player.aircraft.last_over_g_message = time.time()
+ # damage_packet = FSNETCMD_GETDAMAGE.encode(player.aircraft.id,
+ # 1, 1,
+ # player.aircraft.id,
+ # 1, 11,0, True)
+ # warning_message = FSNETCMD_TEXTMESSAGE.encode(f"You are exceeding the G Limit for the aircraft!, gValue = {player.aircraft.last_packet.g_value}!",True)
+ # messages_to_client.append(damage_packet)
+ # messages_to_client.append(warning_message)
+ # return True