--[[ ────────────────────────────────────────────────────────────── SEM_InteractionMenu (client.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 ────────────────────────────────────────────────────────────── ]] --Cuffing Event local isCuffed = false RegisterNetEvent('SEM_InteractionMenu:Cuff') AddEventHandler('SEM_InteractionMenu:Cuff', function() local Ped = PlayerPedId() if (DoesEntityExist(Ped)) then Citizen.CreateThread(function() RequestAnimDict('mp_arresting') while not HasAnimDictLoaded('mp_arresting') do Citizen.Wait(0) end if isCuffed then isCuffed = false Citizen.Wait(500) SetEnableHandcuffs(Ped, false) ClearPedTasksImmediately(Ped) else isCuffed = true SetEnableHandcuffs(Ped, true) TaskPlayAnim(Ped, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0, 0, 0, 0) end end) end end) --Cuff Animation & Restructions Citizen.CreateThread(function() while true do Citizen.Wait(1) if isCuffed then if not IsEntityPlayingAnim(GetPlayerPed(PlayerId()), 'mp_arresting', 'idle', 3) then TaskPlayAnim(GetPlayerPed(PlayerId()), 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0, 0, 0, 0) end SetCurrentPedWeapon(PlayerPedId(), 'weapon_unarmed', true) if not Config.VehEnterCuffed then DisableControlAction(1, 23, true) --F | Enter Vehicle DisableControlAction(1, 75, true) --F | Exit Vehicle end DisableControlAction(1, 140, true) --R DisableControlAction(1, 141, true) --Q DisableControlAction(1, 142, true) --LMB SetPedPathCanUseLadders(GetPlayerPed(PlayerId()), false) if IsPedInAnyVehicle(GetPlayerPed(PlayerId()), false) then DisableControlAction(0, 59, true) --Vehicle Driving end end end end) --Dragging Event local Drag = false local OfficerDrag = -1 RegisterNetEvent('SEM_InteractionMenu:Drag') AddEventHandler('SEM_InteractionMenu:Drag', function(ID) Drag = not Drag OfficerDrag = ID if not Drag then DetachEntity(PlayerPedId(), true, false) end end) --Drag Attachment Citizen.CreateThread(function() while true do Citizen.Wait(1) if Drag then local Ped = GetPlayerPed(GetPlayerFromServerId(OfficerDrag)) local Ped2 = PlayerPedId() AttachEntityToEntity(Ped2, Ped, 4103, 0.35, 0.38, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true) DisableControlAction(1, 140, true) --R DisableControlAction(1, 141, true) --Q DisableControlAction(1, 142, true) --LMB end end end) --Force Seat Player Event RegisterNetEvent('SEM_InteractionMenu:Seat') AddEventHandler('SEM_InteractionMenu:Seat', function(Veh) 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 VehicleHandle ~= nil then SetPedIntoVehicle(PlayerPedId(), VehicleHandle, 1) end end) --Force Unseat Player Event RegisterNetEvent('SEM_InteractionMenu:Unseat') AddEventHandler('SEM_InteractionMenu:Unseat', function(ID) local Ped = GetPlayerPed(ID) ClearPedTasksImmediately(Ped) PlayerPos = GetEntityCoords(PlayerPedId(), true) local X = PlayerPos.x - 0 local Y = PlayerPos.y - 0 SetEntityCoords(PlayerPedId(), X, Y, PlayerPos.z) end) --Spike Strip Spawn Event local SpawnedSpikes = {} RegisterNetEvent('SEM_InteractionMenu:Spikes-SpawnSpikes') AddEventHandler('SEM_InteractionMenu:Spikes-SpawnSpikes', function(Length) if IsPedInAnyVehicle(PlayerPedId(), false) then Notify('~r~You can\'t set spikes while in a vehicle!') return end local SpawnCoords = GetOffsetFromEntityInWorldCoords(GetPlayerPed(PlayerId()) , 0.0, 2.0, 0.0) for a = 1, Length do local Spike = CreateObject(GetHashKey('P_ld_stinger_s'), SpawnCoords.x, SpawnCoords.y, SpawnCoords.z, 1, 1, 1) local NetID = NetworkGetNetworkIdFromEntity(Spike) SetNetworkIdExistsOnAllMachines(NetID, true) SetNetworkIdCanMigrate(NetID, false) SetEntityHeading(Spike, GetEntityHeading(GetPlayerPed(PlayerId()) )) PlaceObjectOnGroundProperly(Spike) FreezeEntityPosition(Spike, true) SpawnCoords = GetOffsetFromEntityInWorldCoords(Spike, 0.0, 4.0, 0.0) table.insert(SpawnedSpikes, NetID) end end) --Spike Strip Delete Event RegisterNetEvent('SEM_InteractionMenu:Spikes-DeleteSpikes') AddEventHandler('SEM_InteractionMenu:Spikes-DeleteSpikes', function() for a = 1, #SpawnedSpikes do local Spike = NetworkGetEntityFromNetworkId(SpawnedSpikes[a]) DeleteEntity(Spike) end Notify('~r~Spikes Strips Removed!') SpawnedSpikes = {} end) --Spike Strip Tire Popping Citizen.CreateThread(function() while true do Citizen.Wait(25) if IsPedInAnyVehicle(PlayerPedId() , false) then local Vehicle = GetVehiclePedIsIn(PlayerPedId() , false) if GetPedInVehicleSeat(Vehicle, -1) == PlayerPedId() then local VehiclePos = GetEntityCoords(Vehicle, false) local Spike = GetClosestObjectOfType(VehiclePos.x, VehiclePos.y, VehiclePos.z, 2.0, GetHashKey('P_ld_stinger_s'), 1, 1, 1) if Spike ~= 0 then local Tires = { {bone = 'wheel_lf', index = 0}, {bone = 'wheel_rf', index = 1}, {bone = 'wheel_lm', index = 2}, {bone = 'wheel_rm', index = 3}, {bone = 'wheel_lr', index = 4}, {bone = 'wheel_rr', index = 5} } for a = 1, #Tires do local TirePos = GetWorldPositionOfEntityBone(Vehicle, GetEntityBoneIndexByName(Vehicle, Tires[a].bone)) local Spike = GetClosestObjectOfType(TirePos.x, TirePos.y, TirePos.z, 2.0, GetHashKey('P_ld_stinger_s'), 1, 1, 1) local SpikePos = GetEntityCoords(Spike, false) local Distance = Vdist(TirePos.x, TirePos.y, TirePos.z, SpikePos.x, SpikePos.y, SpikePos.z) if Distance < 1.8 then if not IsVehicleTyreBurst(Vehicle, Tires[a].index, true) or IsVehicleTyreBurst(Vehicle, Tires[a].index, false) then SetVehicleTyreBurst(Vehicle, Tires[a].index, false, 1000.0) end end end end end end end end) --Backup RegisterNetEvent('SEM_InteractionMenu:CallBackup') AddEventHandler('SEM_InteractionMenu:CallBackup', function(Code, StreetName, Coords) if LEORestrict() then local BackupBlip = nil local BackupBlips = {} local function CreateBlip(x, y, z, Name, Sprite, Size, Colour) BackupBlip = AddBlipForCoord(x, y, z) SetBlipSprite(BackupBlip, Sprite) SetBlipDisplay(BackupBlip, 4) SetBlipScale(BackupBlip, Size) SetBlipColour(BackupBlip, Colour) SetBlipAsShortRange(BackupBlip, true) BeginTextCommandSetBlipName('STRING') AddTextComponentString(Name) EndTextCommandSetBlipName(BackupBlip) table.insert(BackupBlips, BackupBlip) Citizen.Wait(Config.BackupBlipTimeout * 60000) for _, Blip in pairs(BackupBlips) do RemoveBlip(Blip) end end if Code == 1 then Notify('An officer is requesting ~g~Code 1 ~w~backup at ~b~' .. StreetName) CreateBlip(Coords.x, Coords.y, Coords.z, 'Code 1 Backup Requested', 56, 0.8, 2) elseif Code == 2 then Notify('An officer is requesting ~y~Code 2 ~w~backup at ~b~' .. StreetName) CreateBlip(Coords.x, Coords.y, Coords.z, 'Code 2 Backup Requested', 56, 0.8, 17) elseif Code == 3 then Notify('An officer is requesting ~r~Code 3 ~w~backup at ~b~' .. StreetName) CreateBlip(Coords.x, Coords.y, Coords.z, 'Code 3 Backup Requested', 56, 1.0, 49) elseif Code == 99 then Notify('An officer is requesting ~r~Code 99 ~w~backup at ~b~' .. StreetName) CreateBlip(Coords.x, Coords.y, Coords.z, 'Code 99 Backup Requested', 56, 1.2, 49) elseif Code == 'panic' then Notify('An officer has pressed their ~r~Panic Button ~w~at ~b~' .. StreetName) CreateBlip(Coords.x, Coords.y, Coords.z, 'Panic Button Pressed', 103, 1.2, 49) end end end) --Jail CurrentlyJailed = false EarlyRelease = false OriginalJailTime = 0 RegisterNetEvent('SEM_InteractionMenu:JailPlayer') AddEventHandler('SEM_InteractionMenu:JailPlayer', function(JailTime) if CurrentlyJailed then return end if CurrentlyHospitaled then return end OriginalJailTime = JailTime local Ped = PlayerPedId() if DoesEntityExist(Ped) then Citizen.CreateThread(function() SetEntityCoords(Ped, Config.JailLocation.Jail.x, Config.JailLocation.Jail.y, Config.JailLocation.Jail.z) SetEntityHeading(Ped, Config.JailLocation.Jail.h) CurrentlyJailed = true while JailTime >= 0 and not EarlyRelease do SetEntityInvincible(Ped, true) if IsPedInAnyVehicle(Ped, false) then ClearPedTasksImmediately(Ped) end if JailTime % 30 == 0 and JailTime ~= 0 then TriggerEvent('chat:addMessage', { multiline = true, color = {86, 96, 252}, args = {'Judge', JailTime .. ' months until release.'}, }) end Citizen.Wait(1000) local Location = GetEntityCoords(Ped, true) local Distance = Vdist(Config.JailLocation.Jail.x, Config.JailLocation.Jail.y, Config.JailLocation.Jail.z, Location['x'], Location['y'], Location['z']) if Distance > 100 then SetEntityCoords(Ped, Config.JailLocation.Jail.x, Config.JailLocation.Jail.y, Config.JailLocation.Jail.z) SetEntityHeading(Ped, Config.JailLocation.Jail.h) TriggerEvent('chat:addMessage', { multiline = true, color = {86, 96, 252}, args = {'Judge', 'Don\'t try escape, its impossible'}, }) end JailTime = JailTime - 1 end if EarlyRelease then TriggerServerEvent('SEM_InteractionMenu:GlobalChat', {86, 96, 252}, 'Judge', GetPlayerName(PlayerId()) .. ' was released from Jail on Parole') else TriggerServerEvent('SEM_InteractionMenu:GlobalChat', {86, 96, 252}, 'Judge', GetPlayerName(PlayerId()) .. ' was released from Jail after ' .. OriginalJailTime .. ' months(s).') end SetEntityCoords(Ped, Config.JailLocation.Release.x, Config.JailLocation.Release.y, Config.JailLocation.Release.z) SetEntityHeading(Ped, Config.JailLocation.Release.h) CurrentlyJailed = false EarlyRelease = false end) end end) RegisterNetEvent('SEM_InteractionMenu:UnjailPlayer') AddEventHandler('SEM_InteractionMenu:UnjailPlayer', function() EarlyRelease = true end) --Toggle LEO Weapons CarbineEquipped = false ShotgunEquipped = false Citizen.CreateThread(function() while true do Citizen.Wait(50) if Config.UnrackWeapons == 1 then local Ped = PlayerPedId() local CurrentWeapon = GetSelectedPedWeapon(Ped) if CarbineEquipped then SetCurrentPedWeapon(Ped, 'weapon_carbinerifle', true) else if tostring(CurrentWeapon) == '-2084633992' then Notify('~o~You need to unrack your rifle before you can use it') SetCurrentPedWeapon(Ped, 'weapon_unarmed', true) end end if ShotgunEquipped then SetCurrentPedWeapon(Ped, 'weapon_pumpshotgun', true) else if tostring(CurrentWeapon) == '487013001' then Notify('~o~You need to unrack your shotgun before you can use it') SetCurrentPedWeapon(Ped, 'weapon_unarmed', true) end end end end end) --Civilian Adverts RegisterNetEvent('SEM_InteractionMenu:SyncAds') AddEventHandler('SEM_InteractionMenu:SyncAds',function(Text, Name, Loc, File, ID) Ad(Text, Name, Loc, File, ID) end) --Inventory RegisterNetEvent('SEM_InteractionMenu:InventoryResult') AddEventHandler('SEM_InteractionMenu:InventoryResult', function(Inventory) Citizen.Wait(5000) if Inventory == nil then Inventory = 'Empty' end Notify('~b~Inventory Items: ~g~' .. Inventory) end) --BAC RegisterNetEvent('SEM_InteractionMenu:BACResult') AddEventHandler('SEM_InteractionMenu:BACResult', function(BACLevel) Citizen.Wait(5000) if BACLevel == nil then BACLevel = 0.00 end if tonumber(BACLevel) < 0.08 then Notify('~b~BAC Level: ~g~' .. tostring(BACLevel)) else Notify('~b~BAC Level: ~r~' .. tostring(BACLevel)) end end) --Hospital CurrentlyHospitalized = false EarlyDischarge = false OriginalHospitalTime = 0 RegisterNetEvent('SEM_InteractionMenu:HospitalizePlayer') AddEventHandler('SEM_InteractionMenu:HospitalizePlayer', function(HospitalTime, HospitalLocation) if CurrentlyHospitaled then return end if CurrentlyJailed then return end OriginalHospitalTime = HospitalTime local Ped = PlayerPedId() if DoesEntityExist(Ped) then Citizen.CreateThread(function() SetEntityCoords(Ped, HospitalLocation.Hospital.x, HospitalLocation.Hospital.y, HospitalLocation.Hospital.z) SetEntityHeading(Ped, HospitalLocation.Hospital.h) CurrentlyHospitaled = true while HospitalTime >= 0 and not EarlyDischarge do SetEntityInvincible(Ped, true) if IsPedInAnyVehicle(Ped, false) then ClearPedTasksImmediately(Ped) end if HospitalTime % 30 == 0 and HospitalTime ~= 0 then TriggerEvent('chat:addMessage', { multiline = true, color = {86, 96, 252}, args = {'Doctor', HospitalTime .. ' months until release.'}, }) end Citizen.Wait(1000) local Location = GetEntityCoords(Ped, true) local Distance = Vdist(HospitalLocation.Hospital.x, HospitalLocation.Hospital.y, HospitalLocation.Hospital.z, Location['x'], Location['y'], Location['z']) if Distance > 30 then SetEntityCoords(Ped, HospitalLocation.Hospital.x, HospitalLocation.Hospital.y, HospitalLocation.Hospital.z) SetEntityHeading(Ped, HospitalLocation.Hospital.h) TriggerEvent('chat:addMessage', { multiline = true, color = {86, 96, 252}, args = {'Doctor', 'You cannot discharge yourself!'}, }) end HospitalTime = HospitalTime - 1 end if EarlyDischarge then TriggerServerEvent('SEM_InteractionMenu:GlobalChat', {86, 96, 252}, 'Doctor', GetPlayerName(PlayerId()) .. ' was discharged from Hospital early') else TriggerServerEvent('SEM_InteractionMenu:GlobalChat', {86, 96, 252}, 'Doctor', GetPlayerName(PlayerId()) .. ' was discharged from Hospital after ' .. OriginalHospitalTime .. ' months(s).') end SetEntityCoords(Ped, HospitalLocation.Release.x, HospitalLocation.Release.y, HospitalLocation.Release.z) SetEntityHeading(Ped, HospitalLocation.Release.h) CurrentlyHospitaled = false EarlyDischarge = false end) end end) RegisterNetEvent('SEM_InteractionMenu:UnhospitalizePlayer') AddEventHandler('SEM_InteractionMenu:UnhospitalizePlayer', function() EarlyDischarge = true end) --Station Blips Citizen.CreateThread(function() if Config.DisplayStationBlips then local function CreateBlip(x, y, z, Name, Colour, Sprite) StationBlip = AddBlipForCoord(x, y, z) SetBlipSprite(StationBlip, Sprite) if Config.StationBlipsDispalyed == 1 then SetBlipDisplay(StationBlip, 3) elseif Config.StationBlipsDispalyed == 2 then SetBlipDisplay(StationBlip, 5) else SetBlipDisplay(StationBlip, 2) end SetBlipScale(StationBlip, 1.0) SetBlipColour(StationBlip, Colour) SetBlipAsShortRange(StationBlip, true) BeginTextCommandSetBlipName('STRING') AddTextComponentString(Name) EndTextCommandSetBlipName(StationBlip) end for _, Station in pairs(Config.LEOStations) do CreateBlip(Station.coords.x, Station.coords.y, Station.coords.z, 'Police Station', 38, 60) end for _, Station in pairs(Config.FireStations) do CreateBlip(Station.coords.x, Station.coords.y, Station.coords.z, 'Fire Station', 1, 60) end for _, Station in pairs(Config.HospitalStations) do CreateBlip(Station.coords.x, Station.coords.y, Station.coords.z, 'Hospital', 2, 61) end end end) --Permissions LEOAce = false TriggerServerEvent('SEM_InteractionMenu:LEOPerms') RegisterNetEvent('SEM_InteractionMenu:LEOPermsResult') AddEventHandler('SEM_InteractionMenu:LEOPermsResult', function(Allowed) if Allowed then LEOAce = true else LEOAce = false end end) FireAce = false TriggerServerEvent('SEM_InteractionMenu:FirePerms') RegisterNetEvent('SEM_InteractionMenu:FirePermsResult') AddEventHandler('SEM_InteractionMenu:FirePermsResult', function(Allowed) if Allowed then FireAce = true else FireAce = false end end) UnjailAllowed = false TriggerServerEvent('SEM_InteractionMenu:UnjailPerms') RegisterNetEvent('SEM_InteractionMenu:UnjailPermsResult') AddEventHandler('SEM_InteractionMenu:UnjailPermsResult', function(Allowed) if Allowed then UnjailAllowed = true else UnjailAllowed = false end end) UnhospitalAllowed = false TriggerServerEvent('SEM_InteractionMenu:UnhospitalPerms') RegisterNetEvent('SEM_InteractionMenu:UnhospitalPermsResult') AddEventHandler('SEM_InteractionMenu:UnhospitalPermsResult', function(Allowed) if Allowed then UnhospitalAllowed = true else UnhospitalAllowed = false end end) --Emote Citizen.CreateThread(function() while true do Citizen.Wait(1) if EmotePlaying then if Config.EmoteHelp then NotifyHelp('You are playing an Emote, ~b~Move to Cancel') end -- Spacebar W S A D if (IsControlPressed(0, 22) or IsControlPressed(0, 32) or IsControlPressed(0, 33) or IsControlPressed(0, 34) or IsControlPressed(0, 35)) then CancelEmote() end end end end) --Commands Citizen.CreateThread(function() if EmoteRestrict() then local Index = 0 local Emotes = '' for _, Emote in pairs(Config.EmotesList) do Index = Index + 1 if Index == 1 then Emotes = Emotes .. Emote.name else Emotes = Emotes .. ', ' .. Emote.name end end TriggerEvent('chat:addSuggestion', '/emotes', 'List of Current Avaliable Emotes') TriggerEvent('chat:addSuggestion', '/emote', 'Play Emote', {{name = 'Emote Name', help = 'Emotes: ' .. Emotes}}) else TriggerEvent('chat:removeSuggestion', '/emotes') TriggerEvent('chat:removeSuggestion', '/emote') end TriggerEvent('chat:addSuggestion', '/eng', 'Toggles Engine') TriggerEvent('chat:addSuggestion', '/hood', 'Toggles Vehicle\'s Hood') TriggerEvent('chat:addSuggestion', '/trunk', 'Toggles Vehicle\'s Trunk') TriggerEvent('chat:addSuggestion', '/clear', 'Clears all Weapons') TriggerEvent('chat:addSuggestion', '/cuff', 'Cuff Player', {{name = 'ID', help = 'Players Server ID'}}) TriggerEvent('chat:addSuggestion', '/drag', 'Drag Player', {{name = 'ID', help = 'Players Server ID'}}) TriggerEvent('chat:addSuggestion', '/dropweapon', 'Drops Weapon in Hand') TriggerEvent('chat:addSuggestion', '/loadout', 'Equips LEO Weapon Loadout') TriggerEvent('chat:addSuggestion', '/coords', 'Shows Current Player Coords and Heading') if Config.Radar ~= 0 then TriggerEvent('chat:addSuggestion', '/radar', 'Toggle Radar Menu') end if Config.LEOAccess == 3 or Config.FireAccess == 3 then if Config.OndutyPSWDActive then TriggerEvent('chat:addSuggestion', '/onduty', 'Enable LEO/Fire Menu', {{name = 'Department', help = 'LEO or Fire'}, {name = 'Password', help = 'Onduty Password'}}) else TriggerEvent('chat:addSuggestion', '/onduty', 'Enable LEO/Fire Menu', {{name = 'Department', help = 'LEO or Fire'}}) end else TriggerEvent('chat:removeSuggestion', '/onduty') end end) LEOOnduty = false FireOnduty = false RegisterCommand('onduty', function(source, args, rawCommand) if Config.LEOAccess == 3 or Config.FireAccess == 3 then if Config.OndutyPSWDActive then if args[2] == Config.OndutyPSWD then local Department = args[1]:lower() if Department == 'leo' then LEOOnduty = not LEOOnduty if LEOOnduty then Notify('~g~You are onduty as an LEO') else Notify('~o~You are no longer onduty as an LEO') end elseif Department == 'fire' then FireOnduty = not FireOnduty if FireOnduty == true then Notify('~g~You are onduty as an Firefighter') else Notify('~o~You are no longer onduty as an Firefighter') end else Notify('~r~Invalid Department!') end else Notify('~r~Incorrect Password') end else local Department = args[1]:lower() if Department == 'leo' then LEOOnduty = not LEOOnduty if LEOOnduty then Notify('~g~You are onduty as an LEO') else Notify('~o~You are no longer onduty as an LEO') end elseif Department == 'fire' then FireOnduty = not FireOnduty if FireOnduty == true then Notify('~g~You are onduty as an Firefighter') else Notify('~o~You are no longer onduty as an Firefighter') end else Notify('~r~Invalid Department!') end end end end) function IsOndutyLEO() return LEOOnduty end function IsOndutyFire() return FireOnduty end RegisterCommand('cuff', function(source, args, rawCommand) if LEORestrict() or FireRestrict() then if args[1] ~= nil then local ID = tonumber(args[1]) if Config.CommandDistanceChecked then if GetDistance(source) < Config.CommandDistance then TriggerServerEvent('SEM_InteractionMenu:CuffNear', ID) else Notify('~r~That player is too far away') end else TriggerServerEvent('SEM_InteractionMenu:CuffNear', ID) end else TriggerServerEvent('SEM_InteractionMenu:CuffNear', GetClosestPlayer()) end else Notify('~r~Insufficient Permissions') end end) RegisterCommand('drag', function(source, args, rawCommand) if LEORestrict() or FireRestrict() then if args[1] ~= nil then local ID = tonumber(args[1]) if Config.CommandDistanceChecked then if GetDistance(source) < Config.CommandDistance then TriggerServerEvent('SEM_InteractionMenu:DragNear', ID) else Notify('~r~That player is too far away') end else TriggerServerEvent('SEM_InteractionMenu:DragNear', ID) end else TriggerServerEvent('SEM_InteractionMenu:DragNear', GetClosestPlayer()) end else Notify('~r~Insufficient Permissions') end end) RegisterCommand('radar', function(source, args, rawCommand) if Config.Radar ~= 0 then if LEORestrict() or FireRestrict() then ToggleRadar() else Notify('~r~Insufficient Permissions') end end end) RegisterCommand('loadout', function(source, args, rawCommand) if LEORestrict() then if args[1] then local RequestedLoadout = args[1] for Name, Loadout in pairs(Config.LEOLoadouts) do if Name:lower() == RequestedLoadout:lower() 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 return end end Notify('~r~Invalid Loadout') else SetEntityHealth(PlayerPedId(), 200) RemoveAllPedWeapons(PlayerPedId(), true) AddArmourToPed(PlayerPedId(), 100) GiveWeapon('weapon_nightstick') GiveWeapon('weapon_flashlight') GiveWeapon('weapon_fireextinguisher') GiveWeapon('weapon_flare') GiveWeapon('weapon_stungun') GiveWeapon('weapon_combatpistol') AddWeaponComponent('weapon_combatpistol', 'component_at_pi_flsh') Notify('~g~Loadout Spawned') end else Notify('~r~You aren\'t an LEO') end end) RegisterCommand('hu', function(source, args, rawCommand) 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) RegisterCommand('huk', function(source, args, rawCommand) 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) RegisterCommand('dropweapon', function(source, args, rawCommand) local CurrentWeapon = GetSelectedPedWeapon(PlayerPedId()) SetPedDropsInventoryWeapon(PlayerPedId(), CurrentWeapon, -2.0, 0.0, 0.5, 30) Notify('~r~Weapon Dropped!') end) RegisterCommand('clear', function(source, args, rawCommand) SetEntityHealth(PlayerPedId(), 200) RemoveAllPedWeapons(PlayerPedId(), true) Notify('~r~All Weapons Cleared!') end) RegisterCommand('eng', function(source, args, rawCommand) local Veh = GetVehiclePedIsIn(PlayerPedId(), false) if Veh ~= nil and Veh ~= 0 and GetPedInVehicleSeat(Veh, 0) then SetVehicleEngineOn(Veh, (not GetIsVehicleEngineRunning(Veh)), false, true) Notify('~g~Engine Toggled!') end end) RegisterCommand('hood', function(source, args, rawCommand) local Veh = GetVehiclePedIsIn(PlayerPedId(), false) 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 Notify('~g~Hood Toggled!') end) RegisterCommand('trunk', function(source, args, rawCommand) local Veh = GetVehiclePedIsIn(PlayerPedId(), false) 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 Notify('~g~Trunk Toggled!') end) RegisterCommand('emotes', function(source, args, rawCommand) if EmoteRestrict() then local Index = 0 local Emotes = '' for _, Emote in pairs(Config.EmotesList) do Index = Index + 1 if Index == 1 then Emotes = Emotes .. Emote.name else Emotes = Emotes .. ', ' .. Emote.name end end TriggerEvent('chat:addMessage', { multiline = true, color = {255, 0 ,0}, args = {'Emotes', '\n^r^7' .. Emotes}, }) end end) RegisterCommand('emote', function(source, args, rawCommand) if EmoteRestrict() then local SelectedEmote = args[1] for _, Emote in pairs(Config.EmotesList) do if Emote.name == SelectedEmote then PlayEmote(Emote.emote, Emote.name) return end end TriggerEvent('chat:addMessage', { multiline = true, color = {255, 0, 0}, args = {'Emotes', 'Invalid Emote!'}, }) end end) RegisterCommand('coords', function(source, args, rawCommand) local Coords = GetEntityCoords(PlayerPedId()) local Heading = GetEntityHeading(PlayerPedId()) TriggerEvent('chatMessage', 'Coords', {255, 255, 0}, '\nX: ' .. Coords.x .. '\nY: ' .. Coords.y .. '\nZ: ' .. Coords.z .. '\nHeading: ' .. Heading) end)