58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local mp_pointing = false
 | 
						|
 | 
						|
local function startPointing()
 | 
						|
    local ped = PlayerPedId()
 | 
						|
    RequestAnimDict("anim@mp_point")
 | 
						|
    while not HasAnimDictLoaded("anim@mp_point") do
 | 
						|
        Wait(10)
 | 
						|
    end
 | 
						|
    SetPedCurrentWeaponVisible(ped, 0, true, true, true)
 | 
						|
    SetPedConfigFlag(ped, 36, 1)
 | 
						|
    TaskMoveNetworkByName(ped, 'task_mp_pointing', 0.5, false, 'anim@mp_point', 24)
 | 
						|
    RemoveAnimDict("anim@mp_point")
 | 
						|
end
 | 
						|
 | 
						|
local function stopPointing()
 | 
						|
    local ped = PlayerPedId()
 | 
						|
    if not IsPedInjured(ped) then
 | 
						|
        RequestTaskMoveNetworkStateTransition(ped, 'Stop')
 | 
						|
        ClearPedSecondaryTask(ped)
 | 
						|
        if not IsPedInAnyVehicle(ped, 1) then
 | 
						|
            SetPedCurrentWeaponVisible(ped, 1, true, true, true)
 | 
						|
        end
 | 
						|
        SetPedConfigFlag(ped, 36, false)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
RegisterCommand('point', function()
 | 
						|
    local ped = PlayerPedId()
 | 
						|
    if not IsPedInAnyVehicle(ped, false) then
 | 
						|
        mp_pointing = not mp_pointing
 | 
						|
        if mp_pointing then
 | 
						|
            startPointing()
 | 
						|
        else
 | 
						|
            stopPointing()
 | 
						|
        end
 | 
						|
        while mp_pointing do
 | 
						|
            local camPitch = GetGameplayCamRelativePitch()
 | 
						|
            local camHeading = GetGameplayCamRelativeHeading()
 | 
						|
            local cosCamHeading = Cos(camHeading)
 | 
						|
            local sinCamHeading = Sin(camHeading)
 | 
						|
            camPitch = math.max(-70.0, math.min(42.0, camPitch))
 | 
						|
            camPitch = (camPitch + 70.0) / 112.0
 | 
						|
            camHeading = math.max(-180.0, math.min(180.0, camHeading))
 | 
						|
            camHeading = (camHeading + 180.0) / 360.0
 | 
						|
 | 
						|
            local coords = GetOffsetFromEntityInWorldCoords(ped, (cosCamHeading * -0.2) - (sinCamHeading * (0.4 * camHeading + 0.3)), (sinCamHeading * -0.2) + (cosCamHeading * (0.4 * camHeading + 0.3)), 0.6)
 | 
						|
            local ray = StartShapeTestCapsule(coords.x, coords.y, coords.z - 0.2, coords.x, coords.y, coords.z + 0.2, 0.4, 95, ped, 7)
 | 
						|
            local _, blocked = GetRaycastResult(ray)
 | 
						|
            SetTaskMoveNetworkSignalFloat(ped, "Pitch", camPitch)
 | 
						|
            SetTaskMoveNetworkSignalFloat(ped, "Heading", camHeading * -1.0 + 1.0)
 | 
						|
            SetTaskMoveNetworkSignalBool(ped, "isBlocked", blocked)
 | 
						|
            SetTaskMoveNetworkSignalBool(ped, "isFirstPerson", GetCamViewModeForContext(GetCamActiveViewModeContext()) == 4)
 | 
						|
            Wait(0)
 | 
						|
        end
 | 
						|
    end
 | 
						|
end, false)
 | 
						|
 | 
						|
RegisterKeyMapping('point', 'Toggles Point', 'keyboard', 'B')
 |