485 lines
16 KiB
Lua
485 lines
16 KiB
Lua
local holdingCam = false
|
|
local usingCam = false
|
|
local holdingMic = false
|
|
local usingMic = false
|
|
local holdingBmic = false
|
|
local usingBmic = false
|
|
local camModel = "prop_v_cam_01"
|
|
local camanimDict = "missfinale_c2mcs_1"
|
|
local camanimName = "fin_c2_mcs_1_camman"
|
|
local micModel = "p_ing_microphonel_01"
|
|
local micanimDict = "missheistdocksprep1hold_cellphone"
|
|
local micanimName = "hold_cellphone"
|
|
local bmicModel = "prop_v_bmike_01"
|
|
local bmicanimDict = "missfra1"
|
|
local bmicanimName = "mcs2_crew_idle_m_boom"
|
|
local bmic_net = nil
|
|
local mic_net = nil
|
|
local cam_net = nil
|
|
local UI = {
|
|
x = 0.000 ,
|
|
y = -0.001 ,
|
|
}
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Toggling Cam --
|
|
---------------------------------------------------------------------------
|
|
RegisterNetEvent("Cam:ToggleCam")
|
|
AddEventHandler("Cam:ToggleCam", function()
|
|
if not holdingCam then
|
|
RequestModel(GetHashKey(camModel))
|
|
while not HasModelLoaded(GetHashKey(camModel)) do
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
local plyCoords = GetOffsetFromEntityInWorldCoords(GetPlayerPed(PlayerId()), 0.0, 0.0, -5.0)
|
|
local camspawned = CreateObject(GetHashKey(camModel), plyCoords.x, plyCoords.y, plyCoords.z, 1, 1, 1)
|
|
Citizen.Wait(1000)
|
|
local netid = ObjToNet(camspawned)
|
|
SetNetworkIdExistsOnAllMachines(netid, true)
|
|
NetworkSetNetworkIdDynamic(netid, true)
|
|
SetNetworkIdCanMigrate(netid, false)
|
|
AttachEntityToEntity(camspawned, GetPlayerPed(PlayerId()), GetPedBoneIndex(GetPlayerPed(PlayerId()), 28422), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 1, 0, 1, 0, 1)
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), 1.0, -1, -1, 50, 0, 0, 0, 0) -- 50 = 32 + 16 + 2
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), camanimDict, camanimName, 1.0, -1, -1, 50, 0, 0, 0, 0)
|
|
cam_net = netid
|
|
holdingCam = true
|
|
DisplayNotification("To enter News cam press ~INPUT_PICKUP~ \nTo Enter Movie Cam press ~INPUT_INTERACTION_MENU~")
|
|
else
|
|
ClearPedSecondaryTask(GetPlayerPed(PlayerId()))
|
|
DetachEntity(NetToObj(cam_net), 1, 1)
|
|
DeleteEntity(NetToObj(cam_net))
|
|
cam_net = nil
|
|
holdingCam = false
|
|
usingCam = false
|
|
end
|
|
end)
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(0)
|
|
if holdingCam then
|
|
while not HasAnimDictLoaded(camanimDict) do
|
|
RequestAnimDict(camanimDict)
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
if not IsEntityPlayingAnim(PlayerPedId(), camanimDict, camanimName, 3) then
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), 1.0, -1, -1, 50, 0, 0, 0, 0) -- 50 = 32 + 16 + 2
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), camanimDict, camanimName, 1.0, -1, -1, 50, 0, 0, 0, 0)
|
|
end
|
|
|
|
DisablePlayerFiring(PlayerId(), true)
|
|
DisableControlAction(0,25,true) -- disable aim
|
|
DisableControlAction(0, 44, true) -- INPUT_COVER
|
|
DisableControlAction(0,37,true) -- INPUT_SELECT_WEAPON
|
|
SetCurrentPedWeapon(GetPlayerPed(-1), GetHashKey("WEAPON_UNARMED"), true)
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Cam Functions --
|
|
---------------------------------------------------------------------------
|
|
|
|
local fov_max = 70.0
|
|
local fov_min = 5.0
|
|
local zoomspeed = 10.0
|
|
local speed_lr = 8.0
|
|
local speed_ud = 8.0
|
|
|
|
local camera = false
|
|
local fov = (fov_max+fov_min)*0.5
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Movie Cam --
|
|
---------------------------------------------------------------------------
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
|
|
Citizen.Wait(10)
|
|
|
|
local lPed = GetPlayerPed(-1)
|
|
local vehicle = GetVehiclePedIsIn(lPed)
|
|
|
|
if holdingCam and IsControlJustReleased(1, 244) then
|
|
movcamera = true
|
|
|
|
SetTimecycleModifier("default")
|
|
|
|
SetTimecycleModifierStrength(0.3)
|
|
|
|
local scaleform = RequestScaleformMovie("security_camera")
|
|
|
|
while not HasScaleformMovieLoaded(scaleform) do
|
|
Citizen.Wait(10)
|
|
end
|
|
|
|
|
|
local lPed = GetPlayerPed(-1)
|
|
local vehicle = GetVehiclePedIsIn(lPed)
|
|
local cam1 = CreateCam("DEFAULT_SCRIPTED_FLY_CAMERA", true)
|
|
|
|
AttachCamToEntity(cam1, lPed, 0.0,0.0,1.0, true)
|
|
SetCamRot(cam1, 2.0,1.0,GetEntityHeading(lPed))
|
|
SetCamFov(cam1, fov)
|
|
RenderScriptCams(true, false, 0, 1, 0)
|
|
PushScaleformMovieFunction(scaleform, "security_camera")
|
|
PopScaleformMovieFunctionVoid()
|
|
|
|
while movcamera and not IsEntityDead(lPed) and (GetVehiclePedIsIn(lPed) == vehicle) and true do
|
|
if IsControlJustPressed(0, 177) then
|
|
PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
|
|
movcamera = false
|
|
end
|
|
|
|
SetEntityRotation(lPed, 0, 0, new_z,2, true)
|
|
|
|
local zoomvalue = (1.0/(fov_max-fov_min))*(fov-fov_min)
|
|
CheckInputRotation(cam1, zoomvalue)
|
|
|
|
HandleZoom(cam1)
|
|
HideHUDThisFrame()
|
|
|
|
drawRct(UI.x + 0.0, UI.y + 0.0, 1.0,0.15,0,0,0,255) -- Top Bar
|
|
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255)
|
|
drawRct(UI.x + 0.0, UI.y + 0.85, 1.0,0.16,0,0,0,255) -- Bottom Bar
|
|
|
|
local camHeading = GetGameplayCamRelativeHeading()
|
|
local camPitch = GetGameplayCamRelativePitch()
|
|
if camPitch < -70.0 then
|
|
camPitch = -70.0
|
|
elseif camPitch > 42.0 then
|
|
camPitch = 42.0
|
|
end
|
|
camPitch = (camPitch + 70.0) / 112.0
|
|
|
|
if camHeading < -180.0 then
|
|
camHeading = -180.0
|
|
elseif camHeading > 180.0 then
|
|
camHeading = 180.0
|
|
end
|
|
camHeading = (camHeading + 180.0) / 360.0
|
|
|
|
Citizen.InvokeNative(0xD5BB4025AE449A4E, GetPlayerPed(-1), "Pitch", camPitch)
|
|
Citizen.InvokeNative(0xD5BB4025AE449A4E, GetPlayerPed(-1), "Heading", camHeading * -1.0 + 1.0)
|
|
|
|
Citizen.Wait(10)
|
|
end
|
|
|
|
movcamera = false
|
|
ClearTimecycleModifier()
|
|
fov = (fov_max+fov_min)*0.5
|
|
RenderScriptCams(false, false, 0, 1, 0)
|
|
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
|
DestroyCam(cam1, false)
|
|
SetNightvision(false)
|
|
SetSeethrough(false)
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------------
|
|
-- News Cam --
|
|
---------------------------------------------------------------------------
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
|
|
Citizen.Wait(10)
|
|
|
|
local lPed = GetPlayerPed(-1)
|
|
local vehicle = GetVehiclePedIsIn(lPed)
|
|
|
|
if holdingCam and IsControlJustReleased(1, 38) then
|
|
newscamera = true
|
|
|
|
SetTimecycleModifier("default")
|
|
|
|
SetTimecycleModifierStrength(0.3)
|
|
|
|
local scaleform = RequestScaleformMovie("security_camera")
|
|
local scaleform2 = RequestScaleformMovie("breaking_news")
|
|
|
|
|
|
while not HasScaleformMovieLoaded(scaleform) do
|
|
Citizen.Wait(10)
|
|
end
|
|
while not HasScaleformMovieLoaded(scaleform2) do
|
|
Citizen.Wait(10)
|
|
end
|
|
|
|
|
|
local lPed = GetPlayerPed(-1)
|
|
local vehicle = GetVehiclePedIsIn(lPed)
|
|
local cam2 = CreateCam("DEFAULT_SCRIPTED_FLY_CAMERA", true)
|
|
|
|
AttachCamToEntity(cam2, lPed, 0.0,0.0,1.0, true)
|
|
SetCamRot(cam2, 2.0,1.0,GetEntityHeading(lPed))
|
|
SetCamFov(cam2, fov)
|
|
RenderScriptCams(true, false, 0, 1, 0)
|
|
PushScaleformMovieFunction(scaleform, "SET_CAM_LOGO")
|
|
PushScaleformMovieFunction(scaleform2, "breaking_news")
|
|
PopScaleformMovieFunctionVoid()
|
|
|
|
while newscamera and not IsEntityDead(lPed) and (GetVehiclePedIsIn(lPed) == vehicle) and true do
|
|
if IsControlJustPressed(1, 177) then
|
|
PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
|
|
newscamera = false
|
|
end
|
|
|
|
SetEntityRotation(lPed, 0, 0, new_z,2, true)
|
|
|
|
local zoomvalue = (1.0/(fov_max-fov_min))*(fov-fov_min)
|
|
CheckInputRotation(cam2, zoomvalue)
|
|
|
|
HandleZoom(cam2)
|
|
HideHUDThisFrame()
|
|
|
|
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255)
|
|
DrawScaleformMovie(scaleform2, 0.5, 0.63, 1.0, 1.0, 255, 255, 255, 255)
|
|
Breaking("BREAKING NEWS")
|
|
|
|
local camHeading = GetGameplayCamRelativeHeading()
|
|
local camPitch = GetGameplayCamRelativePitch()
|
|
if camPitch < -70.0 then
|
|
camPitch = -70.0
|
|
elseif camPitch > 42.0 then
|
|
camPitch = 42.0
|
|
end
|
|
camPitch = (camPitch + 70.0) / 112.0
|
|
|
|
if camHeading < -180.0 then
|
|
camHeading = -180.0
|
|
elseif camHeading > 180.0 then
|
|
camHeading = 180.0
|
|
end
|
|
camHeading = (camHeading + 180.0) / 360.0
|
|
|
|
Citizen.InvokeNative(0xD5BB4025AE449A4E, GetPlayerPed(-1), "Pitch", camPitch)
|
|
Citizen.InvokeNative(0xD5BB4025AE449A4E, GetPlayerPed(-1), "Heading", camHeading * -1.0 + 1.0)
|
|
|
|
Citizen.Wait(10)
|
|
end
|
|
|
|
newscamera = false
|
|
ClearTimecycleModifier()
|
|
fov = (fov_max+fov_min)*0.5
|
|
RenderScriptCams(false, false, 0, 1, 0)
|
|
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
|
DestroyCam(cam2, false)
|
|
SetNightvision(false)
|
|
SetSeethrough(false)
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Events --
|
|
---------------------------------------------------------------------------
|
|
|
|
-- Activate camera
|
|
RegisterNetEvent('camera:Activate')
|
|
AddEventHandler('camera:Activate', function()
|
|
camera = not camera
|
|
end)
|
|
|
|
--FUNCTIONS--
|
|
function HideHUDThisFrame()
|
|
HideHelpTextThisFrame()
|
|
HideHudAndRadarThisFrame()
|
|
HideHudComponentThisFrame(1)
|
|
HideHudComponentThisFrame(2)
|
|
HideHudComponentThisFrame(3)
|
|
HideHudComponentThisFrame(4)
|
|
HideHudComponentThisFrame(6)
|
|
HideHudComponentThisFrame(7)
|
|
HideHudComponentThisFrame(8)
|
|
HideHudComponentThisFrame(9)
|
|
HideHudComponentThisFrame(13)
|
|
HideHudComponentThisFrame(11)
|
|
HideHudComponentThisFrame(12)
|
|
HideHudComponentThisFrame(15)
|
|
HideHudComponentThisFrame(18)
|
|
HideHudComponentThisFrame(19)
|
|
end
|
|
|
|
function CheckInputRotation(cam, zoomvalue)
|
|
local rightAxisX = GetDisabledControlNormal(0, 220)
|
|
local rightAxisY = GetDisabledControlNormal(0, 221)
|
|
local rotation = GetCamRot(cam, 2)
|
|
if rightAxisX ~= 0.0 or rightAxisY ~= 0.0 then
|
|
new_z = rotation.z + rightAxisX*-1.0*(speed_ud)*(zoomvalue+0.1)
|
|
new_x = math.max(math.min(20.0, rotation.x + rightAxisY*-1.0*(speed_lr)*(zoomvalue+0.1)), -89.5)
|
|
SetCamRot(cam, new_x, 0.0, new_z, 2)
|
|
end
|
|
end
|
|
|
|
function HandleZoom(cam)
|
|
local lPed = GetPlayerPed(-1)
|
|
if not ( IsPedSittingInAnyVehicle( lPed ) ) then
|
|
|
|
if IsControlJustPressed(0,241) then
|
|
fov = math.max(fov - zoomspeed, fov_min)
|
|
end
|
|
if IsControlJustPressed(0,242) then
|
|
fov = math.min(fov + zoomspeed, fov_max)
|
|
end
|
|
local current_fov = GetCamFov(cam)
|
|
if math.abs(fov-current_fov) < 0.1 then
|
|
fov = current_fov
|
|
end
|
|
SetCamFov(cam, current_fov + (fov - current_fov)*0.05)
|
|
else
|
|
if IsControlJustPressed(0,17) then
|
|
fov = math.max(fov - zoomspeed, fov_min)
|
|
end
|
|
if IsControlJustPressed(0,16) then
|
|
fov = math.min(fov + zoomspeed, fov_max)
|
|
end
|
|
local current_fov = GetCamFov(cam)
|
|
if math.abs(fov-current_fov) < 0.1 then
|
|
fov = current_fov
|
|
end
|
|
SetCamFov(cam, current_fov + (fov - current_fov)*0.05)
|
|
end
|
|
end
|
|
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Toggling Mic --
|
|
---------------------------------------------------------------------------
|
|
RegisterNetEvent("Mic:ToggleMic")
|
|
AddEventHandler("Mic:ToggleMic", function()
|
|
if not holdingMic then
|
|
RequestModel(GetHashKey(micModel))
|
|
while not HasModelLoaded(GetHashKey(micModel)) do
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
while not HasAnimDictLoaded(micanimDict) do
|
|
RequestAnimDict(micanimDict)
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
local plyCoords = GetOffsetFromEntityInWorldCoords(GetPlayerPed(PlayerId()), 0.0, 0.0, -5.0)
|
|
local micspawned = CreateObject(GetHashKey(micModel), plyCoords.x, plyCoords.y, plyCoords.z, 1, 1, 1)
|
|
Citizen.Wait(1000)
|
|
local netid = ObjToNet(micspawned)
|
|
SetNetworkIdExistsOnAllMachines(netid, true)
|
|
NetworkSetNetworkIdDynamic(netid, true)
|
|
SetNetworkIdCanMigrate(netid, false)
|
|
AttachEntityToEntity(micspawned, GetPlayerPed(PlayerId()), GetPedBoneIndex(GetPlayerPed(PlayerId()), 60309), 0.055, 0.05, 0.0, 240.0, 0.0, 0.0, 1, 1, 0, 1, 0, 1)
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), 1.0, -1, -1, 50, 0, 0, 0, 0) -- 50 = 32 + 16 + 2
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), micanimDict, micanimName, 1.0, -1, -1, 50, 0, 0, 0, 0)
|
|
mic_net = netid
|
|
holdingMic = true
|
|
else
|
|
ClearPedSecondaryTask(GetPlayerPed(PlayerId()))
|
|
DetachEntity(NetToObj(mic_net), 1, 1)
|
|
DeleteEntity(NetToObj(mic_net))
|
|
mic_net = nil
|
|
holdingMic = false
|
|
usingMic = false
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------------
|
|
-- Toggling Boom Mic --
|
|
---------------------------------------------------------------------------
|
|
RegisterNetEvent("Mic:ToggleBMic")
|
|
AddEventHandler("Mic:ToggleBMic", function()
|
|
if not holdingBmic then
|
|
RequestModel(GetHashKey(bmicModel))
|
|
while not HasModelLoaded(GetHashKey(bmicModel)) do
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
local plyCoords = GetOffsetFromEntityInWorldCoords(GetPlayerPed(PlayerId()), 0.0, 0.0, -5.0)
|
|
local bmicspawned = CreateObject(GetHashKey(bmicModel), plyCoords.x, plyCoords.y, plyCoords.z, true, true, false)
|
|
Citizen.Wait(1000)
|
|
local netid = ObjToNet(bmicspawned)
|
|
SetNetworkIdExistsOnAllMachines(netid, true)
|
|
NetworkSetNetworkIdDynamic(netid, true)
|
|
SetNetworkIdCanMigrate(netid, false)
|
|
AttachEntityToEntity(bmicspawned, GetPlayerPed(PlayerId()), GetPedBoneIndex(GetPlayerPed(PlayerId()), 28422), -0.08, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 1, 0, 1, 0, 1)
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), 1.0, -1, -1, 50, 0, 0, 0, 0) -- 50 = 32 + 16 + 2
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), bmicanimDict, bmicanimName, 1.0, -1, -1, 50, 0, 0, 0, 0)
|
|
bmic_net = netid
|
|
holdingBmic = true
|
|
else
|
|
ClearPedSecondaryTask(GetPlayerPed(PlayerId()))
|
|
DetachEntity(NetToObj(bmic_net), 1, 1)
|
|
DeleteEntity(NetToObj(bmic_net))
|
|
bmic_net = nil
|
|
holdingBmic = false
|
|
usingBmic = false
|
|
end
|
|
end)
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(0)
|
|
if holdingBmic then
|
|
while not HasAnimDictLoaded(bmicanimDict) do
|
|
RequestAnimDict(bmicanimDict)
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
if not IsEntityPlayingAnim(PlayerPedId(), bmicanimDict, bmicanimName, 3) then
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), 1.0, -1, -1, 50, 0, 0, 0, 0) -- 50 = 32 + 16 + 2
|
|
TaskPlayAnim(GetPlayerPed(PlayerId()), bmicanimDict, bmicanimName, 1.0, -1, -1, 50, 0, 0, 0, 0)
|
|
end
|
|
|
|
DisablePlayerFiring(PlayerId(), true)
|
|
DisableControlAction(0,25,true) -- disable aim
|
|
DisableControlAction(0, 44, true) -- INPUT_COVER
|
|
DisableControlAction(0,37,true) -- INPUT_SELECT_WEAPON
|
|
SetCurrentPedWeapon(GetPlayerPed(-1), GetHashKey("WEAPON_UNARMED"), true)
|
|
|
|
if (IsPedInAnyVehicle(GetPlayerPed(-1), -1) and GetPedVehicleSeat(GetPlayerPed(-1)) == -1) or IsPedCuffed(GetPlayerPed(-1)) or holdingMic then
|
|
ClearPedSecondaryTask(GetPlayerPed(-1))
|
|
DetachEntity(NetToObj(bmic_net), 1, 1)
|
|
DeleteEntity(NetToObj(bmic_net))
|
|
bmic_net = nil
|
|
holdingBmic = false
|
|
usingBmic = false
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------------------------
|
|
-- misc functions --
|
|
---------------------------------------------------------------------------------------
|
|
|
|
function drawRct(x,y,width,height,r,g,b,a)
|
|
DrawRect(x + width/2, y + height/2, width, height, r, g, b, a)
|
|
end
|
|
|
|
function Breaking(text)
|
|
SetTextColour(255, 255, 255, 255)
|
|
SetTextFont(8)
|
|
SetTextScale(1.2, 1.2)
|
|
SetTextWrap(0.0, 1.0)
|
|
SetTextCentre(false)
|
|
SetTextDropshadow(0, 0, 0, 0, 255)
|
|
SetTextEdge(1, 0, 0, 0, 205)
|
|
SetTextEntry("STRING")
|
|
AddTextComponentString(text)
|
|
DrawText(0.2, 0.85)
|
|
end
|
|
|
|
function Notification(message)
|
|
SetNotificationTextEntry("STRING")
|
|
AddTextComponentString(message)
|
|
DrawNotification(0, 1)
|
|
end
|
|
|
|
function DisplayNotification(string)
|
|
SetTextComponentFormat("STRING")
|
|
AddTextComponentString(string)
|
|
DisplayHelpTextFromStringLabel(0, 0, 1, -1)
|
|
end
|