addEventHandler("onPlayerJoin", root,
function()
bindKey(source,"[", "down", leftIndicator)
bindKey(source, "]", "down", rightIndicator)
bindKey(source, "=", "down", alert)
end)
addEventHandler("onResourceStart", resourceRoot,
function()
leftIndicatorStatus = {}
rightIndicatorStatus = {}
alertStatus = {}
for i, v in ipairs(getElementsByType("player")) do
local playerName = getPlayerName(v)
bindKey(v, "[", "down", leftIndicator)
bindKey(v, "]", "down", rightIndicator)
bindKey(v, "=", "down", alert)
leftIndicatorStatus[playerName] = false
rightIndicatorStatus[playerName] = false
alertStatus[playerName] = false
end
end)
function leftIndicator(thePlayer)
local playerName = getPlayerName(thePlayer)
if leftIndicatorStatus[playerName] == false then
if isPedInVehicle(thePlayer) then
car = getPedOccupiedVehicle(thePlayer)
if getPedOccupiedVehicleSeat(thePlayer) == 0 then
leftIndicatorStatus[playerName] = true
if isTimer (IdicatiorTimerRight) then
killTimer(IdicatiorTimerRight)
rightIndicatorStatus[playerName] = false
setVehicleLightState(car, 1, 0)
setVehicleLightState(car, 2, 0)
end
IdicatiorTimerLeft = setTimer(
function()
setVehicleOverrideLights(car, 2)
if getVehicleLightState(car, 0) == 0 then
setVehicleLightState(car, 0, 1)
setVehicleLightState(car, 3, 1)
else
setVehicleLightState(car, 0, 0)
setVehicleLightState(car, 3, 0)
end
end, 500, 0)
end
end
else
if isTimer(IdicatiorTimerLeft) then
killTimer(IdicatiorTimerLeft)
leftIndicatorStatus[playerName] = false
setVehicleLightState(car, 0, 0)
setVehicleLightState(car, 3, 0)
end
end
end
function rightIndicator(thePlayer)
local playerName = getPlayerName(thePlayer)
if rightIndicatorStatus[playerName] == false then
if isPedInVehicle(thePlayer) then
car = getPedOccupiedVehicle(thePlayer)
if getPedOccupiedVehicleSeat(thePlayer) == 0 then
rightIndicatorStatus[playerName] = true
if isTimer(IdicatiorTimerLeft) then
killTimer(IdicatiorTimerLeft)
leftIndicatorStatus[playerName] = false
setVehicleLightState(car, 0, 0)
setVehicleLightState(car, 3, 0)
end
IdicatiorTimerRight = setTimer(
function()
setVehicleOverrideLights(car, 2)
if getVehicleLightState(car, 1) == 0 then
setVehicleLightState(car, 1, 1)
setVehicleLightState(car, 2, 1)
else
setVehicleLightState(car, 1, 0)
setVehicleLightState(car, 2, 0)
end
end, 500, 0)
end
end
else
if isTimer(IdicatiorTimerRight) then
killTimer(IdicatiorTimerRight)
rightIndicatorStatus[playerName] = false
setVehicleLightState(car, 1, 0)
setVehicleLightState(car, 2, 0)
end
end
end
function alert(thePlayer)
local playerName = getPlayerName(thePlayer)
if alertStatus[playerName] == false then
if isPedInVehicle(thePlayer) then
car = getPedOccupiedVehicle(thePlayer)
if getPedOccupiedVehicleSeat(thePlayer) == 0 then
alertStatus[playerName] = true
alertTimer = setTimer(
function()
setVehicleOverrideLights(car, 2)
if getVehicleLightState(car, 0) == 0 and getVehicleLightState(car, 1) == 0 then
setVehicleLightState(car, 0, 1)
setVehicleLightState(car, 1, 1)
setVehicleLightState(car, 2, 1)
setVehicleLightState(car, 3, 1)
else
setVehicleLightState(car, 0, 0)
setVehicleLightState(car, 1, 0)
setVehicleLightState(car, 2, 0)
setVehicleLightState(car, 3, 0)
end
end, 500, 0)
end
end
else
if isTimer(alerTimer) then
killTimer(alerTimer)
alerStatus[playerName] = false
setVehicleLightState(car, 0, 0)
setVehicleLightState(car, 1, 0)
setVehicleLightState(car, 2, 0)
setVehicleLightState(car, 3, 0)
end
end
end
-- Emergency Lights resource by vovo4ka
-- please, do not remove copyright
local strobo_interval = 5 -- strobo light freq. 10 = 0.5 sec
local is_strobo_enabled = true -- enable/disable stroboscopic lights mode
-- lamps
local flash_interval = 0.3 -- flash freq
-- led blink mode
local blink_interval = 15 -- blink interval
local blink_duration = 2 -- 1..blink_interval
-- Node: If vehicleID what you want to change is not present here, you may add it manually
-- There are custom lights count and position for each vehicle is available
-- What is phase offset. I'm newbie in english and its hard to explain ;) You can read more about on http://en.wikipedia.org/wiki/Phase_(waves)
-- All you need to know about phase_offset: 0 and 10 values will have opposite intensity (i.e. light with 0 will be on and 10 will be off and vice versa)
--
-- dont read below, if youre humanities ;)
--
-- For each light source there are light intensity calculation performed at each time.
-- There are two lights type are available for vehicles:
-- 1.
-- Usually, light reflector is rotating and light intensity is proportional to visible part of lamp.
-- So, light intensity is approximated by simple model:
-- intensity(t, i) = 256*sin (t+PhaseOffset_i)
-- where t - is model time, i - light source id
-- 2.
-- For LED blinking there is simpler model:
-- blink 2 times at time moment 0
--
-- So, PhaseOffset - is time difference between triggering lights
local car_lights_table = {
-- vehicle ID, ["mode"]="led" or "lamp" , [i] = { light offset, light color, light size, phase offset (from [0;10]) }
-- police car with leds
[596] = {["mode"]="led", [1]={["pos"]={-0.3, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={0.3, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=10.0},
},
[597] = {["mode"]="led", [1]={["pos"]={-0.3, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={0.3, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=10.0}, [6]={["pos"]={0.7, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=10.0}
},
-- rancher
[599] = {["mode"]="led", [1]={["pos"]={-0.4, -0.5, 1.2}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={0.4, -0.5, 1.2}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=10.0},
},
-- old police car with lamps
[598] = {["mode"]="lamp", [1]={["pos"]={-0.5, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={0.5, -0.35, 0.9}, ["color"]={0,0,0}, ["size"]=0.25, ["phase"]=10.0}
},
-- ambulance
[416] = {["mode"]="led",
[1]={["pos"]={-0.1, 0.9, 1.35}, ["color"]={255,255,255}, ["size"]=0.5, ["phase"]=10.0},
[2]={["pos"]={-0.5, 0.9, 1.35}, ["color"]={255,0,0}, ["size"]=0.35, ["phase"]=0.0}, [3]={["pos"]={0.5, 0.9, 1.35}, ["color"]={255,0,0}, ["size"]=0.35, ["phase"]=0.0},
[4]={["pos"]={-1, -3.5, 1.5}, ["color"]={255,0,0}, ["size"]=0.4, ["phase"]=5.0}, [5]={["pos"]={1, -3.5, 1.5}, ["color"]={255,0,0}, ["size"]=0.4, ["phase"]=5.0}
},
-- fire truck
[544] = {["mode"]="lamp", [1]={["pos"]={-0.95, 2.75, 1.45}, ["color"]={255,128,0}, ["size"]=0.35, ["phase"]=6.0}, [2]={["pos"]={0.95, 2.75, 1.45}, ["color"]={255,128,0}, ["size"]=0.35, ["phase"]=10.0}
},
-- rancher
[490] = {["mode"]="lamp", [1]={["pos"]={-0.5, 0.2, 1.15}, ["color"]={0,0,255}, ["size"]=0.35, ["phase"]=10.0}},
-- enforcement
[427]={["mode"]="led", [1]={["pos"]={-0.8, 3.2, -0.1}, ["color"]={255, 0, 0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={0.8, 3.2, -0.1}, ["color"]={0, 0, 255}, ["size"]=0.25, ["phase"]=10.0}}
-- since 0.8 there are no default lights position, because only emergency and pre-defined vehicles can use lights
--["default"] = {["mode"]="lamp", [1]={["pos"]={0.5, 0, 0.8}, ["color"]={255,0,0}, ["size"]=0.25, ["phase"]=0.0}, [2]={["pos"]={-0.5, 0, 0.8}, ["color"]={0,0,255}, ["size"]=0.25, ["phase"]=10.0}}
}
-- do not modify --------------------------------------------
local vehicles = {}
local timers = {}
local base_freq = 50 -- freq of timer for light change
-------------------------------------------------------------
function release_vehicle(vehicle)
if (isElement(vehicle)) then
if (is_strobo_enabled) then
setVehicleOverrideLights ( vehicle, 0)
setVehicleLightState ( vehicle, 0, 1)
setVehicleLightState ( vehicle, 1, 1)
setVehicleLightState ( vehicle, 2, 1)
setVehicleLightState ( vehicle, 3, 1)
end
end
if (vehicles[vehicle]~=nil) then
-- release the markers
for key, value in pairs(vehicles[vehicle]["flist"]) do
destroyElement (value["m"])
end
vehicles[vehicle] = nil
end
if (timers[vehicle]~=nil) then
-- kill the strobo timer
killTimer(timers[vehicle])
timers[vehicle] = nil
if (isElement(vehicle)) then
if (getElementData( vehicle, "emerlights_source")==getPlayerName(getLocalPlayer())) then
triggerEvent ( "onPlayerEmergencyLightStateChange", getRootElement(), 0 )
end
end
end
end
function checkForAbility(vehicle)
local veh_model = getElementModel ( vehicle )
if (car_lights_table[veh_model]==nil)or(getElementData( vehicle, "emerlights_enabled" )=="false") then
return false
end
return true
end
function strobo_state_update (vehicle)
-- check for valid vehicle
if (isElement(vehicle)) then
if (vehicles[vehicle]==nil) then
-- check for disallowing to use lights
-- its enabled by default
if (checkForAbility(vehicle)==false) then
release_vehicle(vehicle)
return
end
local veh_model = getElementModel ( vehicle )
--if (car_lights_table[veh_model]==nil) then
--veh_model = "default"
--end
local occupant = getVehicleOccupant( vehicle, 0)
if (getElementType(occupant)=="player") then -- peds also can use emerlights
local src = getPlayerName(occupant)
setElementData( vehicle, "emerlights_source", src, false)
if (src==getPlayerName(getLocalPlayer())) then
triggerEvent ( "onPlayerEmergencyLightStateChange", getRootElement(), 1 )
end
end
-- init state variable
vehicles[vehicle] = {}
vehicles[vehicle]["lstate"] = 0 -- strobo lights state
vehicles[vehicle]["fstate"] = 0 -- flash light state
vehicles[vehicle]["flist"] = {} -- flash lights list (marker ids)
-- create flash lights
local mode = car_lights_table[veh_model]["mode"]
if (mode==nil) then
mode = "lamp"
end
local coeff = 0
if (mode=="lamp") then
coeff = 3.141592654/10.0
else
coeff = blink_interval/20.0
end
vehicles[vehicle]["fmode"] = mode
for light_id, light_desc in pairs(car_lights_table[veh_model]) do
if (light_id~="mode") then
vehicles[vehicle]["flist"][light_id] = {}
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)
vehicles[vehicle]["flist"][light_id]["p"] = light_desc["phase"]*coeff
attachElements ( vehicles[vehicle]["flist"][light_id]["m"], vehicle, light_desc["pos"][1], light_desc["pos"][2], light_desc["pos"][3] )
end
end
end
-- strobo light
if (is_strobo_enabled) then
setVehicleOverrideLights ( vehicle, 2)
if (vehicles[vehicle]["lstate"]<strobo_interval) then
setVehicleLightState ( vehicle, 0, 1 )
setVehicleLightState ( vehicle, 1, 0 )
setVehicleLightState ( vehicle, 2, 0 )
setVehicleLightState ( vehicle, 3, 1 )
else
setVehicleLightState ( vehicle, 0, 0 )
setVehicleLightState ( vehicle, 1, 1 )
setVehicleLightState ( vehicle, 2, 1 )
setVehicleLightState ( vehicle, 3, 0 )
end
if (vehicles[vehicle]["lstate"]>=strobo_interval*2) then
vehicles[vehicle]["lstate"] = 0
else
vehicles[vehicle]["lstate"] = vehicles[vehicle]["lstate"] + 1
end
end
-- flash light
if (vehicles[vehicle]["fmode"]=="lamp") then
-- lamp mode
local tmp_fstate = vehicles[vehicle]["fstate"]
for key, value in pairs(vehicles[vehicle]["flist"]) do
local R, G, B, A = getMarkerColor( value["m"] )
setMarkerColor(value["m"], R, G, B, (math.sin(tmp_fstate+value["p"])+1.0)*128.0)
end
vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] + flash_interval
else
-- led mode
local tmp_fstate = vehicles[vehicle]["fstate"]
for key, value in pairs(vehicles[vehicle]["flist"]) do
local R, G, B, A = getMarkerColor(value["m"])
-- blinking mode
local tmp_val = tmp_fstate+value["p"]
if (tmp_val>blink_interval) then
tmp_val = tmp_val - blink_interval
end
if ((tmp_val>=0)and(tmp_val<blink_duration))or((tmp_val>=blink_duration+1)and(tmp_val<blink_duration*2+1)) then
setMarkerColor(value["m"], R, G, B, 255)
else
setMarkerColor(value["m"], R, G, B, 0)
end
end
vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] + 1
if (vehicles[vehicle]["fstate"]>blink_interval) then
vehicles[vehicle]["fstate"] = vehicles[vehicle]["fstate"] - blink_interval
end
end
else
-- if vehicle is no more exists
release_vehicle(vehicle)
end
end
-- not used anymore
function stroboLightOn()
playerVehicle = getPedOccupiedVehicle ( getLocalPlayer() ) -- get the player's vehicle
--setElementData( playerVehicle, "emerlights_enabled", "true" ) -- debug
if ( playerVehicle ) then
-- if player is not a driver
if (getLocalPlayer()~=getVehicleOccupant( playerVehicle )) then
--outputChatBox("you're not a driver!")
return
end
setStroboLightsOn(playerVehicle, nil)
end
end
function isStroboLightsOn (vehicle_id)
if (timers[vehicle_id]) then
return 1
else
return 0
end
end
function setStroboLightsOn(vehicle_id, value)
if ( vehicle_id ) then
if (value==nil) then
if (isStroboLightsOn(vehicle_id)==1) then
value = 0
else
value = 1
end;
end;
if (value==0) then
if (timers[vehicle_id]) then
release_vehicle(vehicle_id)
end
end
if (value==1) then
if (timers[vehicle_id]) then
release_vehicle(vehicle_id)
end
-- create strobo timer
timers[vehicle_id] = setTimer ( strobo_state_update, base_freq, 0, vehicle_id )
end
end
end
-- only local effect
function enableStroboLightsMode(source, value)
if (value=="0")or(value=="false") then
is_strobo_enabled = false
outputConsole("Stroboscopic mode disabled")
else
if (value=="1")or(value=="true") then
is_strobo_enabled = true
outputConsole("Stroboscopic mode enabled")
else
outputConsole("Usage: strobo 0 or strobo 1 for disable/enable stroboscopic lights mode")
end
end
end
addCommandHandler("strobo", enableStroboLightsMode)
-- triggered by server
function setEmerlightsState(value, state)
local player = getPlayerFromName ( value )
local vehicle = getPedOccupiedVehicle(player)
if (vehicle) then
setStroboLightsOn(vehicle, state)
end
end
addEvent("setEmerlights", true)
addEventHandler("setEmerlights", getRootElement(), setEmerlightsState)
function requestEmerlights()
-- check for driver
playerVehicle = getPedOccupiedVehicle (getLocalPlayer()) -- get the player's vehicle
if (playerVehicle) then
-- if player is not a driver
if (getLocalPlayer()~=getVehicleOccupant( playerVehicle )) then
--outputChatBox("you're not a driver!")
return
end
if (checkForAbility(playerVehicle)) then
-- sync
triggerServerEvent("requestEmerlightChangeState", getLocalPlayer(), 1-isStroboLightsOn(getPedOccupiedVehicle(getLocalPlayer())))
else
-- not able to use lights for this vehicle
--outputChatBox("unknown car!")
end
end
end
addCommandHandler("Strobo Light On", requestEmerlights)--stroboLightOn)
bindKey("j", "down", "Strobo Light On")
addEvent("onPlayerEmergencyLightStateChange")
function toggleLights(thePlayer)
if isPedInVehicle(thePlayer) then
car = getPedOccupiedVehicle(thePlayer)
x, y, z = getElementPosition(thePlayer)
for i, v in ipairs(getElementsByType("player")) do
px, py, pz = getElementPosition(v)
distance = getDistanceBetweenPoints3D(x, y, z, px, py, pz)
if distance <= chat_range then
if getPedOccupiedVehicleSeat(thePlayer) == 0 then
if getVehicleOverrideLights(car) == 1 then
setVehicleOverrideLights(car, 2)
outputChatBox(getPlayerName(thePlayer).. " has turn lights on.", v, 255, 0, 255)
elseif getVehicleOverrideLights(car) == 2 then
setVehicleOverrideLights(car, 1)
outputChatBox(getPlayerName(thePlayer).. "has turns lights off.", v, 255, 0, 255)
end
else
outputChatBox("You must be on driver seat!", thePlayer, 255, 0, 0)
end
end
end
else
outputChatBox("You must be inside a vehicle!", thePlayer, 255, 0, 0)
end
end
addCommandHandler("lights", toggleLights)
weh use emegerncy light j two time or indicator my light command bugged any help?