Jump to content

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


Razor20

Recommended Posts

Posted

[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)
 

Posted

Even if you posted the error in the title, it would be ok to tell the people more informations about this issue. They will understand exactly what is wrong there.

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