diff options
| -rw-r--r-- | plugins/refuel.py | 72 | ||||
| -rw-r--r-- | plugins/smoke_on_damage/Plugin.py | 2 | ||||
| -rw-r--r-- | proxy.py | 5 |
3 files changed, 78 insertions, 1 deletions
diff --git a/plugins/refuel.py b/plugins/refuel.py new file mode 100644 index 0000000..e171953 --- /dev/null +++ b/plugins/refuel.py @@ -0,0 +1,72 @@ +""" +This plugin enables you to perform air to air refueling. +""" +import math +from lib.PacketManager.packets import FSNETCMD_AIRCMD, FSNETCMD_AIRPLANESTATE + +ENABLED = True +REFUEL_RADIUS = 100 # in meters + +refuelers = {} +refueling = {} + +class Plugin: + def __init__(self): + def __init__(self): + self.plugin_manager = None + + def register(self, plugin_manager): + self.plugin_manager = plugin_manager + self.plugin_manager.register_command('refuel', self.refuel) + self.plugin_manager.register_command('k', self.refueler) + self.plugin_manager.register_hook('on_flight_data', self.on_flight_data) + + def refueler(self, full_message, player, message_to_client, message_to_server): + if player in refuelers: + refuelers.pop(player) + else: + refuelers[player] = [0, [], False] + + def refuel(self, full_message, player, message_to_client, message_to_server): + #a = FSNETCMD_AIRCMD.set_command(player.aircraft.id, "INITFUEL", "3750kg", True) + #message_to_client.append(a) + #print(player in refueling) + if player in refueling: + refueling.pop(player) + else: + refueling[player] = [0, []] + + def on_flight_data(self, data, player, message_to_client, message_to_server): + decode = FSNETCMD_AIRPLANESTATE(data) + if player in refueling: + for player in refuelers: + refueling[player] = [decode.fuel, decode.position] + if self.in_range(refuelers[player][1], decode.position): + print("here!") + refuelers[player][2] = True + max_lim = int((player.aircraft.initial_config['WEIGFUEL'])[:-2]) + if decode.fuel < max_lim: + a = FSNETCMD_AIRCMD.set_command(player.aircraft.id, "INITFUEL", f"{decode.fuel+100}kg", True) + message_to_client.append(a) + else: + refuelers[player][2] = False + + + elif player in refuelers: + refuelers[player] = [decode.fuel, decode.position, refuelers[player][2]] + if decode.fuel-100 > 0 and refuelers[player][2]: + a = FSNETCMD_AIRCMD.set_command(player.aircraft.id, "INITFUEL", f"{decode.fuel-5}kg", True) + message_to_client.append(a) + + @staticmethod + def in_range(refueler_cord:list, refueled_cord:list): + # the plane to be refueled must be below and behind the + # refueler plane, ysf sends cords in list[x, y, z] + # implement this later + # for now we just use distance formula in a 3d space + dist = math.sqrt((refueler_cord[0]-refueled_cord[0])**2 + (refueler_cord[1]-refueled_cord[1])**2 + (refueler_cord[2]-refueled_cord[2])**2) + print(dist) + if dist < REFUEL_RADIUS: + return True + else: + return False diff --git a/plugins/smoke_on_damage/Plugin.py b/plugins/smoke_on_damage/Plugin.py index 08c184b..12effc8 100644 --- a/plugins/smoke_on_damage/Plugin.py +++ b/plugins/smoke_on_damage/Plugin.py @@ -1,4 +1,4 @@ -"""TThis plugin will cause the aircraft to emit smoke if it's health is below a certain threshold. +"""This plugin will cause the aircraft to emit smoke if it's health is below a certain threshold. It is also an example of a plugin as a folder/module. This can be used as a basis for more complex plugins that may need multiple files.""" from lib.PacketManager.packets import FSNETCMD_AIRCMD, FSNETCMD_AIRPLANESTATE, FSNETCMD_TEXTMESSAGE @@ -117,6 +117,8 @@ async def handle_client(client_reader, client_writer): try: + if packet_type == "FSNETCMD_AIRCMD": + print(FSNETCMD_AIRCMD.decode(packet)) if packet_type == "FSNETCMD_LOGON": # keep_message = plugin_manager.triggar_hook('on_login', packet, player, message_to_client, message_to_server) @@ -186,6 +188,9 @@ async def handle_client(client_reader, client_writer): debug("S2C" + str(packet_type)) debug(data) + #if packet_type == "FSNETCMD_AIRCMD": + # print(FSNETCMD_AIRCMD.decode(packet)) + keep_message = triggerRespectiveHookServer(packet_type, packet, player, message_to_client, message_to_server, plugin_manager) if not keep_message: data = None |
