Jump to content

Ayuda con playSound usando addCommandHandler


Recommended Posts

Hola! Necesito ayuda, llevo 1 día la forma de que funcione un script para que se ejecute en el servidor que se escuche el sonido de archivo vía comando. Busqué varias formas en el foro, buscando en vídeos, la wiki, incluso vi un poco el manual de LUA para investigar.  Intenté crear uno pero no funcionó.

Pienso en usar de base este script que hizo Simple01 - 

La ayuda que necesito aquí es que quiero hacer una especie de mejora con estos 2 scripts. Y necesito saber cómo puedo yo usar en el cliente y servidor addCommandHandler y reproducir el sonido con el comando sin que falle y no sea automático como dice el script. También quiero transformarlo en playSound3D correctamente para que audio tenga distancia y solamente los que estén cerca puedan escuchar el audio, pero sin que el audio tenga una posición fija, simplemente el que ejecute el comando tenga el sonido con attach a el jugador que lo ejecutó.

Edited by Matias_Montanna
Link to comment

Servidor

function sendToHim( )
  triggerClientEvent( source, "playSound", source )
end
addCommandHandler("sound", sendToHim)

Cliente
 

addEvent("playSound", true)
addEventHandler("playSound",root,
	function ()
		local x, y, z = getElementPosition(localPlayer)
   		local sound = playSound3D("track.mp3", x, y, z)
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance(sound, 1)
   		setSoundMaxDistance(sound, 100)
    		attachElements (sound,localPlayer, 0, 0, 0 )
	end
)

 

Edited by Slash14
  • Like 1
Link to comment
addCommandHandler( "empezar",
	function( player )
		triggerClientEvent( player, "sound:startSound", player, player )
	end
)

-- Cliente

addEvent( "sound:startSound", true )
addEventHandler( "sound:startSound", getRootElement( ),
	function( player )
		local x, y, z = getElementPosition( player )
		local sound = playSound3D( "track.mp3", x, y, z )
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance( sound, 1 )
   		setSoundMaxDistance( sound, 100 )
    	attachElements( sound, player, 0, 0, 0 )		
	end
)

 

  • Like 1
Link to comment

Nada. Sí,  triggerClientEvent está en el cliente. Probaste algún sonido con el script? quizás he colocado algo mal en el meta, cómo lo tienes tú? Lo acabo de probar nuevamente con mi servidor privado con recursos y ahora un servidor local sin nada recursos, solamente play.

<meta>
	<info author="test" version="1.0.0" type="script" name="" description="" showInResourceBrowser="true" />
        <script src="scarfacesound.lua" />
        <script src="scarfacesound_client.lua" type="client"/>
	<file src="sound/sayhelloshot.mp3" />
</meta>

 

Edit: ya lo arreglé. El contenido del cliente lo cambié al primer script y el contenido del primer script al cliente. Gracias por la ayuda.

 

Solamente una cosa, se puede usar más sonidos con más comandos sin crear los recursos por separado?

Edited by Matias_Montanna
Link to comment
1 hour ago, Matias_Montanna said:

Nada. Sí,  triggerClientEvent está en el cliente. Probaste algún sonido con el script? quizás he colocado algo mal en el meta, cómo lo tienes tú? Lo acabo de probar nuevamente con mi servidor privado con recursos y ahora un servidor local sin nada recursos, solamente play.


<meta>
	<info author="test" version="1.0.0" type="script" name="" description="" showInResourceBrowser="true" />
        <script src="scarfacesound.lua" />
        <script src="scarfacesound_client.lua" type="client"/>
	<file src="sound/sayhelloshot.mp3" />
</meta>

 

Edit: ya lo arreglé. El contenido del cliente lo cambié al primer script y el contenido del primer script al cliente. Gracias por la ayuda.

 

Solamente una cosa, se puede usar más sonidos con más comandos sin crear los recursos por separado?

El problema era que usabas triggerClientEvent en client cuando esa función es solo para server.

Y si, si puedes usar más sonidos con comandos sin hacer otro recurso, pero te recomiendo que los enumeres (si quieres) para que solo tengas que usar /empezar [number] (esto solo si planeas hacer un recurso para elegir distintos sonidos por medio de un comando).

Un ejemplo:

-- // Server

local tick = getTickCount()

addCommandHandler( "empezar",
	function( player, _, id )
		if getTickCount() - tick > 5000 then -- solo podrá usar el comando cada 5 segundos
			local id = tonumber(id)
			if (id) then
				triggerClientEvent( player, "sound:startSound", player, player, id)
			end
			tick = getTickCount()
		end
	end
)

-- // Client

addEvent( "sound:startSound", true )
addEventHandler( "sound:startSound", getRootElement( ),
	function( player, id)
		local x, y, z = getElementPosition( player )
		local sound = playSound3D( "sound"..id..".mp3", x, y, z )
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance( sound, 1 )
   		setSoundMaxDistance( sound, 100 )
    	attachElements( sound, player, 0, 0, 0 )		
	end
)

 

  • Like 1
Link to comment

Client
 

addEvent( "sound:startSound", true )
addEventHandler( "sound:startSound", getRootElement( ),
	function( player, name)
		local x, y, z = getElementPosition( player )
		local sound = playSound3D( name..".mp3", x, y, z )
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance( sound, 1 )
   		setSoundMaxDistance( sound, 100 )
    	attachElements( sound, player, 0, 0, 0 )		
	end
)

