245 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| IsUsingNewscam = false
 | |
| 
 | |
| if Config.NewscamEnabled then
 | |
|     RegisterCommand("newscam", function()
 | |
|         UseNewscam()
 | |
|     end, false)
 | |
| 
 | |
|     TriggerEvent('chat:addSuggestion', '/newscam', 'Use newscam', {})
 | |
| 
 | |
|     local fov = 40.0
 | |
|     local index = 0
 | |
|     local scaleform_instructions
 | |
|     local scaleform_news
 | |
|     local prop_newscam
 | |
|     local msg = "YOUR TEXT HERE"
 | |
|     local bottom = "YOUR TEXT HERE"
 | |
|     local title = "YOUR TEXT HERE"
 | |
|     local instructions = true
 | |
|     local cam
 | |
| 
 | |
|     local function CleanupNewscam()
 | |
|         ClearPedTasks(PlayerPedId())
 | |
|         ClearTimecycleModifier()
 | |
|         RenderScriptCams(false, false, 0, true, false)
 | |
|         SetScaleformMovieAsNoLongerNeeded(breaking_news)
 | |
|         SetScaleformMovieAsNoLongerNeeded(scaleform_instructions)
 | |
|         DestroyCam(cam, false)
 | |
|         if prop_newscam then
 | |
|             DeleteEntity(prop_newscam)
 | |
|         end
 | |
|         SetNightvision(false)
 | |
|         SetSeethrough(false)
 | |
|     end
 | |
| 
 | |
|     function UseNewscam()
 | |
|         if IsPedSittingInAnyVehicle(PlayerPedId()) then
 | |
|             return
 | |
|         end
 | |
|         if IsInActionWithErrorMessage({ ['IsUsingNewscam'] = true }) then
 | |
|             return
 | |
|         end
 | |
|         IsUsingNewscam = not IsUsingNewscam
 | |
| 
 | |
|         if IsUsingNewscam then
 | |
|             CreateThread(function()
 | |
|                 DestroyAllProps()
 | |
|                 ClearPedTasks(PlayerPedId())
 | |
|                 RequestAnimDict("missfinale_c2mcs_1")
 | |
|                 while not HasAnimDictLoaded("missfinale_c2mcs_1") 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_v_cam_01") then
 | |
|                     LoadPropDict("prop_v_cam_01")
 | |
|                 end
 | |
|                 prop_newscam = CreateObject(`prop_v_cam_01`, x, y, z + 0.2, true, true, true)
 | |
|                 AttachEntityToEntity(prop_newscam, PlayerPedId(), boneIndex, 0.0, 0.03, 0.01, 0.0, 0.0, 0.0, true, true, false, true, 1, true)
 | |
| 
 | |
|                 TaskPlayAnim(PlayerPedId(), "missfinale_c2mcs_1", "fin_c2_mcs_1_camman", 5.0, 5.0, -1, 51, 0, false, false, false)
 | |
|                 PlayAmbientSpeech1(PlayerPedId(), "GENERIC_CURSE_MED", "SPEECH_PARAMS_FORCE")
 | |
|                 SetCurrentPedWeapon(PlayerPedId(), `WEAPON_UNARMED`, true)
 | |
| 
 | |
|                 RemoveAnimDict("missfinale_c2mcs_1")
 | |
|                 SetModelAsNoLongerNeeded("prop_v_cam_01")
 | |
|             end)
 | |
| 
 | |
|             Wait(200)
 | |
|             SetTimecycleModifier("default")
 | |
|             SetTimecycleModifierStrength(0.3)
 | |
|             local breaking_news = RequestScaleformMovie("breaking_news")
 | |
|             while not HasScaleformMovieLoaded(breaking_news) do
 | |
|                 Wait(10)
 | |
|             end
 | |
| 
 | |
| 
 | |
|             PushScaleformMovieFunction(breaking_news, "breaking_news")
 | |
|             PopScaleformMovieFunctionVoid()
 | |
| 
 | |
|             BeginScaleformMovieMethod(breaking_news, 'SET_TEXT')
 | |
|             PushScaleformMovieMethodParameterString(msg)
 | |
|             PushScaleformMovieMethodParameterString(bottom)
 | |
|             EndScaleformMovieMethod()
 | |
| 
 | |
|             BeginScaleformMovieMethod(breaking_news, 'SET_SCROLL_TEXT')
 | |
|             PushScaleformMovieMethodParameterInt(0) -- top ticker
 | |
|             PushScaleformMovieMethodParameterInt(0) -- Since this is the first string, start at 0
 | |
|             PushScaleformMovieMethodParameterString(title)
 | |
| 
 | |
|             EndScaleformMovieMethod()
 | |
| 
 | |
|             BeginScaleformMovieMethod(breaking_news, 'DISPLAY_SCROLL_TEXT')
 | |
|             PushScaleformMovieMethodParameterInt(0) -- Top ticker
 | |
|             PushScaleformMovieMethodParameterInt(0) -- Index of string
 | |
| 
 | |
|             EndScaleformMovieMethod()
 | |
| 
 | |
|             scaleform_news = breaking_news
 | |
| 
 | |
|             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)
 | |
| 
 | |
|             scaleform_instructions = SetupButtons({
 | |
|                 { key = 177, text = 'exit_news' },
 | |
|                 { key = 19,  text = 'toggle_news_vision' },
 | |
|                 { key = 74,  text = "edit_values_newscam" },
 | |
|                 { key = 47,  text = 'toggle_instructions' }
 | |
|             })
 | |
| 
 | |
