Files
Elite-Gaming-FiveM/resources/police/client/menu.lua
T
2021-12-03 01:05:09 +00:00

484 lines
17 KiB
Lua

--[[
Cops_FiveM - A cops script for FiveM RP servers.
Copyright (C) 2018 FiveM-Scripts
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Cops_FiveM in the file "LICENSE". If not, see <http://www.gnu.org/licenses/>.
]]
local buttonsCategories = {}
local buttonsAnimation = {}
local buttonsCitizen = {}
local buttonsFine = {}
local buttonsVehicle = {}
local buttonsProps = {}
function load_menu()
for k in ipairs (buttonsCategories) do
buttonsCategories [k] = nil
end
for k in ipairs (buttonsAnimation) do
buttonsAnimation [k] = nil
end
for k in ipairs (buttonsCitizen) do
buttonsCitizen [k] = nil
end
for k in ipairs (buttonsFine) do
buttonsFine [k] = nil
end
for k in ipairs (buttonsVehicle) do
buttonsVehicle [k] = nil
end
for k in ipairs (buttonsProps) do
buttonsProps [k] = nil
end
--Categories
buttonsCategories[#buttonsCategories+1] = {name = GetLabelText("CRW_ANIMATION"), func = "OpenAnimMenu", params = ""}
buttonsCategories[#buttonsCategories+1] = {name = GetLabelText("collision_c29ovv"), func = "OpenCitizenMenu", params = ""}
buttonsCategories[#buttonsCategories+1] = {name = GetLabelText("PIM_TVEHI"), func = "OpenVehMenu", params = ""}
buttonsCategories[#buttonsCategories+1] = {name = GetLabelText("collision_9o6rwvf"), func = "OpenPropsMenu", params = ""}
--Animations
buttonsAnimation[#buttonsAnimation+1] = {name = i18n.translate("menu_anim_do_traffic_title"), func = 'DoTraffic', params = ""}
buttonsAnimation[#buttonsAnimation+1] = {name = i18n.translate("menu_anim_take_notes_title"), func = 'Note', params = ""}
buttonsAnimation[#buttonsAnimation+1] = {name = i18n.translate("menu_anim_standby_title"), func = 'StandBy', params = ""}
buttonsAnimation[#buttonsAnimation+1] = {name = i18n.translate("menu_anim_standby_2_title"), func = 'StandBy2', params = ""}
buttonsAnimation[#buttonsAnimation+1] = {name = i18n.translate("menu_anim_Cancel_emote_title"), func = 'CancelEmote', params = ""}
--Citizens
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_weapons_title"), func = 'RemoveWeapons', params = ""}
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_toggle_cuff_title"), func = 'ToggleCuff', params = ""}
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_force_player_get_in_car_title"), func = 'PutInVehicle', params = ""}
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_force_player_get_out_car_title"), func = 'UnseatVehicle', params = ""}
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_drag_player_title"), func = 'DragPlayer', params = ""}
buttonsCitizen[#buttonsCitizen+1] = {name = i18n.translate("menu_fines_title"), func = 'OpenMenuFine', params = ""}
--Fines
buttonsFine[#buttonsFine+1] = {name = "$250", func = 'Fines', params = 250}
buttonsFine[#buttonsFine+1] = {name = "$500", func = 'Fines', params = 500}
buttonsFine[#buttonsFine+1] = {name = "$1000", func = 'Fines', params = 1000}
buttonsFine[#buttonsFine+1] = {name = "$1500", func = 'Fines', params = 1500}
buttonsFine[#buttonsFine+1] = {name = "$2000", func = 'Fines', params = 2000}
buttonsFine[#buttonsFine+1] = {name = "$4000", func = 'Fines', params = 4000}
buttonsFine[#buttonsFine+1] = {name = "$6000", func = 'Fines', params = 6000}
buttonsFine[#buttonsFine+1] = {name = "$8000", func = 'Fines', params = 8000}
buttonsFine[#buttonsFine+1] = {name = "$10000", func = 'Fines', params = 10000}
buttonsFine[#buttonsFine+1] = {name = i18n.translate("menu_custom_amount_fine_title"), func = 'Fines', params = -1}
-- vehicles
buttonsVehicle[#buttonsVehicle+1] = {name = i18n.translate("menu_crochet_veh_title"), func = 'Crochet', params = ""}
buttonsVehicle[#buttonsVehicle+1] = {name = GetLabelText("FMMC_REMVEH"), func = 'DropVehicle', params = ""}
buttonsVehicle[#buttonsVehicle+1] = {name = "Spike Stripes", func = 'SpawnSpikesStripe', params = ""}
--Props
for k,v in pairs(SpawnObjects) do
buttonsProps[#buttonsProps+1] = {name = v.name, func = "SpawnProps", params = tostring(v.hash)}
end
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_PR_23"), func = "SpawnProps", params="prop_mp_barrier_01b"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_PR_BARQADB"), func = "SpawnProps", params="prop_barrier_work05"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_DPR_LTRFCN"), func = "SpawnProps", params="prop_air_conelight"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_PR_PBARR"), func = "SpawnProps", params="prop_barrier_work06a"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_PR_CABTBTH"), func = "SpawnProps", params="prop_tollbooth_1"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_DPR_TRFCNE"), func = "SpawnProps", params="prop_mp_cone_01"}
buttonsProps[#buttonsProps+1] = {name=GetLabelText("FMMC_DPR_TRFPLE"), func = "SpawnProps", params="prop_mp_cone_04"}
buttonsProps[#buttonsProps+1] = {name = GetLabelText("collision_7x5xu9w"), func = "RemoveLastProps", params = ""}
buttonsProps[#buttonsProps+1] = {name = GetLabelText("FMMC_REMOBJ"), func = "RemoveAllProps", params = ""}
end
function DoTraffic()
Citizen.CreateThread(function()
if not IsPedInAnyVehicle(PlayerPedId(), false) then
TaskStartScenarioInPlace(PlayerPedId(), "WORLD_HUMAN_CAR_PARK_ATTENDANT", 0, false)
Citizen.Wait(60000)
ClearPedTasksImmediately(PlayerPedId())
drawNotification(i18n.translate("menu_doing_traffic_notification"))
else
drawNotification(GetLabelText("PEN_EXITV"))
end
end)
end
function Note()
Citizen.CreateThread(function()
if not IsPedInAnyVehicle(PlayerPedId(), false) then
TaskStartScenarioInPlace(PlayerPedId(), "WORLD_HUMAN_CLIPBOARD", 0, false)
Citizen.Wait(20000)
ClearPedTasksImmediately(PlayerPedId())
else
drawNotification(GetLabelText("PEN_EXITV"))
end
end)
end
function StandBy()
Citizen.CreateThread(function()
if not IsPedInAnyVehicle(PlayerPedId(), false) then
TaskStartScenarioInPlace(PlayerPedId(), "WORLD_HUMAN_COP_IDLES", 0, true)
Citizen.Wait(20000)
ClearPedTasksImmediately(PlayerPedId())
else
drawNotification(GetLabelText("PEN_EXITV"))
end
end)
end
function StandBy2()
Citizen.CreateThread(function()
if not IsPedInAnyVehicle(PlayerPedId(), false) then
TaskStartScenarioInPlace(PlayerPedId(), "WORLD_HUMAN_GUARD_STAND", 0, 1)
Citizen.Wait(20000)
ClearPedTasksImmediately(PlayerPedId())
else
drawNotification(GetLabelText("PEN_EXITV"))
end
end)
end
function CancelEmote()
Citizen.CreateThread(function()
ClearPedTasksImmediately(PlayerPedId())
end)
end
function CheckInventory()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
TriggerServerEvent("police:targetCheckInventory", GetPlayerServerId(t))
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function RemoveWeapons()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
TriggerServerEvent("police:removeWeapons", GetPlayerServerId(t))
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function ToggleCuff()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
TriggerServerEvent("police:cuffGranted", GetPlayerServerId(t))
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function PutInVehicle()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
local v = GetVehiclePedIsIn(PlayerPedId(), true)
TriggerServerEvent("police:forceEnterAsk", GetPlayerServerId(t), v)
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function UnseatVehicle()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
TriggerServerEvent("police:confirmUnseat", GetPlayerServerId(t))
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function DragPlayer()
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
TriggerServerEvent("police:dragRequest", GetPlayerServerId(t))
TriggerEvent("police:notify", "CHAR_ANDREAS", 1, i18n.translate("title_notification"), false, i18n.translate("drag_sender_notification_part_1") .. GetPlayerName(serverTargetPlayer) .. i18n.translate("drag_sender_notification_part_2"))
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function Fines(amount)
local t, distance = GetClosestPlayer()
if(distance ~= -1 and distance < 3) then
Citizen.Trace("Price : "..tonumber(amount))
if(tonumber(amount) == -1) then
DisplayOnscreenKeyboard(1, "FMMC_KEY_TIP8S", "", "", "", "", "", 20)
while (UpdateOnscreenKeyboard() == 0) do
DisableAllControlActions(0);
Wait(0);
end
if (GetOnscreenKeyboardResult()) then
local res = tonumber(GetOnscreenKeyboardResult())
if(res ~= nil and res ~= 0) then
amount = tonumber(res)
end
end
if(tonumber(amount) ~= -1) then
TriggerServerEvent("police:finesGranted", GetPlayerServerId(t), tonumber(amount))
end
else
TriggerServerEvent("police:finesGranted", GetPlayerServerId(t), tonumber(amount))
end
else
drawNotification(i18n.translate("no_player_near_ped"))
end
end
function Crochet()
Citizen.CreateThread(function()
local pos = GetEntityCoords(PlayerPedId())
local entityWorld = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 20.0, 0.0)
local rayHandle = CastRayPointToPoint(pos.x, pos.y, pos.z, entityWorld.x, entityWorld.y, entityWorld.z, 10, PlayerPedId(), 0)
local _, _, _, _, vehicleHandle = GetRaycastResult(rayHandle)
if DoesEntityExist(vehicleHandle) and IsEntityAVehicle(vehicleHandle) then
local prevObj = GetClosestObjectOfType(pos.x, pos.y, pos.z, 10.0, GetHashKey("prop_weld_torch"), false, true, true)
if(IsEntityAnObject(prevObj)) then
SetEntityAsMissionEntity(prevObj)
DeleteObject(prevObj)
end
TaskStartScenarioInPlace(PlayerPedId(), "WORLD_HUMAN_WELDING", 0, true)
Citizen.Wait(20000)
SetVehicleDoorsLocked(vehicleHandle, 1)
ClearPedTasksImmediately(PlayerPedId())
drawNotification(i18n.translate("menu_veh_opened_notification"))
else
drawNotification(i18n.translate("no_veh_near_ped"))
end
end)
end
function DropVehicle()
Citizen.CreateThread(function()
local pos = GetEntityCoords(PlayerPedId())
local entityWorld = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 20.0, 0.0)
local rayHandle = CastRayPointToPoint(pos.x, pos.y, pos.z, entityWorld.x, entityWorld.y, entityWorld.z, 10, PlayerPedId(), 0)
local _, _, _, _, vehicleHandle = GetRaycastResult(rayHandle)
if DoesEntityExist(vehicleHandle) and IsEntityAVehicle(vehicleHandle) then
DeleteEntity(vehicleHandle)
else
drawNotification(i18n.translate("no_veh_near_ped"))
end
end)
end
function SpawnSpikesStripe()
if IsPedInAnyPoliceVehicle(PlayerPedId()) then
local modelHash = GetHashKey("P_ld_stinger_s")
local currentVeh = GetVehiclePedIsIn(PlayerPedId(), false)
local x,y,z = table.unpack(GetOffsetFromEntityInWorldCoords(currentVeh, 0.0, -5.2, -0.25))
RequestScriptAudioBank("BIG_SCORE_HIJACK_01", true)
Citizen.Wait(500)
RequestModel(modelHash)
while not HasModelLoaded(modelHash) do
Citizen.Wait(0)
end
if HasModelLoaded(modelHash) then
SpikeObject = CreateObject(modelHash, x, y, z, true, false, true)
SetEntityNoCollisionEntity(SpikeObject, PlayerPedId(), 1)
SetEntityDynamic(SpikeObject, false)
ActivatePhysics(SpikeObject)
if DoesEntityExist(SpikeObject) then
local height = GetEntityHeightAboveGround(SpikeObject)
SetEntityCoords(SpikeObject, x, y, z - height + 0.05)
SetEntityHeading(SpikeObject, GetEntityHeading(PlayerPedId())-80.0)
SetEntityCollision(SpikeObject, false, false)
PlaceObjectOnGroundProperly(SpikeObject)
SetEntityAsMissionEntity(SpikeObject, false, false)
SetModelAsNoLongerNeeded(modelHash)
PlaySoundFromEntity(-1, "DROP_STINGER", PlayerPedId(), "BIG_SCORE_3A_SOUNDS", 0, 0)
end
drawNotification("Spike stripe~g~ deployed~w~.")
end
else
drawNotification("You need to get ~y~inside~w~ a ~y~police vehicle~w~.")
PlaySoundFrontend(-1, "ERROR", "HUD_FRONTEND_DEFAULT_SOUNDSET", true)
end
end
function DeleteSpike()
local model = GetHashKey("P_ld_stinger_s")
local x,y,z = table.unpack(GetEntityCoords(PlayerPedId(), true))
if DoesObjectOfTypeExistAtCoords(x, y, z, 0.9, model, true) then
local spike = GetClosestObjectOfType(x, y, z, 0.9, model, false, false, false)
DeleteObject(spike)
end
end
local propslist = {}
function SpawnProps(model)
if(#propslist < config.propsSpawnLimitByCop) then
local prophash = GetHashKey(tostring(model))
RequestModel(prophash)
while not HasModelLoaded(prophash) do
Citizen.Wait(0)
end
local offset = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 0.75, 0.0)
local _, worldZ = GetGroundZFor_3dCoord(offset.x, offset.y, offset.z)
local propsobj = CreateObjectNoOffset(prophash, offset.x, offset.y, worldZ, true, true, true)
local heading = GetEntityHeading(PlayerPedId())
SetEntityHeading(propsobj, heading)
SetEntityAsMissionEntity(propsobj)
SetModelAsNoLongerNeeded(prophash)
propslist[#propslist+1] = ObjToNet(propsobj)
end
end
function RemoveLastProps()
DeleteObject(NetToObj(propslist[#propslist]))
propslist[#propslist] = nil
end
function RemoveAllProps()
for i, props in pairs(propslist) do
DeleteObject(NetToObj(props))
propslist[i] = nil
end
end
function TogglePoliceMenu()
if((anyMenuOpen.menuName ~= "policemenu" and anyMenuOpen.menuName ~= "policemenu-anim" and anyMenuOpen.menuName ~= "policemenu-citizens" and anyMenuOpen.menuName ~= "policemenu-veh" and anyMenuOpen.menuName ~= "policemenu-fines" and anyMenuOpen.menuName ~= "policemenu-props") and not anyMenuOpen.isActive) then
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("PM_MP_OPTIONS"),
buttons = buttonsCategories,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu"
anyMenuOpen.isActive = true
else
if((anyMenuOpen.menuName ~= "policemenu" and anyMenuOpen.menuName ~= "policemenu-anim" and anyMenuOpen.menuName ~= "policemenu-citizens" and anyMenuOpen.menuName ~= "policemenu-veh" and anyMenuOpen.menuName ~= "policemenu-fines" and anyMenuOpen.menuName ~= "policemenu-props") and anyMenuOpen.isActive) then
CloseMenu()
TogglePoliceMenu()
else
CloseMenu()
end
end
end
function BackMenuPolice()
if(anyMenuOpen.menuName == "policemenu-anim" or anyMenuOpen.menuName == "policemenu-citizens" or anyMenuOpen.menuName == "policemenu-veh" or anyMenuOpen.menuName == "policemenu-props") then
CloseMenu()
TogglePoliceMenu()
else
CloseMenu()
OpenCitizenMenu()
end
end
function OpenAnimMenu()
CloseMenu()
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("CRW_ANIMATION"),
buttons = buttonsAnimation,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu-anim"
anyMenuOpen.isActive = true
end
function OpenCitizenMenu()
CloseMenu()
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("collision_c29ovv"),
buttons = buttonsCitizen,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu-citizens"
anyMenuOpen.isActive = true
end
function OpenVehMenu()
CloseMenu()
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("PIM_TVEHI"),
buttons = buttonsVehicle,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu-veh"
anyMenuOpen.isActive = true
end
function OpenMenuFine()
CloseMenu()
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("PM_MP_OPTIONS"),
buttons = buttonsFine,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu-fines"
anyMenuOpen.isActive = true
end
function OpenPropsMenu()
CloseMenu()
SendNUIMessage({
title = i18n.translate("menu_global_title"),
subtitle = GetLabelText("collision_9o6rwvf"),
buttons = buttonsProps,
action = "setAndOpen"
})
anyMenuOpen.menuName = "policemenu-props"
anyMenuOpen.isActive = true
end
Citizen.CreateThread(function()
while true do
Citizen.Wait(5)
for _, props in pairs(propslist) do
local ox, oy, oz = table.unpack(GetEntityCoords(NetToObj(props), true))
local cVeh = GetClosestVehicle(ox, oy, oz, 20.0, 0, 70)
if(IsEntityAVehicle(cVeh)) then
if IsEntityAtEntity(cVeh, NetToObj(props), 3.0, 5.0, 2.0, 0, 1, 0) then
local cDriver = GetPedInVehicleSeat(cVeh, -1)
TaskVehicleTempAction(cDriver, cVeh, 6, 1000)
SetVehicleHandbrake(cVeh, true)
SetVehicleIndicatorLights(cVeh, 0, true)
SetVehicleIndicatorLights(cVeh, 1, true)
end
end
end
end
end)