Skip to content
This repository has been archived by the owner on Jul 17, 2018. It is now read-only.

Commit

Permalink
Many improvements, see description
Browse files Browse the repository at this point in the history
- Major code cleanup
- Improved usability with the commands, not specifying user in the unjail command will unjail the source
- Check for jailing non-existing users, and makes sure there is a time
- Locate improvements with formatting (using %s)
- Code cleanup and improvements over all
- Prison clothes moved to `config.lua`
- Added basic documentation
  • Loading branch information
ElPumpo committed Mar 26, 2018
1 parent 6e1eccb commit 363d2fa
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 102 deletions.
120 changes: 46 additions & 74 deletions client/main.lua
@@ -1,105 +1,77 @@
local cJ = false
local escape = false
local unjail = false
local JailLocation = Config.JailLocation

--ESX base

Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
end)

RegisterNetEvent("esx_jailer:jail")
AddEventHandler("esx_jailer:jail", function(jailTime)
if cJ == true then
if escape == true then
return
end
local pP = GetPlayerPed(-1)
if DoesEntityExist(pP) then

local sourcePed = GetPlayerPed(-1)
if DoesEntityExist(sourcePed) then
Citizen.CreateThread(function()
local playerOldLoc = GetEntityCoords(pP, true)

-- Assign jail skin to user
TriggerEvent('skinchanger:getSkin', function(skin)
if skin.sex == 0 then
local clothesSkin = {
['tshirt_1'] = 15, ['tshirt_2'] = 0,
['torso_1'] = 146, ['torso_2'] = 0,
['decals_1'] = 0, ['decals_2'] = 0,
['arms'] = 0,
['pants_1'] = 3, ['pants_2'] = 7,
['shoes_1'] = 12, ['shoes_2'] = 12,
['chain_1'] = 50, ['chain_2'] = 0
}
TriggerEvent('skinchanger:loadClothes', skin, clothesSkin)
TriggerEvent('skinchanger:loadClothes', skin, Config.Uniforms['prison_wear'].male)
else
local clothesSkin = {
['tshirt_1'] = 3, ['tshirt_2'] = 0,
['torso_1'] = 38, ['torso_2'] = 3,
['decals_1'] = 0, ['decals_2'] = 0,
['arms'] = 2,
['pants_1'] = 3, ['pants_2'] = 15,
['shoes_1'] = 66, ['shoes_2'] = 5,
['chain_1'] = 0, ['chain_2'] = 2
}
TriggerEvent('skinchanger:loadClothes', skin, clothesSkin)
TriggerEvent('skinchanger:loadClothes', skin, Config.Uniforms['prison_wear'].female)
end
local playerPed = GetPlayerPed(-1)
ClearPedBloodDamage(playerPed)
ResetPedVisibleDamage(playerPed)
ClearPedLastWeaponDamage(playerPed)
ResetPedMovementClipset(playerPed, 0)
end)
SetEntityCoords(pP, JailLocation.x, JailLocation.y, JailLocation.z)
cJ = true

-- Clear player
SetPedArmour(sourcePed, 0)
ClearPedBloodDamage(sourcePed)
ResetPedVisibleDamage(sourcePed)
ClearPedLastWeaponDamage(sourcePed)
ResetPedMovementClipset(sourcePed, 0)
SetEntityCanBeDamaged(sourcePed, false)

SetEntityCoords(sourcePed, JailLocation.x, JailLocation.y, JailLocation.z)
escape = true
unjail = false
while jailTime > 0 and not unjail do
pP = GetPlayerPed(-1)
RemoveAllPedWeapons(pP, true)
SetEntityInvincible(pP, true)
if IsPedInAnyVehicle(pP, false) then
ClearPedTasksImmediately(pP)
sourcePed = GetPlayerPed(-1)
RemoveAllPedWeapons(sourcePed, true)
if IsPedInAnyVehicle(sourcePed, false) then
ClearPedTasksImmediately(sourcePed)
end
if jailTime % 30 == 0 then
TriggerEvent('chatMessage', _U('judge'), { 147, 196, 109 }, _U('remaining_msg1') .. round(jailTime / 60).. _U('remaining_msg2'))

if jailTime % 120 == 0 then
TriggerEvent('chatMessage', _U('judge'), { 147, 196, 109 }, _U('remaining_msg', round(jailTime / 60)))
TriggerServerEvent('esx_jailer:updateRemaining', jailTime)
end
Citizen.Wait(500)
local pL = GetEntityCoords(pP, true)
local D = Vdist(JailLocation.x, JailLocation.y, JailLocation.z, pL['x'], pL['y'], pL['z'])
if D > 10 then
SetEntityCoords(pP, JailLocation.x, JailLocation.y, JailLocation.z)

Citizen.Wait(20000)

-- Is the player trying to escape?
if GetDistanceBetweenCoords(GetEntityCoords(sourcePed), JailLocation.x, JailLocation.y, JailLocation.z) > 10.0001 then
SetEntityCoords(sourcePed, JailLocation.x, JailLocation.y, JailLocation.z)
TriggerEvent('chatMessage', _U('judge'), { 147, 196, 109 }, _U('escape_attempt'))
end
jailTime = jailTime - 0.5

jailTime = jailTime - 20
end

-- jail time served
TriggerServerEvent('esx_jailer:unjailTime', -1)
SetEntityCoords(sourcePed, Config.JailBlip.x, Config.JailBlip.y, Config.JailBlip.z)

SetEntityCoords(pP, Config.JailBlip.x, Config.JailBlip.y, Config.JailBlip.z)
cJ = false
SetEntityInvincible(pP, false)
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin)
local model = nil

if skin.sex == 0 then
model = GetHashKey("mp_m_freemode_01")
else
model = GetHashKey("mp_f_freemode_01")
end

RequestModel(model)
while not HasModelLoaded(model) do
RequestModel(model)
Citizen.Wait(1)
end

SetPlayerModel(PlayerId(), model)
SetModelAsNoLongerNeeded(model)

escape = false
SetEntityCanBeDamaged(sourcePed, true)

-- Change back the user skin
ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin)
TriggerEvent('skinchanger:loadSkin', skin)
TriggerEvent('esx:restoreLoadout')
end)
end)
end
Expand Down Expand Up @@ -128,5 +100,5 @@ Citizen.CreateThread(function()
end)

