Jump to content

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


Recommended Posts

Собственно создал небольшой клуб, решил устроить музыку... но ведь скучно, когда одна и та же музыка играет... Вот решил сделать панель ди-джея... Выглядит конечно неочень... но меня это пока устраивало...

Пошарив по этому форуму и собрав "С мира по нитке" собрал всё вот в это:

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 by Guest
Link to comment
  • Replies 82
  • Created
  • Last Reply

Top Posters In This Topic

прочитай внимательно инфо обо всех этих функциях. А то, что ты не совсем еще разбираешься.. это мы итак видим (:

=0 Я то всё это собираю, и действие функции понимаю... а вот как заставить это всё работать? :?

Link to comment
прочитай внимательно инфо обо всех этих функциях. А то, что ты не совсем еще разбираешься.. это мы итак видим (:

=0 Я то всё это собираю, и действие функции понимаю... а вот как заставить это всё работать? :?

на сервере создаём типа так marker = createMarker и т.д и там-же вроде event который открывает gui из клиента когда встаёшь на маркер.

Link to comment

Вот:

  
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

Сервер.

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

Вот мой 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
Вот мой 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

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

Клиент

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

Да, спасибо, работает :), но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера... то ничего не работает... ну ладно, и так сойдёт, спс... Но осталось ещё несколько проблем:

2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... )

4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит...

Link to comment
Да, спасибо, работает :), но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера...
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
Да, спасибо, работает :), но правдо как-то странно, если я пытаюсь изменить развер или цвет маркера... то ничего не работает... ну ладно, и так сойдёт, спс... Но осталось ещё несколько проблем:

2) Как синхронизировать воспроизведение музыки на всех клиентах? ( а то если я включаю то и слышу только я... )

4) Как сделать, чтоб одновременно играла только 1 музыка? а то если много тыкать "On", то такое мясо выходит...

Надо проигрывать на серверной стороне,ты делаешь это на клиенте,т.е слышать будешь только ты.

Если же ты хочешь чтобы игралась на всём сервере:Можно:

Сделать Trigger и функцию там.

Учи луа>>>>>https://forum.multitheftauto.com/viewtopic.php?f=141&t=32458

Link to comment
  • Scripting Moderators
Надо проигрывать на серверной стороне,ты делаешь это на клиенте

Круто, если не считать того, что playSound клиентская функция.

Link to comment

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

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

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

Link to comment
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), Альфа=Прозрачность

Может я плохо знаю луа в целом, но эту команду знаю прекрасно, и всё равно если менять размер или цвет то маркер перестаёт работать... и если снова ставить "оригинальные" размер и цвет то всё снова работает...

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

Выглядит неплохо, спасибо, посмотрю позже...

Надо проигрывать на серверной стороне,ты делаешь это на клиенте,т.е слышать будешь только ты.

Если же ты хочешь чтобы игралась на всём сервере:Можно:

Сделать 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

Запихивать надо девочкам. А в программе нужно составлять алгоритм. Составьте его в виде блок-схемы, потом опишите в виде программного кода.

P.S. Мы может помочь, но писать за вас весь код никто не собирается.

Link to comment

Лови:

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.: Скрипт изменил для удобности. :D

Link to comment
сделал за него всю работу, опять же человек не чему не научится..

только ctrl+c ctrl+v

Ну во-первых, уже научился, причём не мало...

Во-вторых, Это мягко говоря только основы, а не весь скрипт целиком, т.е. я его буду модифицировать и модифицировать... Добавлять новые функции и улучшать, мне главное понять принцип действия функций...

И уже основываясь на "готовом", уже создавать что-то лучшее...

P.S. ctrl+c ctrl+v знаю с 7 лет и неплохо умею применять...особенно где нельзя...

P.S.S. Это первый скрипт, в котором я принял участие ( да, именно принял участие а не создал целиком...) и поэтому заранее хочу поблагодарить всех кто принял участие в этой теме.

Link to comment

"e="ZverCR"]

Надо проигрывать на серверной стороне,ты делаешь это на клиенте

Круто, если не считать того, что playSound клиентская функция.

Как бэ,Кернелл прав.Я просто не написал про Trigger',думал,что автор посмотрел на вики какая это функция и сам сделать Trigger.

сделал за него всю работу, опять же человек не чему не научится..

только ctrl+c ctrl+v

Ну во-первых, уже научился, причём не мало...

Во-вторых, Это мягко говоря только основы, а не весь скрипт целиком, т.е. я его буду модифицировать и модифицировать... Добавлять новые функции и улучшать, мне главное понять принцип действия функций...

И уже основываясь на "готовом", уже создавать что-то лучшее...

P.S. ctrl+c ctrl+v знаю с 7 лет и неплохо умею применять...особенно где нельзя...

P.S.S. Это первый скрипт, в котором я принял участие ( да, именно принял участие а не создал целиком...) и поэтому заранее хочу поблагодарить всех кто принял участие в этой теме.

Если же ты всё понял,можешь расписать нам что именно каждая функция делает...?

Ты ведь ничего не понял,просто скопировал...Когда мне что то дают готовое,Я сначала разбераю что там,а не просто копирую...

Модифицировать,это цифОрки менять и цвет?

"Лишь бы получить такую штучку на сервер гыгыгы !111111"

Точно про тебя."

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