95 lines
3.2 KiB
Lua
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 |