272 lines
		
	
	
	
		
			6.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
	
		
			6.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Global variables
 | |
| Global = {
 | |
|     currentInteriorId = 0,
 | |
| 
 | |
|     -- The current interior is set to True by 'interiorIdObserver'
 | |
|     Online = {
 | |
|         isInsideApartmentHi1 = false,
 | |
|         isInsideApartmentHi2 = false,
 | |
|         isInsideHouseHi1 = false,
 | |
|         isInsideHouseHi2 = false,
 | |
|         isInsideHouseHi3 = false,
 | |
|         isInsideHouseHi4 = false,
 | |
|         isInsideHouseHi5 = false,
 | |
|         isInsideHouseHi6 = false,
 | |
|         isInsideHouseHi7 = false,
 | |
|         isInsideHouseHi8 = false,
 | |
|         isInsideHouseLow1 = false,
 | |
|         isInsideHouseMid1 = false
 | |
|     },
 | |
|     Biker = {
 | |
|         isInsideClubhouse1 = false,
 | |
|         isInsideClubhouse2 = false
 | |
|     },
 | |
|     FinanceOffices = {
 | |
|         isInsideOffice1 = false,
 | |
|         isInsideOffice2 = false,
 | |
|         isInsideOffice3 = false,
 | |
|         isInsideOffice4 = false
 | |
|     },
 | |
|     HighLife = {
 | |
|         isInsideApartment1 = false,
 | |
|         isInsideApartment2 = false,
 | |
|         isInsideApartment3 = false,
 | |
|         isInsideApartment4 = false,
 | |
|         isInsideApartment5 = false,
 | |
|         isInsideApartment6 = false
 | |
|     },
 | |
| 
 | |
|     -- Set all interiors variables to false
 | |
|     -- The loop inside 'interiorIdObserver' will set them to true
 | |
|     ResetInteriorVariables = function()
 | |
|         for _, parentKey in pairs{"Biker", "FinanceOffices", "HighLife"} do
 | |
|             local t = Global[parentKey]
 | |
| 
 | |
|             for key in pairs(t) do
 | |
|                 t[key] = false
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| }
 | |
| 
 | |
| exports('GVariables', function()
 | |
|     return Global
 | |
| end)
 | |
| 
 | |
| exports('EnableIpl', function(ipl, activate)
 | |
|     return EnableIpl(ipl, activate)
 | |
| end)
 | |
| 
 | |
| exports('GetPedheadshotTexture', function(ped)
 | |
|     return GetPedheadshotTexture(ped)
 | |
| end)
 | |
| 
 | |
| -- Load or remove IPL(s)
 | |
| function EnableIpl(ipl, activate)
 | |
|     if type(ipl) == "table" then
 | |
|         for key, value in pairs(ipl) do
 | |
|             EnableIpl(value, activate)
 | |
|         end
 | |
|     else
 | |
|         if activate then
 | |
|             if not IsIplActive(ipl) then
 | |
|                 RequestIpl(ipl)
 | |
|             end
 | |
|         else
 | |
|             if IsIplActive(ipl) then
 | |
|                 RemoveIpl(ipl)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| -- Enable or disable the specified props in an interior
 | |
| function SetIplPropState(interiorId, props, state, refresh)
 | |
|     if refresh == nil then
 | |
|         refresh = false
 | |
|     end
 | |
| 
 | |
|     if type(interiorId) == "table" then
 | |
|         for key, value in pairs(interiorId) do
 | |
|             SetIplPropState(value, props, state, refresh)
 | |
|         end
 | |
|     else
 | |
|         if type(props) == "table" then
 | |
|             for key, value in pairs(props) do
 | |
|                 SetIplPropState(interiorId, value, state, refresh)
 | |
|             end
 | |
|         else
 | |
|             if state then
 | |
|                 if not IsInteriorEntitySetActive(interiorId, props) then
 | |
|                     ActivateInteriorEntitySet(interiorId, props)
 | |
|                 end
 | |
|             else
 | |
|                 if IsInteriorEntitySetActive(interiorId, props) then
 | |
|                     DeactivateInteriorEntitySet(interiorId, props)
 | |
|                 end
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         if refresh then
 | |
|             RefreshInterior(interiorId)
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| function CreateNamedRenderTargetForModel(name, model)
 | |
|     local handle = 0
 | |
| 
 | |
|     if not IsNamedRendertargetRegistered(name) then
 | |
|         RegisterNamedRendertarget(name, false)
 | |
|     end
 | |
| 
 | |
|     if not IsNamedRendertargetLinked(model) then
 | |
|         LinkNamedRendertarget(model)
 | |
|     end
 | |
| 
 | |
|     if IsNamedRendertargetRegistered(name) then
 | |
|         handle = GetNamedRendertargetRenderId(name)
 | |
|     end
 | |
| 
 | |
|     return handle
 | |
| end
 | |
| 
 | |
| function DrawEmptyRect(name, model)
 | |
|     local step = 250
 | |
