Xwad Posted April 14, 2016 Share Posted April 14, 2016 Hi! I have added some new sounds for vehicles. My problem is that other players cant hear it! Pls help. Thanks in Advance. Maybe need i sync with server? As you can see there are a lot of playSound3D functions, these functions can only hear the local player:/ why?! function onEnter () local vehicle = getPedOccupiedVehicle(localPlayer) local id = getElementModel ( vehicle ) if id == 480 then local x,y,z = getElementPosition(vehicle) local sound_engine = playSound3D("files/engine.wav",x,y,z, true) setSoundMaxDistance( sound_engine, 50 ) setSoundVolume(sound_engine, 0.-- s8) --> attachElements ( sound_engine, vehicle, 0, 0, 0, 0, 0, 0) setElementData (localPlayer, "sound_engine", sound_engine) end end addEventHandler("onClientVehicleEnter", getRootElement(), onEnter) function onExit( thePlayer, seat ) if thePlayer == localPlayer then local model = getElementModel ( source ) if model == 480 then local sound_engine = getElementData ( localPlayer, "sound_engine" ) local sound_track = getElementData ( localPlayer, "sound_track" ) local sound_move = getElementData ( localPlayer, "sound_move" ) local sound_mg = getElementData ( localPlayer, "sound_mg" ) stopSound(sound_engine) if isElement(sound_track) then stopSound(sound_track) end if isElement(sound_move) then stopSound(sound_move) end if isElement(sound_mg) then stopSound(sound_mg) end end end end addEventHandler("onClientVehicleExit",root, onExit) addEventHandler("onClientVehicleExplode",root, onExit) addEventHandler("onClientResourceStop",root, onExit) function projectileSound ( creator ) local zeType = getProjectileType( source ) if zeType == 21 then local veh = getPedOccupiedVehicle(localPlayer) if getElementModel(veh) == 480 then local x,y,z = getElementPosition ( veh ) sound_shoot = playSound3D("files/shoot.wav",x,y,z, false) setSoundMaxDistance( sound_shoot, 80 ) setSoundVolume(sound_shoot, 1) attachElements ( sound_shoot, veh, 0,0,0 ) end end end addEventHandler( "onClientProjectileCreation", getRootElement(), projectileSound ) function stop_sound() if isPedInVehicle ( localPlayer ) then local vehicle = getPedOccupiedVehicle(localPlayer) local sound_track = getElementData ( localPlayer, "sound_track" ) local sound_start = getElementData ( localPlayer, "sound_start" ) local sound_move = getElementData ( localPlayer, "sound_move" ) local vx,vy,vz = getElementVelocity(vehicle) local id = getElementModel ( vehicle ) if id == 480 then if vx+vy+vz == 0 then if isElement(sound_track) then stopSound(sound_track) removeEventHandler("onClientRender", root, stop_sound) end if isElement(sound_move) then stopSound(sound_move) removeEventHandler("onClientRender", root, stop_sound) end end end end end function stop_sound2() if isPedInVehicle ( localPlayer ) then local vehicle = getPedOccupiedVehicle(localPlayer) local sound_move = getElementData ( localPlayer, "sound_move" ) local id = getElementModel ( vehicle ) if id == 480 then if isElement(sound_move) then stopSound(sound_move) end end end end function start_sound() if isPedInVehicle ( localPlayer ) then local vehicle = getPedOccupiedVehicle(localPlayer) local id = getElementModel ( vehicle ) if id == 480 then if not isElement(sound_track) then local x,y,z = getElementPosition(vehicle) local sound_track = playSound3D("files/tracks.wav",x,y,z, true) setSoundMaxDistance( sound_track, 40 ) setSoundVolume(sound_track, 0.7) attachElements ( sound_track, vehicle, 0,0,0 ) setElementData (localPlayer, "sound_track", sound_track) local sound_start = playSound3D("files/start.wav",x,y,z, false) setSoundMaxDistance( sound_start, 40 ) setSoundVolume(sound_start, 0.5) attachElements ( sound_start, vehicle, 0,0,0 ) setElementData (localPlayer, "sound_start", sound_start) setTimer ( function () if not isElement(sound_move) then local sound_move = playSound3D("files/tank_move.wav",x,y,z, true) setSoundMaxDistance( sound_move, 40 ) setSoundVolume(sound_move, 0.45) attachElements ( sound_move, vehicle, 0,0,0 ) setElementData (localPlayer, "sound_move", sound_move) end end, 200, 1 ) setTimer ( function () addEventHandler("onClientRender", root, stop_sound) end, 50, 1 ) end end end end function bindTheKeys () bindKey ( "w", "down", start_sound ) bindKey ( "s", "down", start_sound ) bindKey ( "w", "up", stop_sound2 ) bindKey ( "s", "up", stop_sound2 ) end addEventHandler("onClientResourceStart",root, bindTheKeys) Link to comment
Simple0x47 Posted April 14, 2016 Share Posted April 14, 2016 Get all players and search those who are near the vehicle to play the vehicle sound. getElementsByType() getDistanceBetweenPoints3D() Link to comment
Xwad Posted April 15, 2016 Author Share Posted April 15, 2016 And is it possible to fix it with sync? Link to comment
Anubhav Posted April 15, 2016 Share Posted April 15, 2016 Maybe trigger server event for root and then triggerClientEvent with root and play that sound? Link to comment
Xwad Posted April 16, 2016 Author Share Posted April 16, 2016 (edited) Ok now i have sync it with server and its working, but i find bug in my script, that i cant fix. As you can see there is an event (onClientVehicleExit) which will be triggered if a client exits a vehicle. for this event i added a function which will stop the sound. The problem is that its triggering for all players. and i want to make that the event (onClientVehicleExit) will be only triggering when that player exits the vehicle who entered it. code: CLIENT function engine(thePlayer, seat) local veh = getPedOccupiedVehicle(localPlayer) if getElementModel(veh) == 480 then triggerServerEvent("engine_server", resourceRoot, veh ) end end addEventHandler("onClientVehicleEnter", getRootElement(), engine) function engine_client(veh) local sound_engine = playSound3D("files/engine.wav",0,0,0, true) setSoundMaxDistance( sound_engine, 50 ) setSoundVolume(sound_engine, 1) attachElements( sound_engine, veh ) setElementData (localPlayer, "sound_engine", sound_engine) end addEvent("engine_client", true) addEventHandler("engine_client", root, engine_client) function stop(veh, thePlayer, seat) triggerServerEvent("stop", resourceRoot, veh ) end addEventHandler("onClientVehicleExit",root, stop) function stop_client(veh) local sound_engine = getElementData ( localPlayer, "sound_engine" ) stopSound(sound_engine) end addEvent("stop", true) addEventHandler("stop", root, stop_client) SERVER function engine_server(veh) triggerClientEvent("engine_client", resourceRoot, veh) end addEvent("engine_server", true) addEventHandler("engine_server", resourceRoot, engine_server) function stop(veh) triggerClientEvent("stop", resourceRoot, veh) end addEvent("stop", true) addEventHandler("stop", resourceRoot, stop) Edited April 16, 2016 by Guest Link to comment
undefined Posted April 16, 2016 Share Posted April 16, 2016 function stop(veh, thePlayer, seat) if thePlayer ~= localPlayer then return end triggerServerEvent("stop", resourceRoot, veh ) end addEventHandler("onClientVehicleExit",root, stop) Link to comment
Xwad Posted April 16, 2016 Author Share Posted April 16, 2016 Not wroking.. sometimes its the same (sound is stopping for other vehicles too) , and sometimes the sound does not stop when the player is exiting the vehicle. Link to comment
undefined Posted April 16, 2016 Share Posted April 16, 2016 local sounds = {} addEventHandler("onClientVehicleEnter", root, function(thePlayer, seat) if seat ~= 0 then return end local vehicle = getPedOccupiedVehicle(thePlayer) if getElementModel(vehicle) == 480 then sounds[thePlayer] = playSound3D("files/engine.wav",0,0,0, true) setSoundMaxDistance(sounds[thePlayer], 50) setSoundVolume(sounds[thePlayer], 1) attachElements(sounds[thePlayer], vehicle) end end) addEventHandler("onClientVehicleExit", root, function(thePlayer, seat) if isElement(sounds[thePlayer]) then stopSound(sounds[thePlayer].sound) end end) Server-side is needless. Because the event is already attached to root. Try it. Link to comment
Xwad Posted April 16, 2016 Author Share Posted April 16, 2016 the sound is not stopping. error in line 15 debug: attempt to indexfield '?' (a userdata value) Link to comment
undefined Posted April 16, 2016 Share Posted April 16, 2016 I forgot. Remove ".sound" stopSound(sounds[thePlayer]) Link to comment
Xwad Posted April 16, 2016 Author Share Posted April 16, 2016 WOW its working now without bugs i hope!! Thanks! Link to comment
Xwad Posted April 16, 2016 Author Share Posted April 16, 2016 one more question: why is the 'sound_track' not stopping when the vehicles velocity is 0? and the sync is also not working:/ COuld you maybe help me how to sync it? like in the code before local sound_track = {} local sound_start = {} local sound_move = {} function start_sound(thePlayer) local veh = getPedOccupiedVehicle(localPlayer) if getElementModel(veh) == 480 then if not isElement(sound_track[thePlayer]) then sound_track[thePlayer] = playSound3D("files/tracks.wav",0,0,0, true) setSoundMaxDistance(sound_track[thePlayer], 40) setSoundVolume(sound_track[thePlayer], 0.7) attachElements(sound_track[thePlayer], veh) sound_start[thePlayer] = playSound3D("files/start.wav",0,0,0, false) setSoundMaxDistance(sound_start[thePlayer], 40) setSoundVolume(sound_start[thePlayer], 0.5) attachElements(sound_start[thePlayer], veh) setTimer ( function () if not isElement(sound_move) then sound_move[thePlayer] = playSound3D("files/tank_move.wav",0,0,0, true) setSoundMaxDistance(sound_move[thePlayer], 40) setSoundVolume(sound_move[thePlayer], 0.7) attachElements(sound_move[thePlayer], veh) end end, 200, 1 ) setTimer ( function () addEventHandler("onClientRender", root, stop_sound) end, 50, 1 ) end end end function stop_sound(thePlayer, seat) local veh = getPedOccupiedVehicle(thePlayer) local vx,vy,vz = getElementVelocity(veh) local id = getElementModel ( veh ) if id == 480 then if vx+vy+vz == 0 then if isElement(sound_track[thePlayer]) then stopSound(sound_track[thePlayer]) removeEventHandler("onClientRender", root, stop_sound) end if isElement(sound_move[thePlayer]) then stopSound(sound_move[thePlayer]) removeEventHandler("onClientRender", root, stop_sound) end end end end function stop_sound2(thePlayer) local veh = getPedOccupiedVehicle(localPlayer) local id = getElementModel ( veh ) if id == 480 then if isElement(sound_move[thePlayer]) then stopSound(sound_move[thePlayer]) end end end function bindTheKeys () bindKey ( "w", "down", start_sound ) bindKey ( "s", "down", start_sound ) bindKey ( "w", "up", stop_sound2 ) bindKey ( "s", "up", stop_sound2 ) end addEventHandler("onClientResourceStart",root, bindTheKeys) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now