|             while IsUsingNewscam and not IsEntityDead(PlayerPedId()) and not IsPedSittingInAnyVehicle(PlayerPedId()) do
 | |
|                 if IsControlJustPressed(0, 177) then
 | |
|                     PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | |
|                     IsUsingNewscam = 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) then
 | |
|                     -- if index = 0, show the "security_camera" scaleform, if index = 1, show the "breaking_news" scaleform and reset the index to 0
 | |
|                     if index == 0 then
 | |
|                         index = 1
 | |
|                         PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | |
|                         scaleform_news = nil
 | |
|                         CreateThread(function()
 | |
|                             while index == 1 do
 | |
|                                 DrawRect(0.0, 0.0, 2.0, 0.2, 0, 0, 0, 255)
 | |
|                                 DrawRect(0.0, 1.0, 2.0, 0.2, 0, 0, 0, 255)
 | |
|                                 Wait(1)
 | |
|                             end
 | |
|                         end)
 | |
|                     else
 | |
|                         index = 0
 | |
|                         PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | |
|                         scaleform_news = breaking_news
 | |
|                     end
 | |
|                 end
 | |
| 
 | |
|                 if IsControlJustPressed(0, 74) then
 | |
|                     SetMsgBottomTitle()
 | |
|                 end
 | |
| 
 | |
|                 if IsControlJustPressed(0, 47) then
 | |
|                     instructions = not instructions
 | |
|                     PlaySoundFrontend(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
 | |
|                 end
 | |
| 
 | |
|                 DrawScaleformMovieFullscreen(scaleform_news, 255, 255, 255, 255)
 | |
|                 if instructions then
 | |
|                     DrawScaleformMovieFullscreen(scaleform_instructions, 255, 255, 255, 255)
 | |
|                 end
 | |
|                 Wait(1)
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         -- RESET EVERYTHING
 | |
|         IsUsingNewscam = false
 | |
|         index = 0
 | |
| 
 | |
|         CleanupNewscam()
 | |
|     end
 | |
| 
 | |
|     function SetMsgBottomTitle()
 | |
|         -- keyboard input to set the message and bottom title
 | |
|         AddTextEntry("top", "Enter the top message of the news")
 | |
|         DisplayOnscreenKeyboard(1, "top", "", "", "", "", "", 200)
 | |
|         while (UpdateOnscreenKeyboard() == 0) do
 | |
|             DisableAllControlActions(0);
 | |
|             Wait(0);
 | |
|         end
 | |
|         if (GetOnscreenKeyboardResult()) then
 | |
|             title = tostring(GetOnscreenKeyboardResult())
 | |
|         end
 | |
| 
 | |
|         AddTextEntry("bottom", "Enter the bottom title of the news")
 | |
|         DisplayOnscreenKeyboard(1, "bottom", "", "", "", "", "", 200)
 | |
|         while (UpdateOnscreenKeyboard() == 0) do
 | |
|             DisableAllControlActions(0);
 | |
|             Wait(0);
 | |
|         end
 | |
|         if (GetOnscreenKeyboardResult()) then
 | |
|             bottom = tostring(GetOnscreenKeyboardResult())
 | |
|         end
 | |
| 
 | |
|         AddTextEntry("title", "Enter the title of the news")
 | |
|         DisplayOnscreenKeyboard(1, "title", "", "", "", "", "", 200)
 | |
|         while (UpdateOnscreenKeyboard() == 0) do
 | |
|             DisableAllControlActions(0);
 | |
|             Wait(0);
 | |
|         end
 | |
|         if (GetOnscreenKeyboardResult()) then
 | |
|             msg = tostring(GetOnscreenKeyboardResult())
 | |
|         end
 | |
| 
 | |
| 
 | |
|         -- reset the scaleform and set the new values
 | |
|         SetScaleformMovieAsNoLongerNeeded(breaking_news)
 | |
|         breaking_news = RequestScaleformMovie("breaking_news")
 | |
|         while not HasScaleformMovieLoaded(breaking_news) do
 | |
|             Wait(10)
 | |
|         end
 | |
| 
 | |
|         PushScaleformMovieFunction(breaking_news, "breaking_news")
 | |
|         PopScaleformMovieFunctionVoid()
 | |
| 
 | |
|         BeginScaleformMovieMethod(breaking_news, 'SET_TEXT')
 | |
|         PushScaleformMovieMethodParameterString(msg)
 | |
|         PushScaleformMovieMethodParameterString(bottom)
 | |
|         EndScaleformMovieMethod()
 | |
| 
 | |
|         BeginScaleformMovieMethod(breaking_news, 'SET_SCROLL_TEXT')
 | |
|         PushScaleformMovieMethodParameterInt(0) -- top ticker
 | |
|         PushScaleformMovieMethodParameterInt(0) -- Since this is the first string, start at 0
 | |
|         PushScaleformMovieMethodParameterString(title)
 | |
|         EndScaleformMovieMethod()
 | |
| 
 | |
|         BeginScaleformMovieMethod(breaking_news, 'DISPLAY_SCROLL_TEXT')
 | |
|         PushScaleformMovieMethodParameterInt(0) -- Top ticker
 | |
|         PushScaleformMovieMethodParameterInt(0) -- Index of string
 | |
|         EndScaleformMovieMethod()
 | |
|     end
 | |
| 
 | |
|     AddEventHandler('onResourceStop', function(resource)
 | |
|         if resource == GetCurrentResourceName() then
 | |
|             CleanupNewscam()
 | |
|         end
 | |
|     end)
 | |
| 
 | |
|     exports('toggleNewscam', function()
 | |
|         UseNewscam()
 | |
|     end)
 | |
| end
 | 
