From 95d8feb6a697817d34f7408f1f7abd3de624dc5d Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 3 Mar 2021 11:59:59 +0000 Subject: [PATCH] feat(sync): locked speed overrides recipient's speed data When the driver/passenger locks a speed, the data from the player who locked the speed is gathered and sent to the other player. This way the players will have the same data on both ends. --- cl_radar.lua | 40 +++++++++++++++++++++++++++++++--------- cl_sync.lua | 4 +--- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/cl_radar.lua b/cl_radar.lua index e834136..6ca3bfd 100644 --- a/cl_radar.lua +++ b/cl_radar.lua @@ -58,9 +58,9 @@ local function RegisterKeyBinds() -- Locks speed from front antenna RegisterCommand( "radar_fr_ant", function() if ( not RADAR:GetKeyLockState() and PLY:CanControlRadar() ) then - RADAR:LockAntennaSpeed( "front" ) + RADAR:LockAntennaSpeed( "front", nil ) - SYNC:LockAntennaSpeed( "front", { RADAR:GetAntennaSpeed( "front" ), RADAR:GetAntennaDir( "front" ) } ) + SYNC:LockAntennaSpeed( "front", RADAR:GetAntennaDataPacket( "front" ) ) end end ) RegisterKeyMapping( "radar_fr_ant", "Front Antenna Lock/Unlock", "keyboard", CONFIG.keyDefaults.front_lock ) @@ -68,9 +68,9 @@ local function RegisterKeyBinds() -- Locks speed from rear antenna RegisterCommand( "radar_bk_ant", function() if ( not RADAR:GetKeyLockState() and PLY:CanControlRadar() ) then - RADAR:LockAntennaSpeed( "rear" ) + RADAR:LockAntennaSpeed( "rear", nil ) - SYNC:LockAntennaSpeed( "rear", { RADAR:GetAntennaSpeed( "rear" ), RADAR:GetAntennaDir( "rear" ) } ) + SYNC:LockAntennaSpeed( "rear", RADAR:GetAntennaDataPacket( "rear" ) ) end end ) RegisterKeyMapping( "radar_bk_ant", "Rear Antenna Lock/Unlock", "keyboard", CONFIG.keyDefaults.rear_lock ) @@ -1170,12 +1170,24 @@ end -- When the user presses the speed lock key for either antenna, this function is called to get the -- necessary information from the antenna, and then lock it into the display -function RADAR:LockAntennaSpeed( ant ) +function RADAR:LockAntennaSpeed( ant, override ) -- Only lock a speed if the antenna is on and the UI is displayed if ( self:IsPowerOn() and self:GetDisplayState() and not self:GetDisplayHidden() and self:IsAntennaTransmitting( ant ) ) then -- Check if the antenna doesn't have a locked speed, if it doesn't then we lock in the speed, otherwise we -- reset the lock if ( not self:IsAntennaSpeedLocked( ant ) ) then + -- Here we check if the override parameter is valid, if so then we set the radar's speed data to the + -- speed data provided in the override table. + if ( override ~= nil ) then + self:SetAntennaData( ant, override[1], override[2] ) + self:SetAntennaFastData( ant, override[3], override[4] ) + end + + -- This override parameter is used for the passenger control system, as the speeds displayed on the + -- recipients display can't be trusted. When the player who locks the speed triggers the sync, their + -- speed data is collected and sent to the other player so that their speed data is overriden to be the same. + override = override or { nil, nil, nil, nil } + -- Set up a temporary table with 3 nil values, this way if the system isn't able to get a speed or -- direction, the speed lock function won't work local data = { nil, nil, nil } @@ -1183,12 +1195,12 @@ function RADAR:LockAntennaSpeed( ant ) -- As the lock system is based on which speed is displayed, we have to check if there is a speed in the -- fast box, if there is then we lock in the fast speed, otherwise we lock in the strongest speed if ( self:IsFastDisplayEnabled() and self:DoesAntennaHaveValidFastData( ant ) ) then - data[1] = self:GetAntennaFastSpeed( ant ) - data[2] = self:GetAntennaFastDir( ant ) + data[1] = override[3] or self:GetAntennaFastSpeed( ant ) + data[2] = override[4] or self:GetAntennaFastDir( ant ) data[3] = 2 else - data[1] = self:GetAntennaSpeed( ant ) - data[2] = self:GetAntennaDir( ant ) + data[1] = override[1] or self:GetAntennaSpeed( ant ) + data[2] = override[2] or self:GetAntennaDir( ant ) data[3] = 1 end @@ -1215,6 +1227,16 @@ function RADAR:ResetAntenna( ant ) self:ResetAntennaSpeedLock( ant ) end +-- Returns a table with both antenna's speed data and directions +function RADAR:GetAntennaDataPacket( ant ) + return { + self:GetAntennaSpeed( ant ), + self:GetAntennaDir( ant ), + self:GetAntennaFastSpeed( ant ), + self:GetAntennaFastDir( ant ) + } +end + --[[---------------------------------------------------------------------------------- Radar captured vehicle functions diff --git a/cl_sync.lua b/cl_sync.lua index f34917f..25d21dc 100644 --- a/cl_sync.lua +++ b/cl_sync.lua @@ -103,7 +103,5 @@ end ) RegisterNetEvent( "wk_wars2x_sync:receiveLockAntennaSpeed" ) AddEventHandler( "wk_wars2x_sync:receiveLockAntennaSpeed", function( antenna, data ) - RADAR:SetAntennaSpeed( antenna, data[1] ) - RADAR:SetAntennaDir( antenna, data[2] ) - RADAR:LockAntennaSpeed( antenna ) + RADAR:LockAntennaSpeed( antenna, data ) end ) \ No newline at end of file