@@ -65,19 +65,20 @@ guiComboBoxAddItem ( sirenType, "Single" )
65
65
guiComboBoxAddItem ( sirenType , " Dual" )
66
66
guiComboBoxSetSelected ( sirens , 0 )
67
67
guiComboBoxSetSelected ( numberOfSirens , 0 )
68
+
68
69
function sirenCmd ()
69
70
local veh = getPedOccupiedVehicle ( localPlayer )
70
71
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
79
81
end
80
- end
81
82
else
82
83
guiSetVisible ( myWindow , false )
83
84
showCursor ( false )
@@ -105,33 +106,35 @@ function applySirenTable ( veh, sirenTable, bSync )
105
106
end
106
107
end
107
108
end
109
+
108
110
function InitUI ( )
109
111
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
134
114
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 )
135
138
end
136
139
InitUI ( )
137
140
@@ -177,57 +180,59 @@ function scrollFunc(scrolled)
177
180
end
178
181
end
179
182
addEventHandler (" onClientGUIScroll" , root , scrollFunc )
183
+
180
184
local bSelecting = false
181
185
function btnFunc ( button , state )
182
186
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" )
227
193
end
228
194
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
229
234
end
230
- addEventHandler (" onClientGUIClick" , root , btnFunc )
235
+ addEventHandler (" onClientGUIClick" , resourceRoot , btnFunc )
231
236
232
237
function PickedBeaconStuff ( element , hex , red , green , blue )
233
238
local veh = getPedOccupiedVehicle ( localPlayer )
@@ -241,24 +246,25 @@ function PickedBeaconStuff ( element, hex, red, green, blue )
241
246
guiSetText ( sirensBtnRGB , string.format ( " Colour: #%02X%02X%02X" , sirensTable [selectedItem ].Red , sirensTable [selectedItem ].Green , sirensTable [selectedItem ].Blue ) )
242
247
end
243
248
end
244
-
245
249
addEventHandler (" onColorPickerOK" , root , PickedBeaconStuff )
250
+
246
251
function SelectedSiren ( )
247
252
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 )
262
268
end
263
269
end
264
270
addEventHandler (" onClientGUIComboBoxAccepted" , root , SelectedSiren )
@@ -269,6 +275,7 @@ function matTransformVector( mat, vec )
269
275
local offZ = vec [1 ] * mat [1 ][3 ] + vec [2 ] * mat [2 ][3 ] + vec [3 ] * mat [3 ][3 ] + mat [4 ][3 ]
270
276
return {offX , offY , offZ }
271
277
end
278
+
272
279
function fixOutput ( out )
273
280
if ( out < 0 ) then
274
281
return out - 0.003
@@ -278,38 +285,41 @@ function fixOutput ( out )
278
285
end
279
286
280
287
function test ( button , state , l , f , x , y , z , element )
288
+ if ( not element or not bSelecting ) then
289
+ return
290
+ end
281
291
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 )
285
297
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 )
288
300
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 } )
296
308
297
309
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 ) )
300
312
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 ) )
303
315
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 ) )
306
318
307
- applySirenTable ( veh , sirensTable , false )
319
+ applySirenTable ( veh , sirensTable , false )
308
320
309
- bSelecting = false
310
- guiSetVisible ( myWindow , true )
311
- showCursor ( true )
312
- end
321
+ bSelecting = false
322
+ guiSetVisible ( myWindow , true )
323
+ showCursor ( true )
313
324
end
314
-
315
325
addEventHandler (" onClientClick" , root , test )
0 commit comments