mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-17 05:56:01 +01:00
Add files via upload
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
local display = false
|
||||
local isJailed = false
|
||||
local nearJailingUi = false
|
||||
local jailTime = 0
|
||||
local ped
|
||||
|
||||
function SetDisplay(bool)
|
||||
display = bool
|
||||
@@ -10,59 +12,186 @@ function SetDisplay(bool)
|
||||
})
|
||||
end
|
||||
|
||||
function alert(msg)
|
||||
BeginTextCommandDisplayHelp("STRING")
|
||||
AddTextComponentSubstringPlayerName(msg)
|
||||
EndTextCommandDisplayHelp(0, 0, 1, -1)
|
||||
function text(text, x, y, scale)
|
||||
SetTextFont(4)
|
||||
SetTextProportional(0)
|
||||
SetTextScale(scale, scale)
|
||||
SetTextEdge(1, 0, 0, 0, 255)
|
||||
SetTextDropShadow(0, 0, 0, 0,255)
|
||||
SetTextOutline()
|
||||
SetTextJustification(0)
|
||||
SetTextEntry("STRING")
|
||||
AddTextComponentString(text)
|
||||
DrawText(x, y)
|
||||
end
|
||||
|
||||
function drawText3D(coords, text)
|
||||
local onScreen, _x, _y = World3dToScreen2d(coords.x, coords.y, coords.z + 0.3)
|
||||
local pX, pY, pZ = table.unpack(GetGameplayCamCoords())
|
||||
SetTextScale(0.4, 0.4)
|
||||
SetTextFont(4)
|
||||
SetTextProportional(1)
|
||||
SetTextEntry("STRING")
|
||||
SetTextCentre(true)
|
||||
SetTextColour(255, 255, 255, 255)
|
||||
SetTextOutline()
|
||||
AddTextComponentString(text)
|
||||
DrawText(_x, _y)
|
||||
end
|
||||
|
||||
function hasAccess()
|
||||
local selectedDepartment = exports["ND_Core"]:getCharacterInfo().department
|
||||
for _, department in pairs(config.accessDepartments) do
|
||||
if department == selectedDepartment then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function inRange(ped)
|
||||
local pedCoords = GetEntityCoords(ped)
|
||||
for locations in pairs(config.accessLocation) do
|
||||
local uiCoords = vector3(config.accessLocation[locations].x, config.accessLocation[locations].y, config.accessLocation[locations].z)
|
||||
if (#(pedCoords - uiCoords)) < config.accessDistance then
|
||||
if hasAccess() then
|
||||
return uiCoords
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local tablet = false
|
||||
function ToggleTablet(toggle)
|
||||
if toggle and not tablet then
|
||||
tablet = true
|
||||
Citizen.CreateThread(function()
|
||||
RequestAnimDict("amb@code_human_in_bus_passenger_idles@female@tablet@base")
|
||||
while not HasAnimDictLoaded("amb@code_human_in_bus_passenger_idles@female@tablet@base") do
|
||||
Citizen.Wait(150)
|
||||
end
|
||||
RequestModel(`prop_cs_tablet`)
|
||||
while not HasModelLoaded(`prop_cs_tablet`) do
|
||||
Citizen.Wait(150)
|
||||
end
|
||||
local playerPed = PlayerPedId()
|
||||
local tabletObj = CreateObject(`prop_cs_tablet`, 0.0, 0.0, 0.0, true, true, false)
|
||||
local tabletBoneIndex = GetPedBoneIndex(playerPed, 60309)
|
||||
SetCurrentPedWeapon(playerPed, `weapon_unarmed`, true)
|
||||
AttachEntityToEntity(tabletObj, playerPed, tabletBoneIndex, 0.03, 0.002, -0.0, 10.0, 160.0, 0.0, true, false, false, false, 2, true)
|
||||
SetModelAsNoLongerNeeded(`prop_cs_tablet`)
|
||||
while tablet do
|
||||
Citizen.Wait(100)
|
||||
playerPed = PlayerPedId()
|
||||
|
||||
if not IsEntityPlayingAnim(playerPed, "amb@code_human_in_bus_passenger_idles@female@tablet@base", "base", 3) then
|
||||
TaskPlayAnim(playerPed, "amb@code_human_in_bus_passenger_idles@female@tablet@base", "base", 3.0, 3.0, -1, 49, 0, 0, 0, 0)
|
||||
end
|
||||
end
|
||||
ClearPedSecondaryTask(playerPed)
|
||||
Citizen.Wait(450)
|
||||
DetachEntity(tabletObj, true, false)
|
||||
DeleteEntity(tabletObj)
|
||||
end)
|
||||
elseif not toggle and tablet then
|
||||
tablet = false
|
||||
end
|
||||
end
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(500)
|
||||
ped = PlayerPedId()
|
||||
nearJailingUi = inRange(ped)
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
if not display and nearJailingUi then
|
||||
drawText3D(nearJailingUi, "~w~Press ~b~E ~w~to open the jail ui")
|
||||
if IsControlJustPressed(0, 51) then
|
||||
TriggerServerEvent("ND_Jailing:getPlayers")
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Return list of all players on the server and open ui.
|
||||
RegisterNetEvent("ND_Jailing:returnPlayers")
|
||||
AddEventHandler("ND_Jailing:returnPlayers", function(players)
|
||||
for _, player in pairs(players) do
|
||||
SendNUIMessage({
|
||||
type = "players",
|
||||
players = player,
|
||||
})
|
||||
end
|
||||
SetDisplay(true)
|
||||
ToggleTablet(display)
|
||||
end)
|
||||
|
||||
AddEventHandler("playerSpawned", function()
|
||||
TriggerServerEvent("ND_Jailing:getJailTime")
|
||||
end)
|
||||
|
||||
function jail(time)
|
||||
local player = PlayerPedId()
|
||||
local pedCoords = GetEntityCoords(player)
|
||||
jailTime = time
|
||||
SetEntityCoords(player, config.jailCoords.x, config.jailCoords.y, config.jailCoords.z, false, false, false, false)
|
||||
SetEntityHeading(player, config.jailCoords.h)
|
||||
TriggerEvent("ND_Jailing:timeLeft")
|
||||
TriggerServerEvent("ND_Jailing:updateJailing", jailTime)
|
||||
|
||||
while jailTime > 0 do
|
||||
jailTime = jailTime -1
|
||||
player = PlayerPedId()
|
||||
if #(GetEntityCoords(player) - vector3(config.jailCoords.x, config.jailCoords.y, config.jailCoords.z)) > config.jailDistance then
|
||||
SetEntityCoords(player, config.jailCoords.x, config.jailCoords.y, config.jailCoords.z, false, false, false, false)
|
||||
end
|
||||
Citizen.Wait(1000)
|
||||
end
|
||||
SetEntityCoords(player, config.releaseCoords.x, config.releaseCoords.y, config.releaseCoords.z, false, false, false, false)
|
||||
SetEntityHeading(player, config.releaseCoords.h)
|
||||
TriggerServerEvent("ND_Jailing:updateJailing", jailTime)
|
||||
end
|
||||
|
||||
RegisterNetEvent("ND_Jailing:timeLeft")
|
||||
AddEventHandler("ND_Jailing:timeLeft", function()
|
||||
while jailTime > 0 do
|
||||
Citizen.Wait(0)
|
||||
text("Time until release: " .. tostring(jailTime), 0.5, 0.9, 0.5)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Jail a player and loop to keep them in jail every second.
|
||||
RegisterNetEvent("ND_Jailing:jailPlayer")
|
||||
AddEventHandler("ND_Jailing:jailPlayer", function(time)
|
||||
local player = PlayerPedId()
|
||||
isJailed = true
|
||||
SetEntityCoords(player, config.jailCoords.x, config.jailCoords.y, config.jailCoords.z, false, false, false, false)
|
||||
SetEntityHeading(player, config.jailCoords.h)
|
||||
jail(time)
|
||||
end)
|
||||
|
||||
while isJailed do
|
||||
time = time -1
|
||||
local pedCoords = GetEntityCoords(player)
|
||||
|
||||
if #(pedCoords - vector3(config.jailCoords.x, config.jailCoords.y, config.jailCoords.z)) > config.jailDistance then
|
||||
SetEntityCoords(player, config.jailCoords.x, config.jailCoords.y, config.jailCoords.z, false, false, false, false)
|
||||
end
|
||||
if time == 0 then
|
||||
SetEntityCoords(player, config.releaseCoords.x, config.releaseCoords.y, config.releaseCoords.z, false, false, false, false)
|
||||
SetEntityHeading(player, config.releaseCoords.h)
|
||||
Citizen.Wait(100)
|
||||
TaskGoStraightToCoord(player, config.releaseCoords.x + 10, config.releaseCoords.y, config.releaseCoords.z, 1.0, 8000, config.releaseCoords.h, 0)
|
||||
isJailed = false
|
||||
end
|
||||
Citizen.Wait(1000)
|
||||
end
|
||||
RegisterNetEvent("ND_Jailing:unjailPlayer")
|
||||
AddEventHandler("ND_Jailing:unjailPlayer", function(time)
|
||||
jailTime = 0
|
||||
end)
|
||||
|
||||
-- Chat suggestion for command.
|
||||
TriggerEvent("chat:addSuggestion", "/jail", "Jail a player", {
|
||||
{name="Id", help="Player Id"},
|
||||
{name="time", help="time to jail (seconds)"},
|
||||
{name="Reason", help="Short reason or list of charges."}
|
||||
{name="Time", help="Time to jail (seconds)"},
|
||||
{name="Fine", help="How much will the player be fined?"},
|
||||
{name="Reason", help="Short description of the charge."}
|
||||
})
|
||||
|
||||
-- Same jail function but with a command.
|
||||
RegisterCommand("jail", function(source, args, rawCommand)
|
||||
local id = tonumber(args[1])
|
||||
local time = tonumber(args[2])
|
||||
local reason = args[3]
|
||||
local hasAccess = false
|
||||
for _, dept in pairs(config.accessDepartments) do
|
||||
if exports["ND_Core"]:getCharacterInfo(6) == dept then
|
||||
hasAccess = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if hasAccess then
|
||||
local name = GetPlayerName(GetPlayerFromServerId(id))
|
||||
local fine = args[3]
|
||||
local reason = args[4]
|
||||
if hasAccess() then
|
||||
if not GetPlayerFromServerId(id) then
|
||||
TriggerEvent("chat:addMessage", {
|
||||
color = { 255, 0, 0},
|
||||
@@ -76,7 +205,7 @@ RegisterCommand("jail", function(source, args, rawCommand)
|
||||
args = {"[Error]", "max time to jail is: " .. config.maxJailTime .. " seconds."}
|
||||
})
|
||||
elseif time <= config.maxJailTime then
|
||||
TriggerServerEvent("jailPlayer", id, name, time, reason)
|
||||
TriggerServerEvent("ND_Jailing:jailPlayer", id, time, fine, reason)
|
||||
SetDisplay(false)
|
||||
end
|
||||
else
|
||||
@@ -88,46 +217,12 @@ RegisterCommand("jail", function(source, args, rawCommand)
|
||||
end
|
||||
end, false)
|
||||
|
||||
-- Return list of all players on the server and open ui.
|
||||
RegisterNetEvent("ND_Jailing:returnPlayers")
|
||||
AddEventHandler("ND_Jailing:returnPlayers", function(players)
|
||||
for _, player in pairs(players) do
|
||||
SendNUIMessage({
|
||||
type = "players",
|
||||
players = player,
|
||||
})
|
||||
end
|
||||
SetDisplay(true)
|
||||
end)
|
||||
|
||||
-- Check permission and distance of player.
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
local pedCoords = GetEntityCoords(PlayerPedId())
|
||||
for locations in pairs(config.accessLocation) do
|
||||
if #(pedCoords - vector3(config.accessLocation[locations].x, config.accessLocation[locations].y, config.accessLocation[locations].z)) < config.accessDistance then
|
||||
for _, dept in pairs(config.accessDepartments) do
|
||||
if exports["ND_Core"]:getCharacterInfo(6) == dept then
|
||||
if not display then
|
||||
alert("Press ~INPUT_CONTEXT~ to open the jail ui")
|
||||
end
|
||||
if IsControlJustPressed(1, 51) then
|
||||
TriggerServerEvent("ND_Jailing:getPlayers")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- When form is submitted.
|
||||
RegisterNUICallback("sumbit", function(data)
|
||||
local id = tonumber(string.sub(data.id, 2, string.find(data.id, ")") - 1))
|
||||
local time = tonumber(data.time)
|
||||
local fine = data.fine
|
||||
local reason = data.reason
|
||||
local name = GetPlayerName(GetPlayerFromServerId(id))
|
||||
if time > config.maxJailTime then
|
||||
SendNUIMessage({
|
||||
error = "Error: max time to jail is: " .. config.maxJailTime .. " seconds."
|
||||
@@ -137,15 +232,17 @@ RegisterNUICallback("sumbit", function(data)
|
||||
error = ""
|
||||
})
|
||||
else
|
||||
TriggerServerEvent("ND_Jailing:jailPlayer", id, name, time, reason)
|
||||
TriggerServerEvent("ND_Jailing:jailPlayer", id, time, fine, reason)
|
||||
SendNUIMessage({
|
||||
type = "clean"
|
||||
})
|
||||
SetDisplay(false)
|
||||
ToggleTablet(display)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Close ui.
|
||||
RegisterNUICallback("closeUI", function(data)
|
||||
RegisterNUICallback("close", function(data)
|
||||
SetDisplay(false)
|
||||
ToggleTablet(display)
|
||||
end)
|
||||
Reference in New Issue
Block a user