diff options
| author | Ritabrata Das <[email protected]> | 2025-02-20 21:26:39 +0530 |
|---|---|---|
| committer | Ritabrata Das <[email protected]> | 2025-02-20 21:26:39 +0530 |
| commit | bac0338396377a96805026bd0b8059a715647839 (patch) | |
| tree | 8f33473b65a769dca955a633f1c518d0dad6ff06 | |
| parent | dbc52a5e0337cfe8a040ac77117b788b49ef46db (diff) | |
Start work on radar
| -rw-r--r-- | lib/Player.py | 2 | ||||
| -rw-r--r-- | plugins/radar.py | 46 |
2 files changed, 47 insertions, 1 deletions
diff --git a/lib/Player.py b/lib/Player.py index 1d39a56..8e2250a 100644 --- a/lib/Player.py +++ b/lib/Player.py @@ -12,7 +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 + self.iff = 1 def set_aircraft(self, aircraft:Aircraft): self.aircraft = aircraft diff --git a/plugins/radar.py b/plugins/radar.py new file mode 100644 index 0000000..ca9fd40 --- /dev/null +++ b/plugins/radar.py @@ -0,0 +1,46 @@ +""" +This plugin allows you have to Radar features similar to that of +original WW3 server. +""" +import math +from lib.PacketManager.packets import FSNETCMD_AIRPLANESTATE +import traceback + +ENABLED = True +RADIUS = 500 # in meters, within this range planes with different IFF can see each other on radar + +flying_players = {} + +class Plugin: + def __init__(self): + self.plugin_manager = None + + def register(self, plugin_manager): + self.plugin_manager = plugin_manager + self.plugin_manager.register_hook('on_flight_data_server', self.on_flight_data_server) + self.plugin_manager.register_hook('on_unjoin', self.on_unjoin) + + def on_flight_data_server(self, data, player, message_to_client, message_to_server): + decode = FSNETCMD_AIRPLANESTATE(data) + if decode.player_id == player.aircraft.id: + return True + else: + try: + print(decode.packet_version) + print(*decode.position, *decode.atti, *decode.velocity, *decode.atti_velocity) + message_to_client.append(FSNETCMD_AIRPLANESTATE.encode(decode.remote_time, decode.player_id, decode.packet_version, [0.0,0.0,0.0], decode.atti, decode.velocity, decode.atti_velocity, + decode.smoke_oil, decode.fuel, decode.payload, decode.flight_state, decode.vgw, decode.spoiler, decode.landing_gear, decode.flap, decode.brake, + decode.flags, decode.gun_ammo, decode.rocket_ammo, decode.aam, decode.agm, decode.bomb, decode.life, decode.g_value, decode.throttle, decode.elev, decode.ail, decode.rud, + decode.trim, decode.thrust_vector, decode.bomb_bay_info, True)) + except: + traceback.print_exc() + return False + + def on_unjoin(self, data, player, message_to_client, message_to_server): + return True + + @staticmethod + def in_range(pos1, pos2): + # pos1 and pos2 are lists of [x,y,z] + dist = math.sqrt((pos1[0] - pos2[0])**2 + (pos1[1] - pos2[1])**2 + (pos1[2] - pos2[2])**2) + return dist <= RADIUS |
