Matias_Montanna Posted December 10, 2016 Share Posted December 10, 2016 (edited) 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 December 10, 2016 by Matias_Montanna Link to comment
Sticmy Posted December 10, 2016 Share Posted December 10, 2016 usa la función. attachElements getElementPosition 1 Link to comment
#Dv^ Posted December 10, 2016 Share Posted December 10, 2016 (edited) 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 December 10, 2016 by Slash14 1 Link to comment
Matias_Montanna Posted December 10, 2016 Author Share Posted December 10, 2016 (edited) Al hacer funcionar el comando, no ejecuta el sonido, así que revisé el debug para ver qué estaba mal: ERROR: cdv_scarface\scarfacesound_client.lua:2: attempt to call global 'triggerClientEvent' (a nil value) cuál es el problema? Edited December 10, 2016 by Matias_Montanna Link to comment
aka Blue Posted December 10, 2016 Share Posted December 10, 2016 addCommandHandler( "sound", function( player ) triggerClientEvent( player, "playSound", player ) end ) 1 Link to comment
Matias_Montanna Posted December 10, 2016 Author Share Posted December 10, 2016 Me genera el mismo problema con triggerClientEvent que tiene valor nil Link to comment
aka Blue Posted December 10, 2016 Share Posted December 10, 2016 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 ) 1 Link to comment
Matias_Montanna Posted December 10, 2016 Author Share Posted December 10, 2016 El problema aún se está creando en el cliente, donde no detecta el evento con nombre sound:startSound y los 3 player. Algún carácter erróneo? Link to comment
Rose Posted December 10, 2016 Share Posted December 10, 2016 ¿Seguro que no sirve? a mi me funciona. Prueba cambiando player por localPlayer, aunque será lo mismo. Ahí vi que daba error el triggerClientEvent en el client.lua, ¿no estarás usando esa función en client, verdad? 1 Link to comment
Matias_Montanna Posted December 10, 2016 Author Share Posted December 10, 2016 (edited) 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 December 10, 2016 by Matias_Montanna Link to comment
Rose Posted December 10, 2016 Share Posted December 10, 2016 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 ) 1 Link to comment
Matias_Montanna Posted December 10, 2016 Author Share Posted December 10, 2016 Con ese script los audios cómo se deben llamar? sound_1.mp3 o sound1.mp3? puede usar nombre personalizado? Link to comment
#Dv^ Posted December 10, 2016 Share Posted December 10, 2016 (edited) 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 December 10, 2016 by #Dv^ 2 Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 (edited) 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 December 11, 2016 by Matias_Montanna Link to comment
#Dv^ Posted December 11, 2016 Share Posted December 11, 2016 (edited) 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 December 11, 2016 by #Dv^ 1 Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 (edited) 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 December 11, 2016 by Matias_Montanna Link to comment
aka Blue Posted December 11, 2016 Share Posted December 11, 2016 playSound3D( "sonidos/"..name..".mp3", x, y, z ) 1 Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 playSound3D( "sonidos/"..name..".mp3", x, y, z no me ejecuta el sonido de la carpeta, aunque en meta.xml estén definidos los sonidos de la carpeta Link to comment
#Dv^ Posted December 11, 2016 Share Posted December 11, 2016 Postea tu meta.xml Te sale algún error en Debug? Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 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
#Dv^ Posted December 11, 2016 Share Posted December 11, 2016 ejecutas el comando /sound prueba1? Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 Sí, y el debug no me dice de ningún error, ni siquiera si se ejecuta o no. Link to comment
#Dv^ Posted December 11, 2016 Share Posted December 11, 2016 Postea el código sonidos.lua y sonidos_client.lua Link to comment
Matias_Montanna Posted December 11, 2016 Author Share Posted December 11, 2016 (edited) 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 December 11, 2016 by Matias_Montanna Link to comment
#Dv^ Posted December 12, 2016 Share Posted December 12, 2016 (edited) 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 December 12, 2016 by #Dv^ 1 Link to comment
Recommended Posts