Main/resources/[Developer]/[Max]/myDj/server.lua
2025-06-15 22:11:42 +02:00

178 lines
No EOL
5.3 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateCallback('myDJ:requestPlaylistsAndSongs', function(source, cb)
local playlists = {}
local songs = {}
MySQL.Async.fetchAll('SELECT * from playlists', {},
function(result)
playlists = result
MySQL.Async.fetchAll('SELECT * from playlist_songs', {},
function(result)
songs = result
cb(playlists, songs)
end
)
end
)
end)
QBCore.Functions.CreateCallback('myDJ:requestPlaylistById', function(source, cb, playlistId)
MySQL.Async.fetchAll('SELECT * from playlist_songs WHERE playlist = @playlistId', {
['@playlistId'] = playlistId,
},
function(result)
cb(result)
end
)
end)
QBCore.Functions.CreateCallback('myDJ:requestPlaylists', function(source, cb)
MySQL.Async.fetchAll('SELECT id, label from playlists', {},
function(result)
cb(result)
end
)
end)
QBCore.Functions.CreateCallback('myDJ:requestPlaylistSongs', function(source, cb, playlistId)
MySQL.Async.fetchAll('SELECT * from playlist_songs WHERE playlist = @playlist', {
['@playlistId'] = playlistId,
},
function(result)
cb(result)
end
)
end)
QBCore.Functions.CreateCallback('myDJ:receiveRunningSongs', function(source, cb)
cb(Config.DJPositions)
end)
RegisterServerEvent('myDJ:addPlaylist')
AddEventHandler('myDJ:addPlaylist', function(label)
MySQL.Async.execute(
'INSERT INTO playlists (label) VALUES (@label)', {
['@label'] = label,
})
end)
RegisterServerEvent('myDJ:addSongToPlaylist')
AddEventHandler('myDJ:addSongToPlaylist', function(playlistId, videoLink)
--print(tostring(playlistId) .. ' link ' .. tostring(videoLink))
MySQL.Async.execute(
'INSERT INTO playlist_songs (playlist, link) VALUES (@playlist, @link)', {
['@playlist'] = playlistId,
--['@label'] = label,
['@link'] = videoLink,
})
end)
RegisterServerEvent('myDJ:removeSongFromPlaylist')
AddEventHandler('myDJ:removeSongFromPlaylist', function(songId, link)
MySQL.Async.execute(
'DELETE FROM playlist_songs WHERE id = @id', {
['@id'] = songId,
})
end)
RegisterServerEvent('myDJ:removePlaylist')
AddEventHandler('myDJ:removePlaylist', function(playlistId)
MySQL.Async.execute(
'DELETE FROM playlists WHERE id = @id', {
['@id'] = playlistId,
})
end)
-- SYNC
RegisterServerEvent('myDj:syncPlaySong')
AddEventHandler('myDj:syncPlaySong', function(currentDJ, DJPos, DJRange, link)
--print('got event trigger: ' .. currentDJ .. ' . ' .. tostring(DJPos) .. ' and play ' .. link)
TriggerClientEvent('myDj:clientPlaySong', -1, currentDJ, DJPos, DJRange, link)
for k, v in pairs(Config.DJPositions) do
if v.name == currentDJ then
Config.DJPositions[k].currentData = {
titleFromPlaylist = false,
currentlyPlaying = true,
currentLink = link,
currentTime = 0,
}
break
end
end
--print('trigger event for client')
end)
RegisterServerEvent('myDj:syncPlaySongFromPlaylist')
AddEventHandler('myDj:syncPlaySongFromPlaylist', function(currentDJ, DJPos, DJRange, link, playlistId)
TriggerClientEvent('myDj:clientPlaySongFromPlaylist', -1, currentDJ, DJPos, DJRange, link, playlistId)
for k, v in pairs(Config.DJPositions) do
if v.name == currentDJ then
Config.DJPositions[k].currentData = {
titleFromPlaylist = true,
currentPlaylist = playlistId,
currentlyPlaying = true,
currentLink = link,
currentTime = 0,
}
break
end
end
end)
-- Sync TimeStamps
Citizen.CreateThread(function()
while true do
Citizen.Wait(1000)
for k, v in pairs(Config.DJPositions) do
if v.currentData ~= nil and v.currentData.currentlyPlaying then
v.currentData.currentTime = v.currentData.currentTime + 1
end
end
end
end)
RegisterServerEvent('myDj:syncStartStop')
AddEventHandler('myDj:syncStartStop', function(currentDJ)
--print('sync start stop: ' .. currentDJ)
TriggerClientEvent('myDj:clientStartStop', -1, currentDJ)
for k, v in pairs(Config.DJPositions) do
if v.name == currentDJ then
if v.currentData ~= nil and v.currentData.currentlyPlaying then
Config.DJPositions[k].currentData.currentlyPlaying = false
elseif v.currentData ~= nil and not v.currentData.currentlyPlaying then
Config.DJPositions[k].currentData.currentlyPlaying = true
end
break
end
end
end)
RegisterServerEvent('myDj:syncForward')
AddEventHandler('myDj:syncForward', function(currentDJ)
TriggerClientEvent('myDj:clientForward', -1, currentDJ)
end)
RegisterServerEvent('myDj:syncRewind')
AddEventHandler('myDj:syncRewind', function(currentDJ)
TriggerClientEvent('myDj:clientRewind', -1, currentDJ)
end)
RegisterServerEvent('myDj:syncVolumeUp')
AddEventHandler('myDj:syncVolumeUp', function(currentDJ)
TriggerClientEvent('myDj:clientVolumeUp', -1, currentDJ)
end)
RegisterServerEvent('myDj:syncVolumeDown')
AddEventHandler('myDj:syncVolumeDown', function(currentDJ)
TriggerClientEvent('myDj:clientVolumeDown', -1, currentDJ)
end)