function round(x)
return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
26 changes: 25 additions & 1 deletion config.lua
@@ -1,4 +1,28 @@
Config = {}
Config.JailBlip = {x = 1854.00, y = 2622.00, z = 45.00}
Config.JailLocation = {x = 1641.64, y = 2571.08, z = 45.56}
Config.Locale = 'sv'
Config.Locale = 'sv'

-- CHECK SKINCHANGER CLIENT MAIN.LUA for matching elements
Config.Uniforms = {
prison_wear = {
male = {
['tshirt_1'] = 15, ['tshirt_2'] = 0,
['torso_1'] = 146, ['torso_2'] = 0,
['decals_1'] = 0, ['decals_2'] = 0,
['arms'] = 0, ['pants_1'] = 3,
['pants_2'] = 7, ['shoes_1'] = 12,
['shoes_2'] = 12, ['chain_1'] = 50,
['chain_2'] = 0
},
female = {
['tshirt_1'] = 3, ['tshirt_2'] = 0,
['torso_1'] = 38, ['torso_2'] = 3,
['decals_1'] = 0, ['decals_2'] = 0,
['arms'] = 2, ['pants_1'] = 3,
['pants_2'] = 15, ['shoes_1'] = 66,
['shoes_2'] = 5, ['chain_1'] = 0,
['chain_2'] = 2
}
}
}
12 changes: 5 additions & 7 deletions locates/en.lua
@@ -1,10 +1,8 @@
Locales ['en'] = {
['blip_name'] = 'Prison',
['blip_name'] = 'prison',
['judge'] = 'JUDGE',
['escape_attempt'] = 'You are not allowed to escape the prison!',
['remaining_msg1'] = 'There remains ',
['remaining_msg2'] = ' minutes until you are released',
['jailed_msg1'] = ' is now in jail for ',
['jailed_msg2'] = ' minutes',
['unjailed'] = ' has been released from jail!'
['escape_attempt'] = 'you are not allowed to escape the prison!',
['remaining_msg'] = 'there remains %s minutes until you are released from jail',
['jailed_msg'] = '%s is now in jail for %s minutes',
['unjailed'] = '%s has been released from jail!'
}
14 changes: 6 additions & 8 deletions locates/sv.lua
@@ -1,10 +1,8 @@
Locales ['sv'] = {
['blip_name'] = 'Fängelse',
['judge'] = 'Fängelse',
['escape_attempt'] = 'Du får inte rymma från fängelset!',
['remaining_msg1'] = 'Det kvarstår ',
['remaining_msg2'] = ' minuter tills du släpps från fängelset',
['jailed_msg1'] = ' sitter i fängelse i ',
['jailed_msg2'] = ' minuter!',
['unjailed'] = ' har blivit befriad från fängelset!'
['blip_name'] = 'fängelse',
['judge'] = 'fängelse',
['escape_attempt'] = 'du får inte rymma från fängelset!',
['remaining_msg'] = 'det kvarstår %s minuter tills du släpps från fängelset',
['jailed_msg'] = '%s sitter i fängelse i %s minuter!',
['unjailed'] = '%s har blivit befriad från fängelset!'
}
27 changes: 15 additions & 12 deletions server/main.lua
@@ -1,18 +1,21 @@
ESX = nil

