Jump to content

Rádio por ID do veículo.


Recommended Posts

Boa tarde, queria fazer com que esse script funcionasse apenas em alguns veículos.

g_VehicleList = {522}

local radioStreams = 0
local defaultRadio = "https://live.hunter.fm/pop_high"
local defaultRadio = "https://live.hunter.fm/pop_high"

addEventHandler("onResourceStart", resourceRoot,
	function()	
		for i,veh in ipairs(getElementsByType("vehicle")) do
			g_VehicleList[veh] = { }
			g_VehicleList[veh].radio = false
			g_VehicleList[veh].radioStation = defaultRadio
			g_VehicleList[veh].volume = 1.0
		end
	end
)

addEventHandler("onPlayerJoin", root,
	function()		
		for i,veh in ipairs(getElementsByType("vehicle")) do
			if g_VehicleList[veh] ~= nil then
				if g_VehicleList[veh].radio == true then
					triggerClientEvent(source, "onServerToggleRadio", root, true, g_VehicleList[veh].radioStation, veh, g_VehicleList[veh].volume)
				end
			end
		end
	end
)

addEventHandler("onVehicleExplode", root,
	function()
		if g_VehicleList[source] ~= nil then
			if g_VehicleList[source].radio == true then
				triggerClientEvent("onServerToggleRadio", root, false, nil, source)
				g_VehicleList[source].radio = false
				destroyElement(g_VehicleList[source].radioMarker)
				killTimer(g_VehicleList[source].idleTimer)
				if radioStreams ~= 0 then
					radioStreams = radioStreams - 1
				end
			end
		end
	end
)

addEventHandler("onElementDestroy", root,
	function()
		if g_VehicleList[source] ~= nil then
			if g_VehicleList[source].radio == true then
				triggerClientEvent("onServerToggleRadio", root, false, nil, source)
				g_VehicleList[source].radio = false
				destroyElement(g_VehicleList[source].radioMarker)
				killTimer(g_VehicleList[source].idleTimer)
				if radioStreams ~= 0 then
					radioStreams = radioStreams - 1
				end
			end
		end
	end
)

addEvent("onPlayerToggleRadio", true)
addEventHandler("onPlayerToggleRadio", root,
	function()
		if source and getElementType(source) == "player" then
			toggleRadio(source)
		end
	end
)