|     local timeout = 5 * 1000
 | |
|     local currentTime = 0
 | |
|     local renderId = CreateNamedRenderTargetForModel(name, model)
 | |
| 
 | |
|     while not IsNamedRendertargetRegistered(name) do
 | |
|         Citizen.Wait(step)
 | |
| 
 | |
|         currentTime = currentTime + step
 | |
| 
 | |
|         if currentTime >= timeout then
 | |
|             return false
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     if IsNamedRendertargetRegistered(name) then
 | |
|         SetTextRenderId(renderId)
 | |
|         SetScriptGfxDrawOrder(4)
 | |
|         DrawRect(0.5, 0.5, 1.0, 1.0, 0, 0, 0, 0)
 | |
|         SetTextRenderId(GetDefaultScriptRendertargetRenderId())
 | |
|         ReleaseNamedRendertarget(0, name)
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| function SetupScaleform(movieId, scaleformFunction, parameters)
 | |
|     BeginScaleformMovieMethod(movieId, scaleformFunction)
 | |
|     ScaleformMovieMethodAddParamTextureNameString_2(name)
 | |
| 
 | |
|     if type(parameters) == "table" then
 | |
|         for i = 0, Tablelength(parameters) - 1 do
 | |
|             local p = parameters["p" .. tostring(i)]
 | |
| 
 | |
|             if p.type == "bool" then
 | |
|                 ScaleformMovieMethodAddParamBool(p.value)
 | |
|             elseif p.type == "int" then
 | |
|                 ScaleformMovieMethodAddParamInt(p.value)
 | |
|             elseif p.type == "float" then
 | |
|                 ScaleformMovieMethodAddParamFloat(p.value)
 | |
|             elseif p.type == "string" then
 | |
|                 ScaleformMovieMethodAddParamTextureNameString(p.value)
 | |
|             elseif p.type == "buttonName" then
 | |
|                 ScaleformMovieMethodAddParamPlayerNameString(p.value)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     EndScaleformMovieMethod()
 | |
|     N_0x32f34ff7f617643b(movieId, 1)
 | |
| end
 | |
| 
 | |
| function LoadStreamedTextureDict(texturesDict)
 | |
|     local step = 1000
 | |
|     local timeout = 5 * 1000
 | |
|     local currentTime = 0
 | |
| 
 | |
|     RequestStreamedTextureDict(texturesDict, false)
 | |
|     while not HasStreamedTextureDictLoaded(texturesDict) do
 | |
|         Citizen.Wait(step)
 | |
| 
 | |
|         currentTime = currentTime + step
 | |
| 
 | |
|         if currentTime >= timeout then
 | |
|             return false
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| function LoadScaleform(scaleform)
 | |
|     local step = 1000
 | |
|     local timeout = 5 * 1000
 | |
|     local currentTime = 0
 | |
|     local handle = RequestScaleformMovie(scaleform)
 | |
| 
 | |
|     while not HasScaleformMovieLoaded(handle) do
 | |
|         Citizen.Wait(step)
 | |
| 
 | |
|         currentTime = currentTime + step
 | |
| 
 | |
|         if currentTime >= timeout then
 | |
|             return -1
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return handle
 | |
| end
 | |
| 
 | |
| function GetPedheadshot(ped)
 | |
|     local step = 1000
 | |
|     local timeout = 5 * 1000
 | |
|     local currentTime = 0
 | |
|     local pedheadshot = RegisterPedheadshot(ped)
 | |
| 
 | |
|     while not IsPedheadshotReady(pedheadshot) do
 | |
|         Citizen.Wait(step)
 | |
| 
 | |
|         currentTime = currentTime + step
 | |
| 
 | |
|         if currentTime >= timeout then
 | |
|             return -1
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return pedheadshot
 | |
| end
 | |
| 
 | |
| function GetPedheadshotTexture(ped)
 | |
|     local textureDict = nil
 | |
|     local pedheadshot = GetPedheadshot(ped)
 | |
| 
 | |
|     if pedheadshot ~= -1 then
 | |
|         textureDict = GetPedheadshotTxdString(pedheadshot)
 | |
| 
 | |
|         local IsTextureDictLoaded = LoadStreamedTextureDict(textureDict)
 | |
| 
 | |
|         if not IsTextureDictLoaded then
 | |
|             Citizen.Trace("ERROR: GetPedheadshotTexture - Textures dictionnary \"" .. tostring(textureDict) .. "\" cannot be loaded.")
 | |
|         end
 | |
|     else
 | |
|         Citizen.Trace("ERROR: GetPedheadshotTexture - PedHeadShot not ready.")
 | |
|     end
 | |
| 
 | |
|     return textureDict
 | |
| end
 | |
| 
 | |
| -- Return the number of elements of the table
 | |
| function Tablelength(T)
 | |
|     local count = 0
 | |
| 
 | |
|     for _ in pairs(T) do
 | |
|         count = count + 1
 | |
|     end
 | |
| 
 | |
|     return count
 | |
| end
 | 
