Files
Elite-Gaming-FiveM/resources/bodycam/client.lua
T
2026-02-11 21:08:37 -08:00

398 lines
11 KiB
Lua

-- Config (DON'T TOUCH)
Config = {
Model = axon
}
-- THIS IS WHERE YOU DONT TOUCH, THESE ARE THE SOUNDS.
local function PlayAxonBodyOn()
local playerNetId = NetworkGetNetworkIdFromEntity(PlayerPedId())
TriggerServerEvent("Server:SoundToRadius", playerNetId, 4.0, "BODYCAMAXON_ON", 0.6)
end
local function PlayAxonBodyOff()
local playerNetId = NetworkGetNetworkIdFromEntity(PlayerPedId())
TriggerServerEvent("Server:SoundToRadius", playerNetId, 4.0, "BODYCAMAXON_OFF", 0.6)
end
local function PlayAxonBodyDPress()
local playerNetId = NetworkGetNetworkIdFromEntity(PlayerPedId())
TriggerServerEvent("Server:SoundToRadius", playerNetId, 4.0, "BODYCAMAXON_DPRESS", 0.6)
end
local function PlayAxonBodyPress()
local playerNetId = NetworkGetNetworkIdFromEntity(PlayerPedId())
TriggerServerEvent("Server:SoundToRadius", playerNetId, 4.0, "BODYCAMAXON_PRESS", 0.6)
end
local function PlayAxonBodyLowCharge()
local playerNetId = NetworkGetNetworkIdFromEntity(PlayerPedId())
TriggerServerEvent("Server:SoundToRadius", playerNetId, 4.0, "BODYCAMAXON_LOWBATTERY", 0.6)
end
local function PlayGBodycamSoundOn()
PlaySoundFrontend(-1, "5_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET", 1)
end
local function PlayGBodycamSoundOff()
PlaySoundFrontend(-1, "ATM_WINDOW", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
end
function StartAxonTaserRecording()
PlayAxonBodyOn()
Notify("~y~Axon Taser: ~o~Taser unholstered. ~w~Body camera has ~g~started ~w~recording.")
end
----
----
----
-- START OF MAIN CODE SORTA
local isABCon = false
local isTaserDrawn = false
local isTaserFired = false
local batteryLevel = 100
local lowBatteryThreshold = 20
local batteryDrainRate = 1
local rechargeRate = 5
local rechargeInterval = 60000
local isRecharging = false
local isCalibrated = false
RegisterCommand("bcCalibrate", function()
isCalibrated = true
Notify("~g~Bodycam calibrated successfully.")
end, false)
function ToggleBodycam()
if isABCon then
isABCon = false
else
if batteryLevel > 0 then
isABCon = true
else
Notify("~r~Battery depleted. Unable to start recording.")
PlayAxonBodyLowCharge()
end
end
end
Citizen.CreateThread(function()
while true do
Citizen.Wait(60000)
if isABCon and batteryLevel > 0 and not isRecharging then
batteryLevel = batteryLevel - 5
if batteryLevel <= 10 then
Notify("~r~Bodycam Battery Low: ~w~" .. batteryLevel .. "% remaining.")
end
elseif batteryLevel <= 0 then
isABCon = false
Notify("~r~Bodycam Battery: ~w~Depleted. Recording stopped.")
end
end
end)
function StartRecharge()
if isRecharging or batteryLevel >= 100 then return end
isRecharging = true
Citizen.CreateThread(function()
while isRecharging and batteryLevel < 100 do
Citizen.Wait(rechargeInterval)
batteryLevel = math.min(batteryLevel + rechargeRate, 100)
if batteryLevel < 100 then
Notify("~y~Bodycam Battery: ~g~" .. batteryLevel .. "% ~y~(Still Charging...)")
else
Notify("~g~Bodycam battery fully recharged. Charging stopped.")
PlayAxonBodyLowCharge()
isRecharging = false
end
end
end)
end
RegisterCommand("bodycamCharge", function()
Notify("~y~Bodycam Battery Level: ~g~" .. batteryLevel .. "%")
end, false)
RegisterCommand("rechargeBodycam", function()
local playerPed = PlayerPedId()
if IsPedInAnyVehicle(playerPed, false) then
if batteryLevel < 100 then
Notify("~y~Axon Body: ~w~ You're bodycam has started charging.")
StartRecharge()
elseif batteryLevel == 100 then
Notify("~y~Axon Body: ~w~You're bodycam has started charging.")
Notify("~y~Axon Body: ~w~Battery ~r~Full~w~, Charging has stopped.")
PlayAxonBodyLowCharge()
end
else
Notify("~r~You must be in a vehicle to recharge the bodycam.")
end
end, false)
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
local playerPed = PlayerPedId()
local playerWeapon = GetSelectedPedWeapon(playerPed)
if isCalibrated then
if playerWeapon == GetHashKey("WEAPON_STUNGUN") then
if not isTaserDrawn then
Citizen.Wait(3000)
isTaserDrawn = true
if not isABCon then
isABCon = true
Config.Model = 'axon'
StartAxonTaserRecording()
end
end
if IsPedShooting(playerPed) and not isTaserFired then
isTaserFired = true
Notify("~y~Axon Taser: ~o~Taser fired, updating dispatch.")
Citizen.Wait(1000)
end
else
if isTaserDrawn then
isTaserDrawn = false
isTaserFired = false
end
end
end
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(3000)
if isABCon == true then
Citizen.Wait(120000)
PlayAxonBodyOn()
end
end
end)
local isShowingAxon = false
local record = false
local bdWeapons = {
'WEAPON_PISTOL',
'WEAPON_COMBATPISTOL',
'WEAPON_SNSPISTOL',
'WEAPON_HEAVYPISTOL'
}
Citizen.CreateThread(function()
while true do
Citizen.Wait(100)
local ped = PlayerPedId()
local currentWeapon = GetSelectedPedWeapon(ped)
local isWeaponMatched = false
for _, weapon in ipairs(bdWeapons) do
if currentWeapon == GetHashKey(weapon) then
isWeaponMatched = true
break
end
end
if not IsPedInAnyVehicle(ped, true) then
if isWeaponMatched and not isABCon then
if not isCalibrated then
return
end
Citizen.Wait(2000)
Notify("~y~Axon Signal Sidearm: ~o~Weapon unholstered. ~w~Body camera has ~g~started ~w~recording.")
PlayAxonBodyOn()
isABCon = true
Config.Model = 'axon'
end
else
Citizen.Wait(1000)
end
end
end)
-----
-- VEHICLE AXON SIGNAL
Citizen.CreateThread(function()
while true do
Citizen.Wait(100)
local ped = PlayerPedId()
if IsPedInAnyVehicle(ped, false) then
local currentVehicle = GetVehiclePedIsIn(ped, false)
local LightsOn = IsVehicleSirenOn(currentVehicle)
if isCalibrated then
if LightsOn and not isABCon then
Citizen.Wait(2000)
if IsVehicleSirenOn(currentVehicle) then
Notify("~y~Axon Signal Vehicle: ~o~Emergency lights activated. ~w~Body camera has ~g~started ~w~recording.")
PlayAxonBodyOn()
isABCon = true
Config.Model = 'axon'
end
end
else
Citizen.Wait(1000)
end
else
Citizen.Wait(1000)
end
end
end)
RegisterKeyMapping('axonbc', 'Toggle your Axon Bodycam', 'keyboard', 'numpad7')
RegisterCommand("axonbc", function(source, args, rawCommand)
if isCalibrated == false then
Notify("~r~Please calibrate your bodycam first using /bcCalibrate.")
else
local ped = PlayerPedId()
while not HasAnimDictLoaded("clothingtie") do
RequestAnimDict("clothingtie")
Citizen.Wait(0)
end
local pos = GetEntityCoords(ped, true)
local rot = GetEntityHeading(ped)
if isABCon then
TaskPlayAnimAdvanced(ped, "clothingtie", "outro", pos, 0.0, 0.0, rot, 8.0, 3.0, -1, 50, 0.125, 0, 0)
Citizen.Wait(300)
PlayAxonBodyPress()
Citizen.Wait(600)
ClearPedTasks(ped)
Notify("~y~AXON BODY: ~w~Body Camera has ~r~stopped~w~ recording.")
PlayAxonBodyOff()
else
TaskPlayAnimAdvanced(ped, "clothingtie", "outro", pos, 0.0, 0.0, rot, 8.0, 3.0, -1, 50, 0.125, 0, 0)
Citizen.Wait(600)
PlayAxonBodyDPress()
Citizen.Wait(600)
ClearPedTasks(ped)
Notify("~y~AXON BODY: ~w~Body Camera has ~g~started~w~ recording.")
PlayAxonBodyOn()
end
isABCon = not isABCon
Config.Model = 'axon'
end
end, false)
RegisterCommand("togglerec", function(source, args, rawCommand)
record = not record
if not record then
TriggerEvent('chat:addMessage', {
color = {255, 0, 0},
multiline = true,
args = {"Bodycam", "Bodycam recording set to ^1 false"}
})
else
TriggerEvent('chat:addMessage', {
color = {255, 0, 0},
multiline = true,
args = {"Bodycam", "Bodycam recording set to ^2 true"}
})
end
end, false)
function Notify(string)
SetNotificationTextEntry("STRING")
AddTextComponentString(string)
DrawNotification(false, true)
end
Citizen.CreateThread(function()
while true do
if isABCon then
local year, month, day, hour, minute, second = GetLocalTime()
if month < 10 then
month = "0" .. month
end
if day < 10 then
day = "0" .. day
end
if isShowingAxon and Config.Model == 'axon' then
SendNUIMessage({
transactionType = 'updateTime',
timestamp = year .. '-0' .. month .. '-' .. day .. ' ' .. 'T' .. hour .. ':' .. minute .. ':' .. second,
})
end
if Config.Model == 'axon' and not isShowingAxon then
SendNUIMessage({
transactionType = 'showAxon',
show = true,
timestamp = year .. '-0' .. month .. '-' .. day .. ' ' .. 'T' .. hour .. ':' .. minute .. ':' .. second,
})
isShowingAxon = true
end
else
if isShowingAxon and Config.Model == 'axon' then
SendNUIMessage({
transactionType = 'showAxon',
show = false,
})
isShowingAxon = false
end
end
Citizen.Wait(100)
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(0) -- Continuous check
if isABCon then
Citizen.Wait(20000) -- Wait 20 seconds after the bodycam is turned on
while isABCon do
PlayAxonBodyOn() -- Play the activation sound
Citizen.Wait(20000) -- Repeat every 20 seconds
end
else
Citizen.Wait(100) -- Prevent excessive looping when the bodycam is off
end
end
end)