Jump to content

Duda con recurso voice


-Rex-

Recommended Posts

Posted

Se puede hacer con el recurso Voice, que solo escuchen lo que habla X jugador si estan cerca de el?

Por ejemplo hablo por el micro y lo que yo hablo quiero que solo lo escuchen las personas que estan cerca mio, y las que no no.

¿Como lo podría hacer?

Posted

Observando por buen rato el recurso voice, Hice esto, Pero como no tengo con quien testear, Funcionara asi?

--- 
addEventHandler ( "onClientPlayerVoiceStart", root, 
    function() 
        if isPlayerVoiceMuted ( source ) then 
            cancelEvent() 
            return 
        end 
  
        local x,y,z = getElementPosition( getLocalPlayer(  ) ) 
        local x2,y2,z2 = getElementPosition( source ) 
        if getDistanceBetweenPoints3D( x, y, z, x2, y2, z2 ) > 20 then 
            cancelEvent() 
            return 
        end 
  
        voicePlayers[source] = true 
    end 
) 

Posted (edited)
Ami me da que no, ya que emplear "source" se refiere al mismo "localPlayer".

Entonces como se haría desde server si de?

Edited by Guest
Posted

No es necesario usar el recurso voice, esto debería funcionar:

Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(a, b) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

Posted
No es necesario usar el recurso voice, esto debería funcionar:

Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(a, b) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

No es mas eficiente de este modo xD?

        for i, player in ipairs( getElementsByType("player") ) do 
            local otherplayer = getElementsByType("player")[i]; 
            if ( player ~= otherplayer and estaCercaDe(a, b) ) then 
                if ( not JugadoresCercanos[player] ) then 
                    JugadoresCercanos[player] = {}; 
                end 
                table.insert(JugadoresCercanos[player], players); 
            end 
        end 

Posted
No es necesario usar el recurso voice, esto debería funcionar:

Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(a, b) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

No es mas eficiente de este modo xD?

        for i, player in ipairs( getElementsByType("player") ) do 
            local otherplayer = getElementsByType("player")[i]; 
            if ( player ~= otherplayer and estaCercaDe(a, b) ) then 
                if ( not JugadoresCercanos[player] ) then 
                    JugadoresCercanos[player] = {}; 
                end 
                table.insert(JugadoresCercanos[player], players); 
            end 
        end 

Eso no funcionaría.

Posted
Ami me da que no, ya que emplear "source" se refiere al mismo "localPlayer".

No, también puede ser un jugador remoto.

Posted
No es necesario usar el recurso voice, esto debería funcionar:

Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(a, b) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

No tengo con quien testear pero, Leyendo el codigo me parece que esta bien, Gracias

Posted
No es necesario usar el recurso voice, esto debería funcionar:

Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(a, b) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

¿Donde esta definido 'a' y 'b'?

Posted

¿Donde esta definido 'a' y 'b'?

Whoops

  
JugadoresCercanos = {}; 
Cerca = 50; 
  
setTimer( 
    function () 
        for i, player in ipairs( getElementsByType("player") ) do 
            for i, players in ipairs( getElementsByType("player") ) do 
                if ( player ~= players and estaCercaDe(player, players) ) then  
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
           setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
        end 
    end, 1500, 0 
) 
  
  
function estaCercaDe(a, b) 
    return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
end 
  

Posted
Yo que tu reemplazaría los ipairs por pairs. Y utilizaría también getDistanceBetween3DPoints en vez de un vector.

Remplazar 'ipairs' por 'pairs' no tiene sentido, tendria el mismo resultado, getElementsByType devuelve una tabla ordenada numericamente.

  • Recently Browsing   0 members

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