hello every body,
i download a script call ipod from here
https://community.multitheftauto.com/ind ... ils&id=330
it work fine and no problems it's server side.
my problem i need it client side that can everyone run his own music on his client.
i mean how to make the client read other xml file and put it in table from client side .
so i can make music.xml file in every client and read it table to display in ipod menu.
i don't have good background about lua programming but i can read and understand the scrpit.
the server code and client code for the ipod program is shown below:-
local gRoot = getRootElement();
addEvent( "serverLoadMusicTable", true );
addEventHandler( "serverLoadMusicTable", gRoot,
function ()
local res, mTable, xml = getThisResource(), {}, xmlLoadFile( "meta.xml", res );
if xml then
local i = 0;
while ( xmlFindChild( xml, "file", i ) ) do
local dir = xmlNodeGetAttribute( xmlFindChild( xml, "file", i ), "src" );
if dir:find( "music/" ) ~= nil then
table.insert( mTable, dir );
end;
i = i + 1;
end;
end;
triggerClientEvent( source, "clientReceiveMusicTable", gRoot, mTable );
end
)
and the client side is
gMe = getLocalPlayer();
gRoot = getRootElement();
gResRoot = getResourceRootElement( getThisResource () );
btn = {};
ipodCoor = { moving={}, pos={} };
addEvent( "clientReceiveMusicTable", true );
addEventHandler( "onClientResourceStart", gResRoot,
function ()
outputChatBox( "pree i to open 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, "Play", 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 );
addEvent( "serverLoadMusicTable", true );
addEventHandler( "onClientGUIClick", gRoot,
function ()
if source == btn[1] then
local selSong = guiGridListGetItemText( songDisplay, guiGridListGetSelectedItem( songDisplay ) );
if selSong then
if not music then
music = playSound( tostring( selSong ) );
else
stopSound( music );
music = playSound( tostring( selSong ) );
end;
end;
elseif source == btn[2] then
if music then
stopSound( music );
music = nil;
end;
elseif source == btn[4] then
if music then
setSoundVolume( music, getSoundVolume( music ) + 0.25 );
if getSoundVolume( music ) > 1 then
setSoundVolume( music, 1 );
end;
end;
elseif source == btn[3] then
if music then
setSoundVolume( music, getSoundVolume( music ) - 0.25 );
if getSoundVolume( music ) < 0 then
setSoundVolume( music, 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
addEvent( "serverLoadMusicTable", true );
else
for _, v in ipairs ( mTable ) do
local row = guiGridListAddRow( songDisplay );
guiGridListSetItemText( songDisplay, row, 1, v, false, false );
end;
guiGridListAutoSizeColumn( songDisplay, 1 );
guiBringToFront( songDisplay );
end;
end
)
i'll be thankful for your reply