diff options
| author | Ritabrata Das <[email protected]> | 2025-02-23 09:30:24 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-02-23 09:30:24 +0530 |
| commit | 4ef8b7a861baa1dfc773c4efd27e570f79dcb873 (patch) | |
| tree | b4c17c25ffd9f05129a3446f4937f44bcca3dcfe | |
| parent | e15a34bf9195101398772e05ca655f9a73c3ef6d (diff) | |
| parent | 9708d6ecec391307b87507e034665e02d6643c08 (diff) | |
Merge pull request #8 from Skipper-is/plugin_manager
Plugin manager
| -rw-r--r-- | lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py | 27 | ||||
| -rw-r--r-- | lib/plugin_manager.py | 6 | ||||
| -rw-r--r-- | plugins/aircraft_replacer.py | 70 |
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 |
