diff --git a/README.md b/README.md index 505cca3..4f85642 100644 --- a/README.md +++ b/README.md @@ -1,558 +1,639 @@ -# Jim_Bridge - -This script is intended to be used with my all my scripts (soon) - -It was started due to wanting to bring the same features from some scripts into others with minimal work and multiple updates -- Having certain functions in one place(this script) makes it easier to update, enchance and fix things -- This brings the possibility of branching to mutliple frameworks as I've added some already: - - `"qb-core"` - - `"qbx-core"` - - `"ox_core"` - - `"es_extended"` (requires ox_lib and ox_inventory) - -All the next updates of my scripts will use this script and be added as a dependancy - ------- - -It was a tough decision to put it up on github instead of tebex and encrypted - -But I want this script to grow with help of others who know more about other cores - ---- - -The installation of this script is simple -- REMOVE `-main` from the folder name, like any other github hosted script -- it just needs to start before any script that requires it -- it can start before core scripts if you want -- for `qb-core` I personally place this script in `resources > [standalone]` - - ---- - -### Support for different exports and scripts - -In exports.lua is the list of script folder names - -This is for people who have customised/renamed scripts - -eg. for people who use `ps-inventory`, this is mainly based on qb-inventory -so you need to rename -```lua - QBInv = "qb-inventory", -``` -to -```lua - QBInv = "ps-inventory", -``` - -This will now use events from `ps-inventory` and use it through out the scripts. - -# WIP -## Documentation - -This script brings alot of features to simplify making scripts with preset functions and automations. - -It attempts to make use of configs from the scripts its loaded into. For example: - +# Jim_Bridge + +This script is intended to be used with my all my scripts (soon) + +It was started due to wanting to bring the same features from some scripts into others with minimal work and multiple updates +- Having certain functions in one place(this script) makes it easier to update, enchance and fix things +- This brings the possibility of branching to mutliple frameworks as I've added some already: + - `"qb-core"` + - `"qbx-core"` + - `"ox_core"` + - `"es_extended"` (requires ox_lib and ox_inventory) + +All the next updates of my scripts will use this script and be added as a dependancy + +------ + +It was a tough decision to put it up on github instead of tebex and encrypted + +But I want this script to grow with help of others who know more about other cores + +--- + +The installation of this script is simple +- REMOVE `-main` from the folder name, like any other github hosted script +- it just needs to start before any script that requires it +- it can start before core scripts if you want +- for `qb-core` I personally place this script in `resources > [standalone]` + + +--- + +### Support for different exports and scripts + +In exports.lua is the list of script folder names + +This is for people who have customised/renamed scripts + +eg. for people who use `ps-inventory`, this is mainly based on qb-inventory +so you need to rename +```lua + QBInv = "qb-inventory", +``` +to +```lua + QBInv = "ps-inventory", +``` + +This will now use events from `ps-inventory` and use it through out the scripts. + +# WIP +## Documentation + +This script brings alot of features to simplify making scripts with preset functions and automations. + +It attempts to make use of configs from the scripts its loaded into. For example: + ### `Config` -```lua -Config = { - System = { - Debug = true, -- This enables Debug mode - -- Revealing debug prints and debug boxes on targets +This needs to be in every script that uses it, a `System` table with Debug, Menu, Notify, drawText, progressBar - Menu = "qb", -- This specifies what menu script will be loaded - -- "qb" = `qb-menu` and edited versions of it - -- "ox" = `ox_lib`'s context menu system - -- "gta" = `WarMenu' a free script for a gta style menu - - Notify = "gta", -- This allows you to choose the notification system for scripts - -- "qb" = `qb-core`'s built in notifications - -- "ox" = `ox_lib`'s built in notifications - -- "esx" = `esx_notify` esx's default notifications - -- "okok" = `okok-notify` okok's notifications - -- "gta" = Native GTA style popups - - drawText = "gta", -- The style of drawText you want to use - -- "qb" = `qb-core`'s drawText system - -- "ox" = `ox_lib`'s drawTextUI system - -- "gta" = Native GTA style popups - - - progressBar = "gta" -- The style of progressBar you want to use - -- "qb" = `qb-core`'s style progressBar - -- "ox" = `ox_lib`'s default progressBar - -- "gta" = Native GTA style "spinner" - }, -} -``` - -### `openMenu(Menu, data)` - -This handles creation of menus using `OX_Lib`, `qb-menu` or `WarMenu` - -It uses mixed/new functions to bring more compatability to one another - -`Menu` is your button entries and works like qb-menu or ox_lib, for example: - -```lua -local Menu = {} -Menu[#Menu + 1] = { - isMenuHeader = true, -- This makes the current button unclickable - icon = invImg("lockpick") -- Supports fontawesome or custom images - -- This example use the custom function `invImg()` to retreive an nui:// link to the given item's image - arrow = true, -- Adds a arrow icon to the button (in qb-menu overrides the icon) - header = "Header Test", -- The header/title for the button - txt = "Text test", -- The txt/description for the button - - onSelect = function() -- This brings the onSelect function to qb-menu - TriggerEvent("lolhi", { lol = hi }), - end, - -- Enter what happens when you click the button -} -``` - -As you can see above, it mixes variables but makes it possible to switch between menus just by changing the config option - -After you have created the info above, you need to then trigger opening of this menu with: -```lua -openMenu(Menu, -- Menu here is your table name you created above -{ -- Next entry in openMenu is a table - header = "Menu Header", -- What your menu title will be shown as - headertxt = "Header info", -- Info to be displayed under the title - - onExit = function() -- Will create a "Close button" - TriggerEvent("lolhi", { lol = hi }), - end, -- When clicked it will trigger the onExit event - - onBack = function() -- Will create a "Back button" - TriggerEvent("lolhi", { lol = hi }), - end, -- When clicked it will trigger the onBack event -}) -``` - -### Support for multiple target events -These automatically detect what target script you are using - -They are also automatically removed when the script is stopped (for helping optimization) -### `createEntityTarget(entity, opts, dist)` -Create an entity based target -```lua -createEntityTarget( - entity, -- The entity ID of what you want to target - { - { -- Your target options here - icon = "icon", -- Your icon, only supports font awesome icons - label = "Test Label", -- The label of your target - item = "lockpick" -- The required it em - job = "mechanic", -- The required job - gang = "lostmc", -- The required gang - action = function() -- What happens when the target is selected - TriggerEvent("lolhi", { lol = hi }), - end, - }, - } -, dist) -- How close you ned to be to see the target -``` - -### `createBoxTarget(data, opts, dist)` -Create an entity based target -```lua -createBoxTarget( - { - "TargetName", -- The name/id of your target here - vec3(0, 0, 0), -- The coordinates of your target - 2.0, -- The width of your target box - 2.0, -- The depth of your target box - { - name = "TargetName", -- The name/id of your target here - heading = 200.0, -- The direction your target will be placed - debugPoly = true, -- Wether to show debug boxes to help place targets - minZ = 190.0, -- The bottom of your box - maxZ = 210.0, -- The top of your box - }, - }, - { - { -- Your target options here - icon = "icon", -- Your icon, only supports font awesome icons - label = "Test Label", -- The label of your target - item = "lockpick" -- The required it em - job = "mechanic", -- The required job - gang = "lostmc", -- The required gang - action = function() -- What happens when the target is selected - TriggerEvent("lolhi", { lol = hi }), - end, - }, - }, -dist) -- How close you ned to be to see the target -``` - -### `createCircleTarget(data, opts, dist)` -Create an entity based target -```lua -createCircleTarget( - { - "TargetName", -- The name/id of your target here - vec3(0, 0, 0), -- The coordinates of your target - 2.0, -- The radius of your target circle - { - name = "TargetName", -- The name/id of your target here - heading = 200.0, -- The direction your target will be placed - debugPoly = true, -- Wether to show debug boxes to help place targets - minZ = 190.0, -- The bottom of your box - maxZ = 210.0, -- The top of your box - }, - }, - { - { -- Your target options here - icon = "icon", -- Your icon, only supports font awesome icons - label = "Test Label", -- The label of your target - item = "lockpick" -- The required it em - job = "mechanic", -- The required job - gang = "lostmc", -- The required gang - action = function() -- What happens when the target is selected - TriggerEvent("lolhi", { lol = hi }), - end, - }, - }, -dist) -- How close you ned to be to see the target -``` - -### `removeEntityTarget(entity)` -Triggers removal of the target entity, by checking the entity name - -### `removeZoneTarget(target)` -Triggers removal of a zone(Box/Circle) target by calling the target's name/id - -### `triggerNotify(title, message, type, src)` -Handles notifications for the script called from either the server or client - -Supports: -- `okok` -- `qb` -- `ox` -- `gta` -- `esx` - -```lua -triggerNotify( - title = "Notification Title", -- Usually 'nil' in my scripts, supports notifications with titles - message = "Notification Message", -- The notification's message - type = "success" -- The type of notification, depends on the supporting script - src = 1, -- If in the server, this is required to send to player -) -``` - -### `drawText(image, input, style)` -This handles calling drawText functions - -Supports: -- `gta` -- `qb` -- `ox` -- `esx` - -```lua -drawText( - 187, -- Very specific for adding blip images to drawtexts, usually nil - { - "Line 1", -- Supports multiple lines, helpful for displaying button prompts - "Line 2", - }, - "g" -- Sets colour of text after a ":" when using GTA drawtext -) -``` - -### `hideText()` -Simply used to hide drawText prompts when not needed anymore - -### `createCallback(callbackName, funct)` -This is my attempt at making multiframework server callbacks by using their provided events - -(Only works server side) - -```lua -createCallback( - "jimsCallback", -- Callback event name, needs to be something that isn't already set - function() - - end) -end -``` - -### `triggerCallback(callBackName, value)` -This is an attempt at a mutliframework callback - -### `onPlayerLoaded(func)` -This is a multiframework event that is triggered when a player has fully loaded their character in - -```lua -onPlayerLoaded( - function() - print("Player Loaded In!") - end -) -``` - -### `createInput(title, opts)` - -### `searchCar(vehicle)` - -This function was made for `jim-mechanic` but can be used in other instances - -I searches the model name of a currently spawned vehicle and retrieves info about it - -It is smart, in terms of, if you use this multiple times it reteives the previously found info instead of searching again - -It retrieves data from your vehicles.lua/database: -- `name` for example: "Zentorno Pegassi" -- `price` for example: 100000 -- `class` this converts the class number to a String, for example: if the class is 10 it converts this to "Off-road" - -### `getVehicleProperties(vehicle)` +This is required to use jim_bridge with your script +```lua +Config = { + System = { + Debug = true, -- This enables Debug mode + -- Revealing debug prints and debug boxes on targets + + Menu = "qb", -- This specifies what menu script will be loaded + -- "qb" = `qb-menu` and edited versions of it + -- "ox" = `ox_lib`'s context menu system + -- "gta" = `WarMenu' a free script for a gta style menu + + Notify = "gta", -- This allows you to choose the notification system for scripts + -- "qb" = `qb-core`'s built in notifications + -- "ox" = `ox_lib`'s built in notifications + -- "esx" = `esx_notify` esx's default notifications + -- "okok" = `okok-notify` okok's notifications + -- "gta" = Native GTA style popups + + drawText = "gta", -- The style of drawText you want to use + -- "qb" = `qb-core`'s drawText system + -- "ox" = `ox_lib`'s drawTextUI system + -- "gta" = Native GTA style popups + + + progressBar = "gta" -- The style of progressBar you want to use + -- "qb" = `qb-core`'s style progressBar + -- "ox" = `ox_lib`'s default progressBar + -- "gta" = Native GTA style "spinner" + }, +} +``` + +### `openMenu(Menu, data)` + +This handles creation of menus using `OX_Lib`, `qb-menu` or `WarMenu` + +It uses mixed/new functions to bring more compatability to one another + +`Menu` is your button entries and works like qb-menu or ox_lib, for example: + +```lua +local Menu = {} +Menu[#Menu + 1] = { + isMenuHeader = true, -- This makes the current button unclickable + icon = invImg("lockpick") -- Supports fontawesome or custom images + -- This example use the custom function `invImg()` to retreive an nui:// link to the given item's image + arrow = true, -- Adds a arrow icon to the button (in qb-menu overrides the icon) + header = "Header Test", -- The header/title for the button + txt = "Text test", -- The txt/description for the button + + onSelect = function() -- This brings the onSelect function to qb-menu + TriggerEvent("lolhi", { lol = hi }), + end, + -- Enter what happens when you click the button +} +``` + +As you can see above, it mixes variables but makes it possible to switch between menus just by changing the config option + +After you have created the info above, you need to then trigger opening of this menu with: +```lua +openMenu(Menu, -- Menu here is your table name you created above +{ -- Next entry in openMenu is a table + header = "Menu Header", -- What your menu title will be shown as + headertxt = "Header info", -- Info to be displayed under the title + + onExit = function() -- Will create a "Close button" + TriggerEvent("lolhi", { lol = hi }), + end, -- When clicked it will trigger the onExit event + + onBack = function() -- Will create a "Back button" + TriggerEvent("lolhi", { lol = hi }), + end, -- When clicked it will trigger the onBack event +}) +``` + +### Support for multiple target events +These automatically detect what target script you are using + +They are also automatically removed when the script is stopped (for helping optimization) +### `createEntityTarget(entity, opts, dist)` +Create an entity based target +```lua +createEntityTarget( + entity, -- The entity ID of what you want to target + { + { -- Your target options here + icon = "icon", -- Your icon, only supports font awesome icons + label = "Test Label", -- The label of your target + item = "lockpick" -- The required it em + job = "mechanic", -- The required job + gang = "lostmc", -- The required gang + action = function() -- What happens when the target is selected + TriggerEvent("lolhi", { lol = hi }), + end, + }, + } +, dist) -- How close you ned to be to see the target +``` + +### `createBoxTarget(data, opts, dist)` +Create an entity based target +```lua +createBoxTarget( + { + "TargetName", -- The name/id of your target here + vec3(0, 0, 0), -- The coordinates of your target + 2.0, -- The width of your target box + 2.0, -- The depth of your target box + { + name = "TargetName", -- The name/id of your target here + heading = 200.0, -- The direction your target will be placed + debugPoly = true, -- Wether to show debug boxes to help place targets + minZ = 190.0, -- The bottom of your box + maxZ = 210.0, -- The top of your box + }, + }, + { + { -- Your target options here + icon = "icon", -- Your icon, only supports font awesome icons + label = "Test Label", -- The label of your target + item = "lockpick" -- The required it em + job = "mechanic", -- The required job + gang = "lostmc", -- The required gang + action = function() -- What happens when the target is selected + TriggerEvent("lolhi", { lol = hi }), + end, + }, + }, +dist) -- How close you ned to be to see the target +``` + +### `createCircleTarget(data, opts, dist)` +Create an entity based target +```lua +createCircleTarget( + { + "TargetName", -- The name/id of your target here + vec3(0, 0, 0), -- The coordinates of your target + 2.0, -- The radius of your target circle + { + name = "TargetName", -- The name/id of your target here + heading = 200.0, -- The direction your target will be placed + debugPoly = true, -- Wether to show debug boxes to help place targets + minZ = 190.0, -- The bottom of your box + maxZ = 210.0, -- The top of your box + }, + }, + { + { -- Your target options here + icon = "icon", -- Your icon, only supports font awesome icons + label = "Test Label", -- The label of your target + item = "lockpick" -- The required it em + job = "mechanic", -- The required job + gang = "lostmc", -- The required gang + action = function() -- What happens when the target is selected + TriggerEvent("lolhi", { lol = hi }), + end, + }, + }, +dist) -- How close you ned to be to see the target +``` + +### `removeEntityTarget(entity)` +Triggers removal of the target entity, by checking the entity name + +### `removeZoneTarget(target)` +Triggers removal of a zone(Box/Circle) target by calling the target's name/id + +### `triggerNotify(title, message, type, src)` +Handles notifications for the script called from either the server or client + +Supports: +- `okok` +- `qb` +- `ox` +- `gta` +- `esx` + +```lua +triggerNotify( + title = "Notification Title", -- Usually 'nil' in my scripts, supports notifications with titles + message = "Notification Message", -- The notification's message + type = "success" -- The type of notification, depends on the supporting script + src = 1, -- If in the server, this is required to send to player +) +``` + +### `drawText(image, input, style)` +This handles calling drawText functions + +Supports: +- `gta` +- `qb` +- `ox` +- `esx` + +```lua +drawText( + 187, -- Very specific for adding blip images to drawtexts, usually nil + { + "Line 1", -- Supports multiple lines, helpful for displaying button prompts + "Line 2", + }, + "g" -- Sets colour of text after a ":" when using GTA drawtext +) +``` + +### `hideText()` +Simply used to hide drawText prompts when not needed anymore + +### `createCallback(callbackName, funct)` +This is my attempt at making multiframework server callbacks by using their provided events + +(Only works server side) + +```lua +createCallback( + "jimsCallback", -- Callback event name, needs to be something that isn't already set + function() + + end) +end +``` + +### `triggerCallback(callBackName, value)` +This is an attempt at a mutliframework callback + +### `onPlayerLoaded(func)` +This is a multiframework event that is triggered when a player has fully loaded their character in + +```lua +onPlayerLoaded( + function() + print("Player Loaded In!") + end +) +``` + +### `createInput(title, opts)` + +### `searchCar(vehicle)` + +This function was made for `jim-mechanic` but can be used in other instances + +I searches the model name of a currently spawned vehicle and retrieves info about it + +It is smart, in terms of, if you use this multiple times it reteives the previously found info instead of searching again + +It retrieves data from your vehicles.lua/database: +- `name` for example: "Zentorno Pegassi" +- `price` for example: 100000 +- `class` this converts the class number to a String, for example: if the class is 10 it converts this to "Off-road" + +### `getVehicleProperties(vehicle)` Gets the current properties of the vehicle in a table - -### `setVehicleProperties(vehicle, props)` -Set's the vehicles properites using the `props` table provided - -### `checkDifferences(vehicle, newProps)` -This function is used by `setVehicleProperties` - -It determine's what differences there are between the current vehicle and the new set of properites - -If there are differences, return `true` - -### `RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type, newsrc)` -This event is made to REMOVE money from a player - -It can be called from client with `TriggerServerEvent` - -Also can be called from server with `TriggerEvent` and a source id in `newsrc` - -The name of the event uses `GetCurrentResourceName()` so it doesn't double up results with other scripts -```lua -cost = 100 -- The amount of money to be removed -type = "cash" or "card" -- The type of money that should be removed -newsrc = 1 -- The source of the player, must be nil if calling from client +- if using qb-core it will default to its version +- if not it will attempt to use ox_libs version + +### `setVehicleProperties(vehicle, props)` +Set's the vehicles properites using the `props` table provided +- if using qb-core it will default to its version +- if not it will attempt to use ox_libs version + +### `checkDifferences(vehicle, newProps)` +This function is used by `setVehicleProperties` + +It determine's what differences there are between the current vehicle and the new set of properites + +If there are differences, return `true` + +### `RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type, newsrc)` +This event is made to REMOVE money from a player + +It can be called from client with `TriggerServerEvent` + +Also can be called from server with `TriggerEvent` and a source id in `newsrc` + +The name of the event uses `GetCurrentResourceName()` so it doesn't double up results with other scripts +```lua +cost = 100 -- The amount of money to be removed +type = "cash" or "card" -- The type of money that should be removed +newsrc = 1 -- The source of the player, must be nil if calling from client ``` - -## `RegisterNetEvent(GetCurrentResourceName()..":server:FundPlayer", function(fund, type, newsrc)` -This event is made to ADD money from a player - -It can be called from client with `TriggerServerEvent` - -Also can be called from server with `TriggerEvent` and a source id in `newsrc` - -The name of the event uses `GetCurrentResourceName()` so it doesn't double up results with other scripts +Examples of use: ```lua -fund = 100 -- The amount of money to be added -type = "cash" or "card" -- The type of money that should be added -newsrc = 1 -- The source of the player, must be `nil` if calling from client +-- Client +TriggerEvent(GetCurrentResourceName()..":server:ChargePlayer", function(1000, "cash") + +-- Server +TriggerServerEvent(GetCurrentResourceName()..":server:ChargePlayer", function(1000, "bank", 1) ``` - -### `createUseableItem(item, funct)` -This is a server side event to make an item usable - -Note: If using ox-inv and the item info has event info, this will be ignored - + +## `RegisterNetEvent(GetCurrentResourceName()..":server:FundPlayer", function(cost, type, newsrc)` +This event is made to ADD money from a player + +It can be called from client with `TriggerServerEvent` + +Also can be called from server with `TriggerEvent` and a source id in `newsrc` + +The name of the event uses `GetCurrentResourceName()` so it doesn't double up results with other scripts +```lua +fund = 100 -- The amount of money to be added +type = "cash" or "card" -- The type of money that should be added +newsrc = 1 -- The source of the player, must be `nil` if calling from client +``` +Examples of use: ```lua -createUseableItem( - "lockpick", -- The item you want to make usable - function(source, item) - TriggerClientEvent("lolhi", source, { lol = item.name }), - end -) +-- Client +TriggerEvent(GetCurrentResourceName()..":server:FundPlayer", function(1000, "cash") + +-- Server +TriggerServerEvent(GetCurrentResourceName()..":server:FundPlayer", function(1000, "bank", newsrc) ``` - -### `hasJob(job, source, grade)` -This is an event that makes checking if the player has the requested job simple - -It works both client side and server side - -returns `true` or `false` and if they are on duty or not -```lua -local hasjob, duty = - hasJob( - "mechanic", -- the job role - 1, -- the source id of the player, set to nil if on client - 3, -- the required grade of the player, can be nil to check job - ) -``` - -### `getPlayer(source)` -This retrieves basic info of the player - -works client side and server side -Retrieves: -- Players Name -- Players Current Cash -- Players Current Bank Balance - -```lua -local PlayerInfo = - getPlayer( - 1 -- The - ) -print(json.encode(PlayerInfo, { indent = true }) -``` - -### `registerCommand(command, options)` -This is a server side event that uses -- `ox_lib`'s - `lib.addCommand` -- `qb-core`'s - `QBCore.Commands.Add` + +### `createUseableItem(item, funct)` +This is a server side event to make an item usable + +Note: If using ox_inv and the items.lua info has event or a `status` section, this will be ignored + +```lua +createUseableItem( + "lockpick", -- The item you want to make usable + function(source, item) + TriggerClientEvent("lolhi", source, { lol = item.name }), + end +) +``` + +### `hasJob(job, source, grade)` +This is an event that makes checking if the player has the requested job simple + +It works both client side and server side + +returns `true` or `false` and if they are on duty or not +```lua +local hasjob, duty = + hasJob( + "mechanic", -- the job role + 1, -- the source id of the player, set to nil if on client + 3, -- the required grade of the player, can be nil to check job + ) +``` + +### `getPlayer(source)` +This retrieves basic info of the player + +works client side and server side +Retrieves: +- Players Name +- Players Current Cash +- Players Current Bank Balance + +```lua +local PlayerInfo = + getPlayer( + 1 -- The + ) +print(json.encode(PlayerInfo, { indent = true }) +``` + +### `registerCommand(command, options)` +This is a server side event that uses +- `ox_lib`'s - `lib.addCommand` +- `qb-core`'s - `QBCore.Commands.Add` + +Example: +```lua +registerCommand( + "hello", -- /hello the command to be used + "Print 'hello world'", -- text to show in chat + { name = "lol", help = "hi" }, -- Help text for the command + false, + function() -- Function to be ran when the command is triggered + print("Hello World") + end, + "admin", -- the restriction, can be nil +) +``` + +### `invImg(item)` +This is used mainly for menu's to retrieve the item images + +It detects what inventory you are using and automatically generates an `nui://` link + +```lua +local imgLink = invImg("lockpick") +print(imgLink) +``` + +### `registerStash(name, label, slots, weight)` +This is a serverside function used to register a new stash in `ox_inventory` and `qs-inventory` + +```lua +registerStash( + "newStash", -- The stash name/ID, this is used to open it later + "New created Stash", -- The name of the stash that shows in inventories + 50, -- The amount of slots in the inventory + 4000000, -- The max weight in the inventory +) +``` + +### `loadModel(model)` +This loads the requested model into the memory cache to help spawning of props +- Checks if the model exists in the server +- Attempts to load the model with a timeout, if not loaded, sends warning + +### `unloadModel(model)` +This unloads a model to help clear the memory cache and help optimization +- Recommended to run after spawning a prop + +### `loadAnimDict(animDict)` +This loads the requested animDict into the memory cache to help loading anims +- Checks if the dict exists in the server + +### `unloadAnimDict(animDict)` +This unloads the animDict to help clear the memory cache and help optimization +- Recommended to run after running an animation + +### `loadPtfxDict(ptFxName)` +This loads the requested ptFx dict into the memory cache to help loading particle effects +- Skips if the effect is alredy loaded + +### `unloadPtfxDict(dict)` +This unloads a particle effect to help clear the memory cache and help optimization +- Recommended to run after running an ptfx + +### `loadTextureDict(dict)` +This loads the requested texture dictionary into memory + +### `countTable(table)` +This is a simple function to count how many entires are in a table, for if your table keys aren't numbered Example: -```lua -registerCommand( - "hello", -- /hello the command to be used - "Print 'hello world'", -- text to show in chat - { name = "lol", help = "hi }, -- Help text for the command - false, - function() -- Function to be ran when the command is triggered - print("Hello World") - end, - "admin", -- the restriction, can be nil -) -``` - -### `invImg(item)` -This is used mainly for menu's to retrieve the item images - -It detects what inventory you are using and automatically generates an `nui://` link - -```lua -local imgLink = invImg("lockpick") -print(imgLink) -``` - -### `registerStash(name, label, slots, weight)` -This is a serverside function used to register a new stash in `ox_inventory` and `qs-inventory` - -```lua -registerStash( - "newStash", -- The stash name/ID, this is used to open it later - "New created Stash", -- The name of the stash that shows in inventories - 50, -- The amount of slots in the inventory - 4000000, -- The max weight in the inventory -) -``` - -### `loadModel(model)` -This loads the requested model into the memory cache to help spawning of props -- Checks if the model exists in the server -- Attempts to load the model with a timeout, if not loaded, sends warning - -### `unloadModel(model)` -This unloads a model to help clear the memory cache and help optimization -- Recommended to run after spawning a prop - -### `loadAnimDict(animDict)` -This loads the requested animDict into the memory cache to help loading anims -- Checks if the dict exists in the server - -### `unloadAnimDict(animDict)` -This unloads the animDict to help clear the memory cache and help optimization -- Recommended to run after running an animation - -### `loadPtfxDict(ptFxName)` -This loads the requested ptFx dict into the memory cache to help loading particle effects -- Skips if the effect is alredy loaded - -### `unloadPtfxDict(dict)` -This unloads a particle effect to help clear the memory cache and help optimization -- Recommended to run after running an ptfx - -### `loadTextureDict(dict)` -This loads the requested texture dictionary into memory - -### `countTable(table)` -This is a simple function to count how many entires are in a table, for if your table keys aren't numbered -```lua -local table = { - ["tableentry"] = true, - ["anotherentry"] = true, -} -print("countTable", countTable(table)) -``` - -### `pairsByKeys(t)` -Searches through a table alphabetically instead of randomly - -This is an optional function made to replace: -```lua -for k, v in pairs(table) do end -``` -with: -```lua -for k, v in pairsByKeys(table) do end -``` - -### `playAnim(animDict, animName, duration, flag, ped)` -A simplified version of `TaskPlayAnim()` - -Has some settings already set and basic ones ready to change - -Loads the animDict automatically with `loadAnimDict()` -```lua -playAnim( - animDict, -- The animation dictionary - animName, -- The animation's name - duration, -- How far into the animation it should stop - flag, -- The animation flag - ped, -- Optional, for if you want any one other than the player to do the animation -) -``` - -### `stopAnim(animDict, animName, ped)` -Similar to `StopAnimTask()` - -Made to stop the given animation with being able to choose which ped -```lua -stopAnim( - animDict, -- The animation dictionary - animName, -- The animation's name - ped, -- Optional, for if you want any one other than the player to do the animation -) -``` +```lua +local table = { + ["tableentry"] = true, + ["anotherentry"] = true, +} +print("countTable", countTable(table)) +``` + +### `pairsByKeys(t)` +Searches through a table alphabetically instead of randomly + +This is an optional function made to replace: +```lua +for k, v in pairs(table) do end +``` +with: +```lua +for k, v in pairsByKeys(table) do end +``` + +### `playAnim(animDict, animName, duration, flag, ped)` +A simplified version of `TaskPlayAnim()` + +Has some settings already set and basic ones ready to change + +Loads the animDict automatically with `loadAnimDict()` +```lua +playAnim( + animDict, -- The animation dictionary + animName, -- The animation's name + duration, -- How far into the animation it should stop + flag, -- The animation flag + ped, -- Optional, for if you want any one other than the player to do the animation +) +``` + +### `stopAnim(animDict, animName, ped)` +Similar to `StopAnimTask()` + +Made to stop the given animation with being able to choose which ped +```lua +stopAnim( + animDict, -- The animation dictionary + animName, -- The animation's name + ped, -- Optional, for if you want any one other than the player to do the animation +) +``` ### `makeVeh(model, coords)` +Spawns a vehicle for the player to use +- Server Synced +- Easy creation +- Returns entity id for further control through the script +- Loads model before spawning +- Unloads model from memory cache after spawn +Example of use: +```lua +local vehicle = makeVeh( + `zentorno`, + vec4(-596.74, 2090.99, 131.41, 16.6) +) +print(vehicle, GetEntityCoords(vehicle)) +``` + ### `makePed(model, coords, freeze, collision, scenario, anim, synced)` +Spawns a controllable ped +- Loads the model before spawning +- Unloads model from memory cache after spawn +- Several options for creation +- Can spawn with scenario name or anims +- Spawns invincible -### `makeProp(data, freeze, synced)` +Example of use: +```lua +local ped = makePed( + `MP_M_Freemode_011, + vec4(-596.74, 2090.99, 131.41, 16.6), + true, + false, + nil, + { "amb@prop_human_parking_meter@male@idle_a", "idle_a" }, + false +) +print(ped, GetEntityCoords(ped)) +``` + +### `makeProp(data, freeze, synced)` +This function is made to easily load a prop in the world +- Has a simplified process +- Lodas model before spawning prop +- Unloads model from memory cache when done +- Returns entity id for control through the script -### `instantLookEnt(ent, ent2)` +Example of use: +```lua +local entityid = makeProp( + { + prop = "v_serv_plas_boxgt2", -- Prop model, can be a string or hash key + coords = vec4(-596.74, 2090.99, 131.41, 16.6), -- needs to be vector4 or vec4, 4th variable is heading + }, + true, -- Decide if the entiy is frozen in place + false -- Does this prop spawn for everyone or just the client +) +print(entityid, GetEntityCoords(entityid)) +``` + +### `instantLookEnt(ent, ent2)` This function forcibly changes `ent`'s heading to face `ent2` -Helpful for animations - -### `lookEnt(entity)` -This function attempts to slowly turn the player to the given entity/coords - -Accepts either a `entity ID` or `vector3` - -### `destroyProp(entity)` -Attempts to remove a spawned prop - -If its attached to a player it attempts to to detatch it first - -### `pushVehicle(entity)` -This attempts to make the current entity(vehicle) network controlled - -This helps with syncing it with other players (used in jim-mechanic alot) - -### `ensureNetToVeh(vehNetId)` -This was created to get around fivem's warnings of failing to get network objects - -Although these warnings mean't nothing, it is annoying - -This is made to replace the native `NetToVeh()` but checking first if it exists - - ---- - - - - - - - + +Helpful for animations in a specific direction + +### `lookEnt(entity)` +This function attempts to slowly turn the player to the given entity/coords + +Accepts either a `entity ID` or `vector3` + +### `destroyProp(entity)` +Attempts to remove a spawned prop + +If its attached to a player it attempts to to detatch it first + +### `pushVehicle(entity)` +This attempts to make the current entity(vehicle) network controlled + +This helps with syncing it with other players (used in jim-mechanic often) + +### `ensureNetToVeh(vehNetId)` +This was created to get around fivem's warnings of failing to get network objects + +Although these warnings mean't nothing, it is annoying + +This is made to replace the native `NetToVeh()` but checking first if it exists +### `makeBlip(data)` + + +--- + + + + + + + + diff --git a/crafting.lua b/crafting.lua index e111938..43eed56 100644 --- a/crafting.lua +++ b/crafting.lua @@ -331,11 +331,13 @@ function hasItem(items, amount, src) local amount = amount and amount or 1 elseif GetResourceState(CodeMInv):find("start") then foundInv = CodeMInv - grabInv = src and exports[CodeMInv]:GetUserInventory(src) or exports[CodeMInv]:GetClientPlayerInventory() + if src then grabInv = exports[CodeMInv]:GetUserInventory(src) + else grabInv = exports[CodeMInv]:GetClientPlayerInventory() end elseif GetResourceState(QBInv):find("start") then foundInv = QBInv - grabInv = src and Core.Functions.GetPlayer(src).PlayerData.items or Core.Functions.GetPlayerData().items + if src then grabInv = Core.Functions.GetPlayer(src).PlayerData.items + else grabInv = Core.Functions.GetPlayerData().items end else print("^4ERROR^7: ^2No Inventory detected ^7- ^2Check ^3exports^1.^2lua^7") @@ -478,7 +480,7 @@ function stashRemoveItem(stashItems, stashName, items) local amount = amount and elseif GetResourceState(OrigenInv):find("start") then for k, v in pairs(items) do - exports[OrigenInv]:RemoveFromStash(stashName, nil, k, v) + exports[OrigenInv]:RemoveFromStash(stashName, k, v) if Config.System.Debug then print("^6Bridge^7: ^2Removing item from ^3Stash^2 with ^7"..OrigenInv, k, v) end end diff --git a/functions.lua b/functions.lua index 03d56e0..44c8147 100644 --- a/functions.lua +++ b/functions.lua @@ -40,12 +40,13 @@ function loadPtfxDict(ptFxName) end end function unloadPtfxDict(dict) if Config.System.Debug then print("^6Bridge^7: ^2Removing Ptfx Dictionary^7: '^6"..dict.."^7'") end RemoveNamedPtfxAsset(dict) end + function loadTextureDict(dict) if not HasStreamedTextureDictLoaded(dict) then if Config.System.Debug then print("^6Bridge^7: ^2Loading Texture Dictionary^7: '^6"..dict.."^7'") end - while not HasStreamedTextureDictLoaded(dict) do RequestNamedPtfxAsset(dict) Wait(5) end + while not HasStreamedTextureDictLoaded(dict) do RequestStreamedTextureDict(dict) Wait(5) end end end @@ -87,7 +88,7 @@ local Peds = {} local Props = {} function makePed(model, coords, freeze, collision, scenario, anim, synced) loadModel(model) - local ped = CreatePed(0, model, coords.x, coords.y, coords.z-1.03, coords.w, synced or true, false) + local ped = CreatePed(0, model, coords.x, coords.y, coords.z-1.03, coords.w, synced and synced or false, false) SetEntityInvincible(ped, true) SetBlockingOfNonTemporaryEvents(ped, true) FreezeEntityPosition(ped, freeze and freeze or true) @@ -109,7 +110,7 @@ end function makeProp(data, freeze, synced) loadModel(data.prop) - local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, freeze or false, synced or false, false) + local prop = CreateObject(data.prop, data.coords.x, data.coords.y, data.coords.z-1.03, synced and synced or false, synced and synced or false, false) SetEntityHeading(prop, data.coords.w + 180.0) FreezeEntityPosition(prop, freeze and freeze or 0) if Config.System.Debug then @@ -142,13 +143,6 @@ function DrawText3D(x, y, z, text) ClearDrawOrigin() end -AddEventHandler('onResourceStop', function(r) - if r ~= GetCurrentResourceName() then return end - stopSpinner() - for i = 1, #Peds do DeletePed(Peds[i]) end - for i = 1, #Props do destroyProp(Props[i]) end -end) - function instantLookEnt(ent, ent2) local p1 = GetEntityCoords(ent, true) local p2 = GetEntityCoords(ent2, true) @@ -229,7 +223,9 @@ function ensureNetToVeh(vehNetID) return vehicle end -local previewTxd = not IsDuplicityVersion() and CreateRuntimeTxd(GetCurrentResourceName()..'previewTxd') or nil +local scriptTxd = not IsDuplicityVersion() and CreateRuntimeTxd(GetCurrentResourceName()..'scriptTxd') or nil + +local customDUIList = {} function makeBlip(data) local blip = AddBlipForCoord(vec3(data.coords.x, data.coords.y, data.coords.z)) SetBlipAsShortRange(blip, true) @@ -243,16 +239,13 @@ function makeBlip(data) EndTextCommandSetBlipName(blip) if GetResourceState("blip_info"):find("start") or GetResourceState("blip-info"):find("start") or GetResourceState("blipinfo"):find("start") then if data.preview then - local txname = tostring('preview'..keyGen()..keyGen()) + local txname = tostring(data.name..'preview'..string.gsub(data.coords.z, "%.", "")) if data.preview:find("http") then - local newTxt = CreateDui(data.preview, 512, 256) - local duihandle = GetDuiHandle(newTxt) - while not GetDuiHandle(newTxt) do Wait(0) end - CreateRuntimeTextureFromDuiHandle(previewTxd, txname, duihandle) + createDui(txname, data.preview, vec2(512, 256), scriptTxd) else - CreateRuntimeTextureFromImage(previewTxd, txname, data.preview) + CreateRuntimeTextureFromImage(scriptTxd, txname, data.preview) end - exports["blip_info"]:SetBlipInfoImage(blip, GetCurrentResourceName()..'previewTxd', txname) + exports["blip_info"]:SetBlipInfoImage(blip, GetCurrentResourceName()..'scriptTxd', txname) exports["blip_info"]:SetBlipInfoTitle(blip, data.name, false) end end @@ -274,14 +267,11 @@ function makeEntityBlip(data) EndTextCommandSetBlipName(blip) if GetResourceState("blip_info"):find("start") or GetResourceState("blip-info"):find("start") or GetResourceState("blipinfo"):find("start") then if data.preview then - local txname = tostring('preview'..keyGen()..keyGen()) + local txname = data.name..'preview' if data.preview:find("http") then - local newTxt = CreateDui(data.preview, 512, 256) - local duihandle = GetDuiHandle(newTxt) - while not GetDuiHandle(newTxt) do Wait(0) end - CreateRuntimeTextureFromDuiHandle(previewTxd, txname, duihandle) + createDui(txname, data.preview, vec2(512, 256), scriptTxd) else - CreateRuntimeTextureFromImage(previewTxd, txname, data.preview) + CreateRuntimeTextureFromImage(scriptTxd, txname, data.preview) end exports["blip_info"]:SetBlipInfoImage(blip, GetCurrentResourceName()..'previewTxd', txname) exports["blip_info"]:SetBlipInfoTitle(blip, data.name, false) @@ -291,6 +281,119 @@ function makeEntityBlip(data) return blip end +-- DUI STUFF - WIP -- + +-- DUI CLIENT +function createDui(name, http, size, txd) + if not customDUIList[name] then + local newTxt = CreateDui(http, math.floor(size.x), math.floor(size.y)) + while not GetDuiHandle(newTxt) do Wait(0) end + CreateRuntimeTextureFromDuiHandle(txd, name, GetDuiHandle(newTxt)) + customDUIList[name] = newTxt + SetDuiUrl(customDUIList[name], http) + else + SetDuiUrl(customDUIList[name], http) + end +end + +function DuiSelect(data) + local image = "" + for k, v in pairs(duiList[data.name]) do + if v.tex.texn == data.texn then + if duiList[data.name][k] then + image = "