~Gangsta~ Posted October 3, 2013 Author Share Posted October 3, 2013 I do not understand how to do Link to comment
Castillo Posted October 4, 2013 Share Posted October 4, 2013 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
~Gangsta~ Posted October 4, 2013 Author Share Posted October 4, 2013 does not work 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
Castillo Posted October 4, 2013 Share Posted October 4, 2013 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
~Gangsta~ Posted October 4, 2013 Author Share Posted October 4, 2013 Solidsnake14, A giant thank you!!! 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