aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py4
-rw-r--r--lib/Player.py1
-rw-r--r--plugins/refuel.py45
-rw-r--r--proxy.py3
4 files changed, 33 insertions, 20 deletions
diff --git a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
index 7796599..f24c94a 100644
--- a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
+++ b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
@@ -7,7 +7,7 @@ class FSNETCMD_JOINREQUEST: #8
"""
def __init__(self, buffer:bytes, should_decode:bool=True):
self.buffer = buffer
- self.iff = None
+ self.iff = 0 # The IFF sent is 1 subtracted from the selected value by the player
self.aircraft = None
self.start_pos = None #It's the STP name
self.fuel = None
@@ -26,4 +26,4 @@ class FSNETCMD_JOINREQUEST: #8
start_pos.encode(), 1, fuel, smoke)
if with_size:
return pack("I",len(buffer))+buffer
- return buffer \ No newline at end of file
+ return buffer
diff --git a/lib/Player.py b/lib/Player.py
index 7f54914..1d39a56 100644
--- a/lib/Player.py
+++ b/lib/Player.py
@@ -12,6 +12,7 @@ class Player:
self.ip = ""
self.streamWriterObject = streamWriterObject
self.is_a_bot = True # We check if they are still present after LOGIN packet, then they're not a bot
+ self.iff = 0
def set_aircraft(self, aircraft:Aircraft):
self.aircraft = aircraft
diff --git a/plugins/refuel.py b/plugins/refuel.py
index 1b33031..12af66a 100644
--- a/plugins/refuel.py
+++ b/plugins/refuel.py
@@ -23,6 +23,7 @@ class Plugin:
self.plugin_manager.register_command('refuel', self.refuel)
self.plugin_manager.register_command('refueler', self.refueler)
self.plugin_manager.register_hook('on_flight_data', self.on_flight_data)
+ self.plugin_manager.register_hook('on_unjoin', self.on_unjoin)
def refueler(self, full_message, player, message_to_client, message_to_server):
if player in refueling:
@@ -32,7 +33,7 @@ class Plugin:
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")
+ a = YSchat.message(f"You are now refueling other players! To refuel the plane must be within {REFUEL_RADIUS}m and have same IFF")
refuelers[player] = [0, [], False]
message_to_client.append(a)
@@ -46,7 +47,7 @@ class Plugin:
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")
+ a = YSchat.message(f"You can now be refueled by other players! To refuel the plane must be within {REFUEL_RADIUS}m and have same IFF")
refueling[player] = [0, []]
message_to_client.append(a)
@@ -54,23 +55,24 @@ class Plugin:
decode = FSNETCMD_AIRPLANESTATE(data)
if player in refueling:
for refueler in refuelers:
- refueling[player] = [decode.fuel, decode.position]
- 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+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 refueler.iff == player.iff:
+ refueling[player] = [decode.fuel, decode.position]
+ 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+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[refueler][2] = False # No longer refueling
+ if refuelers[refueler][0] < FUEL_RATE:
+ a = YSchat.message("The refueler ran out of fuel!")
+ message_to_client.append(a)
+ else:
+ refuelers[refueler][2] = False # No longer refueling
elif player in refuelers:
@@ -80,6 +82,13 @@ class Plugin:
message_to_client.append(a)
return True
+ def on_unjoin(self, data, player, message_to_client, message_to_server):
+ if player in refuelers:
+ refuelers.pop(player)
+ elif player in refueling:
+ refueling.pop(player)
+ return True
+
@staticmethod
def in_range(refueler_cord:list, refueled_cord:list):
# the plane to be refueled must be below and behind the
diff --git a/proxy.py b/proxy.py
index 9a60c0c..9cb6a5e 100644
--- a/proxy.py
+++ b/proxy.py
@@ -130,6 +130,9 @@ async def handle_client(client_reader, client_writer):
writer.write(data)
continue
+ elif packet_type == "FSNETCMD_JOINREQUEST":
+ player.iff = FSNETCMD_JOINREQUEST(packet).iff + 1
+
elif packet_type == "FSNETCMD_AIRPLANESTATE":
player.aircraft.add_state(FSNETCMD_AIRPLANESTATE(packet)) #TODO: Do we want to convert all this to plugins? Probably not, but there is duplicated functionality
# keep_message = plugin_manager.triggar_hook('on_flight_data', packet, player, message_to_client, message_to_server)