168 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
IsUsingBinoculars = false
 | 
						|
 | 
						|
if Config.BinocularsEnabled then
 | 
						|
    RegisterCommand("binoculars", function()
 | 
						|
        UseBinocular()
 | 
						|
    end, false)
 | 
						|
    TriggerEvent('chat:addSuggestion', '/binoculars', 'Use binoculars', {})
 | 
						|
 | 
						|
    local fov = 40.0
 | 
						|
    local index = 0
 | 
						|
    local cam
 | 
						|
    local prop_binoc
 | 
						|
    local instructions = true
 | 
						|
    local scaleform_bin
 | 
						|
    local scaleform_instructions
 | 
						|
 | 
						|
    local function CleanupBinoculars()
 | 
						|
        ClearPedTasks(PlayerPedId())
 | 
						|
        ClearTimecycleModifier()
 | 
						|
        RenderScriptCams(false, false, 0, true, false)
 | 
						|
        SetScaleformMovieAsNoLongerNeeded(scaleform_bin)
 | 
						|
        SetScaleformMovieAsNoLongerNeeded(scaleform_instructions)
 | 
						|
        DestroyCam(cam, false)
 | 
						|
        if prop_binoc then
 | 
						|
            DeleteEntity(prop_binoc)
 | 
						|
        end
 | 
						|
        SetNightvision(false)
 | 
						|
        SetSeethrough(false)
 | 
						|
    end
 | 
						|
 | 
						|
    function UseBinocular()
 | 
						|
        if IsPedSittingInAnyVehicle(PlayerPedId()) then
 | 
						|
            return
 | 
						|
        end
 | 
						|
        if IsInActionWithErrorMessage({ ['IsUsingBinoculars'] = true }) then
 | 
						|
            return
 | 
						|
        end
 | 
						|
        IsUsingBinoculars = not IsUsingBinoculars
 | 
						|
 | 
						|
        if IsUsingBinoculars then
 | 
						|
            CreateThread(function()
 | 
						|
                DestroyAllProps()
 | 
						|
                ClearPedTasks(PlayerPedId())
 | 
						|
                RequestAnimDict("amb@world_human_binoculars@male@idle_a")
 | 
						|
                while not HasAnimDictLoaded("amb@world_human_binoculars@male@idle_a") do
 | 
						|
                    Wait(5)
 | 
						|
                end
 | 
						|
 | 
						|
                -- attach the prop to the player
 | 
						|
                local boneIndex = GetPedBoneIndex(PlayerPedId(), 28422)
 | 
						|
                local x, y, z = table.unpack(GetEntityCoords(PlayerPedId(), true))
 | 
						|
                if not HasModelLoaded("prop_binoc_01") then
 | 
						|
                    LoadPropDict("prop_binoc_01")
 | 
						|
                end
 | 
						|
                prop_binoc = CreateObject(`prop_binoc_01`, x, y, z + 0.2, true, true, true)
 | 
						|
                AttachEntityToEntity(prop_binoc, PlayerPedId(), boneIndex, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, true, true,
 | 
						|
                    false, true, 1, true)
 | 
						|
 | 
						|
                TaskPlayAnim(PlayerPedId(), "amb@world_human_binoculars@male@idle_a", "idle_c", 5.0, 5.0, -1, 51, 0,
 | 
						|
                    false, false, false)
 | 
						|
                PlayAmbientSpeech1(PlayerPedId(), "GENERIC_CURSE_MED", "SPEECH_PARAMS_FORCE")
 | 
						|
                SetCurrentPedWeapon(PlayerPedId(), `WEAPON_UNARMED`, true)
 | 
						|
 | 
						|
                RemoveAnimDict("amb@world_human_binoculars@male@idle_a")
 | 
						|
                SetModelAsNoLongerNeeded("prop_binoc_01")
 | 
						|
            end)
 | 
						|
 | 
						|
            Wait(200)
 | 
						|
 | 
						|
            SetTimecycleModifier("default")
 | 
						|
            SetTimecycleModifierStrength(0.3)
 | 
						|
            scaleform_bin = RequestScaleformMovie("BINOCULARS")
 | 
						|
            while not HasScaleformMovieLoaded(scaleform_bin) do
 | 
						|
                Wait(10)
 | 
						|
            end
 | 
						|
 | 
						|
            cam = CreateCam("DEFAULT_SCRIPTED_FLY_CAMERA", true)
 | 
						|
 | 
						|
            AttachCamToEntity(cam, PlayerPedId(), 0.0, 0.0, 1.2, true)
 | 
						|
            SetCamRot(cam, 0.0, 0.0, GetEntityHeading(PlayerPedId()))
 | 
						|
            SetCamFov(cam, fov)
 | 
						|
            RenderScriptCams(true, false, 0, true, false)
 | 
						|
            PushScaleformMovieFunction(scaleform_bin, "SET_CAM_LOGO")
 | 
						|
            PushScaleformMovieFunctionParameterInt(0) -- 0 for nothing, 1 for LSPD logo
 | 
						|
            PopScaleformMovieFunctionVoid()
 | 
						|
 | 
						|
            local keyList
 | 
						|
            if Config.AllowVisionsToggling then
 | 
						|
                keyList = {
 | 
						|
                    { key = 177, text = 'exit_binoculars' },
 | 
						|
                    { key = 19,  text = 'toggle_binoculars_vision' },
 | 
						|
                    { key = 47,  text = 'toggle_instructions' }
 | 
						|
                }
 | 
						|
            else
 | 
						|
                keyList = {
 | 
						|
                    { key = 177, text = 'exit_binoculars' },
 | 
						|
                    { key = 47,  text = 'toggle_instructions' }
 | 
						|
                }
 | 
						|
            end
 | 
						|
 | 
						|
            scaleform_instructions = SetupButtons(keyList)
 | 
						|
 | 
						|
            while IsUsingBinoculars and not IsEntityDead(PlayerPedId()) and not IsPedSittingInAnyVehicle(PlayerPedId()) do
 | 
						|
                if IsControlJustPressed(0, 177) then
 | 
						|
                    PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | 
						|
                    IsUsingBinoculars = false
 | 
						|
                end
 | 
						|
 | 
						|
 | 
						|
                fov = HandleZoomAndCheckRotation(cam, fov)
 | 
						|
 | 
						|
                HideHUDThisFrame()
 | 
						|
                DisableControlAction(0, 25, true)        -- disable aim
 | 
						|
                DisableControlAction(0, 44, true)        -- INPUT_COVER
 | 
						|
                DisableControlAction(0, 37, true)        -- INPUT_SELECT_WEAPON
 | 
						|
                DisableControlAction(0, 24, true)        -- Attack
 | 
						|
                DisablePlayerFiring(PlayerPedId(), true) -- Disable weapon firing
 | 
						|
 | 
						|
 | 
						|
                if IsControlJustPressed(0, 19) and Config.AllowVisionsToggling then
 | 
						|
                    -- if index = 0, toggle night vision, if index = 1, toggle thermal vision, if index = 2, toggle normal vision and reset index
 | 
						|
                    if index == 0 then
 | 
						|
                        SetNightvision(true)
 | 
						|
                        PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | 
						|
                        index = index + 1
 | 
						|
                    elseif index == 1 then
 | 
						|
                        SetSeethrough(true)
 | 
						|
                        SetNightvision(false)
 | 
						|
                        PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | 
						|
                        index = index + 1
 | 
						|
                    elseif index == 2 then
 | 
						|
                        SetNightvision(false)
 | 
						|
                        SetSeethrough(false)
 | 
						|
                        PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | 
						|
                        index = 0
 | 
						|
                    end
 | 
						|
                end
 | 
						|
 | 
						|
                if IsControlJustPressed(0, 47) then
 | 
						|
                    instructions = not instructions
 | 
						|
                    PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | 
						|
                end
 | 
						|
 | 
						|
                DrawScaleformMovieFullscreen(scaleform_bin, 255, 255, 255, 255)
 | 
						|
                if instructions then
 | 
						|
                    DrawScaleformMovieFullscreen(scaleform_instructions, 255, 255, 255, 255)
 | 
						|
                end
 | 
						|
                Wait(1)
 | 
						|
            end
 | 
						|
        end
 | 
						|
 | 
						|
        -- RESET EVERYTHING
 | 
						|
        IsUsingBinoculars = false
 | 
						|
        index = 0
 | 
						|
 | 
						|
        CleanupBinoculars()
 | 
						|
    end
 | 
						|
 | 
						|
    AddEventHandler('onResourceStop', function(resource)
 | 
						|
        if resource == GetCurrentResourceName() then
 | 
						|
            CleanupBinoculars()
 | 
						|
        end
 | 
						|
    end)
 | 
						|
 | 
						|
    CreateExport('toggleBinoculars', function()
 | 
						|
        UseBinocular()
 | 
						|
    end)
 | 
						|
end
 |