Server
 

local tick = getTickCount()

addCommandHandler( "sound",
	function( player, _, name )
		if getTickCount() - tick > 5000 then -- solo podrá usar el comando cada 5 segundos
			local name = name
			if (name) then
				triggerClientEvent( player, "sound:startSound", player, player, name)
			end
			tick = getTickCount()
		end
	end
)

Solo escribe el nombre del sonido, osea si el archivo se llama "play.mp3" entonces pon /sound play

Edited by #Dv^
  • Like 2
Link to comment

Y si en vez de 5 segundos quiero 0 segundos (nada) para probar el comando, sirve  if getTickCount() - tick > 5000 then -- solo podrá usar el comando cada 5 segundos de 5000 a 0000 y cuánto es 1 minuto, 1 hora? Lo voy a probar

Otro ejemplo que quiero saber si por ejemplo, yo con el recurso guieditor hago una interfaz gui y le coloco un botón que al hacer click reciba un X sonido y el otro A sonido se puede? cómo hago que tal botón ejecute X sonido.

Edited by Matias_Montanna
Link to comment

60000 = 1 minuto

Multiplica 60000 x (Minutos)

1 hora sería 60000 x 60 = 3600000

Si quieres que no tenga timer sólo borra está línea

If getTickCount () > 5000 then

Entonces podrás ejecutar el comando sin necesidad de esperar

 

Para que el botón de una GUI ejecute algo debes usa el evento "OnClientGUIClick",

Un ejemplo

local x, y = guiGetScreenSize

 boton = guiCreateButton(x, y, x, y "Test", false) 


  addEventHandler("OnClientGUIClick", boton,
  function()
    outputChatBox("Test")
   end
  )


Y es local x, y = guiGetScreenSize(),  un error mí

Y me faltó una "," en guiCreateButton(x, y, x, y, "Test", false)

Edited by #Dv^
  • Like 1
Link to comment

local sound = playSound3D( name..".mp3", x, y, z )  y si quiero que los sonidos se ejecuten desde una carpeta, por ejemplo: [ esta es la carpeta de el recurso donde esta meta.xml y los lua de client y server con los audios, pero yo quiero que los sonidos carguen dentro de una carpeta llamada sonidos] cómo lo hago en ese caso.

Edited by Matias_Montanna
Link to comment

Ningún error en el debug.

<meta>
    <info author="test" version="1.0.0" type="script" name="" description="" showInResourceBrowser="true" />
        <script src="sonidos.lua" />
        <script src="sonidos_client.lua" type="client"/>
    <file src="sonidos/prueba1.mp3" />
    <file src="sonidos/prueba2.mp3" />
</meta>

 

Link to comment

sonidos.lua

local tick = getTickCount()

addCommandHandler( "sound",
	function( player, _, name )
		if getTickCount() - tick > 1000 then -- solo podrá usar el comando cada 1 segundo
			local name = name
			if (name) then
				triggerClientEvent( player, "sound:startSound9", player, player, name)
			end
			tick = getTickCount()
		end
	end
)

 

sonidos_client.lua

addEvent( "sound:startSound9", true )
addEventHandler( "sound:startSound9", getRootElement( ),
	function( player, name)
		local x, y, z = getElementPosition( player )
		local sound = playSound3D( "sonidos/"..name..".mp3", x, y, z )
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance( sound, 1 )
   		setSoundMaxDistance( sound, 100 )
    	attachElements( sound, player, 0, 0, 0 )		
	end
)

 

Estoy usando sound:startSound9 y no sound:startSound porque ya hice varios recursos que ejecuta 1 sonido con comando que usan sound:startSound con número (sound:startSound1,2,3,etc).

Edited by Matias_Montanna
Link to comment

Pues a mi me funciona bien el código, lo probé y todo bien
¿Compruebas que el script se haya iniciado?
No sé, prueba de esta manera para que te avise que hayas iniciado el sonido correctamente y que los archivos de sonidos se llamen "prueba1.mp3" y "prueba2.mp3" y solo esos dos estén dentro de la carpeta "sonidos"
Server
 

local tick = getTickCount()

addCommandHandler( "sound",
	function( player, _, name )
		if getTickCount() - tick > 1000 then -- solo podrá usar el comando cada 1 segundo
			local name = name
			if (name) == "prueba1" or (name) == "prueba2" then --sólo si el comando es /sound prueba1 o /sound prueba2 se iniciará
				triggerClientEvent( player, "sound:startSound9", player, player, name)
			else
				outputChatBox("Este archivo "..name.." no se puede iniciar")
			end
			tick = getTickCount()
		end
	end
)

Client
 


addEvent( "sound:startSound9", true )
addEventHandler( "sound:startSound9", getRootElement( ),
	function( player, name)
		outputChatBox("Se inició el sonido "..name.."")-- El nombre del sonido que se inició
		local x, y, z = getElementPosition( player )
		local sound = playSound3D( "sonidos/"..name..".mp3", x, y, z )
   		setSoundVolume( sound, 1 )
   	 	setSoundMinDistance( sound, 1 )
   		setSoundMaxDistance( sound, 100 )
    	attachElements( sound, player, 0, 0, 0 )		
	end
)

 

Edited by #Dv^
  • Like 1
Link to comment
  • Recently Browsing   0 members

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