Jump to content

Панель Ди-джея [99% compleated] Thanks to all!


Recommended Posts

:D ну я же расписал как он должен работать как я думаю... что там непонятного если там всё на нубоуровне? :mrgreen:

я не понимаю зачем тебе сервер, хотя там только триггер, тебе объянили как использовать функцию, не надо изобретать велосипед

Link to comment
  • Replies 82
  • Created
  • Last Reply

Top Posters In This Topic

я не понимаю зачем тебе сервер, хотя там только триггер, тебе объянили как использовать функцию, не надо изобретать велосипед

Была задача:

":arrow:[НЕ Решено] 2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... )"

Дали команды:

triggerServerEvent

triggerClientEvent

Подсказали как они работают и как это должно выглядеть

Вот я и сделал как я понял... но не работает и я не пойму почему, вот и прошу помочь...

Link to comment

При нажатии ГУИ кнопочки, клиент с помощью triggerServerEvent вызывает серверное событие, которое запускает серверную функцию-обработчик, которая с помощью triggerClientEvent вызывает для всех клиентов событие, которое запускает клиентскую функцию-обработчик, внутри которой запускается мелодия

Link to comment
При нажатии ГУИ кнопочки, клиент с помощью triggerServerEvent вызывает серверное событие, которое запускает серверную функцию-обработчик, которая с помощью triggerClientEvent вызывает для всех клиентов событие, которое запускает клиентскую функцию-обработчик, внутри которой запускается мелодия

это я понял, вот только зачем?

можно же сразу же вызывать плей песни, а не создавть 100500обработчиков

Ну по сути он правильно говорит, просто вместо playSound надо сделать триггер с сервера на клиент на эту функцию.

что-то вроде этого:

triggerClientEvent( root, "playSound", source, "test/example.mp3" ); 

Link to comment

Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУ

Избегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины.

Link to comment
Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУ

Избегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины.

И всё же, не подскажешь где в моём алгоритме или командах допущена ошибка?

Link to comment
Я вижу кто-то не понимает, что песенка должна одновременно запуститься у всех игроков, а не только, у того, кто нажал ПЛАУ

Избегая сервер при запуске песни, мы получим рассинхрон. Т.е. у каждого оно будет играть ваще на разном процентаже длины.

triggerClientEvent 

серверная функция =)

я понимаю, знаю как это осуществить, так как сделал собственный плеер/радио, не коммунити, он как для одного игрока, так и для всех

Link to comment

Мда.... ну ок... Cразу хочу сказать, что тригеры делал только для "play 1", именно по этому этот "play 1" и не работает :mrgreen: , а остальные оставил без тригеров... именно по этому они и работают, но не так как надо.

Вот что у меня получилось в целом:

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 by Guest
Link to comment

А.Ок.Не обратил внимание...Походу

Это меняй:

            if uTeam then 
                if getTeamName( uTeam ) == 'DJ' then 

На это

if uTeam then 
     if getTeamName( uTeam ) == 'DJ'  
--Твой код,если он в команде DJ 
else 
--Твой код если он не в команде DJ 

Думаю понятно.

Как-то так.

Проверь...

Link to comment
А.Ок.Не обратил внимание...Походу

Это меняй:

            if uTeam then 
                if getTeamName( uTeam ) == 'DJ' then 

На это

if uTeam then 
     if getTeamName( uTeam ) == 'DJ'  
--Твой код,если он в команде DJ 
else 
--Твой код если он не в команде DJ 

Думаю понятно.

Как-то так.

Проверь...

Эмм.... или я что-то не понимаю... или ты...

Эта функция ( DJMarkerHit ) прекрасно РАБОТАЕТ, не работает функция воспроизведения 1 музыки ( onmusic1started )

Щас опять выложу клиент а то кто-то удалил пост.

Link to comment

Да что за? почему после того как я вставляю код и нажимаю Submit пост получается пустым?

Короче ладно, вот ссылка на скрипт...

http://rghost.ru/private/36611648/979a3f56478864c5945807cae3ae846b

Повторю ещё раз, что тригеры делал только для воспроизведения первой музыки!!! для остальных НЕТ.

Поэтому Первая музыка и не воспроизводится... а все остальные работают...

Link to comment

Ща посмотрю...

Блин чувак!Только луа бы кинул!

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 by Guest
Link to comment
  • Scripting Moderators
Выкладывай на pastebin.com, если тут что не так. Кстати, я тогда еще удалил пустой пост, там не было никакого клиентского кода (: просто пустой пост был

Код там существовал, нужно было нажать "Quote" :)

Link to comment

после 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
после 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

Ладно, спасибо всем кто принял участие в этой теме, особенно Aibo :mrgreen: ...

В результате, чуть модифицировав код ( ну не чуть, пришлось кое что сильно подправить... ) теперь у меня есть полностью рабочая Dj Panelка с 45 песнями и весит всего 16 кб =). Благодаря этой панели теперь я умею создавать собственное онлайн радио :mrgreen:, что тоже не плохо... В общем всем спасибо ещё раз... :mrgreen:

Link to comment
Ладно, спасибо всем кто принял участие в этой теме, особенно Aibo :mrgreen: ...

В результате, чуть модифицировав код ( ну не чуть, пришлось кое что сильно подправить... ) теперь у меня есть полностью рабочая Dj Panelка с 45 песнями и весит всего 16 кб =). Благодаря этой панели теперь я умею создавать собственное онлайн радио :mrgreen:, что тоже не плохо... В общем всем спасибо ещё раз... :mrgreen:

:D

Помню,как ты вчера с этим парился xD

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