function toggleRadio(player)
	local veh = getPedOccupiedVehicle(player)
	if veh then
		local occupants = getVehicleOccupants(veh)
		local seats = getVehicleMaxPassengers(veh)
		
		local playerSeat = getPedOccupiedVehicleSeat(player)
		if playerSeat ~= 0 and playerSeat ~= 1 then
			outputChatBox("INFO: Você nao pode mudar a rádio.", player, 255, 255, 255)
			return
		end

		if g_VehicleList[veh] == nil then
			g_VehicleList[veh] = { }
			g_VehicleList[veh].radio = false
			g_VehicleList[veh].radioStation = defaultRadio
			g_VehicleList[veh].volume = 0.6
		end
		
		if g_VehicleList[veh].radio == false then
			if not get("toggleAntifloodTick") or not get("streamLimit") or not get("radioEnabledIdleTime") then return end

			local settingToggleAntifloodTick = get("toggleAntifloodTick")
			local settingStreamLimit = get("streamLimit")
			local idleTime = get("radioEnabledIdleTime")
			
			if g_VehicleList[veh].lastTick and (getTickCount() - g_VehicleList[veh].lastTick) <= settingToggleAntifloodTick then return end

			if radioStreams >= settingStreamLimit then
				outputChatBox("Limite de ouvintes chegou ao maximo (" .. settingStreamLimit .. ")", player, 255, 255, 255)
				return
			end
			
			local x, y, z = getElementPosition(veh)
			g_VehicleList[veh].radio = true
			g_VehicleList[veh].lastTick = getTickCount()
			g_VehicleList[veh].turnedOnBy = getPlayerName(player)
			--g_VehicleList[veh].radioMarker = createMarker(x, y, z, "corona", 0.05, 255, 0, 0)
			--attachElements(g_VehicleList[veh].radioMarker, veh)
			g_VehicleList[veh].idleTimer = setTimer(radioIdleTimer, idleTime, 0, veh)
			
			radioStreams = radioStreams + 1
			outputServerLog(getPlayerName(player) .. " Ligou o rádio em seu veículo (streams: " .. radioStreams .. ")")

			for seat = 0, seats do
				local occupant = occupants[seat]
				if occupant and getElementType(occupant) == "player" then
					triggerClientEvent("onServerToggleRadio", root, true, g_VehicleList[veh].radioStation, veh, g_VehicleList[veh].volume)
					
					local r, g, b = getPlayerNametagColor(player)
					colorHex = string.format("%02X%02X%02X", r, g, b)
					outputChatBox("#" .. colorHex .. "" .. getPlayerName(player) .. " #696969Rádio: [#00ff00ONLINE#696969]", occupant, 0, 0, 0, true)
				end
			end
		else		
			g_VehicleList[veh].radio = false
			--destroyElement(g_VehicleList[veh].radioMarker)
			killTimer(g_VehicleList[veh].idleTimer)
			
			radioStreams = radioStreams - 1
			outputServerLog(getPlayerName(player) .. " desligou o rádio em seu veículo (streams: " .. radioStreams .. ")")
			
			for seat = 0, seats do
				local occupant = occupants[seat]
				if occupant and getElementType(occupant) == "player" then
					triggerClientEvent("onServerToggleRadio", root, false, nil, veh, g_VehicleList[veh].volume)
					
					local r, g, b = getPlayerNametagColor(player)
					colorHex = string.format("%02X%02X%02X", r, g, b)
					outputChatBox("#" .. colorHex .. "" .. getPlayerName(player) .. " #696969Rádio: [#ff0000OFFLINE#696969]", occupant, 0, 0, 0, true)
				end
			end
		end
	end
end

function radioIdleTimer(veh)
	if not get("radioIdlePlayerDistanceCheck") then return end
	local settingDist = get("radioIdlePlayerDistanceCheck")
	
	if veh then		
		if g_VehicleList[veh] ~= nil then
			if g_VehicleList[veh].radio == true then
				local playerInRange = false

				local vx, vy, vz = getElementPosition(veh)
				for i,player in ipairs(getElementsByType("player")) do
					local px, py, pz = getElementPosition(player)
					local distance = getDistanceBetweenPoints3D(vx, vy, vz, px, py, pz)
					if distance ~= false and distance < settingDist then
						playerInRange = true
					end
				end
				
				if playerInRange == false then
					triggerClientEvent("onServerToggleRadio", root, false, nil, veh)
					g_VehicleList[veh].radio = false
					destroyElement(g_VehicleList[veh].radioMarker)
					killTimer(g_VehicleList[veh].idleTimer)
					if radioStreams ~= 0 then
						radioStreams = radioStreams - 1
					end
				
					outputServerLog("An " .. getVehicleName(veh) .. "'s radio has been idled (streams: " .. radioStreams .. ")")
				end
			end
		end
	end
end

addEvent("onPlayerRadioVolumeChange", true)
addEventHandler("onPlayerRadioVolumeChange", root,
	function(currentVol, volumeUp)
		local veh = getPedOccupiedVehicle(source)
		if veh then
			local playerSeat = getPedOccupiedVehicleSeat(source)
			if playerSeat == 0 or playerSeat == 1 then
				if volumeUp == true then
					g_VehicleList[veh].volume = currentVol + 0.05
					if g_VehicleList[veh].volume >= 1.00 then
						g_VehicleList[veh].volume = 1.00
					end
				else
					g_VehicleList[veh].volume = currentVol - 0.05
					if g_VehicleList[veh].volume <= 0.00 then
						g_VehicleList[veh].volume = 0.00
					end
				end
				triggerClientEvent("onServerVolumeChangeAccept", root, veh, g_VehicleList[veh].volume)
			end
		end
	end
)

