66
77local speakerSounds = {}
88local playerSpeakers = {}
9+ local speakerVolumeSyncTimer = false
910
1011local function getStreamURLFromEdit ()
1112 local streamURL = guiGetText (RADIO_GUI [" Stream URL edit" ])
@@ -46,6 +47,34 @@ local function handleSpeakerOnStreamInOut(speakerElement, toggleOn)
4647 return false
4748end
4849
50+ local function getLocalSpeakerVolume ()
51+ local speakerVolume = guiScrollBarGetScrollPosition (RADIO_GUI [" Volume" ])
52+ local speakerVolumeValue = (speakerVolume / 100 )
53+
54+ return speakerVolumeValue
55+ end
56+
57+ local function syncSpeakerVolume ()
58+ local speakerVolume = getLocalSpeakerVolume ()
59+
60+ triggerServerEvent (" onServerEditVolume" , localPlayer , speakerVolume )
61+ speakerVolumeSyncTimer = false
62+
63+ return true
64+ end
65+
66+ local function requestSpeakerVolumeSync ()
67+ if (speakerVolumeSyncTimer ) then
68+ resetTimer (speakerVolumeSyncTimer )
69+ else
70+ local speakerTimerInterval = (RADIO_VOLUME_DELAY + 50 ) -- extra time to let server catch up
71+
72+ speakerVolumeSyncTimer = setTimer (syncSpeakerVolume , speakerTimerInterval , 1 )
73+ end
74+
75+ return true
76+ end
77+
4978function loadRadioStations ()
5079 for stationID = 1 , # RADIO_STATIONS do
5180 local radioStationData = RADIO_STATIONS [stationID ]
@@ -151,14 +180,7 @@ function onClientGUIClickCreateSpeaker()
151180end
152181
153182function onClientGUIScrollVolume ()
154- local volume = guiScrollBarGetScrollPosition (RADIO_GUI [" Volume" ]) / 100
155- local createDelayPassed = getOrSetPlayerDelay (localPlayer , " volume" , RADIO_VOLUME_DELAY )
156-
157- if (not createDelayPassed ) then
158- return false
159- end
160-
161- triggerServerEvent (" onServerEditVolume" , localPlayer , volume )
183+ requestSpeakerVolumeSync ()
162184end
163185
164186function onClientGUIClickToggleSpeaker ()
@@ -207,7 +229,7 @@ function setPlayerSpeakerData(playerElement, speakerData)
207229 local speakerBox = speakerData .speakerBox
208230 local speakerDummy = createObject (1337 , 0 , 0 , 3 )
209231 local speakerBoxDimension = getElementDimension (speakerBox )
210- setElementDimension ( speakerDummy , speakerBoxDimension )
232+
211233
212234 speakerData .speakerDummy = speakerDummy
213235 playerSpeakers [playerElement ] = speakerData
@@ -216,6 +238,7 @@ function setPlayerSpeakerData(playerElement, speakerData)
216238
217239 setElementAlpha (speakerDummy , 0 )
218240 setElementCollisionsEnabled (speakerDummy , false )
241+ setElementDimension (speakerDummy , speakerBoxDimension )
219242 attachElements (speakerDummy , speakerBox , - 0.32 , - 0.22 , 0.8 )
220243
221244 return true
@@ -371,4 +394,4 @@ function clearSpeakersOnDestroyQuit()
371394 clearPlayerSpeaker (source )
372395end
373396addEventHandler (" onClientPlayerQuit" , root , clearSpeakersOnDestroyQuit )
374- addEventHandler (" onClientElementDestroy" , resourceRoot , clearSpeakersOnDestroyQuit )
397+ addEventHandler (" onClientElementDestroy" , resourceRoot , clearSpeakersOnDestroyQuit )
0 commit comments