Jump to content

Bad argument @ 'stopSound' [Expected sound at argument 1, got nil]


Razor20

Recommended Posts

[2022-06-11 15:18:43] WARNING: radio\cVehRadio3D.lua:67: Bad argument @ 'stopSound' [Expected sound at argument 1, got nil]

```
client:
 

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 = "Aperte 'R' para ligar a Radio."
            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.)
            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





Server:
 

g_VehicleList = {}

local radioStreams = 0
local defaultRadio = "http://173.208.166.12:8056/"
local defaultRadio = "http://173.208.166.12:8056/"

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 = 4.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("Voce nao pode mudar a radio.", 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 = 1.0
        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: [#54FF9FLIGADO#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: [#54FF9FDESLIGADO#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 = 1.0
            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)
 

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