Create client
This commit is contained in:
106
client.lua
Normal file
106
client.lua
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
local zoomedIn = false
|
||||||
|
local playerHeading = 0
|
||||||
|
local cam
|
||||||
|
|
||||||
|
-- FUNCTIONS:
|
||||||
|
local function isPlayerInFirstPerson()
|
||||||
|
return Config.DisableInFirstPerson and GetFollowPedCamViewMode() == 4
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isPlayerStationary()
|
||||||
|
if not Config.RequireStationary then return true end
|
||||||
|
local ped = PlayerPedId()
|
||||||
|
return IsPedStill(ped) and not IsPedInAnyVehicle(ped, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isCameraInAllowedCone()
|
||||||
|
if not Config.EnableConeRestriction then return true end
|
||||||
|
local ped = PlayerPedId()
|
||||||
|
local pedHeading = GetEntityHeading(ped)
|
||||||
|
local camRot = GetGameplayCamRot(2)
|
||||||
|
local camHeading = (camRot.z + 360) % 360
|
||||||
|
|
||||||
|
local angleDiff = math.abs(pedHeading - camHeading)
|
||||||
|
if angleDiff > 180 then
|
||||||
|
angleDiff = 360 - angleDiff
|
||||||
|
end
|
||||||
|
|
||||||
|
return angleDiff <= Config.ConeAngle
|
||||||
|
end
|
||||||
|
|
||||||
|
local function zoomIn()
|
||||||
|
if isPlayerInFirstPerson() or not isPlayerStationary() or (Config.DisableInVehicle and IsPedInAnyVehicle(PlayerPedId(), false)) or not isCameraInAllowedCone() then return end
|
||||||
|
if not zoomedIn then
|
||||||
|
zoomedIn = true
|
||||||
|
cam = CreateCam("DEFAULT_SCRIPTED_CAMERA", true)
|
||||||
|
local playerPed = PlayerPedId()
|
||||||
|
local coords = GetGameplayCamCoord()
|
||||||
|
local rot = GetGameplayCamRot(2)
|
||||||
|
playerHeading = GetEntityHeading(PlayerPedId())
|
||||||
|
--AttachCamToEntity(cam, playerPed, 0.0, 0.0, 1.0, true)
|
||||||
|
AttachCamToPedBone(cam, playerPed, 12844, 0.3, -0.5, 0.0, true)
|
||||||
|
SetCamCoord(cam, coords.x, coords.y, coords.z)
|
||||||
|
SetCamRot(cam, rot.x, rot.y, rot.z, 2)
|
||||||
|
SetCamFov(cam, Config.ZoomFOV)
|
||||||
|
SetCamActive(cam, true)
|
||||||
|
RenderScriptCams(true, 1, 300, true, true)
|
||||||
|
SetTimecycleModifier("focus")
|
||||||
|
SetTimecycleModifierStrength(2.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function zoomOut()
|
||||||
|
if zoomedIn then
|
||||||
|
SetCamFov(cam, Config.NormalFOV)
|
||||||
|
SetCamActive(cam, false)
|
||||||
|
RenderScriptCams(0, 1, 300, true, true)
|
||||||
|
DestroyCam(cam, false)
|
||||||
|
zoomedIn = false
|
||||||
|
ClearTimecycleModifier()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function updateCameraRotation()
|
||||||
|
if zoomedIn then
|
||||||
|
local mouseX = GetDisabledControlNormal(1, 1) * Config.RotationSpeed
|
||||||
|
local mouseY = GetDisabledControlNormal(1, 2) * Config.RotationSpeed
|
||||||
|
local rotation = GetCamRot(cam, 2)
|
||||||
|
SetCamRot(cam, rotation.x - mouseY, rotation.y, rotation.z - mouseX, 2)
|
||||||
|
if not isPlayerStationary() then
|
||||||
|
zoomOut()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- KEYBINDINGS:
|
||||||
|
RegisterCommand("+zoom", function()
|
||||||
|
if not zoomedIn then
|
||||||
|
Wait(50)
|
||||||
|
zoomIn()
|
||||||
|
end
|
||||||
|
end, false)
|
||||||
|
|
||||||
|
RegisterCommand("-zoom", function()
|
||||||
|
if zoomedIn then
|
||||||
|
Wait(50)
|
||||||
|
zoomOut()
|
||||||
|
end
|
||||||
|
end, false)
|
||||||
|
|
||||||
|
RegisterKeyMapping("+zoom", "Zoom In/Out", "mouse_button", Config.ZoomKey)
|
||||||
|
|
||||||
|
|
||||||
|
-- THREADS:
|
||||||
|
if Config.EnableZoom then
|
||||||
|
CreateThread(function()
|
||||||
|
while true do
|
||||||
|
Wait(0)
|
||||||
|
if zoomedIn then
|
||||||
|
updateCameraRotation()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user