--ESX base
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

-- jail command, obsolete
TriggerEvent('es:addGroupCommand', 'jail', 'admin', function(source, args, user)
TriggerEvent('esx_jailer:sendToJail', tonumber(args[1]), tonumber(args[2] * 60))
if args[1] and GetPlayerName(args[1]) ~= nil and args[2] then
TriggerEvent('esx_jailer:sendToJail', tonumber(args[1]), tonumber(args[2] * 60))
else
TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Invalid player ID or jail time!")
end
end, function(source, args, user)
TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.")
end, {help = "Put a player in jail", params = {{name = "id", help = "target id"}, {name = "time", help = "jail time in seconds"}}})
TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.")
end, {help = "Put a player in jail", params = {{name = "id", help = "target id"}, {name = "time", help = "jail time in minutes"}}})

-- unjail
TriggerEvent('es:addGroupCommand', 'unjail', 'admin', function(source, args, user)
TriggerEvent('esx_jailer:unjailQuest', tonumber(args[1]))
if args[1] and GetPlayerName(args[1]) ~= nil then
TriggerEvent('esx_jailer:unjailQuest', tonumber(args[1]))
else
TriggerEvent('esx_jailer:unjailQuest', source)
end
end, function(source, args, user)
TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.")
end, {help = "Unjail people from jail", params = {{name = "id", help = "target id"}}})
Expand All @@ -29,7 +32,7 @@ AddEventHandler('esx_jailer:sendToJail', function(source, jailTime)
end
end)

TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, GetPlayerName(source) .. _U('jailed_msg1') .. round(jailTime / 60) .. _U('jailed_msg2'))
TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, _U('jailed_msg', GetPlayerName(source), round(jailTime / 60)))
TriggerClientEvent('esx_jailer:jail', source, jailTime)
end)

Expand All @@ -40,7 +43,7 @@ AddEventHandler('esx_jailer:checkjail', function()
local identifier = GetPlayerIdentifiers(player)[1] -- get steam identifier
MySQL.Async.fetchAll('SELECT * FROM jail WHERE identifier=@id', {['@id'] = identifier}, function(gotInfo)
if gotInfo[1] ~= nil then
TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, GetPlayerName(player) .. _U('jailed_msg1') .. round(gotInfo[1].jail_time / 60) .. _U('jailed_msg2'))
TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, _U('jailed_msg', GetPlayerName(player), round(gotInfo[1].jail_time / 60)))
TriggerClientEvent('esx_jailer:jail', player, tonumber(gotInfo[1].jail_time))
end
end)
Expand Down Expand Up @@ -76,7 +79,7 @@ function unjail(target)
MySQL.Async.fetchAll('SELECT * FROM jail WHERE identifier=@id', {['@id'] = identifier}, function(gotInfo)
if gotInfo[1] ~= nil then
MySQL.Async.execute('DELETE from jail WHERE identifier = @id', {['@id'] = identifier})
TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, GetPlayerName(target) .. _U('unjailed'))
TriggerClientEvent('chatMessage', -1, _U('judge'), { 147, 196, 109 }, _U('unjailed', GetPlayerName(target)))
end
end)
TriggerClientEvent('esx_jailer:unjail', target)
Expand Down

0 comments on commit 363d2fa

Please sign in to comment.