-Rex- Posted June 7, 2016 Share Posted June 7, 2016 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? Link to comment
Simple0x47 Posted June 7, 2016 Share Posted June 7, 2016 Lo veo posible, sí necesitas una mano te podría ayudar con ello. Link to comment
-Rex- Posted June 7, 2016 Author Share Posted June 7, 2016 Lo veo posible, sí necesitas una mano te podría ayudar con ello. Te he enviado un PM Link to comment
-Rex- Posted June 7, 2016 Author Share Posted June 7, 2016 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 ) Link to comment
Simple0x47 Posted June 7, 2016 Share Posted June 7, 2016 Ami me da que no, ya que emplear "source" se refiere al mismo "localPlayer". Link to comment
starksZ Posted June 7, 2016 Share Posted June 7, 2016 (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 June 7, 2016 by Guest Link to comment
Tomas Posted June 7, 2016 Share Posted June 7, 2016 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 Link to comment
Enargy, Posted June 7, 2016 Share Posted June 7, 2016 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 ? 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 Link to comment
Tomas Posted June 7, 2016 Share Posted June 7, 2016 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 ? 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. Link to comment
Sasu Posted June 8, 2016 Share Posted June 8, 2016 Ami me da que no, ya que emplear "source" se refiere al mismo "localPlayer". No, también puede ser un jugador remoto. Link to comment
-Rex- Posted June 8, 2016 Author Share Posted June 8, 2016 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 Link to comment
Castillo Posted June 8, 2016 Share Posted June 8, 2016 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'? Link to comment
Simple0x47 Posted June 8, 2016 Share Posted June 8, 2016 Yo que tu reemplazaría los ipairs por pairs. Y utilizaría también getDistanceBetween3DPoints en vez de un vector. Link to comment
Tomas Posted June 8, 2016 Share Posted June 8, 2016 ¿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 Link to comment
Castillo Posted June 8, 2016 Share Posted June 8, 2016 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. Link to comment
Recommended Posts