@@ -65,19 +65,20 @@ guiComboBoxAddItem ( sirenType, "Single" )
6565guiComboBoxAddItem ( sirenType , " Dual" )
6666guiComboBoxSetSelected ( sirens , 0 )
6767guiComboBoxSetSelected ( numberOfSirens , 0 )
68+
6869function sirenCmd ()
6970 local veh = getPedOccupiedVehicle ( localPlayer )
7071 if ( guiGetVisible ( myWindow ) == false ) then
71- if ( veh ~= false ) then
72- guiSetVisible ( myWindow , true )
73- showCursor ( true )
74- InitUI ( )
75- vParamsTable = getVehicleSirenParams ( veh )
76- if ( vParamsTable == false ) then
77- vParamsTable = { SirenCount = 1 , SirenType = 4 , Flags = { Silent = true , DoLOSCheck = true , UseRandomiser = true , [" 360" ]= true } }
78- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
72+ if ( veh ~= false ) then
73+ guiSetVisible ( myWindow , true )
74+ showCursor ( true )
75+ InitUI ( )
76+ vParamsTable = getVehicleSirenParams ( veh )
77+ if ( vParamsTable == false ) then
78+ vParamsTable = { SirenCount = 1 , SirenType = 4 , Flags = { Silent = true , DoLOSCheck = true , UseRandomiser = true , [" 360" ]= true } }
79+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
80+ end
7981 end
80- end
8182 else
8283 guiSetVisible ( myWindow , false )
8384 showCursor ( false )
@@ -105,33 +106,35 @@ function applySirenTable ( veh, sirenTable, bSync )
105106 end
106107 end
107108end
109+
108110function InitUI ( )
109111 local veh = getPedOccupiedVehicle ( localPlayer )
110- local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
111- if ( veh ) then
112- local sirensTable = getVehicleSirens (veh )
113- guiScrollBarSetScrollPosition ( sirensX , 50 + ( sirensTable [selectedItem ].x * 10 ) )
114- guiScrollBarSetScrollPosition ( sirensY , 50 + ( sirensTable [selectedItem ].y * 10 ) )
115- guiScrollBarSetScrollPosition ( sirensZ , 50 + ( sirensTable [selectedItem ].z * 10 ) )
116- guiScrollBarSetScrollPosition ( sirensAlpha , 255 )
117- guiScrollBarSetScrollPosition ( sirensMinAlpha , 255 )
118- guiSetText ( posLabelX , " Position X: " .. string.format ( " %.3f" , sirensTable [selectedItem ].x ) )
119- guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
120- guiSetText ( posLabelZ , " Position Z: " .. string.format ( " %.3f" , sirensTable [selectedItem ].z ) )
121- guiSetText ( alphaLabel , " Alpha: " .. sirensTable [selectedItem ].Alpha )
122- guiSetText ( minAlphaLabel , " Minimum Alpha: " .. sirensTable [selectedItem ].Min_Alpha )
123- guiSetText ( sirensBtnRGB , string.format ( " Colour: #%02X%02X%02X" , sirensTable [selectedItem ].Red , sirensTable [selectedItem ].Green , sirensTable [selectedItem ].Blue ) )
124- guiCheckBoxSetSelected ( sirensChk360 , vParamsTable .Flags [" 360" ] )
125- guiCheckBoxSetSelected ( sirensChkLOS , vParamsTable .Flags .DoLOSCheck )
126- guiCheckBoxSetSelected ( sirensChkRand , vParamsTable .Flags .UseRandomiser )
127- guiCheckBoxSetSelected ( sirensChkSilent , vParamsTable .Flags .Silent )
128- guiComboBoxSetSelected ( numberOfSirens , vParamsTable .SirenCount - 1 )
129- guiComboBoxSetSelected ( sirenType , vParamsTable .SirenType - 1 )
130- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
131- sirensTable [selectedItem ].Alpha = 255
132- sirensTable [selectedItem ].Min_Alpha = 255
133- applySirenTable (veh , sirensTable , false )
112+ if ( not veh ) then
113+ return
134114 end
115+ local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
116+ local sirensTable = getVehicleSirens (veh )
117+ guiScrollBarSetScrollPosition ( sirensX , 50 + ( sirensTable [selectedItem ].x * 10 ) )
118+ guiScrollBarSetScrollPosition ( sirensY , 50 + ( sirensTable [selectedItem ].y * 10 ) )
119+ guiScrollBarSetScrollPosition ( sirensZ , 50 + ( sirensTable [selectedItem ].z * 10 ) )
120+ guiScrollBarSetScrollPosition ( sirensAlpha , 255 )
121+ guiScrollBarSetScrollPosition ( sirensMinAlpha , 255 )
122+ guiSetText ( posLabelX , " Position X: " .. string.format ( " %.3f" , sirensTable [selectedItem ].x ) )
123+ guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
124+ guiSetText ( posLabelZ , " Position Z: " .. string.format ( " %.3f" , sirensTable [selectedItem ].z ) )
125+ guiSetText ( alphaLabel , " Alpha: " .. sirensTable [selectedItem ].Alpha )
126+ guiSetText ( minAlphaLabel , " Minimum Alpha: " .. sirensTable [selectedItem ].Min_Alpha )
127+ guiSetText ( sirensBtnRGB , string.format ( " Colour: #%02X%02X%02X" , sirensTable [selectedItem ].Red , sirensTable [selectedItem ].Green , sirensTable [selectedItem ].Blue ) )
128+ guiCheckBoxSetSelected ( sirensChk360 , vParamsTable .Flags [" 360" ] )
129+ guiCheckBoxSetSelected ( sirensChkLOS , vParamsTable .Flags .DoLOSCheck )
130+ guiCheckBoxSetSelected ( sirensChkRand , vParamsTable .Flags .UseRandomiser )
131+ guiCheckBoxSetSelected ( sirensChkSilent , vParamsTable .Flags .Silent )
132+ guiComboBoxSetSelected ( numberOfSirens , vParamsTable .SirenCount - 1 )
133+ guiComboBoxSetSelected ( sirenType , vParamsTable .SirenType - 1 )
134+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
135+ sirensTable [selectedItem ].Alpha = 255
136+ sirensTable [selectedItem ].Min_Alpha = 255
137+ applySirenTable (veh , sirensTable , false )
135138end
136139InitUI ( )
137140
@@ -177,57 +180,59 @@ function scrollFunc(scrolled)
177180 end
178181end
179182addEventHandler (" onClientGUIScroll" , root , scrollFunc )
183+
180184local bSelecting = false
181185function btnFunc ( button , state )
182186 local veh = getPedOccupiedVehicle ( localPlayer )
183- if ( veh ~= false ) then
184- if ( source == sirensBtnRGB ) then
185- if ( state == " up" ) then
186- exports .cpicker :openPicker (source , " #FFAA00" , " Pick a Beacon Colour" )
187- end
188- end
189- if ( source == sirensBtnGet ) then
190- local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
191- local v = getVehicleSirens (veh )[selectedItem ]
192- outputChatBox (" setVehicleSirens ( veh, " .. selectedItem .. " , " .. string.format ( " %.3f" , v .x ) .. " , " .. string.format ( " %.3f" , v .y ) .. " , " .. string.format ( " %.3f" , v .z ) .. " , " .. v .Red .. " , " .. v .Green .. " , " .. v .Blue .. " , " .. v .Alpha .. " , " .. v .Min_Alpha .. " )" )
193- outputChatBox (" addVehicleSirens ( veh, " .. vParamsTable .SirenCount .. " , " .. vParamsTable .SirenType .. " , " .. tostring ( vParamsTable .Flags [" 360" ] ) .. " , " .. tostring ( vParamsTable .Flags .DoLOSCheck ) .. " , " .. tostring ( vParamsTable .Flags .UseRandomiser ) .. " , " .. tostring ( vParamsTable .Flags .Silent ) .. " ) " )
194- end
195- if ( source == sirensBtn ) then
196- local sirensTable = getVehicleSirens (veh )
197- applySirenTable ( veh , sirensTable , true )
198- end
199- if ( source == sirensBtnClose ) then
200- guiSetVisible ( myWindow , false )
201- showCursor ( false )
202- end
203- if ( source == sirensBtnSelect ) then
204- guiSetVisible ( myWindow , false )
205- showCursor ( true )
206- bSelecting = true
207- end
208- if ( source == sirensChk360 ) then
209- local bValue = guiCheckBoxGetSelected ( source )
210- vParamsTable .Flags [" 360" ] = bValue
211- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
212- end
213- if ( source == sirensChkLOS ) then
214- local bValue = guiCheckBoxGetSelected ( source )
215- vParamsTable .Flags .DoLOSCheck = bValue
216- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
217- end
218- if ( source == sirensChkRand ) then
219- local bValue = guiCheckBoxGetSelected ( source )
220- vParamsTable .Flags .UseRandomiser = bValue
221- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
222- end
223- if ( source == sirensChkSilent ) then
224- local bValue = guiCheckBoxGetSelected ( source )
225- vParamsTable .Flags .Silent = bValue
226- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
187+ if ( not veh ) then
188+ return
189+ end
190+ if ( source == sirensBtnRGB ) then
191+ if ( state == " up" ) then
192+ exports .cpicker :openPicker (source , " #FFAA00" , " Pick a Beacon Colour" )
227193 end
228194 end
195+ if ( source == sirensBtnGet ) then
196+ local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
197+ local v = getVehicleSirens (veh )[selectedItem ]
198+ outputChatBox (" setVehicleSirens ( veh, " .. selectedItem .. " , " .. string.format ( " %.3f" , v .x ) .. " , " .. string.format ( " %.3f" , v .y ) .. " , " .. string.format ( " %.3f" , v .z ) .. " , " .. v .Red .. " , " .. v .Green .. " , " .. v .Blue .. " , " .. v .Alpha .. " , " .. v .Min_Alpha .. " )" )
199+ outputChatBox (" addVehicleSirens ( veh, " .. vParamsTable .SirenCount .. " , " .. vParamsTable .SirenType .. " , " .. tostring ( vParamsTable .Flags [" 360" ] ) .. " , " .. tostring ( vParamsTable .Flags .DoLOSCheck ) .. " , " .. tostring ( vParamsTable .Flags .UseRandomiser ) .. " , " .. tostring ( vParamsTable .Flags .Silent ) .. " ) " )
200+ end
201+ if ( source == sirensBtn ) then
202+ local sirensTable = getVehicleSirens (veh )
203+ applySirenTable ( veh , sirensTable , true )
204+ end
205+ if ( source == sirensBtnClose ) then
206+ guiSetVisible ( myWindow , false )
207+ showCursor ( false )
208+ end
209+ if ( source == sirensBtnSelect ) then
210+ guiSetVisible ( myWindow , false )
211+ showCursor ( true )
212+ bSelecting = true
213+ end
214+ if ( source == sirensChk360 ) then
215+ local bValue = guiCheckBoxGetSelected ( source )
216+ vParamsTable .Flags [" 360" ] = bValue
217+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
218+ end
219+ if ( source == sirensChkLOS ) then
220+ local bValue = guiCheckBoxGetSelected ( source )
221+ vParamsTable .Flags .DoLOSCheck = bValue
222+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
223+ end
224+ if ( source == sirensChkRand ) then
225+ local bValue = guiCheckBoxGetSelected ( source )
226+ vParamsTable .Flags .UseRandomiser = bValue
227+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
228+ end
229+ if ( source == sirensChkSilent ) then
230+ local bValue = guiCheckBoxGetSelected ( source )
231+ vParamsTable .Flags .Silent = bValue
232+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
233+ end
229234end
230- addEventHandler (" onClientGUIClick" , root , btnFunc )
235+ addEventHandler (" onClientGUIClick" , resourceRoot , btnFunc )
231236
232237function PickedBeaconStuff ( element , hex , red , green , blue )
233238 local veh = getPedOccupiedVehicle ( localPlayer )
@@ -241,24 +246,25 @@ function PickedBeaconStuff ( element, hex, red, green, blue )
241246 guiSetText ( sirensBtnRGB , string.format ( " Colour: #%02X%02X%02X" , sirensTable [selectedItem ].Red , sirensTable [selectedItem ].Green , sirensTable [selectedItem ].Blue ) )
242247 end
243248end
244-
245249addEventHandler (" onColorPickerOK" , root , PickedBeaconStuff )
250+
246251function SelectedSiren ( )
247252 local veh = getPedOccupiedVehicle ( localPlayer )
248- if ( veh ~= false ) then
249- if ( source == sirens ) then
250- InitUI ()
251- end
252- if ( source == sirenType ) then
253- local Value = guiComboBoxGetSelected ( source ) + 1
254- vParamsTable .SirenType = Value
255- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
256- end
257- if ( source == numberOfSirens ) then
258- local Value = guiComboBoxGetSelected ( source ) + 1
259- vParamsTable .SirenCount = Value
260- triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
261- end
253+ if ( not veh ) then
254+ return
255+ end
256+ if ( source == sirens ) then
257+ InitUI ()
258+ end
259+ if ( source == sirenType ) then
260+ local Value = guiComboBoxGetSelected ( source ) + 1
261+ vParamsTable .SirenType = Value
262+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
263+ end
264+ if ( source == numberOfSirens ) then
265+ local Value = guiComboBoxGetSelected ( source ) + 1
266+ vParamsTable .SirenCount = Value
267+ triggerServerEvent ( " sirens_sync2" , veh , vParamsTable )
262268 end
263269end
264270addEventHandler (" onClientGUIComboBoxAccepted" , root , SelectedSiren )
@@ -269,6 +275,7 @@ function matTransformVector( mat, vec )
269275 local offZ = vec [1 ] * mat [1 ][3 ] + vec [2 ] * mat [2 ][3 ] + vec [3 ] * mat [3 ][3 ] + mat [4 ][3 ]
270276 return {offX , offY , offZ }
271277end
278+
272279function fixOutput ( out )
273280 if ( out < 0 ) then
274281 return out - 0.003
@@ -278,38 +285,41 @@ function fixOutput ( out )
278285end
279286
280287function test ( button , state , l , f , x , y , z , element )
288+ if ( not element or not bSelecting ) then
289+ return
290+ end
281291 local veh = getPedOccupiedVehicle ( localPlayer )
282- if ( element == veh and veh ~= false and bSelecting == true ) then
283- local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
284- local sirensTable = getVehicleSirens (veh )
292+ if ( not veh or veh ~= element ) then
293+ return
294+ end
295+ local selectedItem = guiComboBoxGetSelected ( sirens ) + 1
296+ local sirensTable = getVehicleSirens (veh )
285297
286- local x2 ,y2 ,z2 = getElementPosition ( veh )
287- local rx , ry , rz = getElementRotation ( veh )
298+ local x2 ,y2 ,z2 = getElementPosition ( veh )
299+ local rx , ry , rz = getElementRotation ( veh )
288300
289- local vehmat = matrix (getElementMatrix ( veh ))
290- vehmat [1 ][4 ] = 0
291- vehmat [2 ][4 ] = 0
292- vehmat [3 ][4 ] = 0
293- vehmat [4 ][4 ] = 1
294- local vehmatInv = matrix .invert ( vehmat )
295- local result = matTransformVector ( vehmatInv , {x , y , z } )
301+ local vehmat = matrix (getElementMatrix ( veh ))
302+ vehmat [1 ][4 ] = 0
303+ vehmat [2 ][4 ] = 0
304+ vehmat [3 ][4 ] = 0
305+ vehmat [4 ][4 ] = 1
306+ local vehmatInv = matrix .invert ( vehmat )
307+ local result = matTransformVector ( vehmatInv , {x , y , z } )
296308
297309
298- sirensTable [selectedItem ].x = fixOutput ( result [1 ] )
299- guiSetText ( posLabelX , " Position X: " .. string.format ( " %.3f" , sirensTable [selectedItem ].x ) )
310+ sirensTable [selectedItem ].x = fixOutput ( result [1 ] )
311+ guiSetText ( posLabelX , " Position X: " .. string.format ( " %.3f" , sirensTable [selectedItem ].x ) )
300312
301- sirensTable [selectedItem ].y = fixOutput ( result [2 ] )
302- guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
313+ sirensTable [selectedItem ].y = fixOutput ( result [2 ] )
314+ guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
303315
304- sirensTable [selectedItem ].z = fixOutput ( result [3 ] )
305- guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
316+ sirensTable [selectedItem ].z = fixOutput ( result [3 ] )
317+ guiSetText ( posLabelY , " Position Y: " .. string.format ( " %.3f" , sirensTable [selectedItem ].y ) )
306318
307- applySirenTable ( veh , sirensTable , false )
319+ applySirenTable ( veh , sirensTable , false )
308320
309- bSelecting = false
310- guiSetVisible ( myWindow , true )
311- showCursor ( true )
312- end
321+ bSelecting = false
322+ guiSetVisible ( myWindow , true )
323+ showCursor ( true )
313324end
314-
315325addEventHandler (" onClientClick" , root , test )
0 commit comments