diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/over_g_damage.py | 2 | ||||
| -rw-r--r-- | plugins/refuel.py | 53 |
2 files changed, 36 insertions, 19 deletions
diff --git a/plugins/over_g_damage.py b/plugins/over_g_damage.py index 89e295b..50c1b21 100644 --- a/plugins/over_g_damage.py +++ b/plugins/over_g_damage.py @@ -5,7 +5,7 @@ from config import G_LIM import time # CONFIG -ENABLED = False # Enable or disable the plugin +ENABLED = True # Enable or disable the plugin INTERVAL = 0.3 # Interval of second before G Limit check is enforced class Plugin: diff --git a/plugins/refuel.py b/plugins/refuel.py index bd12a10..1b33031 100644 --- a/plugins/refuel.py +++ b/plugins/refuel.py @@ -3,61 +3,80 @@ This plugin enables you to perform air to air refueling. """ import math from lib.PacketManager.packets import FSNETCMD_AIRCMD, FSNETCMD_AIRPLANESTATE +from lib import YSchat ENABLED = True -REFUEL_RADIUS = 100 # in meters +REFUEL_RADIUS = 500 +# in meters, recomended to set +100-200m more than +# required range to compensate for distance lag caused by network. +FUEL_RATE = 50 # in kg/s (aprroximately a second, timing is not accurate) refuelers = {} refueling = {} class Plugin: def __init__(self): - def __init__(self): - self.plugin_manager = None + 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_command('refueler', 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: + if player in refueling: + a = YSchat.message("You cannot be refueled while being a refueler") + + elif player in refuelers: + a = YSchat.message("You are no more refueling!") refuelers.pop(player) else: + a = YSchat.message(f"You are now refueling other players! To refuel the plane must be within {REFUEL_RADIUS}m") refuelers[player] = [0, [], False] + message_to_client.append(a) 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: + if player in refuelers: + a = YSchat.message("You cannot be a refueler while being refueled") + elif player in refueling: + a = YSchat.message("You are no more refueling!") refueling.pop(player) else: + a = YSchat.message(f"You can now be refueled by other players! To refuel the plane must be within {REFUEL_RADIUS}m") refueling[player] = [0, []] + message_to_client.append(a) def on_flight_data(self, data, player, message_to_client, message_to_server): decode = FSNETCMD_AIRPLANESTATE(data) - print(player.username, decode.position) - print(refuelers, refueling) if player in refueling: - for player in refuelers: + for refueler in refuelers: refueling[player] = [decode.fuel, decode.position] - if self.in_range(refuelers[player][1], decode.position): - print("here!") - refuelers[player][2] = True + if self.in_range(refuelers[refueler][1], decode.position): + refuelers[refueler][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) + a = FSNETCMD_AIRCMD.set_command(player.aircraft.id, "INITFUEL", f"{decode.fuel+FUEL_RATE}kg", True) + message_to_client.append(a) + elif decode.fuel >= max_lim: + a = YSchat.message("The plane is full!") + refuelers[refueler][2] = False # No longer refueling + message_to_client.append(a) + + if refuelers[refueler][0] < FUEL_RATE: + a = YSchat.message("The refueler ran out of fuel!") message_to_client.append(a) else: - refuelers[player][2] = False + refuelers[refueler][2] = False # No longer refueling 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) + if decode.fuel-FUEL_RATE > 0 and refuelers[player][2]: + a = FSNETCMD_AIRCMD.set_command(player.aircraft.id, "INITFUEL", f"{decode.fuel-FUEL_RATE}kg", True) message_to_client.append(a) return True @@ -67,9 +86,7 @@ class Plugin: # refueler plane, ysf sends cords in list[x, y, z] # implement this later # for now we just use distance formula in a 3d space - print(refueler_cord, refueled_cord) 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: |
