mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 05:56:02 +01:00
Fix duplicate functions and typos
This commit is contained in:
@@ -8,8 +8,18 @@
|
|||||||
---
|
---
|
||||||
---@usage
|
---@usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
|
--- local table = { ["info"] = "HI" }
|
||||||
--- createCallback('myCallback', function(source, ...)
|
--- createCallback('myCallback', function(source, ...)
|
||||||
--- -- Your callback code here
|
--- return table
|
||||||
|
--- end)
|
||||||
|
---
|
||||||
|
--- createCallback("callback:checkVehicleOwned", function(source, plate)
|
||||||
|
--- local result = isVehicleOwned(plate)
|
||||||
|
--- if result then
|
||||||
|
--- return true
|
||||||
|
--- else
|
||||||
|
--- return false
|
||||||
|
--- end
|
||||||
--- end)
|
--- end)
|
||||||
--- ```
|
--- ```
|
||||||
function createCallback(callbackName, funct)
|
function createCallback(callbackName, funct)
|
||||||
@@ -46,7 +56,11 @@ end
|
|||||||
---
|
---
|
||||||
---@usage
|
---@usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
--- local result = triggerCallback('myCallback', arg1, arg2)
|
--- local result = triggerCallback('myCallback')
|
||||||
|
--- jsonPrint(result)
|
||||||
|
---
|
||||||
|
--- local result = triggerCallback("callback:checkVehicleOwned", plate)
|
||||||
|
--- print(result)
|
||||||
--- ```
|
--- ```
|
||||||
function triggerCallback(callbackName, ...)
|
function triggerCallback(callbackName, ...)
|
||||||
local result = nil
|
local result = nil
|
||||||
|
|||||||
@@ -36,26 +36,26 @@ local excludeKeys = {
|
|||||||
---
|
---
|
||||||
--- @usage
|
--- @usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
---craftingMenu({
|
--- craftingMenu({
|
||||||
--- craftable = {
|
--- craftable = {
|
||||||
--- Header = "Weapon Crafting",
|
--- Header = "Weapon Crafting",
|
||||||
--- Recipes = {
|
--- Recipes = {
|
||||||
--- [1] = {
|
--- [1] = {
|
||||||
--- ["weapon_pistol"] = { ["steel"] = 5, ["plastic"] = 2 },
|
--- ["weapon_pistol"] = { ["steel"] = 5, ["plastic"] = 2 },
|
||||||
--- amount = 1,
|
--- amount = 1,
|
||||||
--- },
|
--- },
|
||||||
--- -- More recipes...
|
--- -- More recipes...
|
||||||
--- },
|
--- },
|
||||||
--- Anims = {
|
--- Anims = {
|
||||||
--- animDict = "amb@prop_human_parking_meter@male@idle_a",
|
--- animDict = "amb@prop_human_parking_meter@male@idle_a",
|
||||||
--- anim = "idle_a",
|
--- anim = "idle_a",
|
||||||
--- },
|
--- },
|
||||||
--- },
|
--- },
|
||||||
--- coords = vector3(100.0, 200.0, 300.0),
|
--- coords = vector3(100.0, 200.0, 300.0),
|
||||||
---stashTable = "crafting_stash",
|
--- stashTable = "crafting_stash",
|
||||||
--- job = "mechanic",
|
--- job = "mechanic",
|
||||||
--- onBack = function() print("Returning to previous menu") end,
|
--- onBack = function() print("Returning to previous menu") end,
|
||||||
---})
|
--- })
|
||||||
function craftingMenu(data)
|
function craftingMenu(data)
|
||||||
if CraftLock then return end
|
if CraftLock then return end
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ function craftingMenu(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
while not canCarryTable do Wait(0) end
|
while not canCarryTable do Wait(0) end
|
||||||
disable = not checkHasItem(data.stashName, itemTable)
|
disable = not checkStashItem(data.stashName, itemTable)
|
||||||
setheader = ((metadata and metadata.label) or (Items[tostring(k)] and Items[tostring(k)].label) or "error - "..tostring(k))
|
setheader = ((metadata and metadata.label) or (Items[tostring(k)] and Items[tostring(k)].label) or "error - "..tostring(k))
|
||||||
..(Recipes[i]["amount"] > 1 and " x"..Recipes[i]["amount"] or "")
|
..(Recipes[i]["amount"] > 1 and " x"..Recipes[i]["amount"] or "")
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ function multiCraft(data)
|
|||||||
|
|
||||||
if data.stashName then
|
if data.stashName then
|
||||||
debugPrint("")
|
debugPrint("")
|
||||||
local hasItems, stashname = checkHasItem(data.stashName, itemTable)
|
local hasItems, stashname = checkStashItem(data.stashName, itemTable)
|
||||||
if hasItems == true then
|
if hasItems == true then
|
||||||
max += 1
|
max += 1
|
||||||
stashName = stashname
|
stashName = stashname
|
||||||
|
|||||||
@@ -23,10 +23,6 @@
|
|||||||
-- Retrieve a flat list of all animal model hashes:
|
-- Retrieve a flat list of all animal model hashes:
|
||||||
local allAnimalModels = getAnimalModels()
|
local allAnimalModels = getAnimalModels()
|
||||||
|
|
||||||
File Separation Suggestion:
|
|
||||||
For scalability, consider separating this module into two files:
|
|
||||||
• AnimalDetection.lua (for functions and callbacks)
|
|
||||||
• AnimalPedsData.lua (for the AnimalPeds table)
|
|
||||||
]]
|
]]
|
||||||
|
|
||||||
-- Global animal classification flags.
|
-- Global animal classification flags.
|
||||||
|
|||||||
@@ -87,42 +87,6 @@ function removeDistVehicleZone(zoneId)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Attempts to gain network control of a vehicle and set it as a mission entity.
|
|
||||||
---
|
|
||||||
--- This function forces synchronization of a vehicle with other players by requesting network control and setting the vehicle as a mission entity.
|
|
||||||
---
|
|
||||||
---@param entity number The handle of the vehicle entity to push.
|
|
||||||
---
|
|
||||||
---@usage
|
|
||||||
--- ```lua
|
|
||||||
--- pushVehicle(vehicle)
|
|
||||||
--- ```
|
|
||||||
function pushVehicle(entity)
|
|
||||||
SetVehicleModKit(entity, 0)
|
|
||||||
if entity ~= 0 and DoesEntityExist(entity) then
|
|
||||||
if not NetworkHasControlOfEntity(entity) then
|
|
||||||
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Requesting network control of vehicle^7.")
|
|
||||||
NetworkRequestControlOfEntity(entity)
|
|
||||||
local timeout = 2000
|
|
||||||
while timeout > 0 and not NetworkHasControlOfEntity(entity) do
|
|
||||||
Wait(100)
|
|
||||||
timeout -= 100
|
|
||||||
end
|
|
||||||
if NetworkHasControlOfEntity(entity) then debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Network has control of entity^7.") end
|
|
||||||
end
|
|
||||||
if not IsEntityAMissionEntity(entity) then
|
|
||||||
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Setting vehicle as a ^7'^2mission^7' ^2entity^7.")
|
|
||||||
SetEntityAsMissionEntity(entity, true, true)
|
|
||||||
local timeout = 2000
|
|
||||||
while timeout > 0 and not IsEntityAMissionEntity(entity) do
|
|
||||||
Wait(100)
|
|
||||||
timeout -= 100
|
|
||||||
end
|
|
||||||
if IsEntityAMissionEntity(entity) then debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Vehicle is a ^7'^2mission^7'^2 entity^7.") end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Deletes a spawned vehicle.
|
--- Deletes a spawned vehicle.
|
||||||
---
|
---
|
||||||
---@param vehicle number The handle of the vehicle entity to delete.
|
---@param vehicle number The handle of the vehicle entity to delete.
|
||||||
|
|||||||
@@ -432,7 +432,7 @@ function hasJob(job, source, grade)
|
|||||||
return hasJobFlag, duty
|
return hasJobFlag, duty
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Retrieves basic player information (name, cash, bank, job, etc.) based on the active inventory system.
|
--- Retrieves basic player information (name, cash, bank, job, etc.) based on the active core/inventory system.
|
||||||
---
|
---
|
||||||
--- Can be called server-side (passing a player source) or client-side (for current player).
|
--- Can be called server-side (passing a player source) or client-side (for current player).
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -66,4 +66,45 @@ function makeInstructionalButtons(info)
|
|||||||
|
|
||||||
-- Final full-screen draw with full opacity.
|
-- Final full-screen draw with full opacity.
|
||||||
DrawScaleformMovieFullscreen(build, 255, 255, 255, 255, 0)
|
DrawScaleformMovieFullscreen(build, 255, 255, 255, 255, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- EXPERIMENTAL --
|
||||||
|
-- RedM Button Prompts --
|
||||||
|
-- Creates the promot, then shows it, this needs to be run in a loop
|
||||||
|
local promptGroups = {}
|
||||||
|
|
||||||
|
function makeRedInstructionalButtons(info, title)
|
||||||
|
if not promptGroups[title] then -- Create group if not exists
|
||||||
|
promptGroups[title] = {
|
||||||
|
title = CreateVarString(10, 'LITERAL_STRING', title),
|
||||||
|
id = GetRandomIntInRange(0, 0xffffff),
|
||||||
|
prompts = {},
|
||||||
|
}
|
||||||
|
for i = 1, #info do
|
||||||
|
promptGroups[title].prompts[i] = {
|
||||||
|
keys = info[i].keys,
|
||||||
|
text = info[i].text,
|
||||||
|
}
|
||||||
|
local keyTitle = CreateVarString(10, 'LITERAL_STRING', info[i].text)
|
||||||
|
-- Create one prompt per entry
|
||||||
|
local promptSet = UiPromptRegisterBegin()
|
||||||
|
-- Register all keys for this prompt
|
||||||
|
for k = 1, #info[i].keys do
|
||||||
|
PromptSetControlAction(promptSet, info[i].keys[k])
|
||||||
|
end
|
||||||
|
PromptSetText(promptSet, keyTitle)
|
||||||
|
PromptSetEnabled(promptSet, true)
|
||||||
|
PromptSetVisible(promptSet, true)
|
||||||
|
PromptSetGroup(promptSet, promptGroups[title].id)
|
||||||
|
PromptRegisterEnd(promptSet)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
PromptSetActiveGroupThisFrame(promptGroups[title].id, promptGroups[title].title)
|
||||||
|
end
|
||||||
|
|
||||||
|
onResourceStop(function()
|
||||||
|
for k, v in pairs(promptGroups) do
|
||||||
|
print("^5Bridge^7: ^2Removing Prompt Group^7: ^3" .. k .. "^7")
|
||||||
|
PromptDelete(promptGroups[k].id, 1)
|
||||||
|
end
|
||||||
|
end, true)
|
||||||
@@ -1,171 +1,3 @@
|
|||||||
--[[
|
|
||||||
Instructional Buttons & Debug Text Module
|
|
||||||
-------------------------------------------
|
|
||||||
This module provides functions for:
|
|
||||||
• Displaying instructional buttons on-screen via a scaleform movie.
|
|
||||||
• Drawing debug text with a background rectangle when debugMode is enabled.
|
|
||||||
• Rendering 3D text in the world.
|
|
||||||
• Displaying help messages and spinners.
|
|
||||||
]]
|
|
||||||
|
|
||||||
-------------------------------------------------------------
|
|
||||||
-- Instructional Buttons Functionality
|
|
||||||
-------------------------------------------------------------
|
|
||||||
|
|
||||||
--- Loads and draws instructional buttons on-screen using a scaleform movie.
|
|
||||||
---
|
|
||||||
--- Requests the "instructional_buttons" scaleform, clears previous data, sets clear space,
|
|
||||||
--- creates data slots for each button option provided in `info`, and then draws the scaleform fullscreen.
|
|
||||||
---
|
|
||||||
--- @param info table An array of tables, where each table represents a button option:
|
|
||||||
--- - keys (table): An array of key codes (e.g., {38, 29}) to display.
|
|
||||||
--- - text (string): The label for the button.
|
|
||||||
---
|
|
||||||
--- @usage
|
|
||||||
--- ```lua
|
|
||||||
---CreateThread(function()
|
|
||||||
--- while true do
|
|
||||||
--- makeInstructionalButtons({
|
|
||||||
--- { keys = {38, 29}, text = "Open Menu" },
|
|
||||||
--- { keys = {45}, text = "Close Menu" }
|
|
||||||
--- })
|
|
||||||
--- Wait(0)
|
|
||||||
--- end
|
|
||||||
---end)
|
|
||||||
--- ```
|
|
||||||
function makeInstructionalButtons(info)
|
|
||||||
local build = RequestScaleformMovie("instructional_buttons")
|
|
||||||
while not HasScaleformMovieLoaded(build) do Wait(0) end
|
|
||||||
|
|
||||||
-- Draw the scaleform fullscreen (initial draw).
|
|
||||||
DrawScaleformMovieFullscreen(build, 255, 255, 255, 0, 0)
|
|
||||||
|
|
||||||
-- Clear previous instructions.
|
|
||||||
BeginScaleformMovieMethod(build, "CLEAR_ALL")
|
|
||||||
EndScaleformMovieMethod()
|
|
||||||
|
|
||||||
-- Set clear spacing between buttons.
|
|
||||||
BeginScaleformMovieMethod(build, "SET_CLEAR_SPACE")
|
|
||||||
ScaleformMovieMethodAddParamInt(200)
|
|
||||||
EndScaleformMovieMethod()
|
|
||||||
|
|
||||||
-- Add each button option to the scaleform.
|
|
||||||
for i = 1, #info do
|
|
||||||
BeginScaleformMovieMethod(build, "SET_DATA_SLOT")
|
|
||||||
ScaleformMovieMethodAddParamInt(i - 1)
|
|
||||||
for k = 1, #info[i].keys do
|
|
||||||
ScaleformMovieMethodAddParamPlayerNameString(GetControlInstructionalButton(2, info[i].keys[k], true))
|
|
||||||
end
|
|
||||||
BeginTextCommandScaleformString("STRING")
|
|
||||||
AddTextComponentSubstringKeyboardDisplay(info[i].text)
|
|
||||||
EndTextCommandScaleformString()
|
|
||||||
EndScaleformMovieMethod()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Draw the instructional buttons.
|
|
||||||
BeginScaleformMovieMethod(build, "DRAW_INSTRUCTIONAL_BUTTONS")
|
|
||||||
EndScaleformMovieMethod()
|
|
||||||
|
|
||||||
-- Set a translucent black background.
|
|
||||||
BeginScaleformMovieMethod(build, "SET_BACKGROUND_COLOUR")
|
|
||||||
ScaleformMovieMethodAddParamInt(0)
|
|
||||||
ScaleformMovieMethodAddParamInt(0)
|
|
||||||
ScaleformMovieMethodAddParamInt(0)
|
|
||||||
ScaleformMovieMethodAddParamInt(80)
|
|
||||||
EndScaleformMovieMethod()
|
|
||||||
|
|
||||||
-- Final full-screen draw with full opacity.
|
|
||||||
DrawScaleformMovieFullscreen(build, 255, 255, 255, 255, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- EXPERIMENTAL --
|
|
||||||
-- RedM Button Prompts --
|
|
||||||
-- Creates the promot, then shows it, this needs to be run in a loop
|
|
||||||
local promptGroups = {}
|
|
||||||
|
|
||||||
function makeRedInstructionalButtons(info, title)
|
|
||||||
if not promptGroups[title] then -- Create group if not exists
|
|
||||||
promptGroups[title] = {
|
|
||||||
title = CreateVarString(10, 'LITERAL_STRING', title),
|
|
||||||
id = GetRandomIntInRange(0, 0xffffff),
|
|
||||||
prompts = {},
|
|
||||||
}
|
|
||||||
for i = 1, #info do
|
|
||||||
promptGroups[title].prompts[i] = {
|
|
||||||
keys = info[i].keys,
|
|
||||||
text = info[i].text,
|
|
||||||
}
|
|
||||||
local keyTitle = CreateVarString(10, 'LITERAL_STRING', info[i].text)
|
|
||||||
-- Create one prompt per entry
|
|
||||||
local promptSet = UiPromptRegisterBegin()
|
|
||||||
-- Register all keys for this prompt
|
|
||||||
for k = 1, #info[i].keys do
|
|
||||||
PromptSetControlAction(promptSet, info[i].keys[k])
|
|
||||||
end
|
|
||||||
PromptSetText(promptSet, keyTitle)
|
|
||||||
PromptSetEnabled(promptSet, true)
|
|
||||||
PromptSetVisible(promptSet, true)
|
|
||||||
PromptSetGroup(promptSet, promptGroups[title].id)
|
|
||||||
PromptRegisterEnd(promptSet)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
PromptSetActiveGroupThisFrame(promptGroups[title].id, promptGroups[title].title)
|
|
||||||
end
|
|
||||||
|
|
||||||
onResourceStop(function()
|
|
||||||
for k, v in pairs(promptGroups) do
|
|
||||||
print("^5GTAUI^7: ^2Removing Prompt Group^7: ^3" .. k .. "^7")
|
|
||||||
PromptDelete(promptGroups[k].id, 1)
|
|
||||||
end
|
|
||||||
end, true)
|
|
||||||
|
|
||||||
-------------------------------------------------------------
|
|
||||||
-- Debug Text Display Functionality
|
|
||||||
-------------------------------------------------------------
|
|
||||||
|
|
||||||
--- Draws debug text on the screen if debugMode is enabled.
|
|
||||||
---
|
|
||||||
--- Calculates a background rectangle based on the number of text lines and renders each line on-screen.
|
|
||||||
---
|
|
||||||
--- @param textTable table An array of strings to display.
|
|
||||||
--- @param loc vector2 (Optional) Top-left coordinate for the text box (default: vec2(0.05, 0.65)).
|
|
||||||
---
|
|
||||||
--- @usage
|
|
||||||
--- ```lua
|
|
||||||
---CreateThread(function()
|
|
||||||
--- while true do
|
|
||||||
--- debugScaleForm(
|
|
||||||
--- {
|
|
||||||
--- "Line 1: Debug info",
|
|
||||||
--- "Line 2: More info"
|
|
||||||
--- }
|
|
||||||
--- )
|
|
||||||
--- Wait(0)
|
|
||||||
--- end
|
|
||||||
---end)
|
|
||||||
--- ```
|
|
||||||
function debugScaleForm(textTable, loc)
|
|
||||||
if debugMode then
|
|
||||||
loc = loc or vec2(0.05, 0.65)
|
|
||||||
|
|
||||||
local lineHeight = 0.025 -- Height per line.
|
|
||||||
local totalHeight = #textTable * lineHeight
|
|
||||||
local boxPadding = 0.01 -- Padding around the text.
|
|
||||||
local size = vec2(0.18, totalHeight + boxPadding * 2)
|
|
||||||
|
|
||||||
-- Draw background rectangle.
|
|
||||||
DrawRect(loc.x + size.x / 2, loc.y + size.y / 2, size.x, size.y, 0, 0, 0, 255)
|
|
||||||
|
|
||||||
-- Render each line of text.
|
|
||||||
for i = 1, #textTable do
|
|
||||||
SetTextScale(0.30, 0.30)
|
|
||||||
BeginTextCommandDisplayText("STRING")
|
|
||||||
AddTextComponentSubstringKeyboardDisplay(textTable[i])
|
|
||||||
EndTextCommandDisplayText(loc.x + 0.005, loc.y + (i - 1) * lineHeight + 0.01)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
-- 3D Text Rendering
|
-- 3D Text Rendering
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|||||||
@@ -82,9 +82,9 @@ end
|
|||||||
---
|
---
|
||||||
--- @usage
|
--- @usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
--- local found, stashName = checkHasItem({"playerStash", "storageStash"}, { iron = 2, wood = 5 })
|
--- local found, stashName = checkStashItem({"playerStash", "storageStash"}, { iron = 2, wood = 5 })
|
||||||
--- ```
|
--- ```
|
||||||
function checkHasItem(stashes, itemTable)
|
function checkStashItem(stashes, itemTable)
|
||||||
if not stashes then
|
if not stashes then
|
||||||
return hasItem(itemTable), nil
|
return hasItem(itemTable), nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -373,8 +373,7 @@ end
|
|||||||
---
|
---
|
||||||
--- @usage
|
--- @usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
---createModelTarget(
|
---createModelTarget({ model1, model2 },
|
||||||
---{ model1, model2 },
|
|
||||||
---{
|
---{
|
||||||
--- {
|
--- {
|
||||||
--- action = function()
|
--- action = function()
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ end
|
|||||||
---
|
---
|
||||||
--- @usage
|
--- @usage
|
||||||
--- ```lua
|
--- ```lua
|
||||||
--- local closestVeh, distance = getClosestVehicle({ x = 100, y = 200, z = 30 }, true)
|
--- local closestVeh, distance = getClosestVehicle({ x = 100, y = 200, z = 30 }, src)
|
||||||
--- ```
|
--- ```
|
||||||
function getClosestVehicle(coords, src)
|
function getClosestVehicle(coords, src)
|
||||||
local ped, vehicles, closestDistance, closestVehicle
|
local ped, vehicles, closestDistance, closestVehicle
|
||||||
|
|||||||
Reference in New Issue
Block a user