Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.64 KB | None | 0 0
  1. local strobo_interval = 10 -- strobo light freq. 10 = 0.5 sec
  2. local is_strobo_enabled = false -- enable/disable stroboscopic lights mode
  3. -- lamps
  4. local flash_interval = 0.5 -- flash freq
  5. -- led blink mode
  6. local blink_interval = 20 -- blink interval
  7. local blink_duration = 2 -- 1..blink_interval
  8.  
  9. local car_lights_table = {
  10.  
  11. -- vehicle ID, ["mode"]="led" or "lamp" , [i] = { light offset, light color, light size, phase offset (from [0;10]) }
  12.  
  13. [445] = {["mode"]="lamp", [1]={["pos"]={0.51, 0, 0.765}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.51, 0, 0.765}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  14. },
  15. [458] = {["mode"]="lamp", [1]={["pos"]={0.4, 0.1, 0.9}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.4, 0.1, 0.9}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  16. },
  17. [400] = {["mode"]="lamp", [1]={["pos"]={0.5, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.5, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  18. },
  19. [560] = {["mode"]="lamp", [1]={["pos"]={0.41, 0.28, 1.08}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.41, 0.28, 1.08}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  20. },
  21. [421] = {["mode"]="lamp", [1]={["pos"]={0.5, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.5, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  22. },
  23. [597] = {["mode"]="lamp", [1]={["pos"]={0.51, 0, 0.765}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.51, 0, 0.765}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  24. },
  25. [491] = {["mode"]="lamp", [1]={["pos"]={-0.36, 0.34, 0.89}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=0.0}, [2]={["pos"]={-0.36, 0.34, 0.89}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=0.0}
  26. },
  27. [585] = {["mode"]="lamp", [1]={["pos"]={0.44, 0.1, 0.8}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.44, 0.1, 0.8}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  28. },
  29. [436] = {["mode"]="lamp", [1]={["pos"]={0.4, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.4, 0, 0.7}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  30. },
  31. [580] = {["mode"]="lamp", [1]={["pos"]={0.4, -0.14, 0.9}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.4, -0.14, 0.9}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  32. },
  33. [505] = {["mode"]="lamp", [1]={["pos"]={0.46, -0.26, 1}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.46, -0.26, 1}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0},
  34. },
  35. [405] = {["mode"]="lamp", [1]={["pos"]={0.4, -0.015, 0.72}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.4, -0.015, 0.72}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  36. },
  37. [467] = {["mode"]="lamp", [1]={["pos"]={0.415, -0.06, 0.845}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.415, -0.06, 0.845}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  38. },
  39. [503] = {["mode"]="lamp", [1]={["pos"]={0.4, -0.05, 0.9}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.4, -0.05, 0.8}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  40. },
  41. [585] = {["mode"]="lamp", [1]={["pos"]={0.415, -0.06, 0.93}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}, [2]={["pos"]={0.415, -0.06, 0.93}, ["color"]={0,0,255}, ["size"]=0.17, ["phase"]=10.0}
  42. },
  43.  
  44. }
  45.  
  46.  
  47. local vehicles = {}
  48. local timers = {}
  49.  
  50. local base_freq = 50 -- freq of timer for light change
  51.  
  52.  
  53.  
  54. function release_vehicle(vehicle)
  55. if (isElement(vehicle)) then
  56. if (is_strobo_enabled) then
  57. setVehicleOverrideLights ( vehicle, 0)
  58. setVehicleLightState ( vehicle, 0, 1 )
  59. setVehicleLightState ( vehicle, 1, 1 )
  60. setVehicleLightState ( vehicle, 2, 1 )
  61. setVehicleLightState ( vehicle, 3, 1 )
  62. end
  63. end
  64. if (vehicles[vehicle]~=nil) then
  65. -- release the markers
  66. for key, value in pairs(vehicles[vehicle]["flist"]) do
  67. destroyElement (value["m"])
  68. end
  69.  
  70. vehicles[vehicle] = nil
  71. end
  72. if (timers[vehicle]~=nil) then
  73. -- kill the strobo timer
  74. killTimer(timers[vehicle])
  75. timers[vehicle] = nil
  76.  
  77. if (isElement(vehicle)) then
  78. if (getElementData( vehicle, "emerlights_source")==getPlayerName(getLocalPlayer())) then
  79. triggerEvent ( "onPlayerEmergencyLightStateChange", getRootElement(), 0 )
  80. end
  81. end
  82. end
  83. end
  84.  
  85. function checkForAbility(vehicle)
  86. local veh_model = getElementModel ( vehicle )
  87. if (car_lights_table[veh_model]==nil)or(getElementData( vehicle, "emerlights_enabled" )=="false") then
  88. return false
  89. end
  90. return true
  91. end
  92.  
  93. function strobo_state_update (vehicle)
  94. -- check for valid vehicle
  95. if (isElement(vehicle)) then
  96. if (vehicles[vehicle]==nil) then
  97. -- check for disallowing to use lights
  98. -- its enabled by default
  99. if (checkForAbility(vehicle)==false) then
  100. release_vehicle(vehicle)
  101. return
  102. end
  103. local veh_model = getElementModel ( vehicle )
  104.  
  105. --if (car_lights_table[veh_model]==nil) then
  106. --veh_model = "default"
  107. --end
  108.  
  109. local occupant = getVehicleOccupant( vehicle, 0)
  110. if (getElementType(occupant)=="player") then -- peds also can use emerlights
  111. local src = getPlayerName(occupant)
  112. setElementData( vehicle, "emerlights_source", src, false)
  113. if (src==getPlayerName(getLocalPlayer())) then
  114. triggerEvent ( "onPlayerEmergencyLightStateChange", getRootElement(), 1 )
  115. end
  116. end
  117. -- init state variable
  118.  
  119. vehicles[vehicle] = {}
  120. vehicles[vehicle]["lstate"] = 0 -- strobo lights state
  121. vehicles[vehicle]["fstate"] = 0 -- flash light state
  122. vehicles[vehicle]["flist"] = {} -- flash lights list (marker ids)
  123.  
  124. -- create flash lights
  125.  
  126.  
  127. local mode = car_lights_table[veh_model]["mode"]
  128. if (mode==nil) then
  129. mode = "lamp"
  130. end
  131.  
  132. local coeff = 0
  133. if (mode=="lamp") then
  134. coeff = 3.141592654/10.0
  135. else
  136. coeff = blink_interval/20.0
  137. end
  138.  
  139. vehicles[vehicle]["fmode"] = mode
  140.  
  141. for light_id, light_desc in pairs(car_lights_table[veh_model]) do
  142. if (light_id~="mode") then
  143. vehicles[vehicle]["flist"][light_id] = {}
  144. vehicles[vehicle]["flist"][light_id]["m"] = createMarker( 0.0001, 0.0001, 0.0001, "corona", light_desc["size"], light_desc["color"][1], light_desc["color"][2], light_desc["color"][3], 100)
  145. vehicles[vehicle]["flist"][light_id]["p"] = light_desc["phase"]*coeff
  146. attachElements ( vehicles[vehicle]["flist"][light_id]["m"], vehicle, light_desc["pos"][1], light_desc["pos"][2], light_desc["pos"][3] )
  147. end
  148. end
  149.  
  150. end
  151.  
  152. -- strobo light
  153. if (is_strobo_enabled) then
  154. setVehicleOverrideLights ( vehicle, 2)
  155. if (vehicles[vehicle]["lstate"]<strobo_interval) then
  156. setVehicleLightState ( vehicle, 0, 1 )
  157. setVehicleLightState ( vehicle, 1, 0 )
  158. setVehicleLightState ( vehicle, 2, 0 )
  159. setVehicleLightState ( vehicle, 3, 1 )
  160. else
  161. setVehicleLightState ( vehicle, 0, 0 )
  162. setVehicleLightState ( vehicle, 1, 1 )
  163. setVehicleLightState ( vehicle, 2, 1 )
  164. setVehicleLightState ( vehicle, 3, 0 )
  165. end
  166. if (vehicles[vehicle]["lstate"]>=strobo_interval*2) then
  167. vehicles[vehicle]["lstate"] = 0
  168. else
  169. vehicles[vehicle]["lstate"] = vehicles[vehicle]["lstate"] + 1
  170. end
  171. end
  172. -- flash light
  173. if (vehicles[vehicle]["fmode"]=="lamp") then
  174. -- lamp mode
  175. local tmp_fstate = vehicles[vehicle]["fstate"]
  176. for key, value in pairs(vehicles[vehicle]["flist"]) do
  177. local R, G, B, A = getMarkerColor( value["m"] )
  178. setMarkerColor(value["m"], R, G, B, (math.sin(tmp_fstate+value["p"])+1.0)*128.0)
  179. end
  180.  
  181. vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] + flash_interval
  182.  
  183. else
  184. -- led mode
  185. local tmp_fstate = vehicles[vehicle]["fstate"]
  186.  
  187. for key, value in pairs(vehicles[vehicle]["flist"]) do
  188. local R, G, B, A = getMarkerColor(value["m"])
  189. -- blinking mode
  190. local tmp_val = tmp_fstate+value["p"]
  191. if (tmp_val>blink_interval) then
  192. tmp_val = tmp_val - blink_interval
  193. end
  194. if ((tmp_val>=0)and(tmp_val<blink_duration))or((tmp_val>=blink_duration+1)and(tmp_val<blink_duration*2+1)) then
  195. setMarkerColor(value["m"], R, G, B, 255)
  196. else
  197. setMarkerColor(value["m"], R, G, B, 0)
  198. end
  199. end
  200. vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] + 1
  201. if (vehicles[vehicle]["fstate"]>blink_interval) then
  202. vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] - blink_interval
  203. end
  204. end
  205. else
  206. -- if vehicle is no more exists
  207. release_vehicle(vehicle)
  208. end
  209. end
  210.  
  211. -- not used anymore
  212. function stroboLightOn()
  213. playerVehicle = getPedOccupiedVehicle ( getLocalPlayer() ) -- get the player's vehicle
  214.  
  215. --setElementData( playerVehicle, "emerlights_enabled", "true" ) -- debug
  216.  
  217. if ( playerVehicle ) then
  218. -- if player is not a driver
  219. if (getLocalPlayer()~=getVehicleOccupant( playerVehicle )) then
  220. --outputChatBox("you're not a driver!")
  221. return
  222. end
  223.  
  224. setStroboLightsOn(playerVehicle, nil)
  225. end
  226. end
  227.  
  228. function isStroboLightsOn (vehicle_id)
  229. if (timers[vehicle_id]) then
  230. return 1
  231. else
  232. return 0
  233. end
  234. end
  235.  
  236. function setStroboLightsOn(vehicle_id, value)
  237. if ( vehicle_id ) then
  238. if (value==nil) then
  239. if (isStroboLightsOn(vehicle_id)==1) then
  240. value = 0
  241. else
  242. value = 1
  243. end;
  244. end;
  245. if (value==0) then
  246. if (timers[vehicle_id]) then
  247. release_vehicle(vehicle_id)
  248. end
  249. end
  250. if (value==1) then
  251. if (timers[vehicle_id]) then
  252. release_vehicle(vehicle_id)
  253. end
  254. -- create strobo timer
  255. timers[vehicle_id] = setTimer ( strobo_state_update, base_freq, 0, vehicle_id )
  256. end
  257. end
  258. end
  259.  
  260. -- only local effect
  261. function enableStroboLightsMode(source, value)
  262. if (value=="0")or(value=="false") then
  263. is_strobo_enabled = false
  264. outputConsole("Stroboscopic mode disabled")
  265. else
  266. if (value=="1")or(value=="true") then
  267. is_strobo_enabled = true
  268. outputConsole("Stroboscopic mode enabled")
  269. else
  270. outputConsole("Usage: strobo 0 or strobo 1 for disable/enable stroboscopic lights mode")
  271. end
  272. end
  273. end
  274. addCommandHandler("strobo", enableStroboLightsMode)
  275.  
  276. -- triggered by server
  277. function setEmerlightsState(value, state)
  278. local player = getPlayerFromName ( value )
  279. local vehicle = getPedOccupiedVehicle(player)
  280. if (vehicle) then
  281. setStroboLightsOn(vehicle, state)
  282. end
  283. end
  284. addEvent("setEmerlights", true)
  285. addEventHandler("setEmerlights", getRootElement(), setEmerlightsState)
  286.  
  287. function requestEmerlights()
  288. playerVehicle = getPedOccupiedVehicle (getLocalPlayer())
  289. if (playerVehicle) then
  290. if (checkForAbility(playerVehicle)) and isInGroup(localPlayer, 2) or isInGroup(localPlayer, 16) or isInGroup(localPlayer, 5) then --(checkForAbility(playerVehicle)) and hasItem(localPlayer, 58) or (checkForAbility(playerVehicle)) and getElementData(getPedOccupiedVehicle(localPlayer), "villogo:modell") == 1 then
  291. triggerServerEvent("requestEmerlightChangeState", getLocalPlayer(), 1-isStroboLightsOn(getPedOccupiedVehicle(getLocalPlayer())))
  292. else
  293.  
  294. end
  295. end
  296.  
  297. end
  298.  
  299. addCommandHandler("addsiren", requestEmerlights)
  300.  
  301. --[[addEvent("onPlayerEmergencyLightStateChange")
  302. function bindKeys(res)
  303. bindKey("p", "down", toggleFlashers)
  304.  
  305. for key, value in ipairs(getElementsByType("vehicle")) do
  306. if isElementStreamedIn(value) then
  307. local flasherState = getElementData(value, "lspd:flashers")
  308. if flasherState and flasherState > 0 then
  309. flashingVehicles[value] = true
  310. end
  311. end
  312. end
  313. end
  314. addEventHandler("onClientResourceStart", getResourceRootElement(), bindKeys)
  315.  
  316. function toggleFlashers()
  317. local theVehicle = getPedOccupiedVehicle(getLocalPlayer())
  318.  
  319. if (theVehicle) then
  320. triggerServerEvent("lspd:toggleFlashers", theVehicle)
  321. end
  322. end
  323.  
  324. function streamIn()
  325. if getElementType( source ) == "vehicle" and getElementData( source, "lspd:flashers" ) then
  326. local flasherState = getElementData(source, "lspd:flashers")
  327. if flasherState and flasherState > 0 then
  328. flashingVehicles[source] = true
  329. end
  330. end
  331. end
  332. addEventHandler("onClientElementStreamIn", getRootElement(), streamIn)
  333.  
  334. function streamOut()
  335. if getElementType( source ) == "vehicle" then
  336. flashingVehicles[source] = nil
  337. end
  338. end
  339. addEventHandler("onClientElementStreamOut", getRootElement(), streamOut)]]
  340.  
  341. function updateSirens( name )
  342. if name == "lspd:flashers" and isElementStreamedIn( source ) and getElementType( source ) == "vehicle" then
  343. local flasherState = getElementData(source, "lspd:flashers")
  344. if flasherState and flasherState > 0 then
  345. flashingVehicles[source] = true
  346. else
  347. flashingVehicles[source] = false
  348. end
  349. end
  350. end
  351. addEventHandler("onClientElementDataChange", getRootElement(), updateSirens)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement