Jump to content

playSound3D solo se oye por el cliente


Recommended Posts

Bueno, últimamente estoy teniendo muchos errores con esta función y la verdad es que ya no tengo ni idea de como solucionarlo. Lo que quiero hacer y por ahora tengo hecho, es un sistema de radios en los vehículos que funcione mediante link de YouTube. El problema que tengo es que el sonido solo lo oyen los creadores del mismo y no el resto de jugadores que estén cerca del vehiculo o del sonido.

Servidor:

  
  
--[[ 
  
    Script: Radio en vehiculos. 
    Autor: Blue Pie 
    Servidor: Las Venturas Roleplay. 
    Version: 1.0 
     
]]-- 
  
local reproduciendo = { } 
  
addCommandHandler ( "radio", 
    function ( player, commandName, link ) 
        local vehicle = getPedOccupiedVehicle ( player ) 
        local link = tostring ( link ) 
        if vehicle then 
            if getElementData ( vehicle, "radio" ) == 1 then 
                if link then 
                    exports.chat:me(player, "enciende la radio del vehiculo") 
                    triggerClientEvent ( player, "onEncenderRadio", player, vehicle, link ) 
                    reproduciendo [ vehicle ] = true 
                else 
                    outputChatBox ( "Syntax: /"..commandName.." [link de youtube]", player, 255, 255, 255 ) 
                end 
            else 
                outputChatBox ( "El vehiculo no tiene radio. Compra uno en la electrónica.", player, 255, 145, 0 ) 
            end 
        end 
    end 
) 
  
addCommandHandler ( "aradio", 
    function ( player, commandName ) 
        local vehicle = getPedOccupiedVehicle ( player ) 
        if vehicle and reproduciendo [ vehicle ] == true then 
            exports.chat:me(player, "apaga la radio del vehiculo") 
            triggerClientEvent ( player, "onApagarRadio", player, vehicle ) 
            reproduciendo [ vehicle ] = false 
        end 
    end 
) 

Cliente:

--[[ 
  
    Script: Radio en vehiculos. 
    Autor: Blue Pie 
    Servidor: Las Venturas Roleplay. 
    Version: 1.0 
     
]]-- 
  
local sonido 
  
function radioOn ( vehicle, link ) 
    local x, y, z = getElementPosition(vehicle) 
    local interior, dimension = getElementInterior ( vehicle ), getElementDimension ( vehicle ) 
    if vehicle and link then 
        if not sonido then 
            sonido = playSound3D("https://www.youtubeinmp3.com/fetch/?video="..link, x, y, z, false) 
            setElementDimension ( sonido, dimension ) 
            setElementInterior ( sonido, interior ) 
            setSoundMaxDistance ( sonido, 4000 ) 
            attachElements ( sonido, vehicle ) 
        else 
            stopSound ( sonido ) 
            sonido = playSound3D("https://www.youtubeinmp3.com/fetch/?video="..link, x, y, z, false) 
            setElementDimension ( sonido, dimension ) 
            setElementInterior ( sonido, interior ) 
            setSoundMaxDistance ( sonido, 4000 )             
            attachElements ( sonido, vehicle ) 
        end 
    end 
end 
addEvent ( "onEncenderRadio", true ) 
addEventHandler ( "onEncenderRadio", getRootElement ( ), radioOn ) 
  
function apagarRadio ( vehicle ) 
    if vehicle then 
        if sonido then 
            stopSound ( sonido ) 
            sonido = nil 
        end 
    end 
end 
addEvent ( "onApagarRadio", true ) 
addEventHandler ( "onApagarRadio", getRootElement ( ), apagarRadio ) 

Link to comment
  
triggerClientEvent ( player, "onEncenderRadio", root, vehicle, link ) 
triggerClientEvent ( player, "onApagarRadio", root, vehicle ) 
  

EDIT: Para que otros jugadores no detengan el sonido de todos al cambiar la música.

local sonido = {} 
  
function radioOn ( vehicle, link ) 
    local x, y, z = getElementPosition(vehicle) 
    local interior, dimension = getElementInterior ( vehicle ), getElementDimension ( vehicle ) 
    if vehicle and link then 
        if not sonido[vehicle] then 
            sonido[vehicle] = playSound3D("https://www.youtubeinmp3.com/fetch/?video="..link, x, y, z, false) 
            setElementDimension ( sonido[vehicle], dimension ) 
            setElementInterior ( sonido[vehicle], interior ) 
            setSoundMaxDistance ( sonido[vehicle], 4000 ) 
            attachElements ( sonido[vehicle], vehicle ) 
        else 
            stopSound ( sonido[vehicle] ) 
            sonido[vehicle] = playSound3D("https://www.youtubeinmp3.com/fetch/?video="..link, x, y, z, false) 
            setElementDimension ( sonido[vehicle], dimension ) 
            setElementInterior ( sonido[vehicle], interior ) 
            setSoundMaxDistance ( sonido[vehicle], 4000 )            
            attachElements ( sonido[vehicle], vehicle ) 
        end 
    end 
end 
addEvent ( "onEncenderRadio", true ) 
addEventHandler ( "onEncenderRadio", getRootElement ( ), radioOn ) 
  
function apagarRadio ( vehicle ) 
    if vehicle then 
        if sonido[vehicle] then 
            stopSound ( sonido[vehicle] ) 
            sonido[vehicle] = nil 
        end 
    end 
end 
addEvent ( "onApagarRadio", true ) 
addEventHandler ( "onApagarRadio", getRootElement ( ), apagarRadio ) 

Link to comment

Vale, el problema que tengo ahora es que quiero hacer un trigger de cliente a cliente y me da nil value al poner root como envio a cliente. ¿Alguna solución?

He intentado así:

triggerClientEvent ( root, "iniciarRadio", root, attachedElement, link ) 

Y así también, pero ninguna va:

triggerClientEvent (  "iniciarRadio", root, attachedElement ) 

Me envían nil value ambos métodos.

Link to comment
Gracias @Tomas. Lo único que cambie fue el argumento 1 de los triggers por root para que todos lo escucharan. No sé si es correcto o no.

De nada? :shock:

Si es de cliente a cliente o de servidor a servidor se usa triggerEvent, si es de servidor a cliente triggerClientEvent y si es de cliente a servidor triggerServerEvent.

Link to comment
Gracias @Tomas. Lo único que cambie fue el argumento 1 de los triggers por root para que todos lo escucharan. No sé si es correcto o no.

De nada @CiBeR, el primer argumento es el elemento que ejecuta el triggeo, luego nombre del evento y luego el/los elementos que definiran el source del evento, y lo demas argumentos adicionales.

Link to comment
Gracias @Tomas. Lo único que cambie fue el argumento 1 de los triggers por root para que todos lo escucharan. No sé si es correcto o no.

De nada @CiBeR, el primer argumento es el elemento que ejecuta el triggeo, luego nombre del evento y luego el/los elementos que definiran el source del evento, y lo demas argumentos adicionales.

Épico :lol:

Link to comment
  • Recently Browsing   0 members

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