PSPNoobster Posted February 14, 2012 Share Posted February 14, 2012 (edited) Собственно создал небольшой клуб, решил устроить музыку... но ведь скучно, когда одна и та же музыка играет... Вот решил сделать панель ди-джея... Выглядит конечно неочень... но меня это пока устраивало... Пошарив по этому форуму и собрав "С мира по нитке" собрал всё вот в это: client.lua: addEventHandler("onClientResourceStart",resourceRoot, function() function showWindow() if ( guiGetVisible ( window) == true ) then guiSetVisible ( window, false ) showCursor(false) elseif ( guiGetVisible ( window) == false ) then guiSetVisible ( window, true ) showCursor(true) end end bindKey ( "F5", "down", showWindow ) window = guiCreateWindow(15,306,200,250,"DJ Panel",false) guiWindowSetSizable(window,false) guiSetVisible(window, false) on1 = guiCreateButton(25,50,50,20,"On",false,window) addEventHandler ( "onClientGUIClick", on1, music1on, false ) on2 = guiCreateButton(25,100,50,20,"On",false,window) addEventHandler ( "onClientGUIClick", on2, music2on, false ) on3 = guiCreateButton(25,150,50,20,"On",false,window) addEventHandler ( "onClientGUIClick", on3, music3on, false ) off = guiCreateButton(125,100,50,20,"Off",false,window) addEventHandler ( "onClientGUIClick", off, musicoff, false ) end ) function music1on () local music1_1 = playSound3D("music1.mp3", 780, -1362.09, 13.199, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music1_2 = playSound3D("music1.mp3", 780, -1357.8, 13.19, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music1_3 = playSound3D("music1.mp3", 767.4, -1360.199, 13.1, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music1_4 = playSound3D("music1.mp3", 773.4, -1351, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music1_5 = playSound3D("music1.mp3", 773, -1369.5, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) end function music2on () music2_1 = playSound3D("music2.mp3", 780, -1362.09, 13.199, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music2_2 = playSound3D("music2.mp3", 780, -1357.8, 13.19, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music2_3 = playSound3D("music2.mp3", 767.4, -1360.199, 13.1, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music2_4 = playSound3D("music2.mp3", 773.4, -1351, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music2_5 = playSound3D("music2.mp3", 773, -1369.5, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) end function music3on () music3_1 = playSound3D("music3.mp3", 780, -1362.09, 13.199, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music3_2 = playSound3D("music3.mp3", 780, -1357.8, 13.19, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music3_3 = playSound3D("music3.mp3", 767.4, -1360.199, 13.1, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music3_4 = playSound3D("music3.mp3", 773.4, -1351, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) music3_5 = playSound3D("music3.mp3", 773, -1369.5, 12.5, false) setSoundMaxDistance(sound, 25) setSoundVolume(sound, 10.0) end function musicoff () setSoundPaused(music1_1, true) setSoundPaused(music1_2, true) setSoundPaused(music1_3, true) setSoundPaused(music1_4, true) setSoundPaused(music1_5, true) setSoundPaused(music2_1, true) setSoundPaused(music2_2, true) setSoundPaused(music2_3, true) setSoundPaused(music2_4, true) setSoundPaused(music2_5, true) setSoundPaused(music3_1, true) setSoundPaused(music3_2, true) setSoundPaused(music3_3, true) setSoundPaused(music3_4, true) setSoundPaused(music3_5, true) end Собственно этот скрипт вполне работает, но я хочу его улучшить.... Поможете? Вот появилась пара вопросов: [Решено] 1) Как сделать проверку, находится ли игрок в маркере, и только тогда открыть панель ( и в обратном случае если не находится, то чтоб панель не появлялась) ? [Решено] 2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... ) [Решено] 3) Как вписать в gui просто текст? Какая команда? [Решено] 4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит... Видел похожую тему на форуме, но там речь шла об музыке в машине и всё равно я там ничего не понял... Edited March 13, 2012 by Guest Link to comment
Aibo Posted February 14, 2012 Share Posted February 14, 2012 1. isElementWithinMarker 2. triggerServerEvent > triggerClientEvent 3. guiSetText 4. stopSound/destroyElement Link to comment
PSPNoobster Posted February 15, 2012 Author Share Posted February 15, 2012 1. isElementWithinMarker2. triggerServerEvent > triggerClientEvent 3. guiSetText 4. stopSound/destroyElement Конечно спасибо за ответ, но как всё это связать в 1 целое? я реально не знаю луа... Можно пару наглядных примеров именно для этого скрипта? Link to comment
MX_Master Posted February 15, 2012 Share Posted February 15, 2012 прочитай внимательно инфо обо всех этих функциях. А то, что ты не совсем еще разбираешься.. это мы итак видим (: Link to comment
PSPNoobster Posted February 15, 2012 Author Share Posted February 15, 2012 прочитай внимательно инфо обо всех этих функциях. А то, что ты не совсем еще разбираешься.. это мы итак видим (: =0 Я то всё это собираю, и действие функции понимаю... а вот как заставить это всё работать? Link to comment
kashtesov Posted February 15, 2012 Share Posted February 15, 2012 прочитай внимательно инфо обо всех этих функциях. А то, что ты не совсем еще разбираешься.. это мы итак видим (: =0 Я то всё это собираю, и действие функции понимаю... а вот как заставить это всё работать? на сервере создаём типа так marker = createMarker и т.д и там-же вроде event который открывает gui из клиента когда встаёшь на маркер. Link to comment
PSPNoobster Posted February 15, 2012 Author Share Posted February 15, 2012 Вот: local djmarker = createMarker(781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100) function DJMarkerHit( hitElement, matchingDimension ) -- начало... **************************************** -- тут должна быть проверка находится ли игрок в группе "DJ", которую я не знаю как сделать... **************************************** -- вот тут должно быть что-то, что откроет панель... но что и как я не понимаю... end -- конец addEventHandler( "onMarkerHit", djmarker, DJMarkerHit) Я знаю что есть это https://wiki.multitheftauto.com/wiki/GetPlayerTeam НО Как всё это объединить? Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Сервер. createTeam( 'DJ',255,0,0 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if getTeamName( uTeam ) == 'DJ' then -- Код... end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) Link to comment
PSPNoobster Posted February 15, 2012 Author Share Posted February 15, 2012 Вот мой server.lua: createTeam( 'DJ',0,0,255 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if getTeamName( uTeam ) == 'DJ' then guiSetVisible ( window, true ) showCursor(true) else outputChatBox ( "You #FF0000NOT #0000FFDJ#FFFFFF!", getRootElement(), 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) Если я не в команде DJ, то пишет, что я не dj, но если я dj, то ничего не просиходит =( guiSetVisible ( window, true ) --гуи окно в client.lua, может надо его в сервер? showCursor(true) Link to comment
TwiX! Posted February 15, 2012 Share Posted February 15, 2012 Вот мой server.lua: createTeam( 'DJ',0,0,255 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if getTeamName( uTeam ) == 'DJ' then guiSetVisible ( window, true ) showCursor(true) else outputChatBox ( "You #FF0000NOT #0000FFDJ#FFFFFF!", getRootElement(), 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) Если я не в команде DJ, то пишет, что я не dj, но если я dj, то ничего не просиходит =( guiSetVisible ( window, true ) --гуи окно в client.lua, может надо его в сервер? showCursor(true) у тебя в этом клиенте есть "Window"?? запомни Синее - Это клиент и сервер функции\аргументы\и т.д Красное - Это только клиенские функции\аргументы\и т.д Ораньжевое - Это только серверные функции\аргументы\и т.д createTeam( 'DJ',0,0,255 ) в клиенте работать не будет Можно пользоваться альтернативой.. Server createTeam( 'DJ',0,0,255 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if getTeamName( uTeam ) == 'DJ' then triggerClientEvent ( source, "showWindow", getRootElement() ) else outputChatBox ( "You #FF0000NOT #0000FFDJ#FFFFFF!", getRootElement(), 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) Client Незнаю что у тебя там, но как пример function Shopwindowc() guiSetVisible (window,true) showCursor (true) end addEvent( "showWindow", true ) addEventHandler( "showWindow", getRootElement(), Showindowc) Link to comment
PSPNoobster Posted February 16, 2012 Author Share Posted February 16, 2012 "Незнаю что у тебя там, но как пример" И как пример это не работает =\ По крайней мере у меня... Вот варн: WARNING: CSZM_DJPanel\server.lua:7: Bad argument @ 'getTeamName' Link to comment
Aibo Posted February 17, 2012 Share Posted February 17, 2012 server createTeam( 'DJ',0,0,255 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if uTeam then if getTeamName( uTeam ) == 'DJ' then triggerClientEvent ( source, "showWindow", root ) else outputChatBox ( "You are #FF0000NOT a #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end else outputChatBox ( "You are not in a team!", hitElement, 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) client function showDJWindow() guiSetVisible (window,true) showCursor (true) end addEvent( "showWindow", true ) addEventHandler( "showWindow", root, showDJWindow) Link to comment
Kenix Posted February 17, 2012 Share Posted February 17, 2012 Клиент addEvent( "showWindow", true ) function showDJWindow( ) guiSetVisible ( window,true ) showCursor ( true ) end addEventHandler( "showWindow", root, showDJWindow ) Сервер createTeam( 'DJ',0,0,255 ) local djmarker = createMarker( 781.4, -1360.2, 13.2, 'cylinder', 3, 0, 0, 255, 100 ) function DJMarkerHit( hitElement, matchingDimension ) if getElementType( hitElement ) == 'player' then local uTeam = getPlayerTeam( hitElement ) if uTeam then if getTeamName( uTeam ) == 'DJ' then triggerClientEvent ( hitElement, "showWindow", hitElement ) else outputChatBox ( "You are #FF0000NOT a #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end else outputChatBox ( "You are not in a team!", hitElement, 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) Link to comment
PSPNoobster Posted February 17, 2012 Author Share Posted February 17, 2012 Да, спасибо, работает , но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера... то ничего не работает... ну ладно, и так сойдёт, спс... Но осталось ещё несколько проблем: 2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... ) 4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит... Link to comment
TwiX! Posted February 17, 2012 Share Posted February 17, 2012 Да, спасибо, работает , но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера... marker createMarker ( float x, float y, float z, [string theType, float size, int r, int g, int b, int a] ) X,Y,Z,тут тип корона и т.д, РАЗМЕР, цвет р,г,б(255,255,255), Альфа=Прозрачность 2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... ) https://wiki.multitheftauto.com/wiki/TriggerClientEvent https://wiki.multitheftauto.com/wiki/TriggerServerEvent 4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит.. https://wiki.multitheftauto.com/wiki/GuiSetEnabled Link to comment
Mc_Trekkie Posted February 18, 2012 Share Posted February 18, 2012 Да, спасибо, работает , но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера... то ничего не работает... ну ладно, и так сойдёт, спс... Но осталось ещё несколько проблем:2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... ) 4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит... Надо проигрывать на серверной стороне,ты делаешь это на клиенте,т.е слышать будешь только ты. Если же ты хочешь чтобы игралась на всём сервере:Можно: Сделать Trigger и функцию там. Учи луа>>>>>https://forum.multitheftauto.com/viewtopic.php?f=141&t=32458 Link to comment
Scripting Moderators Sarrum Posted February 18, 2012 Scripting Moderators Share Posted February 18, 2012 Надо проигрывать на серверной стороне,ты делаешь это на клиенте Круто, если не считать того, что playSound клиентская функция. Link to comment
Kernell Posted February 18, 2012 Share Posted February 18, 2012 Ну по сути он правильно говорит, просто вместо playSound надо сделать триггер с сервера на клиент на эту функцию. что-то вроде этого: triggerClientEvent( root, "playSound", source, "test/example.mp3" ); Link to comment
PSPNoobster Posted February 18, 2012 Author Share Posted February 18, 2012 marker createMarker ( float x, float y, float z, [string theType, float size, int r, int g, int b, int a] ) X,Y,Z,тут тип корона и т.д, РАЗМЕР, цвет р,г,б(255,255,255), Альфа=Прозрачность Может я плохо знаю луа в целом, но эту команду знаю прекрасно, и всё равно если менять размер или цвет то маркер перестаёт работать... и если снова ставить "оригинальные" размер и цвет то всё снова работает... https://wiki.multitheftauto.com/wiki/TriggerClientEvent https://wiki.multitheftauto.com/wiki/TriggerServerEvent Это я уже понял, а вот сами команды не понимаю абсолютно, даже не вижу в них логики за которую можно зацепиться... https://wiki.multitheftauto.com/wiki/GuiSetEnabled Выглядит неплохо, спасибо, посмотрю позже... Надо проигрывать на серверной стороне,ты делаешь это на клиенте,т.е слышать будешь только ты. Если же ты хочешь чтобы игралась на всём сервере:Можно: Сделать Trigger и функцию там. Учи луа>>>>>https://forum.multitheftauto.com/viewtopic.php?f=141&t=32458 Честно я не знаю луа абсолютно, но сколько не смотрю на примеры обычных скриптов луа, и скриптов луа для мта, не вижу ни какой связи между ними и по мне выглядят как 2 разных языка... Но всё равно посмотрю может что интересное и найду... Однако Не соглашусь т.к. уже сказал ZverCR, playSound клиентская функция... Ну по сути он правильно говорит, просто вместо playSound надо сделать триггер с сервера на клиент на эту функцию. что-то вроде этого: triggerClientEvent( root, "playSound", source, "test/example.mp3" ); Я как-то это так и представлял... но даже зная что есть штука под названием triggerClientEvent, я не понимаю куда и главное как запихнуть это в сервер чтоб всё заработало... Link to comment
Kernell Posted February 18, 2012 Share Posted February 18, 2012 Запихивать надо девочкам. А в программе нужно составлять алгоритм. Составьте его в виде блок-схемы, потом опишите в виде программного кода. P.S. Мы может помочь, но писать за вас весь код никто не собирается. Link to comment
StUNt71 Posted February 18, 2012 Share Posted February 18, 2012 Лови: DOWNLOAD SCRIPT CLIENT-SIDE local marker local musics = { { {"music1.mp3", 780, -1362.09, 13.199}, {"music1.mp3", 780, -1357.8, 13.19}, {"music1.mp3", 767.4, -1360.199, 13.1}, {"music1.mp3", 773.4, -1351, 12.5}, {"music1.mp3", 773, -1369.5, 12.5} }, { {"music2.mp3", 780, -1362.09, 13.199}, {"music2.mp3", 780, -1357.8, 13.19}, {"music2.mp3", 767.4, -1360.199, 13.1}, {"music2.mp3", 773.4, -1351, 12.5}, {"music2.mp3", 773, -1369.5, 12.5} }, { {"music3.mp3", 780, -1362.09, 13.199}, {"music3.mp3", 780, -1357.8, 13.19}, {"music3.mp3", 767.4, -1360.199, 13.1}, {"music3.mp3", 773.4, -1351, 12.5}, {"music3.mp3", 773, -1369.5, 12.5} } } local playMusic = { } --====================================================================================== addEventHandler("onClientResourceStart", resourceRoot, function() bindKey ("F5", "down", showWindow) window = guiCreateWindow(15, 306, 200, 250, "DJ Panel", false) guiWindowSetSizable(window, false) guiSetVisible(window, false) on1 = guiCreateButton(25, 50, 50, 20, "On", false, window) addEventHandler("onClientGUIClick", on1, function () triggerServerEvent("startMusic", localPlayer, 1) end, false ) on2 = guiCreateButton(25, 100, 50, 20, "On", false, window) addEventHandler("onClientGUIClick", on2, function () triggerServerEvent("startMusic", localPlayer, 2) end, false ) on3 = guiCreateButton(25, 150, 50, 20, "On", false, window) addEventHandler("onClientGUIClick", on3, function () triggerServerEvent("startMusic", localPlayer, 3) end, false ) off = guiCreateButton(125, 100, 50, 20, "Off", false, window) addEventHandler("onClientGUIClick", off, function () triggerServerEvent("stopMusic", localPlayer) end, false ) marker = createMarker() -- Сам сделаешь маркер end ) --====================================================================================== function showWindow() if isElementWithinMarker(localPlayer, marker) then if guiGetVisible(window) == true then guiSetVisible(window, false) showCursor(false) elseif guiGetVisible(window) == false then guiSetVisible(window, true) showCursor(true) end end end --====================================================================================== addEvent("onMusicStart", true) addEventHandler("onMusicStart", root, function (music) for _, sound in ipairs(playMusic) do if sound then destroyElement(sound) end end for musicInfo in pairs(musics[music]) do local sound = playSound3D(unpack(musicInfo)) table.insert(playMusic, sound) end end ) --====================================================================================== addEvent("onMusicStop", true) addEventHandler("onMusicStop", root, function () for _, sound in ipairs(playMusic) do if sound then destroyElement(sound) end end end ) SERVER-SIDE addEvent("musicStart", true) addEventHandler("musicStart", root, function (music) triggerClientEvent(root, "onMusicStart", source, music) end ) --====================================================================================== addEvent("musicStop", true) addEventHandler("musicStart", root, function () triggerClientEvent(root, "onMusicStop", source) end ) P.S.: Скрипт изменил для удобности. Link to comment
TwiX! Posted February 18, 2012 Share Posted February 18, 2012 сделал за него всю работу, опять же человек не чему не научится.. только ctrl+c ctrl+v Link to comment
PSPNoobster Posted February 18, 2012 Author Share Posted February 18, 2012 сделал за него всю работу, опять же человек не чему не научится..только ctrl+c ctrl+v Ну во-первых, уже научился, причём не мало... Во-вторых, Это мягко говоря только основы, а не весь скрипт целиком, т.е. я его буду модифицировать и модифицировать... Добавлять новые функции и улучшать, мне главное понять принцип действия функций... И уже основываясь на "готовом", уже создавать что-то лучшее... P.S. ctrl+c ctrl+v знаю с 7 лет и неплохо умею применять...особенно где нельзя... P.S.S. Это первый скрипт, в котором я принял участие ( да, именно принял участие а не создал целиком...) и поэтому заранее хочу поблагодарить всех кто принял участие в этой теме. Link to comment
Mc_Trekkie Posted February 18, 2012 Share Posted February 18, 2012 "e="ZverCR"] Надо проигрывать на серверной стороне,ты делаешь это на клиенте Круто, если не считать того, что playSound клиентская функция. Как бэ,Кернелл прав.Я просто не написал про Trigger',думал,что автор посмотрел на вики какая это функция и сам сделать Trigger. сделал за него всю работу, опять же человек не чему не научится..только ctrl+c ctrl+v Ну во-первых, уже научился, причём не мало... Во-вторых, Это мягко говоря только основы, а не весь скрипт целиком, т.е. я его буду модифицировать и модифицировать... Добавлять новые функции и улучшать, мне главное понять принцип действия функций... И уже основываясь на "готовом", уже создавать что-то лучшее... P.S. ctrl+c ctrl+v знаю с 7 лет и неплохо умею применять...особенно где нельзя... P.S.S. Это первый скрипт, в котором я принял участие ( да, именно принял участие а не создал целиком...) и поэтому заранее хочу поблагодарить всех кто принял участие в этой теме. Если же ты всё понял,можешь расписать нам что именно каждая функция делает...? Ты ведь ничего не понял,просто скопировал...Когда мне что то дают готовое,Я сначала разбераю что там,а не просто копирую... Модифицировать,это цифОрки менять и цвет? "Лишь бы получить такую штучку на сервер гыгыгы !111111" Точно про тебя." 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