94 lines
2.8 KiB
Lua
94 lines
2.8 KiB
Lua
local function loadAudioBank(audioBank)
|
|
if not audioBank then return end
|
|
local timeout = 500
|
|
while not RequestScriptAudioBank(audioBank, false) do
|
|
if timeout == 0 then
|
|
return false
|
|
else
|
|
timeout -= 1
|
|
end
|
|
Wait(0)
|
|
end
|
|
return true
|
|
end
|
|
|
|
local function releaseAudioBank(audioBank)
|
|
if not audioBank then return end
|
|
ReleaseNamedScriptAudioBank(audioBank)
|
|
end
|
|
|
|
---@class PlaySoundParams
|
|
---@field audioBank? string
|
|
---@field audioName string|string[]
|
|
---@field audioRef string
|
|
|
|
local function playSound(data)
|
|
if type(data.audioName) == 'string' then
|
|
data.audioName = {data.audioName}
|
|
end
|
|
loadAudioBank(data.audioBank)
|
|
for i = 1, #data.audioName do
|
|
local audioName = data.audioName[i]
|
|
local soundId = GetSoundId()
|
|
PlaySoundFrontend(soundId, audioName, data.audioRef, false)
|
|
ReleaseSoundId(soundId)
|
|
end
|
|
releaseAudioBank(data.audioBank)
|
|
end
|
|
|
|
exports('PlaySound', playSound)
|
|
|
|
RegisterNetEvent('mana_audio:client:playSound', playSound)
|
|
|
|
---@class PlaySoundFromEntityParams: PlaySoundParams
|
|
---@field entity number
|
|
|
|
---@param data PlaySoundFromEntityParams
|
|
local function playSoundFromEntity(data)
|
|
if not DoesEntityExist(data.entity) then return end
|
|
if type(data.audioName) == 'string' then
|
|
data.audioName = {data.audioName}
|
|
end
|
|
loadAudioBank(data.audioBank)
|
|
for i = 1, #data.audioName do
|
|
local audioName = data.audioName[i]
|
|
local soundId = GetSoundId()
|
|
PlaySoundFromEntity(soundId, audioName, data.entity, data.audioRef, false, false)
|
|
ReleaseSoundId(soundId)
|
|
end
|
|
releaseAudioBank(data.audioBank)
|
|
end
|
|
|
|
exports('PlaySoundFromEntity', playSoundFromEntity)
|
|
|
|
RegisterNetEvent('mana_audio:client:playSoundFromEntity', function(data)
|
|
if not NetworkDoesEntityExistWithNetworkId(data.netId) then return end
|
|
playSoundFromEntity({
|
|
audioBank = data.audioBank,
|
|
audioName = data.audioName,
|
|
audioRef = data.audioRef,
|
|
entity = NetworkGetEntityFromNetworkId(data.netId),
|
|
})
|
|
end)
|
|
|
|
---@class PlaySoundFromCoordsParams: PlaySoundParams
|
|
---@field coords vector3
|
|
---@field range number
|
|
|
|
---@param data PlaySoundFromCoordsParams
|
|
local function playSoundFromCoords(data)
|
|
if type(data.audioName) == 'string' then
|
|
data.audioName = {data.audioName}
|
|
end
|
|
loadAudioBank(data.audioBank)
|
|
for i = 1, #data.audioName do
|
|
local audioName = data.audioName[i]
|
|
local soundId = GetSoundId()
|
|
PlaySoundFromCoord(soundId, audioName, data.coords.x, data.coords.y, data.coords.z, data.audioRef, false, data.range, false)
|
|
ReleaseSoundId(soundId)
|
|
end
|
|
releaseAudioBank(data.audioBank)
|
|
end
|
|
|
|
exports('PlaySoundFromCoords', playSoundFromCoords)
|
|
RegisterNetEvent('mana_audio:client:playSoundFromCoords', playSoundFromCoords) |