Jump to content

Help pls!!!


~Gangsta~

Recommended Posts

I'll try to explain how to do it as good as I can:

1: Trigger a server side event from the client side using triggerServerEvent when the resource starts ( onClientResourceStart )

2: On the server side, add this event using addEvent & addEventHandler, then, you must trigger a client side event using triggerClientEvent, where you'll send the 'sounds' table.

3: On the client side, add this new event you triggered from the server side using addEvent & addEventHandler, then, define the function with one argument, which will be the table you sent from the server side.

4: Loop this table with 'pairs' for-loop ( http://lua-users.org/wiki/ForTutorial ), then, use triggerEvent to trigger the 'createSoundClient' event passing theVehicle and ID from the table., so you don't have to define playSound and so on again.

Link to comment

does not work :cry:

client

gMe         = getLocalPlayer(); 
gRoot       = getRootElement(); 
gResRoot    = getResourceRootElement( getThisResource () ); 
  
btn = {}; 
ipodCoor = { moving={}, pos={} }; 
addEvent( "clientReceiveMusicTable", true ); 
  
local sound = { } 
  
addEventHandler( "onClientResourceStart", gResRoot, 
  function () 
    outputChatBox( "Press 'i' to open your iPod", 0, 255, 0 ); 
    
    ipod = guiCreateStaticImage( 1.0, 0.2279, 0.1916, 0.4036, "ipod.png", true );  --0.7744 
    ipodCoor.moving[ipod] = false; 
    ipodCoor.pos[ipod] = "out"; 
    
    songDisplay = guiCreateGridList( 0.0671, 0.0245, 0.8504, 0.4663, true, ipod ); 
    
    btn[1] = guiCreateButton( 0.64, 0.67, 0.15, 0.05, "Abspielen", true, ipod ); 
    btn[2] = guiCreateButton( 0.185, 0.67, 0.15, 0.05, "Stop", true, ipod ); 
    btn[3] = guiCreateButton( 0.42, 0.825, 0.15, 0.05, "vD", true, ipod ); 
    btn[4] = guiCreateButton( 0.42, 0.525, 0.15, 0.05, "vU", true, ipod ); 
    
    for i=1,4 do 
      guiSetAlpha( btn[i], 1.0 ); 
      guiSetFont( btn[i], "default-small" ); 
    end; 
    
    songList = guiGridListAddColumn( songDisplay, "My Songs", 0.85 ); 
    triggerServerEvent( "serverLoadMusicTable", gMe ); 
    
    addEventHandler( "onClientGUIClick", gRoot, 
      function () 
        local theVehicle = getPedOccupiedVehicle (  gMe  ) 
        if source == btn[1] then 
          local selSong = guiGridListGetItemData( songDisplay, guiGridListGetSelectedItem( songDisplay ) ); 
          if selSong then 
            triggerServerEvent ( "createSound", root, selSong, theVehicle) 
          end; 
        elseif source == btn[2] then 
            triggerServerEvent ( "destroySound", localPlayer, theVehicle ) 
        elseif source == btn[4] then 
          if sound [ theVehicle ] then 
            setSoundVolume( sound [ theVehicle ], getSoundVolume( sound [ theVehicle ] ) + 0.25 ); 
            if getSoundVolume( sound [ theVehicle ] ) > 1 then 
              setSoundVolume( sound [ theVehicle ], 1 ); 
            end; 
          end; 
        elseif source == btn[3] then 
          if sound [ theVehicle ] then 
            setSoundVolume( sound [ theVehicle ], getSoundVolume( sound [ theVehicle ] ) - 0.25 ); 
            if getSoundVolume( sound [ theVehicle ] ) < 0 then 
              setSoundVolume( sound [ theVehicle ], 0 ); 
            end; 
          end; 
        end; 
      end 
    ) 
    
    
    
    
    bindKey( "i", "down", 
      function () 
        if ipodCoor.moving[ipod] == false then 
          if ipodCoor.pos[ipod] == "out" then 
            showCursor( true, false ); 
            ipodCoor.moving[ipod] = true; 
            addEventHandler( "onClientRender", gRoot, openIPod ); 
            toggleControl( "fire", false ); 
          else 
            showCursor( false, false ); 
            ipodCoor.moving[ipod] = true; 
            addEventHandler( "onClientRender", gRoot, closeIPod ); 
            toggleControl( "fire", true ); 
          end; 
        end; 
      end 
    ) 
  end 
) 
  
function openIPod() 
  local x, y = guiGetPosition( ipod, true ); 
  guiSetPosition( ipod, x - 0.01, y, true ); 
  if x < 0.775 then 
    ipodCoor.moving[ipod] = false; 
    ipodCoor.pos[ipod] = "in"; 
    removeEventHandler( "onClientRender", gRoot, openIPod ); 
  end; 
end; 
  
function closeIPod() 
  local x, y = guiGetPosition( ipod, true ); 
  guiSetPosition( ipod, x + 0.01, y, true ); 
  if x > 1.0 then 
    guiSetPosition( ipod, 1.0, y, true ); 
    ipodCoor.moving[ipod] = false; 
    ipodCoor.pos[ipod] = "out"; 
    removeEventHandler( "onClientRender", gRoot, closeIPod ); 
  end; 
end; 
  
addEventHandler( "clientReceiveMusicTable", gRoot, 
  function ( mTable ) 
    if mTable == nil then 
      triggerServerEvent( "serverLoadMusicTable", gMe ); 
    else 
      for _, v in ipairs ( mTable ) do 
        local row = guiGridListAddRow( songDisplay ); 
        local streamtable = split(v, ';') 
        guiGridListSetItemText( songDisplay, row, 1, streamtable[2], false, false ); 
        guiGridListSetItemData ( songDisplay, row, 1, streamtable[1]); 
        outputChatBox(streamtable[2].." has ben added to your ipod", getLocalPlayer()); 
      end; 
      guiGridListAutoSizeColumn( songDisplay, 1 ); 
      guiBringToFront( songDisplay ); 
    end; 
  end 
) 
  
  
  
addEvent ( "createSoundClient", true ) 
addEventHandler ( "createSoundClient", root, 
    function ( id, theVehicle ) 
        if isElement ( sound [ theVehicle ] ) then 
            stopSound ( sound [ theVehicle ] ); 
        end 
        local x, y, z = getElementPosition ( theVehicle ) 
        sound [ theVehicle ] = playSound3D ( id, x, y, z ) 
        attachElements ( sound [ theVehicle ], theVehicle ) 
    end 
) 
  
addEvent ( "destroySoundClient", true ) 
addEventHandler ( "destroySoundClient", root, 
    function ( theVehicle ) 
        if isElement ( sound [ theVehicle ] ) then 
            stopSound ( sound [ theVehicle ] ); 
        end 
        sound [ theVehicle ] = nil 
    end 
) 
  
addEventHandler("onClientResourceStart", resourceRoot, 
    function() 
        triggerServerEvent("onPlayerToggleRadio", getLocalPlayer()) 
    end 
) 
  
  
addEvent("onServerToggleRadio", true) 
addEventHandler("onServerToggleRadio", root,  
function(url)    
for radio,_ in ipairs(url) do 
triggerEvent ( "createSoundClient", root,radio ) 
end  
end) 
  
  

server

local gRoot = getRootElement(); 
  
  
addEvent( "serverLoadMusicTable", true ); 
addEventHandler( "serverLoadMusicTable", gRoot, 
  function () 
    local res, mTable, xml = getThisResource(), {}, xmlLoadFile( "meta.xml", res ); 
    local nameTable = {} 
    if xml then 
      local i = 0; 
      while ( xmlFindChild( xml, "stream", i ) ) do   
        local dir = xmlNodeGetAttribute( xmlFindChild( xml, "stream", i ), "url" ); 
        local streamname = xmlNodeGetAttribute( xmlFindChild( xml, "stream", i ), "name" ); 
          table.insert( mTable, dir..";"..streamname ); 
          
        
        i = i + 1; 
      end; 
    end; 
    triggerClientEvent( source, "clientReceiveMusicTable", gRoot, mTable ); 
  end 
) 
  
  
  
addEvent ( "createSound", true ) 
addEventHandler ( "createSound", root, 
    function ( id, theVehicle ) 
        if ( theVehicle ) then 
            triggerClientEvent(root, "createSoundClient", root, id, theVehicle) 
            sounds [ theVehicle ] = id -- Store in the table the music ID using theVehicle as table index. 
        end 
    end 
) 
  
addEvent ( "destroySound", true ) 
addEventHandler ( "destroySound", root, 
    function ( theVehicle ) 
        if ( theVehicle ) then 
            triggerClientEvent(root, "destroySoundClient", root, theVehicle) 
            sounds [ theVehicle ] = nil -- Remove the entry from the table. 
        end 
    end 
) 
  
  
  
addEvent("onPlayerToggleRadio", true) 
addEventHandler("onPlayerToggleRadio", root, 
    function() 
        triggerClientEvent("onServerToggleRadio", root, sounds) 
        end 
) 
  

Link to comment

I told you to use 'pairs' not 'ipairs'.

-- client side:

addEvent ( "onServerToggleRadio", true ) 
addEventHandler ( "onServerToggleRadio", root, 
    function ( sounds ) 
        for vehicle, id in pairs ( sounds ) do 
            if isElement ( vehicle ) then 
                triggerEvent ( "createSoundClient", localPlayer, id, vehicle ) 
            end 
        end 
    end 
) 

-- server side:

addEvent ( "onPlayerToggleRadio", true ) 
addEventHandler ( "onPlayerToggleRadio", root, 
    function ( ) 
        triggerClientEvent ( source, "onServerToggleRadio", source, sounds ) -- You had to use 'source' here, else, it would trigger to everyone. 
    end 
) 

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...