2025-04-07 01:41:12 +00:00

95 lines
3.2 KiB
Lua

local globalState = GlobalState
local db = require 'modules.server.db'
local prisonBreakcfg = require 'configs.prisonbreak'
local utils = require 'modules.server.utils'
local ox_doorlock = exports.ox_doorlock
local prisonModules = {}
-- Breakout of Prison --
function prisonModules.prisonBreakout(src)
local playerState = Player(src)?.state
if not playerState then return end
setJailTime(src, 0) -- Set jail time to zero
-- Delete Confiscated Inv --
local CID = getCharID(src)
local confiscatedItems = MySQL.scalar.await(db.GET_ITEMS, { CID })
if next(confiscatedItems) then
MySQL.query.await(db.CLEAR_CONFISCATED_ITEMS, { CID })
end
return (playerState.jailTime == 0)
end
-- Countdown for Alarms to Turn Off --
function prisonModules.alarmCountdown()
return SetTimeout((prisonBreakcfg.AlarmLength * 60000), function()
globalState.prisonAlarms = false
for x = 1, #prisonBreakcfg.HackZones do
local door = ox_doorlock:getDoorFromName(prisonBreakcfg.HackZones[x].gate)
TriggerEvent('ox_doorlock:setState', door.id, true)
end
end)
end
-- Set Terminal Hacked State --
function prisonModules.setTerminalHackedState(src, terminalID, setState)
local dist = utils.terminalDistanceCheck(src, terminalID)
if not dist then return end
if globalState[('PrisonTerminal_%s'):format(terminalID)].isHacked == setState then return end
if globalState[('PrisonTerminal_%s'):format(terminalID)].lastHacker ~= src then
local cid = getCharID(src)
utils.banPlayer(src, cid)
return
end
local isBusy = globalState[('PrisonTerminal_%s'):format(terminalID)].isBusy
globalState[('PrisonTerminal_%s'):format(terminalID)] = {
isHacked = setState,
isBusy = isBusy,
}
if setState then
local door = ox_doorlock:getDoorFromName(prisonBreakcfg.HackZones[terminalID].gate)
TriggerEvent('ox_doorlock:setState', door.id, false)
prisonModules.setTerminalCooldown(terminalID)
end
return (globalState[('PrisonTerminal_%s'):format(terminalID)].isHacked == setState)
end
-- Set Terminal Busy State --
function prisonModules.setTerminalBusyState(src, terminalID, setState)
local dist = utils.terminalDistanceCheck(src, terminalID)
if not dist then return end
if globalState[('PrisonTerminal_%s'):format(terminalID)].isBusy == setState then return end
local isHacked = globalState[('PrisonTerminal_%s'):format(terminalID)].isHacked
globalState[('PrisonTerminal_%s'):format(terminalID)] = {
isHacked = isHacked,
isBusy = setState,
lastHacker = src
}
return (globalState[('PrisonTerminal_%s'):format(terminalID)].isBusy == setState)
end
-- Set Terminal Cooldown --
function prisonModules.setTerminalCooldown(terminalID)
SetTimeout((prisonBreakcfg.TerminalCooldowns * 60000), function()
local door = ox_doorlock:getDoorFromName(prisonBreakcfg.HackZones[terminalID].gate)
globalState[('PrisonTerminal_%s'):format(terminalID)] = {
isHacked = false,
isBusy = false,
lastHacker = nil
}
TriggerEvent('ox_doorlock:setState', door.id, true)
end)
end
return prisonModules