local IsNoClipping = false local PlayerPed = nil local NoClipEntity = nil local Camera = nil local NoClipAlpha = nil local PlayerIsInVehicle = false local ResourceName = GetCurrentResourceName() local MinY, MaxY = -89.0, 89.0 --[[ Configurable values are commented. ]] -- Perspective values local PedFirstPersonNoClip = true -- No Clip in first person when not in a vehicle local VehFirstPersonNoClip = false -- No Clip in first person when in a vehicle local ESCEnable = false -- Access Map during NoClip -- Speed settings local Speed = 1 -- Default: 1 local MaxSpeed = 16.0 -- Default: 16.0 -- Key bindings local MOVE_FORWARDS = 32 -- Default: W local MOVE_BACKWARDS = 33 -- Default: S local MOVE_LEFT = 34 -- Default: A local MOVE_RIGHT = 35 -- Default: D local MOVE_UP = 44 -- Default: Q local MOVE_DOWN = 46 -- Default: E local SPEED_DECREASE = 14 -- Default: Mouse wheel down local SPEED_INCREASE = 15 -- Default: Mouse wheel up local SPEED_RESET = 348 -- Default: Mouse wheel click local SPEED_SLOW_MODIFIER = 36 -- Default: Left Control local SPEED_FAST_MODIFIER = 21 -- Default: Left Shift local SPEED_FASTER_MODIFIER = 19 -- Default: Left Alt local DisabledControls = function() HudWeaponWheelIgnoreSelection() DisableAllControlActions(0) DisableAllControlActions(1) DisableAllControlActions(2) EnableControlAction(0, 220, true) EnableControlAction(0, 221, true) EnableControlAction(0, 245, true) if ESCEnable then EnableControlAction(0, 200, true) end end local IsControlAlwaysPressed = function(inputGroup, control) return IsControlPressed(inputGroup, control) or IsDisabledControlPressed(inputGroup, control) end local IsPedDrivingVehicle = function(ped, veh) return ped == GetPedInVehicleSeat(veh, -1) end local SetupCam = function() local entityRot = GetEntityRotation(NoClipEntity) Camera = CreateCameraWithParams('DEFAULT_SCRIPTED_CAMERA', GetEntityCoords(NoClipEntity), vector3(0.0, 0.0, entityRot.z), 75.0) SetCamActive(Camera, true) RenderScriptCams(true, true, 1000, false, false) if PlayerIsInVehicle == 1 then AttachCamToEntity(Camera, NoClipEntity, 0.0, VehFirstPersonNoClip == true and 0.5 or -4.5, VehFirstPersonNoClip == true and 1.0 or 2.0, true) else AttachCamToEntity(Camera, NoClipEntity, 0.0, PedFirstPersonNoClip == true and 0.0 or -2.0, PedFirstPersonNoClip == true and 1.0 or 0.5, true) end end local DestroyCamera = function() SetGameplayCamRelativeHeading(0) RenderScriptCams(false, true, 1000, true, true) DetachEntity(NoClipEntity, true, true) SetCamActive(Camera, false) DestroyCam(Camera, true) end local GetGroundCoords = function(coords) local rayCast = StartShapeTestRay(coords.x, coords.y, coords.z, coords.x, coords.y, -10000.0, 1, 0) local _, hit, hitCoords = GetShapeTestResult(rayCast) return (hit == 1 and hitCoords) or coords end local CheckInputRotation = function() local rightAxisX = GetControlNormal(0, 220) local rightAxisY = GetControlNormal(0, 221) local rotation = GetCamRot(Camera, 2) local yValue = rightAxisY * -5 local newX local newZ = rotation.z + (rightAxisX * -10) if (rotation.x + yValue > MinY) and (rotation.x + yValue < MaxY) then newX = rotation.x + yValue end if newX ~= nil and newZ ~= nil then SetCamRot(Camera, vector3(newX, rotation.y, newZ), 2) end SetEntityHeading(NoClipEntity, math.max(0, (rotation.z % 360))) end RunNoClipThread = function() Citizen.CreateThread(function() while IsNoClipping do Citizen.Wait(0) CheckInputRotation() DisabledControls() if IsControlAlwaysPressed(2, SPEED_DECREASE) then Speed = Speed - 0.5 if Speed < 0.5 then Speed = 0.5 end elseif IsControlAlwaysPressed(2, SPEED_INCREASE) then Speed = Speed + 0.5 if Speed > MaxSpeed then Speed = MaxSpeed end elseif IsDisabledControlJustReleased(0, SPEED_RESET) then Speed = 1 end local multi = 1.0 if IsControlAlwaysPressed(0, SPEED_FAST_MODIFIER) then multi = 2 elseif IsControlAlwaysPressed(0, SPEED_FASTER_MODIFIER) then multi = 4 elseif IsControlAlwaysPressed(0, SPEED_SLOW_MODIFIER) then multi = 0.25 end if IsControlAlwaysPressed(0, MOVE_FORWARDS) then local pitch = GetCamRot(Camera, 0) if pitch.x >= 0 then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, 0.5 * (Speed * multi), (pitch.x * ((Speed / 2) * multi)) / 89)) else SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, 0.5 * (Speed * multi), -1 * ((math.abs(pitch.x) * ((Speed / 2) * multi)) / 89))) end elseif IsControlAlwaysPressed(0, MOVE_BACKWARDS) then local pitch = GetCamRot(Camera, 2) if pitch.x >= 0 then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, -0.5 * (Speed * multi), -1 * (pitch.x * ((Speed / 2) * multi)) / 89)) else SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, -0.5 * (Speed * multi), ((math.abs(pitch.x) * ((Speed / 2) * multi)) / 89))) end end if IsControlAlwaysPressed(0, MOVE_LEFT) then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, -0.5 * (Speed * multi), 0.0, 0.0)) elseif IsControlAlwaysPressed(0, MOVE_RIGHT) then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.5 * (Speed * multi), 0.0, 0.0)) end if IsControlAlwaysPressed(0, MOVE_UP) then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, 0.0, 0.5 * (Speed * multi))) elseif IsControlAlwaysPressed(0, MOVE_DOWN) then SetEntityCoordsNoOffset(NoClipEntity, GetOffsetFromEntityInWorldCoords(NoClipEntity, 0.0, 0.0, -0.5 * (Speed * multi))) end local coords = GetEntityCoords(NoClipEntity) RequestCollisionAtCoord(coords.x, coords.y, coords.z) FreezeEntityPosition(NoClipEntity, true) SetEntityCollision(NoClipEntity, false, false) SetEntityVisible(NoClipEntity, false, false) SetEntityInvincible(NoClipEntity, true) SetLocalPlayerVisibleLocally(true) SetEntityAlpha(NoClipEntity, NoClipAlpha, false) if PlayerIsInVehicle == 1 then SetEntityAlpha(PlayerPed, NoClipAlpha, false) end SetEveryoneIgnorePlayer(PlayerPed, true) SetPoliceIgnorePlayer(PlayerPed, true) end StopNoClip() end) end StopNoClip = function() FreezeEntityPosition(NoClipEntity, false) SetEntityCollision(NoClipEntity, true, true) SetEntityVisible(NoClipEntity, true, false) SetLocalPlayerVisibleLocally(true) ResetEntityAlpha(NoClipEntity) ResetEntityAlpha(PlayerPed) SetEveryoneIgnorePlayer(PlayerPed, false) SetPoliceIgnorePlayer(PlayerPed, false) ResetEntityAlpha(NoClipEntity) SetPoliceIgnorePlayer(PlayerPed, true) if GetVehiclePedIsIn(PlayerPed, false) ~= 0 then while (not IsVehicleOnAllWheels(NoClipEntity)) and not IsNoClipping do Wait(0) end while not IsNoClipping do Wait(0) if IsVehicleOnAllWheels(NoClipEntity) then return SetEntityInvincible(NoClipEntity, false) end end else if (IsPedFalling(NoClipEntity) and math.abs(1 - GetEntityHeightAboveGround(NoClipEntity)) > 1.00) then while (IsPedStopped(NoClipEntity) or not IsPedFalling(NoClipEntity)) and not IsNoClipping do Wait(0) end end while not IsNoClipping do Wait(0) if (not IsPedFalling(NoClipEntity)) and (not IsPedRagdoll(NoClipEntity)) then return SetEntityInvincible(NoClipEntity, false) end end end end ToggleNoClip = function(state) IsNoClipping = state or not IsNoClipping PlayerPed = PlayerPedId() PlayerIsInVehicle = IsPedInAnyVehicle(PlayerPed, false) if PlayerIsInVehicle ~= 0 and IsPedDrivingVehicle(PlayerPed, GetVehiclePedIsIn(PlayerPed, false)) then NoClipEntity = GetVehiclePedIsIn(PlayerPed, false) SetVehicleEngineOn(NoClipEntity, not IsNoClipping, true, IsNoClipping) NoClipAlpha = PedFirstPersonNoClip == true and 0 or 51 else NoClipEntity = PlayerPed NoClipAlpha = VehFirstPersonNoClip == true and 0 or 51 end if IsNoClipping then FreezeEntityPosition(PlayerPed) SetupCam() PlaySoundFromEntity(-1, 'SELECT', PlayerPed, 'HUD_LIQUOR_STORE_SOUNDSET', 0, 0) if not PlayerIsInVehicle then ClearPedTasksImmediately(PlayerPed) if PedFirstPersonNoClip then Citizen.Wait(1000) -- Wait for the cinematic effect of the camera transitioning into first person end else if VehFirstPersonNoClip then Citizen.Wait(1000) -- Wait for the cinematic effect of the camera transitioning into first person end end else local groundCoords = GetGroundCoords(GetEntityCoords(NoClipEntity)) SetEntityCoords(NoClipEntity, groundCoords.x, groundCoords.y, groundCoords.z) Citizen.Wait(50) DestroyCamera() PlaySoundFromEntity(-1, 'CANCEL', PlayerPed, 'HUD_LIQUOR_STORE_SOUNDSET', 0, 0) end QBCore.Functions.Notify(IsNoClipping and Lang:t('success.noclip_enabled') or Lang:t('success.noclip_disabled')) SetUserRadioControlEnabled(not IsNoClipping) if IsNoClipping then RunNoClipThread() end end RegisterNetEvent('qb-admin:client:ToggleNoClip', function() QBCore.Functions.TriggerCallback('qb-admin:isAdmin', function(isAdmin) if not isAdmin then return end ToggleNoClip(not IsNoClipping) end) end) AddEventHandler('onResourceStop', function(resourceName) if resourceName == ResourceName then FreezeEntityPosition(NoClipEntity, false) FreezeEntityPosition(PlayerPed, false) SetEntityCollision(NoClipEntity, true, true) SetEntityVisible(NoClipEntity, true, false) SetLocalPlayerVisibleLocally(true) ResetEntityAlpha(NoClipEntity) ResetEntityAlpha(PlayerPed) SetEveryoneIgnorePlayer(PlayerPed, false) SetPoliceIgnorePlayer(PlayerPed, false) ResetEntityAlpha(NoClipEntity) SetPoliceIgnorePlayer(PlayerPed, true) SetEntityInvincible(NoClipEntity, false) end end)