Jump to content

Please help with my sound script


Xwad

Recommended Posts

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

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 by Guest
Link to comment
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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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