1100 lines
55 KiB
Lua
1100 lines
55 KiB
Lua
--[[
|
|
───────────────────────────────────────────────────────────────
|
|
|
|
SEM_InteractionMenu (menu.lua) - Created by Scott M
|
|
Current Version: v1.7.1 (Sep 2021)
|
|
|
|
Support | https://semdevelopment.com/discord
|
|
|
|
!!! Change vaules in the 'config.lua' !!!
|
|
DO NOT EDIT THIS IF YOU DON'T KNOW WHAT YOU ARE DOING
|
|
|
|
───────────────────────────────────────────────────────────────
|
|
]]
|
|
|
|
|
|
|
|
local MenuOri = 0
|
|
if Config.MenuOrientation == 0 then
|
|
MenuOri = 0
|
|
elseif Config.MenuOrientation == 1 then
|
|
MenuOri = 1320
|
|
else
|
|
MenuOri = 0
|
|
end
|
|
|
|
|
|
_MenuPool = NativeUI.CreatePool()
|
|
MainMenu = NativeUI.CreateMenu()
|
|
|
|
|
|
|
|
|
|
|
|
function Menu()
|
|
local MenuTitle = ''
|
|
if Config.MenuTitle == 0 then
|
|
MenuTitle = 'Interaction Menu'
|
|
elseif Config.MenuTitle == 1 then
|
|
MenuTitle = GetPlayerName(source)
|
|
elseif Config.MenuTitle == 2 then
|
|
MenuTitle = Config.MenuTitleCustom
|
|
else
|
|
MenuTitle = 'Interaction Menu'
|
|
end
|
|
|
|
|
|
|
|
_MenuPool:Remove()
|
|
_MenuPool = NativeUI.CreatePool()
|
|
MainMenu = NativeUI.CreateMenu(MenuTitle, GetResourceMetadata(GetCurrentResourceName(), 'title', 0) .. ' ~y~' .. GetResourceMetadata(GetCurrentResourceName(), 'version', 0), MenuOri)
|
|
_MenuPool:Add(MainMenu)
|
|
MainMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
collectgarbage()
|
|
|
|
MainMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
_MenuPool:ControlDisablingEnabled(false)
|
|
_MenuPool:MouseControlsEnabled(false)
|
|
|
|
|
|
|
|
|
|
|
|
if LEORestrict() then
|
|
local LEOMenu = _MenuPool:AddSubMenu(MainMenu, 'LEO Toolbox', 'Law Enforcement Related Menu', true)
|
|
LEOMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
local LEOActions = _MenuPool:AddSubMenu(LEOMenu, 'Actions', '', true)
|
|
LEOActions:SetMenuWidthOffset(Config.MenuWidth)
|
|
local Cuff = NativeUI.CreateItem('Cuff', 'Cuff/Uncuff the closest player')
|
|
local Drag = NativeUI.CreateItem('Drag', 'Drag/Undrag the closest player')
|
|
local Seat = NativeUI.CreateItem('Seat', 'Place a player in the closest vehicle')
|
|
local Unseat = NativeUI.CreateItem('Unseat', 'Remove a player from the closest vehicle')
|
|
local Radar = NativeUI.CreateItem('Radar', 'Toggle the radar menu')
|
|
local Inventory = NativeUI.CreateItem('Inventory', 'Search the closest player\'s inventory')
|
|
local BAC = NativeUI.CreateItem('BAC', 'Test the BAC level of the closest player')
|
|
local Jail = NativeUI.CreateItem('Jail', 'Jail a player')
|
|
local Unjail = NativeUI.CreateItem('Unjail', 'Unjail a player')
|
|
SpikeLengths = {1, 2, 3, 4, 5}
|
|
local Spikes = NativeUI.CreateListItem('Deploy Spikes', SpikeLengths, 1, 'Places spike strips on the ground')
|
|
local DelSpikes = NativeUI.CreateItem('Remove Spikes', 'Remove spike strips placed on the ground')
|
|
local Shield = NativeUI.CreateItem('Toggle Shield', 'Toggle the bulletproof shield')
|
|
local CarbineRifle = NativeUI.CreateItem('Toggle Carbine', 'Toggle your carbine rifle')
|
|
local Shotgun = NativeUI.CreateItem('Toggle Shotgun', 'Toggle your pump shotgun')
|
|
PropsList = {}
|
|
for _, Prop in pairs(Config.Props) do
|
|
table.insert(PropsList, Prop.name)
|
|
end
|
|
local Props = NativeUI.CreateListItem('Spawn Props', PropsList, 1, 'Spawn props on the ground')
|
|
local RemoveProps = NativeUI.CreateItem('Remove Props', 'Remove the closest prop')
|
|
LEOActions:AddItem(Cuff)
|
|
LEOActions:AddItem(Drag)
|
|
LEOActions:AddItem(Seat)
|
|
LEOActions:AddItem(Unseat)
|
|
if Config.Radar ~= 0 then
|
|
LEOActions:AddItem(Radar)
|
|
end
|
|
LEOActions:AddItem(Inventory)
|
|
LEOActions:AddItem(BAC)
|
|
if Config.LEOJail then
|
|
LEOActions:AddItem(Jail)
|
|
if UnjailAllowed then
|
|
LEOActions:AddItem(Unjail)
|
|
end
|
|
end
|
|
LEOActions:AddItem(Spikes)
|
|
LEOActions:AddItem(DelSpikes)
|
|
LEOActions:AddItem(Shield)
|
|
if Config.UnrackWeapons == 1 or Config.UnrackWeapons == 2 then
|
|
LEOActions:AddItem(CarbineRifle)
|
|
LEOActions:AddItem(Shotgun)
|
|
end
|
|
if Config.DisplayProps then
|
|
LEOActions:AddItem(Props)
|
|
LEOActions:AddItem(RemoveProps)
|
|
end
|
|
Cuff.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:CuffNear', player)
|
|
end
|
|
end
|
|
Drag.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:DragNear', player)
|
|
end
|
|
end
|
|
Seat.Activated = function(ParentMenu, SelectedItem)
|
|
local Veh = GetVehiclePedIsIn(Ped, true)
|
|
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:SeatNear', player, Veh)
|
|
end
|
|
end
|
|
Unseat.Activated = function(ParentMenu, SelectedItem)
|
|
if IsPedInAnyVehicle(GetPlayerPed(-1), true) then
|
|
Notify('~o~You need to be outside of the vehicle')
|
|
return
|
|
end
|
|
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:UnseatNear', player)
|
|
end
|
|
end
|
|
Radar.Activated = function(ParentMenu, SelectedItem)
|
|
ToggleRadar()
|
|
end
|
|
Inventory.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
Notify('~b~Searching ...')
|
|
TriggerServerEvent('SEM_InteractionMenu:InventorySearch', player)
|
|
end
|
|
end
|
|
BAC.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
Notify('~b~Testing ...')
|
|
TriggerServerEvent('SEM_InteractionMenu:BACTest', player)
|
|
end
|
|
end
|
|
Jail.Activated = function(ParentMenu, SelectedItem)
|
|
local PlayerID = tonumber(KeyboardInput('Player ID:', 10))
|
|
if PlayerID == nil then
|
|
Notify('~r~Please enter a player ID')
|
|
return
|
|
end
|
|
|
|
local JailTime = tonumber(KeyboardInput('Time: (Seconds) - Max Time: ' .. Config.MaxJailTime .. ' | Default Time: 30', string.len(Config.MaxJailTime)))
|
|
if JailTime == nil then
|
|
JailTime = 30
|
|
end
|
|
if JailTime > Config.MaxJailTime then
|
|
Notify('~y~Exceeded Max Time\nMax Time: ' .. Config.MaxJailTime .. ' seconds')
|
|
JailTime = Config.MaxJailTime
|
|
end
|
|
|
|
Notify('Player Jailed for ~b~' .. JailTime .. ' seconds')
|
|
TriggerServerEvent('SEM_InteractionMenu:Jail', PlayerID, JailTime)
|
|
end
|
|
Unjail.Activated = function(ParentMenu, SelectedItem)
|
|
local PlayerID = tonumber(KeyboardInput('Player ID:', 10))
|
|
if PlayerID == nil then
|
|
Notify('~r~Please enter a player ID')
|
|
return
|
|
end
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Unjail', PlayerID)
|
|
end
|
|
DelSpikes.Activated = function(ParentMenu, SelectedItem)
|
|
TriggerEvent('SEM_InteractionMenu:Spikes-DeleteSpikes')
|
|
end
|
|
Shield.Activated = function(ParentMenu, SelectedItem)
|
|
if ShieldActive then
|
|
DisableShield()
|
|
else
|
|
EnableShield()
|
|
end
|
|
end
|
|
CarbineRifle.Activated = function(ParentMenu, SelectedItem)
|
|
if (GetVehicleClass(GetVehiclePedIsIn(GetPlayerPed(-1))) == 18) then
|
|
CarbineEquipped = not CarbineEquipped
|
|
ShotgunEquipped = false
|
|
elseif (GetVehicleClass(GetVehiclePedIsIn(GetPlayerPed(-1))) ~= 18) then
|
|
Notify('~r~You Must be in a Police Vehicle to rack/unrack your Carbine Rifle')
|
|
return
|
|
end
|
|
|
|
if CarbineEquipped then
|
|
Notify('~g~Carbine Rifle Equipped')
|
|
GiveWeapon('weapon_carbinerifle')
|
|
AddWeaponComponent('weapon_carbinerifle', 'component_at_ar_flsh')
|
|
AddWeaponComponent('weapon_carbinerifle', 'component_at_ar_afgrip')
|
|
else
|
|
Notify('~y~Carbine Rifle Unequipped')
|
|
RemoveWeaponFromPed(GetPlayerPed(-1), 'weapon_carbinerifle')
|
|
end
|
|
end
|
|
Shotgun.Activated = function(ParentMenu, SelectedItem)
|
|
if (GetVehicleClass(GetVehiclePedIsIn(GetPlayerPed(-1))) == 18) then
|
|
ShotgunEquipped = not ShotgunEquipped
|
|
CarbineEquipped = false
|
|
elseif (GetVehicleClass(GetVehiclePedIsIn(GetPlayerPed(-1))) ~= 18) then
|
|
Notify('~r~You Must be in a Police Vehicle to rack/unrack your Shotgun')
|
|
return
|
|
end
|
|
|
|
if ShotgunEquipped then
|
|
Notify('~g~Shotgun Equipped')
|
|
GiveWeapon('weapon_pumpshotgun')
|
|
AddWeaponComponent('weapon_pumpshotgun', 'component_at_ar_flsh')
|
|
else
|
|
Notify('~y~Shotgun Unequipped')
|
|
RemoveWeaponFromPed(GetPlayerPed(-1), 'weapon_pumpshotgun')
|
|
end
|
|
end
|
|
LEOActions.OnListSelect = function(sender, item, index)
|
|
if item == Spikes then
|
|
TriggerEvent('SEM_InteractionMenu:Spikes-SpawnSpikes', tonumber(index))
|
|
elseif item == Props then
|
|
for _, Prop in pairs(Config.Props) do
|
|
if Prop.name == item:IndexToItem(index) then
|
|
SpawnProp(Prop.spawncode, Prop.name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
RemoveProps.Activated = function(ParentMenu, SelectedItem)
|
|
for _, Prop in pairs(Config.Props) do
|
|
DeleteProp(Prop.spawncode)
|
|
end
|
|
end
|
|
|
|
if Config.DisplayBackup then
|
|
local LEOBackup = _MenuPool:AddSubMenu(LEOMenu, 'Backup', '', true)
|
|
LEOBackup:SetMenuWidthOffset(Config.MenuWidth)
|
|
--[[
|
|
Code 1 Backup | No Lights or Siren
|
|
Code 2 Backup | Only Lights
|
|
Code 3 Backup | Lights and Siren
|
|
Code 99 Backup | All Available Unit Responde Code 3
|
|
]]
|
|
local BK1 = NativeUI.CreateItem('Code 1', 'Call Code 1 Backup to your location')
|
|
local BK2 = NativeUI.CreateItem('Code 2', 'Call Code 2 Backup to your location')
|
|
local BK3 = NativeUI.CreateItem('Code 3', 'Call Code 3 Backup to your location')
|
|
local BK99 = NativeUI.CreateItem('Code 99', 'Call Code 99 Backup to your location')
|
|
local PanicBTN = NativeUI.CreateItem('~r~Panic Button', 'Officer Panic Button')
|
|
LEOBackup:AddItem(BK1)
|
|
LEOBackup:AddItem(BK2)
|
|
LEOBackup:AddItem(BK3)
|
|
LEOBackup:AddItem(BK99)
|
|
LEOBackup:AddItem(PanicBTN)
|
|
BK1.Activated = function(ParentMenu, SelectedItem)
|
|
local Coords = GetEntityCoords(GetPlayerPed(-1))
|
|
local Street1, Street2 = GetStreetNameAtCoord(Coords.x, Coords.y, Coords.z)
|
|
local StreetName = GetStreetNameFromHashKey(Street1)
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Backup', 1, StreetName, Coords)
|
|
end
|
|
BK2.Activated = function(ParentMenu, SelectedItem)
|
|
local Coords = GetEntityCoords(GetPlayerPed(-1))
|
|
local Street1, Street2 = GetStreetNameAtCoord(Coords.x, Coords.y, Coords.z)
|
|
local StreetName = GetStreetNameFromHashKey(Street1)
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Backup', 2, StreetName, Coords)
|
|
end
|
|
BK3.Activated = function(ParentMenu, SelectedItem)
|
|
local Coords = GetEntityCoords(GetPlayerPed(-1))
|
|
local Street1, Street2 = GetStreetNameAtCoord(Coords.x, Coords.y, Coords.z)
|
|
local StreetName = GetStreetNameFromHashKey(Street1)
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Backup', 3, StreetName, Coords)
|
|
end
|
|
BK99.Activated = function(ParentMenu, SelectedItem)
|
|
local Coords = GetEntityCoords(GetPlayerPed(-1))
|
|
local Street1, Street2 = GetStreetNameAtCoord(Coords.x, Coords.y, Coords.z)
|
|
local StreetName = GetStreetNameFromHashKey(Street1)
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Backup', 99, StreetName, Coords)
|
|
end
|
|
PanicBTN.Activated = function(ParentMenu, SelectedItem)
|
|
local Coords = GetEntityCoords(GetPlayerPed(-1))
|
|
local Street1, Street2 = GetStreetNameAtCoord(Coords.x, Coords.y, Coords.z)
|
|
local StreetName = GetStreetNameFromHashKey(Street1)
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Backup', 'panic', StreetName, Coords)
|
|
end
|
|
end
|
|
|
|
if Config.ShowStations then
|
|
local LEOStation = _MenuPool:AddSubMenu(LEOMenu, 'Stations', '', true)
|
|
LEOStation:SetMenuWidthOffset(Config.MenuWidth)
|
|
for _, Station in pairs(Config.LEOStations) do
|
|
local StationCategory = _MenuPool:AddSubMenu(LEOStation, Station.name, '', true)
|
|
StationCategory:SetMenuWidthOffset(Config.MenuWidth)
|
|
local SetWaypoint = NativeUI.CreateItem('Set Waypoint', 'Set a waypoint to the station')
|
|
local Teleport = NativeUI.CreateItem('Teleport', 'Teleport to the station')
|
|
StationCategory:AddItem(SetWaypoint)
|
|
if Config.AllowStationTeleport then
|
|
StationCategory:AddItem(Teleport)
|
|
end
|
|
SetWaypoint.Activated = function(ParentMenu, SelectedItem)
|
|
SetNewWaypoint(Station.coords.x, Station.coords.y)
|
|
end
|
|
Teleport.Activated = function(ParentMenu, SelectedItem)
|
|
SetEntityCoords(PlayerPedId(), Station.coords.x, Station.coords.y, Station.coords.z)
|
|
SetEntityHeading(PlayerPedId(), Station.coords.h)
|
|
end
|
|
end
|
|
end
|
|
|
|
if Config.DisplayLEOUniforms or Config.DisplayLEOLoadouts then
|
|
local LEOLoadouts = _MenuPool:AddSubMenu(LEOMenu, 'Loadouts', '', true)
|
|
LEOLoadouts:SetMenuWidthOffset(Config.MenuWidth)
|
|
UniformsList = {}
|
|
for _, Uniform in pairs(Config.LEOUniforms) do
|
|
table.insert(UniformsList, Uniform.name)
|
|
end
|
|
|
|
LoadoutsList = {}
|
|
for Name, Loadout in pairs(Config.LEOLoadouts) do
|
|
table.insert(LoadoutsList, Name)
|
|
end
|
|
|
|
local Uniforms = NativeUI.CreateListItem('Uniforms', UniformsList, 1, 'Spawn LEO uniforms')
|
|
local Loadouts = NativeUI.CreateListItem('Loadouts', LoadoutsList, 1, 'Spawn LEO weapon loadouts')
|
|
if Config.DisplayLEOUniforms then
|
|
LEOLoadouts:AddItem(Uniforms)
|
|
end
|
|
if Config.DisplayLEOLoadouts then
|
|
LEOLoadouts:AddItem(Loadouts)
|
|
end
|
|
LEOLoadouts.OnListSelect = function(sender, item, index)
|
|
if item == Uniforms then
|
|
for _, Uniform in pairs(Config.LEOUniforms) do
|
|
if Uniform.name == item:IndexToItem(index) then
|
|
LoadPed(Uniform.spawncode)
|
|
Notify('~b~Uniform Spawned: ~g~' .. Uniform.name)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
if item == Loadouts then
|
|
for Name, Loadout in pairs(Config.LEOLoadouts) do
|
|
if Name == item:IndexToItem(index) then
|
|
SetEntityHealth(GetPlayerPed(-1), 200)
|
|
RemoveAllPedWeapons(GetPlayerPed(-1), true)
|
|
AddArmourToPed(GetPlayerPed(-1), 100)
|
|
|
|
for _, Weapon in pairs(Loadout) do
|
|
GiveWeapon(Weapon.weapon)
|
|
|
|
for _, Component in pairs(Weapon.components) do
|
|
AddWeaponComponent(Weapon.weapon, Component)
|
|
end
|
|
end
|
|
|
|
Notify('~b~Loadout Spawned: ~g~' .. Name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if Config.ShowLEOVehicles then
|
|
local LEOVehicles = _MenuPool:AddSubMenu(LEOMenu, 'Vehicles', '', true)
|
|
LEOVehicles:SetMenuWidthOffset(Config.MenuWidth)
|
|
|
|
for Name, Category in pairs(Config.LEOVehiclesCategories) do
|
|
local LEOCategory = _MenuPool:AddSubMenu(LEOVehicles, Name, '', true)
|
|
LEOCategory:SetMenuWidthOffset(Config.MenuWidth)
|
|
for _, Vehicle in pairs(Category) do
|
|
local LEOVehicle = NativeUI.CreateItem(Vehicle.name, '')
|
|
LEOCategory:AddItem(LEOVehicle)
|
|
if Config.ShowLEOSpawnCode then
|
|
LEOVehicle:RightLabel(Vehicle.spawncode)
|
|
end
|
|
LEOVehicle.Activated = function(ParentMenu, SelectedItem)
|
|
SpawnVehicle(Vehicle.spawncode, Vehicle.name, Vehicle.livery, Vehicle.extras)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if Config.DisplayTrafficManager then
|
|
local LEOTrafficManager = _MenuPool:AddSubMenu(LEOMenu, 'Traffic Manager', '', true)
|
|
LEOTrafficManager:SetMenuWidthOffset(Config.MenuWidth)
|
|
|
|
TMSize = 10.0
|
|
TMSpeed = 0.0
|
|
RaduiesNames = {}
|
|
Raduies = {
|
|
{name = '10m', size = 10.0},
|
|
{name = '20m', size = 20.0},
|
|
{name = '30m', size = 30.0},
|
|
{name = '40m', size = 40.0},
|
|
{name = '50m', size = 50.0},
|
|
{name = '60m', size = 60.0},
|
|
{name = '70m', size = 70.0},
|
|
{name = '80m', size = 80.0},
|
|
{name = '90m', size = 90.0},
|
|
{name = '100m', size = 100.0},
|
|
}
|
|
SpeedsNames = {}
|
|
Speeds = {
|
|
{name = '0 mph', speed = 0.0},
|
|
{name = '5 mph', speed = 5.0},
|
|
{name = '10 mph', speed = 10.0},
|
|
{name = '15 mph', speed = 15.0},
|
|
{name = '20 mph', speed = 20.0},
|
|
{name = '25 mph', speed = 25.0},
|
|
{name = '30 mph', speed = 30.0},
|
|
{name = '40 mph', speed = 40.0},
|
|
{name = '50 mph', speed = 50.0},
|
|
}
|
|
|
|
for _, RaduisInfo in pairs(Raduies) do
|
|
table.insert(RaduiesNames, RaduisInfo.name)
|
|
end
|
|
for _, SpeedsInfo in pairs(Speeds) do
|
|
table.insert(SpeedsNames, SpeedsInfo.name)
|
|
end
|
|
|
|
local Radius = NativeUI.CreateListItem('Radius', RaduiesNames, 1, '')
|
|
local Speed = NativeUI.CreateListItem('Speed', SpeedsNames, 1, '')
|
|
local TMCreate = NativeUI.CreateItem('Create Speed Zone', '')
|
|
local TMDelete = NativeUI.CreateItem('Delete Speed Zone', '')
|
|
LEOTrafficManager:AddItem(Radius)
|
|
LEOTrafficManager:AddItem(Speed)
|
|
LEOTrafficManager:AddItem(TMCreate)
|
|
LEOTrafficManager:AddItem(TMDelete)
|
|
Radius.OnListChanged = function(sender, item, index)
|
|
TMSize = Raduies[index].size
|
|
end
|
|
Speed.OnListChanged = function(sender, item, index)
|
|
TMSpeed = Speeds[index].speed
|
|
end
|
|
TMCreate.Activated = function(ParentMenu, SelectedItem)
|
|
if Zone == nil then
|
|
Zone = AddSpeedZoneForCoord(GetEntityCoords(PlayerPedId()), TMSize, TMSpeed, false)
|
|
Area = AddBlipForRadius(GetEntityCoords(PlayerPedId()), TMSize)
|
|
SetBlipAlpha(Area, 100)
|
|
Notify('~g~Speed Zone Created')
|
|
else
|
|
Notify('~y~You already have a Speed Zone created')
|
|
end
|
|
end
|
|
TMDelete.Activated = function(ParentMenu, SelectedItem)
|
|
if Zone ~= nil then
|
|
RemoveSpeedZone(Zone)
|
|
RemoveBlip(Area)
|
|
Zone = nil
|
|
Notify('~r~Speed Zone Deleted')
|
|
else
|
|
Notify('~y~You don\'t have a Speed Zone')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
if FireRestrict() then
|
|
local FireMenu = _MenuPool:AddSubMenu(MainMenu, 'Fire Toolbox', 'Fire Related Menu', true)
|
|
FireMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
local FireActions = _MenuPool:AddSubMenu(FireMenu, 'Actions', '', true)
|
|
FireActions:SetMenuWidthOffset(Config.MenuWidth)
|
|
local Drag = NativeUI.CreateItem('Drag', 'Drag/Undrag the closest player')
|
|
local Seat = NativeUI.CreateItem('Seat', 'Place a player in the closest vehicle')
|
|
local Unseat = NativeUI.CreateItem('Unseat', 'Remove a player from the closest vehicle')
|
|
FireActions:AddItem(Drag)
|
|
FireActions:AddItem(Seat)
|
|
FireActions:AddItem(Unseat)
|
|
Drag.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:DragNear', player)
|
|
end
|
|
end
|
|
Seat.Activated = function(ParentMenu, SelectedItem)
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:SeatNear', player, Veh)
|
|
end
|
|
end
|
|
Unseat.Activated = function(ParentMenu, SelectedItem)
|
|
if IsPedInAnyVehicle(GetPlayerPed(-1), true) then
|
|
Notify('~o~You need to be outside of the vehicle')
|
|
return
|
|
end
|
|
|
|
local player = GetClosestPlayer()
|
|
if player ~= false then
|
|
TriggerServerEvent('SEM_InteractionMenu:UnseatNear', player)
|
|
end
|
|
end
|
|
if Config.FireHospital then
|
|
local HospitalLocations = _MenuPool:AddSubMenu(FireActions, 'Hospitalize', '', true)
|
|
HospitalLocations:SetMenuWidthOffset(Config.MenuWidth)
|
|
for HospitalName, HospitalInfo in pairs(Config.HospitalLocation) do
|
|
local Hospitalize = NativeUI.CreateItem(HospitalName, 'Hospitalize a player')
|
|
HospitalLocations:AddItem(Hospitalize)
|
|
Hospitalize.Activated = function(ParentMenu, SelectedItem)
|
|
local PlayerID = tonumber(KeyboardInput('Player ID:', 10))
|
|
if PlayerID == nil then
|
|
Notify('~r~Please enter a player ID')
|
|
return
|
|
end
|
|
|
|
local HospitalTime = tonumber(KeyboardInput('Time: (Seconds) - Max Time: ' .. Config.MaxHospitalTime .. ' | Default Time: 30', 3))
|
|
if HospitalTime == nil then
|
|
HospitalTime = 30
|
|
end
|
|
if HospitalTime > Config.MaxHospitalTime then
|
|
Notify('~y~Exceeded Max Time\nMax Time: ' .. Config.MaxHospitalTime .. ' seconds')
|
|
HospitalTime = Config.MaxHospitalTime
|
|
end
|
|
|
|
Notify('Player Hospitalized for ~b~' .. HospitalTime .. ' seconds')
|
|
TriggerServerEvent('SEM_InteractionMenu:Hospitalize', PlayerID, HospitalTime, HospitalInfo)
|
|
end
|
|
end
|
|
local Unhospitalize = NativeUI.CreateItem('Unhospitalize', 'Unhospitalize a player')
|
|
if UnhospitalAllowed then
|
|
FireActions:AddItem(Unhospitalize)
|
|
end
|
|
Unhospitalize.Activated = function(ParentMenu, SelectedItem)
|
|
local PlayerID = tonumber(KeyboardInput('Player ID:', 10))
|
|
if PlayerID == nil then
|
|
Notify('~r~Please enter a player ID')
|
|
return
|
|
end
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Unhospitalize', PlayerID)
|
|
end
|
|
end
|
|
PropsList = {}
|
|
for _, Prop in pairs(Config.Props) do
|
|
table.insert(PropsList, Prop.name)
|
|
end
|
|
local Props = NativeUI.CreateListItem('Spawn Props', PropsList, 1, 'Spawn props on the ground')
|
|
local RemoveProps = NativeUI.CreateItem('Remove Props', 'Remove the closest prop')
|
|
FireActions:AddItem(Props)
|
|
FireActions:AddItem(RemoveProps)
|
|
FireActions.OnListSelect = function(sender, item, index)
|
|
if item == Props then
|
|
for _, Prop in pairs(Config.Props) do
|
|
if Prop.name == item:IndexToItem(index) then
|
|
SpawnProp(Prop.spawncode, Prop.name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
RemoveProps.Activated = function(ParentMenu, SelectedItem)
|
|
for _, Prop in pairs(Config.Props) do
|
|
DeleteProp(Prop.spawncode)
|
|
end
|
|
end
|
|
|
|
if Config.ShowStations then
|
|
local FireEMSStation = _MenuPool:AddSubMenu(FireMenu, 'Stations', '', true)
|
|
FireEMSStation:SetMenuWidthOffset(Config.MenuWidth)
|
|
local FireStation = _MenuPool:AddSubMenu(FireEMSStation, 'Fire Stations', '', true)
|
|
FireStation:SetMenuWidthOffset(Config.MenuWidth)
|
|
for _, Station in pairs(Config.FireStations) do
|
|
local StationCategory = _MenuPool:AddSubMenu(FireStation, Station.name, '', true)
|
|
StationCategory:SetMenuWidthOffset(Config.MenuWidth)
|
|
local SetWaypoint = NativeUI.CreateItem('Set Waypoint', 'Set a waypoint to the station')
|
|
local Teleport = NativeUI.CreateItem('Teleport', 'Teleport to the station')
|
|
StationCategory:AddItem(SetWaypoint)
|
|
if Config.AllowStationTeleport then
|
|
StationCategory:AddItem(Teleport)
|
|
end
|
|
SetWaypoint.Activated = function(ParentMenu, SelectedItem)
|
|
SetNewWaypoint(Station.coords.x, Station.coords.y)
|
|
end
|
|
Teleport.Activated = function(ParentMenu, SelectedItem)
|
|
SetEntityCoords(PlayerPedId(), Station.coords.x, Station.coords.y, Station.coords.z)
|
|
SetEntityHeading(PlayerPedId(), Station.coords.h)
|
|
end
|
|
end
|
|
|
|
local EMSStation = _MenuPool:AddSubMenu(FireEMSStation, 'Hospitals', '', true)
|
|
EMSStation:SetMenuWidthOffset(Config.MenuWidth)
|
|
for _, Station in pairs(Config.HospitalStations) do
|
|
local StationCategory = _MenuPool:AddSubMenu(EMSStation, Station.name, '', true)
|
|
StationCategory:SetMenuWidthOffset(Config.MenuWidth)
|
|
local SetWaypoint = NativeUI.CreateItem('Set Waypoint', 'Set a waypoint to the hospital')
|
|
local Teleport = NativeUI.CreateItem('Teleport', 'Teleport to the hospital')
|
|
StationCategory:AddItem(SetWaypoint)
|
|
if Config.AllowStationTeleport then
|
|
StationCategory:AddItem(Teleport)
|
|
end
|
|
SetWaypoint.Activated = function(ParentMenu, SelectedItem)
|
|
SetNewWaypoint(Station.coords.x, Station.coords.y)
|
|
end
|
|
Teleport.Activated = function(ParentMenu, SelectedItem)
|
|
SetEntityCoords(PlayerPedId(), Station.coords.x, Station.coords.y, Station.coords.z)
|
|
SetEntityHeading(PlayerPedId(), Station.coords.h)
|
|
end
|
|
end
|
|
end
|
|
|
|
if Config.DisplayFireUniforms or Config.DisplayFireLoadouts then
|
|
local FireLoadouts = _MenuPool:AddSubMenu(FireMenu, 'Loadouts', '', true)
|
|
FireLoadouts:SetMenuWidthOffset(Config.MenuWidth)
|
|
UniformsList = {}
|
|
for _, Uniform in pairs(Config.FireUniforms) do
|
|
table.insert(UniformsList, Uniform.name)
|
|
end
|
|
|
|
LoadoutsList = {
|
|
'Clear',
|
|
'Standard',
|
|
}
|
|
local Uniforms = NativeUI.CreateListItem('Uniforms', UniformsList, 1, 'Spawn Fire uniforms')
|
|
local Loadouts = NativeUI.CreateListItem('Loadouts', LoadoutsList, 1, 'Spawns Fire weapon loadouts')
|
|
if Config.DisplayFireUniforms then
|
|
FireLoadouts:AddItem(Uniforms)
|
|
end
|
|
if Config.DisplayFireLoadouts then
|
|
FireLoadouts:AddItem(Loadouts)
|
|
end
|
|
FireLoadouts.OnListSelect = function(sender, item, index)
|
|
if item == Uniforms then
|
|
for _, Uniform in pairs(Config.FireUniforms) do
|
|
if Uniform.name == item:IndexToItem(index) then
|
|
LoadPed(Uniform.spawncode)
|
|
Notify('~b~Uniform Spawned: ~g~' .. Uniform.name)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
if item == Loadouts then
|
|
local SelectedLoadout = item:IndexToItem(index)
|
|
if SelectedLoadout == 'Clear' then
|
|
SetEntityHealth(GetPlayerPed(-1), 200)
|
|
RemoveAllPedWeapons(GetPlayerPed(-1), true)
|
|
Notify('~r~All Weapons Cleared!')
|
|
elseif SelectedLoadout == 'Standard' then
|
|
SetEntityHealth(GetPlayerPed(-1), 200)
|
|
RemoveAllPedWeapons(GetPlayerPed(-1), true)
|
|
AddArmourToPed(GetPlayerPed(-1), 100)
|
|
GiveWeapon('weapon_flashlight')
|
|
GiveWeapon('weapon_fireextinguisher')
|
|
GiveWeapon('weapon_flare')
|
|
GiveWeapon('weapon_stungun')
|
|
Notify('~b~Loadout Spawned: ~g~' .. SelectedLoadout)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if Config.ShowFireVehicles then
|
|
local FireVehicles = _MenuPool:AddSubMenu(FireMenu, 'Vehicles', '', true)
|
|
FireVehicles:SetMenuWidthOffset(Config.MenuWidth)
|
|
|
|
for _, Vehicle in pairs(Config.FireVehicles) do
|
|
local FireVehicle = NativeUI.CreateItem(Vehicle.name, '')
|
|
FireVehicles:AddItem(FireVehicle)
|
|
if Config.ShowFireSpawnCode then
|
|
FireVehicle:RightLabel(Vehicle.spawncode)
|
|
end
|
|
FireVehicle.Activated = function(ParentMenu, SelectedItem)
|
|
SpawnVehicle(Vehicle.spawncode, Vehicle.name, Vehicle.livery, Vehicle.extras)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
if CivRestrict() then
|
|
local CivMenu = _MenuPool:AddSubMenu(MainMenu, 'Civ Toolbox', 'Civilian Related Menu', true)
|
|
CivMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
local CivActions = _MenuPool:AddSubMenu(CivMenu, 'Actions', '', true)
|
|
CivActions:SetMenuWidthOffset(Config.MenuWidth)
|
|
local HU = NativeUI.CreateItem('Hands Up', 'Put your hands up')
|
|
local HUK = NativeUI.CreateItem('Hand Up & Kneel', 'Put your hands up and kneel on the ground')
|
|
local Inventory = NativeUI.CreateItem('Inventory', 'Set your inventory')
|
|
local BAC = NativeUI.CreateItem('BAC', 'Set your BAC level')
|
|
local DropWeapon = NativeUI.CreateItem('Drop Weapon', 'Drop your current weapon on the ground')
|
|
CivActions:AddItem(HU)
|
|
CivActions:AddItem(HUK)
|
|
CivActions:AddItem(Inventory)
|
|
CivActions:AddItem(BAC)
|
|
CivActions:AddItem(DropWeapon)
|
|
HU.Activated = function(ParentMenu, SelectedItem)
|
|
local Ped = PlayerPedId()
|
|
if DoesEntityExist(Ped) and not HandCuffed then
|
|
Citizen.CreateThread(function()
|
|
LoadAnimation('random@mugging3')
|
|
if IsEntityPlayingAnim(Ped, 'random@mugging3', 'handsup_standing_base', 3) or HandCuffed then
|
|
ClearPedSecondaryTask(Ped)
|
|
SetEnableHandcuffs(Ped, false)
|
|
elseif not IsEntityPlayingAnim(Ped, 'random@mugging3', 'handsup_standing_base', 3) or not HandCuffed then
|
|
TaskPlayAnim(Ped, 'random@mugging3', 'handsup_standing_base', 8.0, -8, -1, 49, 0, 0, 0, 0)
|
|
SetEnableHandcuffs(Ped, true)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
HUK.Activated = function(ParentMenu, SelectedItem)
|
|
local Ped = PlayerPedId()
|
|
if (DoesEntityExist(Ped) and not IsEntityDead(Ped)) and not HandCuffed then
|
|
Citizen.CreateThread(function()
|
|
LoadAnimation('random@arrests')
|
|
if (IsEntityPlayingAnim(Ped, 'random@arrests', 'kneeling_arrest_idle', 3)) then
|
|
TaskPlayAnim(Ped, 'random@arrests', 'kneeling_arrest_get_up', 8.0, 1.0, -1, 128, 0, 0, 0, 0)
|
|
else
|
|
TaskPlayAnim(Ped, 'random@arrests', 'idle_2_hands_up', 8.0, 1.0, -1, 2, 0, 0, 0, 0)
|
|
Wait (4000)
|
|
TaskPlayAnim(Ped, 'random@arrests', 'kneeling_arrest_idle', 8.0, 1.0, -1, 2, 0, 0, 0, 0)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
Inventory.Activated = function(ParentMenu, SelectedItem)
|
|
local Items = KeyboardInput('Items:', 75)
|
|
if Items == nil or Items == '' then
|
|
Notify('~r~No Items Provided!')
|
|
return
|
|
end
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:InventorySet', Items)
|
|
Notify('~g~Inventory Set!')
|
|
end
|
|
BAC.Activated = function(ParentMenu, SelectedItem)
|
|
local BACLevel = KeyboardInput('BAC Level - Legal Limit: 0.08', 5)
|
|
if BACLevel == nil or BACLevel == '' then
|
|
Notify('~r~No BAC Level Provided!')
|
|
return
|
|
end
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:BACSet', tonumber(BACLevel))
|
|
if tonumber(BACLevel) < 0.08 then
|
|
Notify('~b~BAC Level Set: ~g~' .. tostring(BACLevel))
|
|
else
|
|
Notify('~b~BAC Level Set: ~r~' .. tostring(BACLevel))
|
|
end
|
|
end
|
|
DropWeapon.Activated = function(ParentMenu, SelectedItem)
|
|
local CurrentWeapon = GetSelectedPedWeapon(PlayerPedId())
|
|
SetCurrentPedWeapon(PlayerPedId(), 'weapon_unarmed', true)
|
|
SetPedDropsInventoryWeapon(GetPlayerPed(-1), CurrentWeapon, -2.0, 0.0, 0.5, 30)
|
|
Notify('~r~Weapon Dropped!')
|
|
end
|
|
if Config.ShowCivAdverts then
|
|
local CivAdverts = _MenuPool:AddSubMenu(CivMenu, 'Adverts', '', true)
|
|
CivAdverts:SetMenuWidthOffset(Config.MenuWidth)
|
|
for _, Ad in pairs(Config.CivAdverts) do
|
|
local Advert = NativeUI.CreateItem(Ad.name, 'Send an advert for ' .. Ad.name)
|
|
CivAdverts:AddItem(Advert)
|
|
Advert.Activated = function(ParentMenu, SelectedItem)
|
|
local Message = KeyboardInput('Message:', 128)
|
|
if Message == nil or Message == '' then
|
|
Notify('~r~No Advert Message Provided!')
|
|
return
|
|
end
|
|
|
|
TriggerServerEvent('SEM_InteractionMenu:Ads', Message, Ad.name, Ad.loc, Ad.file)
|
|
end
|
|
end
|
|
end
|
|
if Config.ShowCivVehicles then
|
|
local CivVehicles = _MenuPool:AddSubMenu(CivMenu, 'Vehicles', '', true)
|
|
CivVehicles:SetMenuWidthOffset(Config.MenuWidth)
|
|
|
|
for _, Vehicle in pairs(Config.CivVehicles) do
|
|
local CivVehicle = NativeUI.CreateItem(Vehicle.name, '')
|
|
CivVehicles:AddItem(CivVehicle)
|
|
if Config.ShowCivSpawnCode then
|
|
CivVehicle:RightLabel(Vehicle.spawncode)
|
|
end
|
|
CivVehicle.Activated = function(ParentMenu, SelectedItem)
|
|
SpawnVehicle(Vehicle.spawncode, Vehicle.name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if VehicleRestrict() then
|
|
local VehicleMenu = _MenuPool:AddSubMenu(MainMenu, 'Vehicle', 'Vehicle Related Menu', true)
|
|
VehicleMenu:SetMenuWidthOffset(Config.MenuWidth)
|
|
local Seats = {-1, 0, 1, 2}
|
|
local Windows = {'Front', 'Rear', 'All'}
|
|
local Doors = {'Driver', 'Passenger', 'Rear Right', 'Rear Left', 'Hood', 'Trunk', 'All'}
|
|
local Engine = NativeUI.CreateItem('Toggle Engine', 'Toggle your vehicle\'s engine')
|
|
local ILights = NativeUI.CreateItem('Toggle Interior Light', 'Toggle your vehicle\'s interior light')
|
|
local Seat = NativeUI.CreateSliderItem('Change Seats', Seats, 1, 'Switch to a different seat')
|
|
local Window = NativeUI.CreateListItem('Windows', Windows, 1, 'Open/Close your vehicle\'s windows')
|
|
local Door = NativeUI.CreateListItem('Doors', Doors, 1, 'Open/Close your vehicle\'s doors')
|
|
local FixVeh = NativeUI.CreateItem('Repair Vehicle', 'Repair your current vehicle')
|
|
local CleanVeh = NativeUI.CreateItem('Clean Vehicle', 'Clean your current vehicle')
|
|
local DelVeh = NativeUI.CreateItem('~r~Delete Vehicle', 'Delete your current vehicle')
|
|
VehicleMenu:AddItem(Engine)
|
|
VehicleMenu:AddItem(ILights)
|
|
VehicleMenu:AddItem(Seat)
|
|
VehicleMenu:AddItem(Window)
|
|
VehicleMenu:AddItem(Door)
|
|
if Config.VehicleOptions then
|
|
VehicleMenu:AddItem(FixVeh)
|
|
VehicleMenu:AddItem(CleanVeh)
|
|
VehicleMenu:AddItem(DelVeh)
|
|
end
|
|
Engine.Activated = function(ParentMenu, SelectedItem)
|
|
local Vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
|
|
if Vehicle ~= nil and Vehicle ~= 0 and GetPedInVehicleSeat(Vehicle, 0) then
|
|
SetVehicleEngineOn(Vehicle, (not GetIsVehicleEngineRunning(Vehicle)), false, true)
|
|
Notify('~g~Engine Toggled!')
|
|
else
|
|
Notify('~r~You\'re not in a Vehicle!')
|
|
end
|
|
end
|
|
ILights.Activated = function(ParentMenu, SelectedItem)
|
|
local Vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
|
|
|
|
if IsPedInVehicle(PlayerPedId(), Vehicle, false) then
|
|
if IsVehicleInteriorLightOn(Vehicle) then
|
|
SetVehicleInteriorlight(Vehicle, false)
|
|
else
|
|
SetVehicleInteriorlight(Vehicle, true)
|
|
end
|
|
else
|
|
Notify('~r~You\'re not in a Vehicle!')
|
|
end
|
|
end
|
|
VehicleMenu.OnSliderChange = function(sender, item, index)
|
|
if item == Seat then
|
|
VehicleSeat = item:IndexToItem(index)
|
|
local Veh = GetVehiclePedIsIn(GetPlayerPed(-1),false)
|
|
SetPedIntoVehicle(PlayerPedId(), Veh, VehicleSeat)
|
|
end
|
|
end
|
|
VehicleMenu.OnListSelect = function(sender, item, index)
|
|
local Ped = GetPlayerPed(-1)
|
|
local Veh = GetVehiclePedIsIn(Ped, false)
|
|
|
|
if item == Window then
|
|
VehicleWindow = item:IndexToItem(index)
|
|
if VehicleWindow == 'Front' then
|
|
if IsPedInAnyVehicle(Ped, false) then
|
|
if (GetPedInVehicleSeat(Veh, -1) == Ped) then
|
|
SetEntityAsMissionEntity(Veh, true, true)
|
|
if (WindowFrontRolled) then
|
|
RollDownWindow(Veh, 0)
|
|
RollDownWindow(Veh, 1)
|
|
WindowFrontRolled = false
|
|
else
|
|
RollUpWindow(Veh, 0)
|
|
RollUpWindow(Veh, 1)
|
|
WindowFrontRolled = true
|
|
end
|
|
end
|
|
end
|
|
elseif VehicleWindow == 'Rear' then
|
|
if IsPedInAnyVehicle(Ped, false) then
|
|
if (GetPedInVehicleSeat(Veh, -1) == Ped) then
|
|
SetEntityAsMissionEntity(Veh, true, true)
|
|
if (WindowFrontRolled) then
|
|
RollDownWindow(Veh, 2)
|
|
RollDownWindow(Veh, 3)
|
|
WindowFrontRolled = false
|
|
else
|
|
RollUpWindow(Veh, 2)
|
|
RollUpWindow(Veh, 3)
|
|
WindowFrontRolled = true
|
|
end
|
|
end
|
|
end
|
|
elseif VehicleWindow == 'All' then
|
|
if IsPedInAnyVehicle(Ped, false) then
|
|
if (GetPedInVehicleSeat(Veh, -1) == Ped) then
|
|
SetEntityAsMissionEntity(Veh, true, true)
|
|
if (WindowFrontRolled) then
|
|
RollDownWindow(Veh, 0)
|
|
RollDownWindow(Veh, 1)
|
|
RollDownWindow(Veh, 2)
|
|
RollDownWindow(Veh, 3)
|
|
WindowFrontRolled = false
|
|
else
|
|
RollUpWindow(Veh, 0)
|
|
RollUpWindow(Veh, 1)
|
|
RollUpWindow(Veh, 2)
|
|
RollUpWindow(Veh, 3)
|
|
WindowFrontRolled = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif item == Door then
|
|
local Doors = {'Driver', 'Passenger', 'Rear Left', 'Rear Right', 'Hood', 'Trunk', 'All'}
|
|
VehicleDoor = item:IndexToItem(index)
|
|
if VehicleDoor == 'Driver' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 0) > 0 then
|
|
SetVehicleDoorShut(Veh, 0, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 0, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'Passenger' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 1) > 0 then
|
|
SetVehicleDoorShut(Veh, 1, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 1, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'Rear Left' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 2) > 0 then
|
|
SetVehicleDoorShut(Veh, 2, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 2, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'Rear Right' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 3) > 0 then
|
|
SetVehicleDoorShut(Veh, 3, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 3, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'Hood' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 4) > 0 then
|
|
SetVehicleDoorShut(Veh, 4, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 4, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'Trunk' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 5) > 0 then
|
|
SetVehicleDoorShut(Veh, 5, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 5, false, false)
|
|
end
|
|
end
|
|
elseif VehicleDoor == 'All' then
|
|
if Veh ~= nil and Veh ~= 0 and Veh ~= 1 then
|
|
if GetVehicleDoorAngleRatio(Veh, 0) > 0 then
|
|
SetVehicleDoorShut(Veh, 0, false)
|
|
SetVehicleDoorShut(Veh, 1, false)
|
|
SetVehicleDoorShut(Veh, 2, false)
|
|
SetVehicleDoorShut(Veh, 3, false)
|
|
SetVehicleDoorShut(Veh, 4, false)
|
|
SetVehicleDoorShut(Veh, 5, false)
|
|
else
|
|
SetVehicleDoorOpen(Veh, 0, false, false)
|
|
SetVehicleDoorOpen(Veh, 1, false, false)
|
|
SetVehicleDoorOpen(Veh, 2, false, false)
|
|
SetVehicleDoorOpen(Veh, 3, false, false)
|
|
SetVehicleDoorOpen(Veh, 4, false, false)
|
|
SetVehicleDoorOpen(Veh, 5, false, false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
FixVeh.Activated = function(ParentMenu, SelectedItem)
|
|
local Vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
|
|
if Vehicle ~= nil and Vehicle ~= 0 then
|
|
SetVehicleEngineHealth(Vehicle, 100)
|
|
SetVehicleFixed(Vehicle)
|
|
Notify('~g~Vehicle Repaired!')
|
|
else
|
|
Notify('~r~You\'re not in a Vehicle!')
|
|
end
|
|
|
|
end
|
|
CleanVeh.Activated = function(ParentMenu, SelectedItem)
|
|
local Vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
|
|
if Vehicle ~= nil and Vehicle ~= 0 then
|
|
SetVehicleDirtLevel(Vehicle, 0)
|
|
Notify('~g~Vehicle Cleaned!')
|
|
else
|
|
Notify('~r~You\'re not in a Vehicle!')
|
|
end
|
|
end
|
|
DelVeh.Activated = function(ParentMenu, SelectedItem)
|
|
if (IsPedSittingInAnyVehicle(PlayerPedId())) then
|
|
local Vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
|
|
|
|
if (GetPedInVehicleSeat(Vehicle, -1) == PlayerPedId()) then
|
|
SetEntityAsMissionEntity(Vehicle, true, true)
|
|
DeleteVehicle(Vehicle)
|
|
|
|
if (DoesEntityExist(Vehicle)) then
|
|
Notify('~o~Unable to delete vehicle, try again.')
|
|
else
|
|
Notify('~r~Vehicle Deleted!')
|
|
end
|
|
else
|
|
Notify('~r~You must be in the driver\'s seat!')
|
|
end
|
|
else
|
|
Notify('~r~You\'re not in a Vehicle!')
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if EmoteRestrict() then
|
|
local EmotesList = {}
|
|
for _, Emote in pairs(Config.EmotesList) do
|
|
table.insert(EmotesList, Emote.name)
|
|
end
|
|
|
|
local EmotesMenu = NativeUI.CreateListItem('Emotes', EmotesList, 1, 'General RP Emotes')
|
|
MainMenu:AddItem(EmotesMenu)
|
|
|
|
MainMenu.OnListSelect = function(sender, item, index)
|
|
if item == EmotesMenu then
|
|
for _, Emote in pairs(Config.EmotesList) do
|
|
if Emote.name == item:IndexToItem(index) then
|
|
PlayEmote(Emote.emote, Emote.name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
_MenuPool:RefreshIndex()
|
|
end
|
|
|
|
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(0)
|
|
|
|
_MenuPool:ProcessMenus()
|
|
_MenuPool:ControlDisablingEnabled(false)
|
|
_MenuPool:MouseControlsEnabled(false)
|
|
|
|
if IsControlJustPressed(1, Config.MenuButton) and GetLastInputMethod(2) then
|
|
if not menuOpen then
|
|
Menu()
|
|
MainMenu:Visible(true)
|
|
else
|
|
_MenuPool:CloseAllMenus()
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
RegisterCommand(Config.Command, function(source, args, rawCommands)
|
|
if Config.OpenMenu == 1 then
|
|
Menu()
|
|
MainMenu:Visible(true)
|
|
end
|
|
end)
|
|
|
|
Citizen.CreateThread(function()
|
|
if Config.OpenMenu == 1 then
|
|
TriggerEvent('chat:addSuggestion', '/' .. Config.Command, 'Used to open SEM_InteractionMenu')
|
|
end
|
|
end)
|