86 lines
3.0 KiB
Lua
86 lines
3.0 KiB
Lua
-- Prevent running if menu is disabled
|
|
if not TX_MENU_ENABLED then return end
|
|
|
|
-- =============================================
|
|
-- Logic to create scaleform/prompt instructions
|
|
-- =============================================
|
|
|
|
-- Variables
|
|
local redmGroupCounter = 0;
|
|
|
|
--- Generates a prompt group for instructional buttons
|
|
---@param keysTable table
|
|
---@return table {groupId, prompts}
|
|
function makeRedmInstructionalGroup(keysTable)
|
|
redmGroupCounter = redmGroupCounter + 1
|
|
local groupId = 40120 + redmGroupCounter
|
|
local prompts = {}
|
|
|
|
--NOTE: ordering doesn't seem to work in prompts
|
|
for _, keyData in pairs(keysTable) do
|
|
local prompt = PromptRegisterBegin()
|
|
PromptSetText(prompt, CreateVarString(10, 'LITERAL_STRING', keyData[1]))
|
|
PromptSetControlAction(prompt, keyData[2])
|
|
PromptSetGroup(prompt, groupId, 0)
|
|
PromptSetEnabled(prompt, true)
|
|
PromptSetStandardMode(prompt, false)
|
|
PromptRegisterEnd(prompt)
|
|
prompts[keyData[1]] = prompt
|
|
end
|
|
|
|
return {
|
|
groupId = groupId,
|
|
prompts = prompts,
|
|
}
|
|
end
|
|
|
|
--- Generates a instructional scaleform
|
|
---@param keysTable table
|
|
---@return integer scaleform
|
|
function makeFivemInstructionalScaleform(keysTable)
|
|
local scaleform = RequestScaleformMovie("instructional_buttons")
|
|
while not HasScaleformMovieLoaded(scaleform) do
|
|
Wait(10)
|
|
end
|
|
BeginScaleformMovieMethod(scaleform, "CLEAR_ALL")
|
|
EndScaleformMovieMethod()
|
|
|
|
BeginScaleformMovieMethod(scaleform, "SET_CLEAR_SPACE")
|
|
ScaleformMovieMethodAddParamInt(200)
|
|
EndScaleformMovieMethod()
|
|
|
|
for btnIndex, keyData in ipairs(keysTable) do
|
|
local btn = GetControlInstructionalButton(0, keyData[2], true)
|
|
|
|
BeginScaleformMovieMethod(scaleform, "SET_DATA_SLOT")
|
|
ScaleformMovieMethodAddParamInt(btnIndex - 1)
|
|
ScaleformMovieMethodAddParamPlayerNameString(btn)
|
|
BeginTextCommandScaleformString("STRING")
|
|
AddTextComponentSubstringKeyboardDisplay(keyData[1])
|
|
EndTextCommandScaleformString()
|
|
EndScaleformMovieMethod()
|
|
end
|
|
|
|
BeginScaleformMovieMethod(scaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
EndScaleformMovieMethod()
|
|
|
|
BeginScaleformMovieMethod(scaleform, "SET_BACKGROUND_COLOUR")
|
|
ScaleformMovieMethodAddParamInt(0)
|
|
ScaleformMovieMethodAddParamInt(0)
|
|
ScaleformMovieMethodAddParamInt(0)
|
|
ScaleformMovieMethodAddParamInt(80)
|
|
EndScaleformMovieMethod()
|
|
|
|
return scaleform
|
|
end
|
|
|
|
-- NOTE: previously for spectate we used to use keymappings where we
|
|
-- would then map a key to a command (ex `txAdmin:menu:specNextPlayer`)
|
|
-- and when calling `ScaleformMovieMethodAddParamPlayerNameString()` we would
|
|
-- generate the JOAAT hash of the command name and pass to the function above
|
|
-- in this format: `~INPUT_698AE6AF~`.
|
|
-- Stopped using keymappings on spectate due to lack of support in RedM
|
|
|
|
-- NOTE: online JOAAT will not work, need to use the implementation
|
|
-- found in fivem/ext/sdk/resources/sdk-root/shell/src/utils/joaat.ts
|