TwiX! Posted February 19, 2012 Share Posted February 19, 2012 ну я же расписал как он должен работать как я думаю... что там непонятного если там всё на нубоуровне? я не понимаю зачем тебе сервер, хотя там только триггер, тебе объянили как использовать функцию, не надо изобретать велосипед Link to comment
PSPNoobster Posted February 19, 2012 Author Share Posted February 19, 2012 я не понимаю зачем тебе сервер, хотя там только триггер, тебе объянили как использовать функцию, не надо изобретать велосипед Была задача: ":arrow:[НЕ Решено] 2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... )" Дали команды: triggerServerEvent triggerClientEvent Подсказали как они работают и как это должно выглядеть Вот я и сделал как я понял... но не работает и я не пойму почему, вот и прошу помочь... Link to comment
MX_Master Posted February 19, 2012 Share Posted February 19, 2012 При нажатии ГУИ кнопочки, клиент с помощью triggerServerEvent вызывает серверное событие, которое запускает серверную функцию-обработчик, которая с помощью triggerClientEvent вызывает для всех клиентов событие, которое запускает клиентскую функцию-обработчик, внутри которой запускается мелодия Link to comment
TwiX! Posted February 19, 2012 Share Posted February 19, 2012 При нажатии ГУИ кнопочки, клиент с помощью triggerServerEvent вызывает серверное событие, которое запускает серверную функцию-обработчик, которая с помощью triggerClientEvent вызывает для всех клиентов событие, которое запускает клиентскую функцию-обработчик, внутри которой запускается мелодия это я понял, вот только зачем? можно же сразу же вызывать плей песни, а не создавть 100500обработчиков Ну по сути он правильно говорит, просто вместо playSound надо сделать триггер с сервера на клиент на эту функцию.что-то вроде этого: triggerClientEvent( root, "playSound", source, "test/example.mp3" ); Link to comment
MX_Master Posted February 19, 2012 Share Posted February 19, 2012 Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУ Избегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины. Link to comment
PSPNoobster Posted February 19, 2012 Author Share Posted February 19, 2012 Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУИзбегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины. И всё же, не подскажешь где в моём алгоритме или командах допущена ошибка? Link to comment
MX_Master Posted February 19, 2012 Share Posted February 19, 2012 у тя отрывистые куски кода, собери все вместе как положено, чтобы можно было нормально просмотреть, да и тебе - проверить Link to comment
TwiX! Posted February 19, 2012 Share Posted February 19, 2012 Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУИзбегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины. triggerClientEvent серверная функция =) я понимаю, знаю как это осуществить, так как сделал собственный плеер/радио, не коммунити, он как для одного игрока, так и для всех Link to comment
MX_Master Posted February 20, 2012 Share Posted February 20, 2012 Тема на 4 страницы! Я думаю сам автор должен собрать код вместе, чтобы можно было его анализировать. Link to comment
PSPNoobster Posted February 20, 2012 Author Share Posted February 20, 2012 (edited) Мда.... ну ок... Cразу хочу сказать, что тригеры делал только для "play 1", именно по этому этот "play 1" и не работает , а остальные оставил без тригеров... именно по этому они и работают, но не так как надо. Вот что у меня получилось в целом: Server.lua: 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 #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end else outputChatBox ( "You are #FF0000NOT #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) function onmusic1started () triggerClientEvent ( "music1oned", getRootElement() ) end addEvent( "onmusic1start", true ) addEventHandler( "onmusic1start", getRootElement(), onmusic1started ) Фух слава богу кнопочке "на предыдущую страницу" а то всё удалилось... Кто придумал это: "Your message contains too few characters."? Ок разобью на 2 поста. Edited February 20, 2012 by Guest Link to comment
Mc_Trekkie Posted February 21, 2012 Share Posted February 21, 2012 Переменная uTeam не создана. Link to comment
PSPNoobster Posted February 21, 2012 Author Share Posted February 21, 2012 Переменная uTeam не создана. xDD а это что?: local uTeam = getPlayerTeam( hitElement ) -____- и кто удалил 2 пост с клиентом? Link to comment
Mc_Trekkie Posted February 21, 2012 Share Posted February 21, 2012 А.Ок.Не обратил внимание...Походу Это меняй: if uTeam then if getTeamName( uTeam ) == 'DJ' then На это if uTeam then if getTeamName( uTeam ) == 'DJ' --Твой код,если он в команде DJ else --Твой код если он не в команде DJ Думаю понятно. Как-то так. Проверь... Link to comment
PSPNoobster Posted February 21, 2012 Author Share Posted February 21, 2012 А.Ок.Не обратил внимание...ПоходуЭто меняй: if uTeam then if getTeamName( uTeam ) == 'DJ' then На это if uTeam then if getTeamName( uTeam ) == 'DJ' --Твой код,если он в команде DJ else --Твой код если он не в команде DJ Думаю понятно. Как-то так. Проверь... Эмм.... или я что-то не понимаю... или ты... Эта функция ( DJMarkerHit ) прекрасно РАБОТАЕТ, не работает функция воспроизведения 1 музыки ( onmusic1started ) Щас опять выложу клиент а то кто-то удалил пост. Link to comment
PSPNoobster Posted February 21, 2012 Author Share Posted February 21, 2012 Да что за? почему после того как я вставляю код и нажимаю Submit пост получается пустым? Короче ладно, вот ссылка на скрипт... http://rghost.ru/private/36611648/979a3f56478864c5945807cae3ae846b Повторю ещё раз, что тригеры делал только для воспроизведения первой музыки!!! для остальных НЕТ. Поэтому Первая музыка и не воспроизводится... а все остальные работают... Link to comment
Mc_Trekkie Posted February 21, 2012 Share Posted February 21, 2012 (edited) Ща посмотрю... Блин чувак!Только луа бы кинул! 23 мб ещё качать Мда,кстати,когда про тригерры говоришь-выкладывай и сервер и клиент,мы что тебе-Ванги ? Как бы сказать... (Надеюсь не просто скопируешь а разберёшься.)-Она играет только у DJ'я если надо по другому-напиши Твоя ошибка: Ты делал триггер на ивент,в этом же ивенте (На который ты сделал триггер) была функция,которая делала Trigger на тот же самый ивент(Самый первый,в клиенте) Короче,легче кодом показать,не могу объяснить (: . (Там где ошибки function music1start () triggerServerEvent ( "onmusic1start", getLocalPlayer() ) -- Вот она,ошибка твоей мечты! end addEvent( "music1oned", true ) addEventHandler( "music1oned", getRootElement(), music1on ) Сервер: function onmusic1started () triggerClientEvent ( "music1oned", getRootElement() )--Зачем делать Trigger тут? end addEvent( "onmusic1start", true ) addEventHandler( "onmusic1start", getRootElement(), onmusic1started ) Щас скрипт на RGHOST залью. http://rghost.ru/36635530 Edited February 21, 2012 by Guest Link to comment
MX_Master Posted February 21, 2012 Share Posted February 21, 2012 Выкладывай на pastebin.com, если тут что не так. Кстати, я тогда еще удалил пустой пост, там не было никакого клиентского кода (: просто пустой пост был Link to comment
Mc_Trekkie Posted February 21, 2012 Share Posted February 21, 2012 Ага,наверно был слишком большой код. Off-topic. Кто знает прогу для перевода видео в HD? Link to comment
Scripting Moderators Sarrum Posted February 21, 2012 Scripting Moderators Share Posted February 21, 2012 Выкладывай на pastebin.com, если тут что не так. Кстати, я тогда еще удалил пустой пост, там не было никакого клиентского кода (: просто пустой пост был Код там существовал, нужно было нажать "Quote" Link to comment
PSPNoobster Posted February 21, 2012 Author Share Posted February 21, 2012 Да... странно... код исчезает Ладно сейчас опробую версию MacTrekkie. Link to comment
Aibo Posted February 21, 2012 Share Posted February 21, 2012 после 50 штук stopSound подряд сил моих больше нет :3 сервер: 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 #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end else outputChatBox ( "You are #FF0000NOT #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) function musicChange(musicID) triggerClientEvent(root, "onClientMusicChange", root, musicID) end addEvent( "onMusicChange", true ) addEventHandler( "onMusicChange", root, musicChange ) клиент: local musicFiles = { "music1.mp3", "music2.mp3", "music3.mp3", "music4.mp3", "music5.mp3", "music6.mp3", "music7.mp3", } local soundData = { --{ x, y, z, distance, volume} { 780, -1362.3, 13.9, 15, 10 }, { 780, -1357.65, 13.9, 15, 10 }, { 767.5, -1352.9, 13.1, 15, 10 }, { 767.4, -1366, 13.1, 15, 10 }, { 785.9, -1350.7, 12.6, 15, 10 }, { 774.2, -1344, 12.6, 15, 10 }, { 773.9, -1373.4, 12.6, 15, 10 }, { 786.2, -1369.6, 12.5, 15, 10 }, } local nowPlaying = {} local gui = {} addEventHandler("onClientResourceStart", resourceRoot, function() gui.window = guiCreateWindow(15,300,200,250,"DJ Panel",false) gui.close = guiCreateButton(175,225,20,20,"X",false,gui.window) gui.noobster = guiCreateLabel(10,225,150,50,"Created by Noobster",false,gui.window) gui.musicButtons = { guiCreateButton(25,100,50,20,"Play 1",false,gui.window), guiCreateButton(125,100,50,20,"Play 2",false,gui.window), guiCreateButton(25,125,50,20,"Play 3",false,gui.window), guiCreateButton(125,125,50,20,"Play 4",false,gui.window), guiCreateButton(25,150,50,20,"Play 5",false,gui.window), guiCreateButton(125,150,50,20,"Play 6",false,gui.window), guiCreateButton(25,175,50,20,"Play 7",false,gui.window), } for id, element in ipairs(gui.musicButtons) do addEventHandler("onClientGUIClick", element, guiMusicChange, false ) end addEventHandler ( "onClientGUIClick", gui.close, closeDJWindow, false ) guiWindowSetSizable(gui.window,false) guiSetVisible(gui.window, false) end ) function showDJWindow( ) guiSetVisible ( gui.window, true ) showCursor ( true ) end addEvent( "showWindow", true ) addEventHandler( "showWindow", root, showDJWindow ) function closeDJWindow() guiSetVisible ( gui.window, false) showCursor(false) end function guiMusicChange(button, state) if state == "up" then for id, element in ipairs(gui.musicButtons) do if source == element then triggerServerEvent("onMusicChange", localPlayer, guiGetText(source) == "STOP" and 0 or id) guiSetText(source, guiGetText(source) == "STOP" and "Play "..id or "STOP") elseif guiGetText(element) == "STOP" then guiSetText(element, "Play "..id) end end end end function musicChange(id) stopMusic() if musicFiles[id] then for i, data in ipairs(soundData) do local x, y, z, distance, volume = unpack(data) local sound = playSound3D(musicFiles[id], x, y, z, false) setSoundMaxDistance(sound, distance) setSoundVolume(sound, volume) table.insert(nowPlaying, sound) end end end addEvent( "onClientMusicChange", true ) addEventHandler( "onClientMusicChange", root, musicChange ) function stopMusic() for i, sound in ipairs(nowPlaying) do if isElement(sound) then destroyElement(sound) end end nowPlaying = {} end Link to comment
StUNt71 Posted February 22, 2012 Share Posted February 22, 2012 после 50 штук stopSound подряд сил моих больше нет :3сервер: 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 #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end else outputChatBox ( "You are #FF0000NOT #FFFFFFa #0000FFDJ#FFFFFF!", hitElement, 255, 255, 255, true ) end end end addEventHandler( "onMarkerHit", djmarker, DJMarkerHit ) function musicChange(musicID) triggerClientEvent(root, "onClientMusicChange", root, musicID) end addEvent( "onMusicChange", true ) addEventHandler( "onMusicChange", root, musicChange ) клиент: local musicFiles = { "music1.mp3", "music2.mp3", "music3.mp3", "music4.mp3", "music5.mp3", "music6.mp3", "music7.mp3", } local soundData = { --{ x, y, z, distance, volume} { 780, -1362.3, 13.9, 15, 10 }, { 780, -1357.65, 13.9, 15, 10 }, { 767.5, -1352.9, 13.1, 15, 10 }, { 767.4, -1366, 13.1, 15, 10 }, { 785.9, -1350.7, 12.6, 15, 10 }, { 774.2, -1344, 12.6, 15, 10 }, { 773.9, -1373.4, 12.6, 15, 10 }, { 786.2, -1369.6, 12.5, 15, 10 }, } local nowPlaying = {} local gui = {} addEventHandler("onClientResourceStart", resourceRoot, function() gui.window = guiCreateWindow(15,300,200,250,"DJ Panel",false) gui.close = guiCreateButton(175,225,20,20,"X",false,gui.window) gui.noobster = guiCreateLabel(10,225,150,50,"Created by Noobster",false,gui.window) gui.musicButtons = { guiCreateButton(25,100,50,20,"Play 1",false,gui.window), guiCreateButton(125,100,50,20,"Play 2",false,gui.window), guiCreateButton(25,125,50,20,"Play 3",false,gui.window), guiCreateButton(125,125,50,20,"Play 4",false,gui.window), guiCreateButton(25,150,50,20,"Play 5",false,gui.window), guiCreateButton(125,150,50,20,"Play 6",false,gui.window), guiCreateButton(25,175,50,20,"Play 7",false,gui.window), } for id, element in ipairs(gui.musicButtons) do addEventHandler("onClientGUIClick", element, guiMusicChange, false ) end addEventHandler ( "onClientGUIClick", gui.close, closeDJWindow, false ) guiWindowSetSizable(gui.window,false) guiSetVisible(gui.window, false) end ) function showDJWindow( ) guiSetVisible ( gui.window, true ) showCursor ( true ) end addEvent( "showWindow", true ) addEventHandler( "showWindow", root, showDJWindow ) function closeDJWindow() guiSetVisible ( gui.window, false) showCursor(false) end function guiMusicChange(button, state) if state == "up" then for id, element in ipairs(gui.musicButtons) do if source == element then triggerServerEvent("onMusicChange", localPlayer, guiGetText(source) == "STOP" and 0 or id) guiSetText(source, guiGetText(source) == "STOP" and "Play "..id or "STOP") elseif guiGetText(element) == "STOP" then guiSetText(element, "Play "..id) end end end end function musicChange(id) stopMusic() if musicFiles[id] then for i, data in ipairs(soundData) do local x, y, z, distance, volume = unpack(data) local sound = playSound3D(musicFiles[id], x, y, z, false) setSoundMaxDistance(sound, distance) setSoundVolume(sound, volume) table.insert(nowPlaying, sound) end end end addEvent( "onClientMusicChange", true ) addEventHandler( "onClientMusicChange", root, musicChange ) function stopMusic() for i, sound in ipairs(nowPlaying) do if isElement(sound) then destroyElement(sound) end end nowPlaying = {} end У меня почти такой же код. У меня вопрос: а зачем разделил local musicFiles и local soundData? ------- Всё понял теперь. Link to comment
PSPNoobster Posted February 24, 2012 Author Share Posted February 24, 2012 Ладно, спасибо всем кто принял участие в этой теме, особенно Aibo ... В результате, чуть модифицировав код ( ну не чуть, пришлось кое что сильно подправить... ) теперь у меня есть полностью рабочая Dj Panelка с 45 песнями и весит всего 16 кб =). Благодаря этой панели теперь я умею создавать собственное онлайн радио , что тоже не плохо... В общем всем спасибо ещё раз... Link to comment
Mc_Trekkie Posted February 25, 2012 Share Posted February 25, 2012 Ладно, спасибо всем кто принял участие в этой теме, особенно Aibo ...В результате, чуть модифицировав код ( ну не чуть, пришлось кое что сильно подправить... ) теперь у меня есть полностью рабочая Dj Panelка с 45 песнями и весит всего 16 кб =). Благодаря этой панели теперь я умею создавать собственное онлайн радио , что тоже не плохо... В общем всем спасибо ещё раз... Помню,как ты вчера с этим парился 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