function cmdChangeRadioURL(source, commandName, url)
	if not url then
		outputChatBox("Usage: /setradio newurl", source, 255, 255, 255)
		return
	end

	local veh = getPedOccupiedVehicle(source)
	if veh then
		local occupants = getVehicleOccupants(veh)
		local seats = getVehicleMaxPassengers(veh)
		
		if g_VehicleList[veh] == nil then
			local x, y, z = getElementPosition(veh)
			g_VehicleList[veh] = { }
			g_VehicleList[veh].radio = true
			g_VehicleList[veh].lastTick = getTickCount()
			g_VehicleList[veh].radioStation = defaultRadio
			g_VehicleList[veh].volume = 0.6
			g_VehicleList[veh].radioMarker = createMarker(x, y, z, "corona", 0.1, 255, 0, 0)
			attachElements(g_VehicleList[veh].radioMarker, veh)
			g_VehicleList[veh].idleTimer = setTimer(radioIdleTimer, idleTime, 0, veh)
		end

		local playerSeat = getPedOccupiedVehicleSeat(source)
		if playerSeat ~= 0 and playerSeat ~= 1 then
			outputChatBox("Você não pode mudar a estação de rádio.", source, 255, 255, 255)
			return
		end
		
		for seat = 0, seats do
			local occupant = occupants[seat]
			if occupant and getElementType(occupant) == "player" then
				g_VehicleList[veh].radioStation = url
				g_VehicleList[veh].changedBy = getPlayerName(source)
				
				if g_VehicleList[veh].radio == true then
					triggerClientEvent("onServerRadioURLChange", root, g_VehicleList[veh].radioStation, veh, g_VehicleList[veh].volume)
				end
				
				local r, g, b = getPlayerNametagColor(source)
				colorHex = string.format("%02X%02X%02X", r, g, b)
				outputChatBox("#" .. colorHex .. "" .. getPlayerName(source) .. " #FFFFFFMudou a estação de rádio.", occupant, 0, 0, 0, true)
				outputConsole(getPlayerName(source) .. " Mudou a estação de rádio em seu veículo: " .. url, occupant)
			end
		end
		outputServerLog(getPlayerName(source) .. " Mudou a estação de rádio em seu veículo: " .. url)
	end
end

function cmdDumpVehRadioInfo(source, commandName)
	for i,veh in ipairs(getElementsByType("vehicle")) do
		if g_VehicleList[veh] ~= nil then
			if g_VehicleList[veh].radio == true then
				local strOut
				if g_VehicleList[veh].changedBy ~= nil then
					strOut = "Vehicle: " .. getVehicleName(veh) .. ", URL = " .. g_VehicleList[veh].radioStation .. ", Ligada ao: " .. g_VehicleList[veh].turnedOnBy .. ", URL changed by: " .. g_VehicleList[veh].changedBy
				else
					strOut = "Vehicle: " .. getVehicleName(veh) .. ", URL = " .. g_VehicleList[veh].radioStation .. ", Ligada ao: " .. g_VehicleList[veh].turnedOnBy
				end
				
				if getElementType(source) == "console" then
					outputServerLog(strOut)
				elseif getElementType(source) == "player" then
					outputChatBox(strOut, source, 255, 255, 255)
				end
			end
		end
	end
end

addCommandHandler("setradio", cmdChangeRadioURL)
addCommandHandler("dumpradio", cmdDumpVehRadioInfo)
radioSound = { }

addEventHandler("onClientResourceStart", resourceRoot,
	function()
		bindKey("r", "down", clientToggleRadio)
		bindKey("mouse_wheel_up", "down", volumeUp)
		bindKey("mouse_wheel_down", "down", volumeDown)
	end
)

addEventHandler("onClientVehicleEnter", root,
	function(thePlayer, seat)
		if thePlayer == getLocalPlayer() then
			local msg = "Pressione R para ligar a radio. Use a roda do mouse para alterar o volume."
			if radioSound[source] == nil then
				outputChatBox(msg, 124, 252, 0)
			else
				if radioSound[source].soundElement == nil then
					outputChatBox(msg, 124, 252, 0)
				end
			end
		end
	end
)

