Jump to content

Car light bugged


Dimos7

Recommended Posts

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?

Edited by Dimos7
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...