75 lines
3.1 KiB
Lua
75 lines
3.1 KiB
Lua
|
--- removes a player from the call for everyone in the call.
|
||
|
---@param source number the player to remove from the call
|
||
|
---@param callChannel number the call channel to remove them from
|
||
|
function removePlayerFromCall(source, callChannel)
|
||
|
logger.verbose('[call] Removed %s from call %s', source, callChannel)
|
||
|
|
||
|
callData[callChannel] = callData[callChannel] or {}
|
||
|
for player, _ in pairs(callData[callChannel]) do
|
||
|
TriggerClientEvent('pma-voice:removePlayerFromCall', player, source)
|
||
|
end
|
||
|
callData[callChannel][source] = nil
|
||
|
voiceData[source] = voiceData[source] or defaultTable(source)
|
||
|
voiceData[source].call = 0
|
||
|
end
|
||
|
|
||
|
--- adds a player to a call
|
||
|
---@param source number the player to add to the call
|
||
|
---@param callChannel number the call channel to add them to
|
||
|
function addPlayerToCall(source, callChannel)
|
||
|
logger.verbose('[call] Added %s to call %s', source, callChannel)
|
||
|
-- check if the channel exists, if it does set the varaible to it
|
||
|
-- if not create it (basically if not callData make callData)
|
||
|
callData[callChannel] = callData[callChannel] or {}
|
||
|
for player, _ in pairs(callData[callChannel]) do
|
||
|
-- don't need to send to the source because they're about to get sync'd!
|
||
|
if player ~= source then
|
||
|
TriggerClientEvent('pma-voice:addPlayerToCall', player, source)
|
||
|
end
|
||
|
end
|
||
|
callData[callChannel][source] = true
|
||
|
voiceData[source] = voiceData[source] or defaultTable(source)
|
||
|
voiceData[source].call = callChannel
|
||
|
TriggerClientEvent('pma-voice:syncCallData', source, callData[callChannel])
|
||
|
end
|
||
|
|
||
|
--- set the players call channel
|
||
|
---@param source number the player to set the call off
|
||
|
---@param _callChannel number the channel to set the player to (or 0 to remove them from any call channel)
|
||
|
function setPlayerCall(source, _callChannel)
|
||
|
if GetConvarInt('voice_enableCalls', 1) ~= 1 then return end
|
||
|
voiceData[source] = voiceData[source] or defaultTable(source)
|
||
|
local isResource = GetInvokingResource()
|
||
|
local plyVoice = voiceData[source]
|
||
|
local callChannel = tonumber(_callChannel)
|
||
|
if not callChannel then
|
||
|
-- only full error if its sent from another server-side resource
|
||
|
if isResource then
|
||
|
error(("'callChannel' expected 'number', got: %s"):format(type(_callChannel)))
|
||
|
else
|
||
|
return logger.warn("%s sent a invalid call, 'callChannel' expected 'number', got: %s", source,type(_callChannel))
|
||
|
end
|
||
|
end
|
||
|
if isResource then
|
||
|
-- got set in a export, need to update the client to tell them that their call
|
||
|
-- changed
|
||
|
TriggerClientEvent('pma-voice:clSetPlayerCall', source, callChannel)
|
||
|
end
|
||
|
|
||
|
Player(source).state.callChannel = callChannel
|
||
|
|
||
|
if callChannel ~= 0 and plyVoice.call == 0 then
|
||
|
addPlayerToCall(source, callChannel)
|
||
|
elseif callChannel == 0 then
|
||
|
removePlayerFromCall(source, plyVoice.call)
|
||
|
elseif plyVoice.call > 0 then
|
||
|
removePlayerFromCall(source, plyVoice.call)
|
||
|
addPlayerToCall(source, callChannel)
|
||
|
end
|
||
|
end
|
||
|
exports('setPlayerCall', setPlayerCall)
|
||
|
|
||
|
RegisterNetEvent('pma-voice:setPlayerCall', function(callChannel)
|
||
|
setPlayerCall(source, callChannel)
|
||
|
end)
|