addEventHandler("onClientSoundStream", root,
	function(success, length, streamName)
		if streamName then
			local veh = getPedOccupiedVehicle(getLocalPlayer())
			if veh then
				if radioSound[veh] == nil then return end
				if radioSound[veh].soundElement == source then
					outputChatBox("#696969Rádio: #22AA22 " .. streamName, 0, 0, 0, true)
				end
			end
		end
	end
)
addEventHandler("onClientSoundChangedMeta", root,
	function(streamTitle)
		if streamTitle then
			local veh = getPedOccupiedVehicle(getLocalPlayer())
			if veh then
				if radioSound[veh] == nil then return end
				if radioSound[veh].soundElement == source then
					outputChatBox("#696969Música: #AA2222 " .. streamTitle, 0, 0, 0, true)
				end
			end
		end
	end
)

addEvent("onServerToggleRadio", true)
addEventHandler("onServerToggleRadio", getLocalPlayer(), 
	function(toggle, url, veh, volume)	
		if not isElement(veh) then
			if radioSound[veh] ~= nil then
				stopSound(radioSound[veh].soundElement)
				radioSound[veh].soundElement = nil
			end
			return
		end
		
		if toggle == true then
			local x, y, z = getElementPosition(veh)
			if radioSound[veh] ~= nil then
				stopSound(radioSound[veh].soundElement)

				local sound = playSound3D(url, x, y, z)
				if volume ~= nil then
					setSoundVolume(sound, volume)
				end
				setSoundMinDistance(sound, 6.0)
				setSoundMaxDistance(sound, 75.0)
				attachElements(sound, veh)
				
				radioSound[veh] = { }
				radioSound[veh].soundElement = sound
			else
				local sound = playSound3D(url, x, y, z)
				if volume ~= nil then
					setSoundVolume(sound, volume)
				end
				setSoundMinDistance(sound, 6.0)
				setSoundMaxDistance(sound, 75.0)
				attachElements(sound, veh)
				
				radioSound[veh] = { }
				radioSound[veh].soundElement = sound
			end
		else
			if radioSound[veh] ~= nil then
				stopSound(radioSound[veh].soundElement)
				radioSound[veh].soundElement = nil
			end
		end
	end
)

addEvent("onServerRadioURLChange", true)
addEventHandler("onServerRadioURLChange", getLocalPlayer(), 
	function(newurl, veh, volume)
		if radioSound[veh] ~= nil then
			stopSound(radioSound[veh].soundElement)
		
			local x, y, z = getElementPosition(veh)
			local sound = playSound3D(newurl, x, y, z)
			if volume ~= nil then
				setSoundVolume(sound, volume)
			end
			setSoundMinDistance(radioSound, 6.0)
			setSoundMaxDistance(radioSound, 75.0)
			attachElements(sound, veh)
		
			radioSound[veh] = { }
			radioSound[veh].soundElement = sound
		end
	end
)

addEvent("onServerVolumeChangeAccept", true)
addEventHandler("onServerVolumeChangeAccept", getLocalPlayer(), 
	function(veh, newVolume)
		if veh then
			if radioSound[veh] ~= nil then
				setSoundVolume(radioSound[veh].soundElement, newVolume)
			end
		end
	end
)

function clientToggleRadio()
	triggerServerEvent("onPlayerToggleRadio", getLocalPlayer())
end

function volumeUp()
	local veh = getPedOccupiedVehicle(getLocalPlayer())
	if veh then
		if radioSound[veh] ~= nil then
			local volume = getSoundVolume(radioSound[veh].soundElement)
			if volume ~= false then
				triggerServerEvent("onPlayerRadioVolumeChange", getLocalPlayer(), volume, true)
			end
		end
	end
end

function volumeDown()
	local veh = getPedOccupiedVehicle(getLocalPlayer())
	if veh then
		if radioSound[veh] ~= nil then
			local volume = getSoundVolume(radioSound[veh].soundElement)
			if volume ~= false then
				triggerServerEvent("onPlayerRadioVolumeChange", getLocalPlayer(), volume, false)
			end
		end
	end
end

 

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...