-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathserver.lua
More file actions
117 lines (94 loc) · 3.58 KB
/
server.lua
File metadata and controls
117 lines (94 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
QBCore = exports[Config.Core]:GetCoreObject()
local pTalking = {}
QBCore.Commands.Add('dispatch', "Opens Job Dispatch List", {}, false, function(source, args)
TriggerEvent('fl-dispatch:server:open', source, args)
end)
RegisterServerEvent('fl-dispatch:server:open', function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if IsJobAllowed(Player.PlayerData.job.name) and Player.PlayerData.job.onduty then
local type = "toggle"
TriggerEvent("fl-dispatch:server:refresh")
if args[1] == "0" then
type = "drag"
end
TriggerClientEvent("fl-dispatch:client:open", src, type)
end
end)
RegisterNetEvent('pma-voice:setTalkingOnRadio')
AddEventHandler('pma-voice:setTalkingOnRadio', function(talking)
local src = source
local channel = GetRadioChannel(src)
local players = exports['pma-voice']:getPlayersInRadioChannel(channel)
pTalking[tostring(src)] = talking
for playerSrc, _ in pairs(players) do
TriggerClientEvent('fl-dispatch:client:setTalkingOnRadio', playerSrc, src, talking)
end
end)
RegisterNetEvent('pma-voice:setPlayerRadio', function(channel)
local src = source
TriggerClientEvent('fl-dispatch:client:setPlayerRadio', -1, src, channel)
TriggerClientEvent('fl-dispatch:client:setTalkingOnRadio', -1, src, false)
end)
RegisterNetEvent('QBCore:Server:OnPlayerUnload', function(source)
Wait(3500)
local src = source
TriggerClientEvent('fl-dispatch:client:removePlayer', -1, src)
end)
AddEventHandler('playerDropped', function(reason)
local src = source
TriggerClientEvent('fl-dispatch:client:removePlayer', -1, src)
end)
AddEventHandler('QBCore:Server:OnMetaDataUpdate', function(source, meta, val)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if IsJobAllowed(Player.PlayerData.job.name) and Player.PlayerData.job.onduty then
TriggerEvent("fl-dispatch:server:refresh")
end
end)
function GetRadioChannel(source)
return Player(source).state['radioChannel']
end
RegisterServerEvent("fl-dispatch:server:refresh")
AddEventHandler("fl-dispatch:server:refresh", function(ch)
local data = {}
for _, job in ipairs(Config.Jobs) do
local jobData = {
job = job,
players = {}
}
for k, v in pairs(QBCore.Functions.GetPlayers()) do
local Player = QBCore.Functions.GetPlayer(v)
if Player and Player.PlayerData.job.name == job and Player.PlayerData.job.onduty then
local name = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
local grade = Player.PlayerData.job.grade.name
local callsign = Player.PlayerData.metadata['callsign']
local isTalking = pTalking[tostring(v)] or false
local channel = 0
if ch then
channel = ch
else
channel = GetRadioChannel(v)
end
table.insert(jobData.players, {
src = v,
name = name,
grade = grade,
channel = channel,
callsign = callsign,
isTalking = isTalking,
})
end
end
table.insert(data, jobData)
end
TriggerClientEvent("fl-dispatch:client:refresh", -1, data)
end)
function IsJobAllowed(job)
for _, allowedJob in ipairs(Config.Jobs) do
if allowedJob == job then
return true
end
end
return false
end