diff --git a/404.html b/404.html index 44c73e7..954abb4 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/_next/static/5iYgAfXyCfDX6UOWjnZp5/_buildManifest.js b/_next/static/6EuBz8w5ST-6dXzjAUojg/_buildManifest.js similarity index 99% rename from _next/static/5iYgAfXyCfDX6UOWjnZp5/_buildManifest.js rename to _next/static/6EuBz8w5ST-6dXzjAUojg/_buildManifest.js index f62af90..c78425b 100644 --- a/_next/static/5iYgAfXyCfDX6UOWjnZp5/_buildManifest.js +++ b/_next/static/6EuBz8w5ST-6dXzjAUojg/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(e){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[e,"static/chunks/pages/index-c1aed278594e16cf.js"],"/_error":["static/chunks/pages/_error-457ff524116f8d3d.js"],"/contributors":[e,"static/chunks/pages/contributors-4e18d92a8682ae5b.js"],"/converting":[e,"static/chunks/pages/converting-5a6b2861db4b3533.js"],"/developers":[e,"static/chunks/pages/developers-5ab772c9952aa1d7.js"],"/faq":[e,"static/chunks/pages/faq-be31d678f7fb3e88.js"],"/installation":[e,"static/chunks/pages/installation-875fe5259d52a43f.js"],"/release":[e,"static/chunks/pages/release-89607550b757371d.js"],"/resources/qbx_binoculars":[e,"static/chunks/pages/resources/qbx_binoculars-1c65752814a93c61.js"],"/resources/qbx_core":[e,"static/chunks/pages/resources/qbx_core-5942c0bd0f7912a5.js"],"/resources/qbx_core/convars":[e,"static/chunks/pages/resources/qbx_core/convars-bc7fbab11ee7d679.js"],"/resources/qbx_core/events/client":[e,"static/chunks/pages/resources/qbx_core/events/client-4bd1db6ede006859.js"],"/resources/qbx_core/events/server":[e,"static/chunks/pages/resources/qbx_core/events/server-e3978e1820c692cf.js"],"/resources/qbx_core/exports/client":[e,"static/chunks/pages/resources/qbx_core/exports/client-b215ca183c066d20.js"],"/resources/qbx_core/exports/server":[e,"static/chunks/pages/resources/qbx_core/exports/server-778f9cf132798371.js"],"/resources/qbx_core/exports/shared":[e,"static/chunks/pages/resources/qbx_core/exports/shared-67e5ce23b2e6c7ce.js"],"/resources/qbx_core/modules/hooks":[e,"static/chunks/pages/resources/qbx_core/modules/hooks-30f2bbbac65aa805.js"],"/resources/qbx_core/modules/lib":[e,"static/chunks/pages/resources/qbx_core/modules/lib-90d5c63cdcd9da72.js"],"/resources/qbx_core/modules/lib/client":[e,"static/chunks/pages/resources/qbx_core/modules/lib/client-023fc7cb442d5de8.js"],"/resources/qbx_core/modules/lib/server":[e,"static/chunks/pages/resources/qbx_core/modules/lib/server-711733749c7ba2e6.js"],"/resources/qbx_core/modules/lib/shared":[e,"static/chunks/pages/resources/qbx_core/modules/lib/shared-bdcddc5189249c1b.js"],"/resources/qbx_core/modules/logger":[e,"static/chunks/pages/resources/qbx_core/modules/logger-28e164f208313e28.js"],"/resources/qbx_core/modules/playerdata":[e,"static/chunks/pages/resources/qbx_core/modules/playerdata-2fd12834ff2ec683.js"],"/resources/qbx_core/types/gang":[e,"static/chunks/pages/resources/qbx_core/types/gang-68774d058bd737d6.js"],"/resources/qbx_core/types/gang_data":[e,"static/chunks/pages/resources/qbx_core/types/gang_data-408e93d127d78e1b.js"],"/resources/qbx_core/types/gang_grade_data":[e,"static/chunks/pages/resources/qbx_core/types/gang_grade_data-09c4c4ce3ebeb63b.js"],"/resources/qbx_core/types/job":[e,"static/chunks/pages/resources/qbx_core/types/job-eafa13f5bf868a75.js"],"/resources/qbx_core/types/job_data":[e,"static/chunks/pages/resources/qbx_core/types/job_data-07be64daa6abbb8c.js"],"/resources/qbx_core/types/job_grade_data":[e,"static/chunks/pages/resources/qbx_core/types/job_grade_data-eb6631647a4833a9.js"],"/resources/qbx_core/types/player":[e,"static/chunks/pages/resources/qbx_core/types/player-0104f3cb005a6e55.js"],"/resources/qbx_core/types/player_data":[e,"static/chunks/pages/resources/qbx_core/types/player_data-0721acae6e0f0bf4.js"],"/resources/qbx_core/types/player_entity":[e,"static/chunks/pages/resources/qbx_core/types/player_entity-575fb9847c81f349.js"],"/resources/qbx_core/types/vehicle":[e,"static/chunks/pages/resources/qbx_core/types/vehicle-2dabb36084b84ae8.js"],"/resources/qbx_core/types/weapon":[e,"static/chunks/pages/resources/qbx_core/types/weapon-26485f31bd1a1fac.js"],"/resources/qbx_divegear":[e,"static/chunks/pages/resources/qbx_divegear-9264d29258c7f196.js"],"/resources/qbx_diving":[e,"static/chunks/pages/resources/qbx_diving-43db3ec40154ef13.js"],"/resources/qbx_diving/events/server":[e,"static/chunks/pages/resources/qbx_diving/events/server-7f4d065329f9833c.js"],"/resources/qbx_garages":[e,"static/chunks/pages/resources/qbx_garages-39e1b9c779a47697.js"],"/resources/qbx_garages/callbacks/client":[e,"static/chunks/pages/resources/qbx_garages/callbacks/client-39ff3e4a7f029d94.js"],"/resources/qbx_garages/exports/server":[e,"static/chunks/pages/resources/qbx_garages/exports/server-2a7711270e01f7be.js"],"/resources/qbx_loading":[e,"static/chunks/pages/resources/qbx_loading-a4c8d477b783b49a.js"],"/resources/qbx_management":[e,"static/chunks/pages/resources/qbx_management-8b4f66c274f9cc02.js"],"/resources/qbx_management/exports/client":[e,"static/chunks/pages/resources/qbx_management/exports/client-bacca68117563e6c.js"],"/resources/qbx_management/exports/server":[e,"static/chunks/pages/resources/qbx_management/exports/server-2caeaa96a6dd25df.js"],"/resources/qbx_radio":[e,"static/chunks/pages/resources/qbx_radio-0bff8d02af835224.js"],"/resources/qbx_smallresources":[e,"static/chunks/pages/resources/qbx_smallresources-8961f989eba00c59.js"],"/resources/qbx_truckrobbery":[e,"static/chunks/pages/resources/qbx_truckrobbery-3de993670e5ade0b.js"],"/resources/qbx_vehicles":[e,"static/chunks/pages/resources/qbx_vehicles-f14c6cf787635485.js"],"/resources/qbx_vehicles/exports/hooks":[e,"static/chunks/pages/resources/qbx_vehicles/exports/hooks-14c653175a6d92e9.js"],"/resources/qbx_vehicles/exports/server":[e,"static/chunks/pages/resources/qbx_vehicles/exports/server-18bdb645c185285a.js"],sortedPages:["/","/_app","/_error","/contributors","/converting","/developers","/faq","/installation","/release","/resources/qbx_binoculars","/resources/qbx_core","/resources/qbx_core/convars","/resources/qbx_core/events/client","/resources/qbx_core/events/server","/resources/qbx_core/exports/client","/resources/qbx_core/exports/server","/resources/qbx_core/exports/shared","/resources/qbx_core/modules/hooks","/resources/qbx_core/modules/lib","/resources/qbx_core/modules/lib/client","/resources/qbx_core/modules/lib/server","/resources/qbx_core/modules/lib/shared","/resources/qbx_core/modules/logger","/resources/qbx_core/modules/playerdata","/resources/qbx_core/types/gang","/resources/qbx_core/types/gang_data","/resources/qbx_core/types/gang_grade_data","/resources/qbx_core/types/job","/resources/qbx_core/types/job_data","/resources/qbx_core/types/job_grade_data","/resources/qbx_core/types/player","/resources/qbx_core/types/player_data","/resources/qbx_core/types/player_entity","/resources/qbx_core/types/vehicle","/resources/qbx_core/types/weapon","/resources/qbx_divegear","/resources/qbx_diving","/resources/qbx_diving/events/server","/resources/qbx_garages","/resources/qbx_garages/callbacks/client","/resources/qbx_garages/exports/server","/resources/qbx_loading","/resources/qbx_management","/resources/qbx_management/exports/client","/resources/qbx_management/exports/server","/resources/qbx_radio","/resources/qbx_smallresources","/resources/qbx_truckrobbery","/resources/qbx_vehicles","/resources/qbx_vehicles/exports/hooks","/resources/qbx_vehicles/exports/server"]}}("static/chunks/6318-662b6eff49e53555.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(e){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[e,"static/chunks/pages/index-c1aed278594e16cf.js"],"/_error":["static/chunks/pages/_error-457ff524116f8d3d.js"],"/contributors":[e,"static/chunks/pages/contributors-4e18d92a8682ae5b.js"],"/converting":[e,"static/chunks/pages/converting-5a6b2861db4b3533.js"],"/developers":[e,"static/chunks/pages/developers-5ab772c9952aa1d7.js"],"/faq":[e,"static/chunks/pages/faq-be31d678f7fb3e88.js"],"/installation":[e,"static/chunks/pages/installation-875fe5259d52a43f.js"],"/release":[e,"static/chunks/pages/release-89607550b757371d.js"],"/resources/qbx_binoculars":[e,"static/chunks/pages/resources/qbx_binoculars-1c65752814a93c61.js"],"/resources/qbx_core":[e,"static/chunks/pages/resources/qbx_core-5942c0bd0f7912a5.js"],"/resources/qbx_core/convars":[e,"static/chunks/pages/resources/qbx_core/convars-bc7fbab11ee7d679.js"],"/resources/qbx_core/events/client":[e,"static/chunks/pages/resources/qbx_core/events/client-4bd1db6ede006859.js"],"/resources/qbx_core/events/server":[e,"static/chunks/pages/resources/qbx_core/events/server-e3978e1820c692cf.js"],"/resources/qbx_core/exports/client":[e,"static/chunks/pages/resources/qbx_core/exports/client-b215ca183c066d20.js"],"/resources/qbx_core/exports/server":[e,"static/chunks/pages/resources/qbx_core/exports/server-778f9cf132798371.js"],"/resources/qbx_core/exports/shared":[e,"static/chunks/pages/resources/qbx_core/exports/shared-67e5ce23b2e6c7ce.js"],"/resources/qbx_core/modules/hooks":[e,"static/chunks/pages/resources/qbx_core/modules/hooks-30f2bbbac65aa805.js"],"/resources/qbx_core/modules/lib":[e,"static/chunks/pages/resources/qbx_core/modules/lib-90d5c63cdcd9da72.js"],"/resources/qbx_core/modules/lib/client":[e,"static/chunks/pages/resources/qbx_core/modules/lib/client-023fc7cb442d5de8.js"],"/resources/qbx_core/modules/lib/server":[e,"static/chunks/pages/resources/qbx_core/modules/lib/server-711733749c7ba2e6.js"],"/resources/qbx_core/modules/lib/shared":[e,"static/chunks/pages/resources/qbx_core/modules/lib/shared-42c86e901f723778.js"],"/resources/qbx_core/modules/logger":[e,"static/chunks/pages/resources/qbx_core/modules/logger-28e164f208313e28.js"],"/resources/qbx_core/modules/playerdata":[e,"static/chunks/pages/resources/qbx_core/modules/playerdata-2fd12834ff2ec683.js"],"/resources/qbx_core/types/gang":[e,"static/chunks/pages/resources/qbx_core/types/gang-68774d058bd737d6.js"],"/resources/qbx_core/types/gang_data":[e,"static/chunks/pages/resources/qbx_core/types/gang_data-408e93d127d78e1b.js"],"/resources/qbx_core/types/gang_grade_data":[e,"static/chunks/pages/resources/qbx_core/types/gang_grade_data-09c4c4ce3ebeb63b.js"],"/resources/qbx_core/types/job":[e,"static/chunks/pages/resources/qbx_core/types/job-eafa13f5bf868a75.js"],"/resources/qbx_core/types/job_data":[e,"static/chunks/pages/resources/qbx_core/types/job_data-07be64daa6abbb8c.js"],"/resources/qbx_core/types/job_grade_data":[e,"static/chunks/pages/resources/qbx_core/types/job_grade_data-eb6631647a4833a9.js"],"/resources/qbx_core/types/player":[e,"static/chunks/pages/resources/qbx_core/types/player-0104f3cb005a6e55.js"],"/resources/qbx_core/types/player_data":[e,"static/chunks/pages/resources/qbx_core/types/player_data-0721acae6e0f0bf4.js"],"/resources/qbx_core/types/player_entity":[e,"static/chunks/pages/resources/qbx_core/types/player_entity-575fb9847c81f349.js"],"/resources/qbx_core/types/vehicle":[e,"static/chunks/pages/resources/qbx_core/types/vehicle-2dabb36084b84ae8.js"],"/resources/qbx_core/types/weapon":[e,"static/chunks/pages/resources/qbx_core/types/weapon-26485f31bd1a1fac.js"],"/resources/qbx_divegear":[e,"static/chunks/pages/resources/qbx_divegear-9264d29258c7f196.js"],"/resources/qbx_diving":[e,"static/chunks/pages/resources/qbx_diving-43db3ec40154ef13.js"],"/resources/qbx_diving/events/server":[e,"static/chunks/pages/resources/qbx_diving/events/server-7f4d065329f9833c.js"],"/resources/qbx_garages":[e,"static/chunks/pages/resources/qbx_garages-39e1b9c779a47697.js"],"/resources/qbx_garages/callbacks/client":[e,"static/chunks/pages/resources/qbx_garages/callbacks/client-39ff3e4a7f029d94.js"],"/resources/qbx_garages/exports/server":[e,"static/chunks/pages/resources/qbx_garages/exports/server-2a7711270e01f7be.js"],"/resources/qbx_loading":[e,"static/chunks/pages/resources/qbx_loading-a4c8d477b783b49a.js"],"/resources/qbx_management":[e,"static/chunks/pages/resources/qbx_management-8b4f66c274f9cc02.js"],"/resources/qbx_management/exports/client":[e,"static/chunks/pages/resources/qbx_management/exports/client-bacca68117563e6c.js"],"/resources/qbx_management/exports/server":[e,"static/chunks/pages/resources/qbx_management/exports/server-2caeaa96a6dd25df.js"],"/resources/qbx_radio":[e,"static/chunks/pages/resources/qbx_radio-0bff8d02af835224.js"],"/resources/qbx_smallresources":[e,"static/chunks/pages/resources/qbx_smallresources-8961f989eba00c59.js"],"/resources/qbx_truckrobbery":[e,"static/chunks/pages/resources/qbx_truckrobbery-3de993670e5ade0b.js"],"/resources/qbx_vehicles":[e,"static/chunks/pages/resources/qbx_vehicles-f14c6cf787635485.js"],"/resources/qbx_vehicles/exports/hooks":[e,"static/chunks/pages/resources/qbx_vehicles/exports/hooks-14c653175a6d92e9.js"],"/resources/qbx_vehicles/exports/server":[e,"static/chunks/pages/resources/qbx_vehicles/exports/server-18bdb645c185285a.js"],sortedPages:["/","/_app","/_error","/contributors","/converting","/developers","/faq","/installation","/release","/resources/qbx_binoculars","/resources/qbx_core","/resources/qbx_core/convars","/resources/qbx_core/events/client","/resources/qbx_core/events/server","/resources/qbx_core/exports/client","/resources/qbx_core/exports/server","/resources/qbx_core/exports/shared","/resources/qbx_core/modules/hooks","/resources/qbx_core/modules/lib","/resources/qbx_core/modules/lib/client","/resources/qbx_core/modules/lib/server","/resources/qbx_core/modules/lib/shared","/resources/qbx_core/modules/logger","/resources/qbx_core/modules/playerdata","/resources/qbx_core/types/gang","/resources/qbx_core/types/gang_data","/resources/qbx_core/types/gang_grade_data","/resources/qbx_core/types/job","/resources/qbx_core/types/job_data","/resources/qbx_core/types/job_grade_data","/resources/qbx_core/types/player","/resources/qbx_core/types/player_data","/resources/qbx_core/types/player_entity","/resources/qbx_core/types/vehicle","/resources/qbx_core/types/weapon","/resources/qbx_divegear","/resources/qbx_diving","/resources/qbx_diving/events/server","/resources/qbx_garages","/resources/qbx_garages/callbacks/client","/resources/qbx_garages/exports/server","/resources/qbx_loading","/resources/qbx_management","/resources/qbx_management/exports/client","/resources/qbx_management/exports/server","/resources/qbx_radio","/resources/qbx_smallresources","/resources/qbx_truckrobbery","/resources/qbx_vehicles","/resources/qbx_vehicles/exports/hooks","/resources/qbx_vehicles/exports/server"]}}("static/chunks/6318-662b6eff49e53555.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/5iYgAfXyCfDX6UOWjnZp5/_ssgManifest.js b/_next/static/6EuBz8w5ST-6dXzjAUojg/_ssgManifest.js similarity index 100% rename from _next/static/5iYgAfXyCfDX6UOWjnZp5/_ssgManifest.js rename to _next/static/6EuBz8w5ST-6dXzjAUojg/_ssgManifest.js diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json index 1131917..31058d8 100644 --- a/_next/static/chunks/nextra-data-en-US.json +++ b/_next/static/chunks/nextra-data-en-US.json @@ -1 +1 @@ -{"/contributors":{"title":"Contributing to Qbox","data":{"":"Thank you for taking the time to contribute!These guidelines will help you help us in the best way possible regardless of your skill level. We ask that you try to read everything related to the way you'd like to contribute and try and use your best judgement for anything not covered.Make sure to also read our Contributor Code of Conduct.If you still have further questions after reading be sure to join the Qbox Discord server.","issues#Issues":"Open a new issue to report a bug or request a new feature or improvement.If you want to ask a question, issues are not the place to do so. Please join our Discord server and ask over there instead.Before opening a new issue:\nSearch for existing issues; maybe someone else already experienced the same problem that you're having! Duplicate issues will be closed.\nDownload the latest release of the resource you are opening the issue for to make sure that it wasn't already fixed. Issues that are already fixed are considered invalid and will be closed.\nWhen opening a new issue, make sure to pick the right type of form and fill it out. The more information you provide, the easier it will be for us to work on your new issue. Issues that are invalid or do not follow the correct form may be ignored or even closed.","pull-requests#Pull Requests":"Open a new pull request to contribute code.You can use your own editor of choice, but we recommend using VSCode with these extensions:\nGitLens\nLua Language Server\nEditorConfig\nCfxLua IntelliSense\nIf you are new to contributing code, you can check out and try to fix issues marked with good first issue.If you want to contribute code but don't know what to do, please check out issues marked with help wanted as those are issues that we actually need help with.If you want to contribute code unrelated to an existing issue, you should open an issue yourself or ask over on the Discord server to discuss it with our team and ask whether your change is wanted, especially if you are planning on adding new features or large designs.Before opening a pull request:\nMake sure that your contribution fits our code conventions described below. After opening a pull request your code will be checked according to them.\nMake sure that your pull request is small and focused. Break it into multiple smaller pull requests if not (see Small Pull Request Manifesto).\nIt is recommended to test your changes to make sure they work and don't break existing functionality.\nWhen opening a pull request, make sure to follow the template and explain your changes. If you are trying to contribute something related to a GitHub issue, make sure to mention it as well.","code-conventions#Code Conventions":"Below are conventions that you must follow when contributing code.","commit-message-conventions#Commit Message Conventions":"The first line of a commit message must be 72 characters at most.\nCommit messages and pull request titles must follow Conventional Commits.\nUse fix: when patching a bug.\nUse feat: when introducing a new feature.\nUse refactor: when altering code without changing functionality.\nUse chore: when your changes don't alter production code.\nAppend a ! after the type/scope of the feature when you change code and introduce a breaking API change. Optionally add a footer to the bottom of your commit message separated by 2 newlines, starting with BREAKING CHANGE:, and explaining the breaking change.","lua-conventions#Lua Conventions":"","general-style#General Style":"Use 4 space indentation.\nPrefer creating local variables over global ones.\nDon't repeat yourself. If you're using the same operations in multiple different places convert them into a flexible function.\nExported functions must be properly annotated (see LuaLS Annotations).\nUtilize ox_lib to make your life easier. Prefer lib calls over native ones.\nMake use of config options where it makes sense to make features optional and/or customizable. Configs should not be modified by other code.","optimization--security#Optimization & Security":"Consider this Lua Performance guide.\nDon't create unnecessary threads. Always try to find a better method of triggering events.\nSet longer Wait calls in distance checking loops when the player is out of range.\nDon't waste cycles; job specific loops should only run for players with that job.\nWhen possible don't trust the client, especially with transactions.\nBalance security and optimizations.\nUse #(vector3 - vector3) instead of GetDistanceBetweenCoords().\nUse myTable[#myTable + 1] = 'value' instead of table.insert(myTable, 'value').\nUse myTable['key'] = 'value' instead of table.insert(myTable, 'key', 'value').","naming#Naming":"Use camelCase for local variables and functions.\nUse PascalCase for global variables and functions.\nAvoid acronyms as they can be confusing and context dependant.\nBe descriptive; make it easy for the reader.\nBooleans may be prefixed with is, has, are, etc.\nArrays should have plural names.","javascripttypescript-conventions#JavaScript/TypeScript Conventions":"Consider following the Google JavaScript Style Guide and the Google TypeScript Style Guide."}},"/converting":{"title":"Converting from QBCore","data":{"check-your-job-grades-in-qbx_coresharedjobslua#Check your job grades in qbx_core/shared/jobs.lua.":"In Qbox, job grades are numbers without quotations, whereas in QBCore they are strings.","configure-ox_inventory-and-convert-your-database#Configure ox_inventory and convert your database.":"Back it up first! (see ox_inventory documentation)","qbox-has-multicharacter-built-into-qbx_core#Qbox has multicharacter built into qbx_core.":"If you want to keep using your own multicharacter resource, configure qbx_core accordingly.\nOtherwise you can disable or delete your old multicharacter resource.","qbox-has-a-queue-system-built-into-qbx_core#Qbox has a queue system built into qbx_core.":"If you want to keep using your own queue system, specify set qbx:enablequeue \"false\" inside your cfg file.\nOtherwise you can disable or delete your old queue system.","run-the-sql-file-provided-with-qbx_core#Run the SQL file provided with qbx_core":"This will alter the players table in the following ways:\nAdd to the players table to add the new column last_logged_out\nChange the collation of players.citizenid column to utf8mb4_unicode_ci\nNote: You may need to manually change the collation of other tables' citizenid column if you get an error that a foreign key constraint was violated.","configure-multijobmultigang#Configure multijob/multigang":"Qbox has a multijob/gang system built into core that cannot be disabled. By default, players may only be in one job & gang. This can be overriden by setting qbx:max_jobs_per_player and qbx:max_gangs_per_player in server.cfg.\nDo not use an external multijob/gang resource that isn't guaranteed by the developer to be Qbox compatible.\nUsing incompatible multijobs or resources which modify core's database tables may lead to data corruption. First, double check that the player.citizenid column in your database has collation utf8mb4_unicode_ci. If not, change it.\nThen, run qbx_core.sql to create the new player_groups table. Start the server and type convertjobs into the txAdmin console once the server is running to populate the player_groups table.\nThis needs to be done even if you don't already have a multijob/gang system.","migrating-a-resource-from-qbcore-to-qbox#Migrating a resource from QBCore to Qbox":"This is optional as Qbox has 99% compatibility with existing QB scripts\nWithin Qbox, the core object no longer exists.\nInstead, the data can be accessed via a combination of export functions and imported modules.\nImport the needed modules from qbx_core to supply replacement functions for ones from QBCore;\nReplace calls to QBCore one by one with calls to the imported modules and exported functions. Both can be used at the same time, so conversion can be done partially, or over time.","common-replacements#Common replacements":"QBCore.Functions. -> exports.qbx_core:\nQBCore.Functions.GetPlayerData() -> QBX.PlayerData -- requires importing the playerdata module\nQBCore.Functions.GetPlate(vehicle) -> qbx.getVehiclePlate(vehicle) -- requires importing the lib module\nQBCore.Shared.Jobs -> exports.qbx_core:GetJobs()\nQBCore.Shared.Gangs -> exports.qbx_core:GetGangs()\nQBCore.Shared.Vehicles -> exports.qbx_core:GetVehiclesByName()\nQBCore.Shared.Weapons -> exports.qbx_core:GetWeapons()\nQBCore.Shared.Locations -> exports.qbx_core:GetLocations()\nQBCore.Shared.Items -> exports.ox_inventory:Items()\nexports['qb-core']:KeyPressed() -> lib.hideTextUI()\nexports['qb-core']:HideText() -> lib.hideTextUI()\nexports['qb-core']:DrawText(text, position) -> lib.showTextUI(text, { position = position })\nexports['qb-core']:ChangeText(text, position) -> lib.hideTextUI() lib.showTextUI(text, { position = position })"}},"/developers":{"title":"Developer's Guide","data":{"":"This guide is intended for those creating scripts using qbx_core.\nFollowing these principles will make it less likely for your script to break in future updates.","do-not-access-database-tables-owned-by-core#Do not access database tables owned by core":"Doing this will break your script if the database schema changes in the future.\nIf the data you need can't be read or written using a qbx_core/qbx_vehicles export,\ncreate a GitHub issue so we can rectify the problem for everyone.","do-not-modify-core-code#Do not modify core code":"Doing this will make it difficult for you to update in the future, and create confusion when debugging issues that may or may not be due to your custom changes.We've attempted to design things with flexibility in mind. \nHowever, if you really feel you need to modify core, file a GitHub issue first.\nWe'll see if we can trigger an event for you, surface a config value, or re-design something for the flexibility you need.","do-not-use-deprecated-functionsevents#Do not use deprecated functions/events":"These are likely to be removed in future updates.","set-statebag-when-spawning-an-owned-vehicle#Set statebag when spawning an owned vehicle":"When spawning a vehicle that is owned by a player, the vehicle's vehicleid statebag should be set to the id from the player_vehicles table. This allows other resources to look up info about the vehicle in the database using a stable identifier","to-set-vehicle-properties-when-spawning-a-vehicle-pass-the-properties-into-the-spawnvehicle-function#To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function":"Do not manually set the properties after the vehicle exists. This is an anti-pattern and may cause issues if the client is not the entity owner.","do-not-rely-on-unversionedunreleased-resources#Do not rely on unversioned/unreleased resources":"We make no guarantees about rapid breaking changes in these resources. They are not stable."}},"/faq":{"title":"Frequently Asked Questions","data":{"what-are-the-differences-between-qbcore-and-qbox#What are the differences between QBCore and Qbox?":"While originally forked from QBCore, many Qbox resources have been refactored to improve code quality, enhance security, lower performance overhead, and integrate with overextended resources.\nWhere appropriate Qbox also integrates directly with other open source projects, rather than maintaining subpar resources in-house.Qbox maintains high quality standards, with a strong community of regular contributors.\nAs time goes on, expect greater differences in player facing features.","will-my-qbcore-scripts-work-with-qbox#Will my QBCore scripts work with Qbox?":"TL;DR: Yes (in most cases).We've created a bridge layer for backwards compatibility with the documented and proper ways of using qb-core,\nand you can continue to use most QBCore scripts without any modifications.An exception to this is resources that use qb-core in undocumented, unsupported, invalid, and/or improper ways, such as:\nDirect access to database tables;\nDirect access to qb-core files that aren't meant to be used by other resources;\nInvalid usages of existing functions;\nAnd other unexpected ways not mentioned here.","who-should-use-qbox#Who should use Qbox?":"Servers currently using QBCore and servers interested in running QBCore in the future.","is-qbox-ready-to-use#Is Qbox ready to use?":"Since qbx_core is backwards compatible with qb-core resources, we recommend using only the released Qbox resources for a stable experience.","which-resources-are-ready-to-use#Which resources are ready to use?":"qbx_core\nqbx_divegear\nqbx_diving\nqbx_binoculars\nqbx_management\nqbx_radio\nqbx_truckrobbery\nqbx_vehicles\nqbx_garages\nqbx_loading\nqbx_smallresources","are-multijob-resources-compatible-with-qbox#Are multijob resources compatible with Qbox?":"They can be, but only if calling qbx_core exports to add/modify/remove player's jobs.\nThe two common issues with multijob resources are:\nDirectly accessing Qbox's database tables\nMaintaining Qbox's core data in a resource's own table","do-i-need-to-convert-my-resources-to-qbox-to-make-them-work#Do I need to convert my resources to Qbox to make them work?":"No, the bridge layer handles the compatibility for resources expecting QBCore style exports and events. Converting resources only helps to improve readability and reduce the memory footprint","common-problems-and-questions#Common Problems and Questions":"","no-such-export-getcoreobject-in-resource-qbx_core#No such export GetCoreObject in resource qbx_core":"Qbox does not have the core object. However, you can continue to use exports['qb-core']:GetCoreObject() to get a core object from Qbox's QB bridge layer.","warn-this-resource-is-still-using-the-deprecated-qbx_core-utils#[WARN] This resource is still using the deprecated qbx_core utils!":"If you are receiving this warning then please download the latest release/commit for that resource. With the exception of archived resources this dependency has been resolved.","can-i-use-my-own-multicharacter#Can I use my own multicharacter?":"Yes, you can. To disable the built in multicharacter change this setting to true in qbx_core/config/client.lua\n useExternalCharacters = false, -- Whether you have an external character management resource. (If true, disables the character management inside the core)","can-i-use-my-own-notification-system#Can I use my own notification system?":"Yes, you can but you will need to modify ox_lib to pass the event to your notification system.","vehicle-model-names-starting-with-a-number#Vehicle model names starting with a number":"When using vehicle names that start with a number you need to enclose them in square brackets like this\n ['5vigero'] =","keybind-changes-do-not-work#Keybind changes do not work":"Changing keybinds via convars or configuration files will not change them for clients that have already connected to the server. You need to clear your binds manually in order them to reset to the defaults","txadmin-installation-task-failed-response-code-403-rate-limit-exceeded#txAdmin Installation: Task Failed: Response code 403 (rate limit exceeded)":"This is due to Github rate limits which is outside our control. You can keep trying or change your IP address","script-error-failed-to-load-model#SCRIPT ERROR: failed to load model":"This is likely due to a low performance PC. If the error is qbx_core you can adjust the timeout in qbx_core/config/client.lua under loadingModelsTimeout","do-i-need-to-add-items-to-qbx_coreshareditemslua-and-ox_inventory#Do I need to add items to qbx_core/shared/items.lua and ox_inventory?":"No you don't need to add items there unless they are being accessed in a resource via the bridge such as a script that is not ox_inventory compatible. Items added here will be automatically added to ox_inventory but you will have to manually add things like client/server exports in the ox_inventory/data/items.lua","error-sql-cant-create-table-xyz-foreign-key-constraint-is-incorrectly-formed#Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)":"This is due to a mismatch of collation types between the table being created and existing tables. Add the following to the end of the CREATE TABLE parts of the sql you are trying to add and that should fix the issue. You may need to drop the table and readd it for the changes to apply\nDEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"}},"/":{"title":"Introduction","data":{"":"Qbox is a FiveM roleplay framework created on September 27, 2022.Starting as a QBCore fork, its goal was improving upon QBCore while maintaining backwards compatibility. \nToday this framework strives to be much greater, and utilizes overextended's resources to achieve its goals.","support--questions#Support & Questions":"Support for Qbox is provided by the community in the support channels of the Qbox Discord.Luckily, Qbox benefits from a great community with varied experience.\nWe encourage everyone to help each other in a friendly and respectable manner.","converting-from-qbcore#Converting from QBCore":"Already have a server that uses QBCore? No worries!\nQbox has backwards-compatibility for almost all QBCore scripts, with a few exceptions (learn more in the FAQ).Planning on converting to Qbox anyway to be able to utilize its new and modern functions and features?\nLearn how to convert your resources to Qbox in Converting from QBCore.","note-for-developers#Note for Developers":"Planning on utilizing qbx_core in your next resource?\nMake sure to read the Developer's Guide to learn about principles that make you avoid bad practices and help you in having a better developer expetience.","contributing-to-qbox#Contributing to Qbox":"Contributions are always welcome, but we prefer quality over quantity!\nPlease read our contributing guidelines to learn how best to contribute.","frequently-asked-questions#Frequently Asked Questions":"Check out the FAQ to learn more about Qbox."}},"/release":{"title":"Release Readiness","data":{"":"Guidelines for indicating that a resource is stable and ready for release.","code-quality#Code Quality":"No lint errors are present.\nAll print statements are replaced with lib.print.\nox_lib is used to replace natives where possible.\nCode uses best practices and follows the contribution guidelines.\nCode is readable and well organized.\nNo deprecated functions are being invoked.","database-practices#Database Practices":"Does not read directly from tables it does not own, and uses exports and functions from the owning resources to get the data instead.\nHas direct database calls to tables it does own in a designated storage layer of the resource (see server/storage.lua in qbx_core).","config-practices#Config Practices":"Config is located inside of a config folder and is split between client.lua, shared.lua, server.lua, and optionally more. Each of these are a module (i.e. returns a table).","core-practices#Core Practices":"Client PlayerData is accessed using playerdata module, instead of a qbx_core export.\nLib module is used to replace duplicate code like DrawText.","resource-quality#Resource Quality":"Resource features provide a good experience for players/devs/owners/admins.\nResource is scoped appropriately (i.e. it shouldn't be split, or combined with another resource).\nREADME is not outdated.\nNo known bugs.","stability#Stability":"No breaking changes are planned in the near future.\nResource has been tested or unchanged for long enough to give confidence that major bugs are not present.","dependencies#Dependencies":"Dependencies are declared and enforced using lib.checkDependency. fxmanifest dependencies should be used intentionally; understanding the behavior of restarting a resource.\nDependencies are stable.","release-automation--documentation#Release Automation & Documentation":"The first line of code executed by the server is lib.versionCheck.\nThe resource has a .github folder with bug/suggestion templates, automated version updater & release script.\nThe resource has a README which contains marketing material about the resource and it's features. Note that this is not technical documentation.\nThe resource's public API (events & exports) are documented on the technical docs (here)."}},"/resources/qbx_binoculars":{"title":"qbx_binoculars","data":{}},"/resources/qbx_core":{"title":"qbx_core","data":{}},"/resources/qbx_core/convars":{"title":"Convars","data":{"":"Below is a list of convars used within qbx_core.\nThe value shown in the example is the default value for each convar.","qbxenablebridge#qbx:enablebridge":"Enables or disables the qb-core bridge for compatibility with QBCore resources.\nsetr qbx:enablebridge true\nType: boolean","qbxdiscordlink#qbx:discordlink":"Sets the Discord link for kick messages.\nThis convar is only used by the qb-core bridge, and the deprecated utils module.\nset qbx:discordlink 'discord.gg/qbox'\nType: string","qbxbucketlockdownmode#qbx:bucketlockdownmode":"Sets entity lockdown mode for bucket 0.\nSee SET_ROUTING_BUCKET_ENTITY_LOCKDOWN_MODE for more information.\nset qbx:bucketlockdownmode inactive\nType: 'inactive' | 'relaxed' | 'strict'","qbxmax_jobs_per_player#qbx:max_jobs_per_player":"Sets the maximum number of jobs a player can have with the built-in multijob.\nset qbx:max_jobs_per_player 1\nType: integer","qbxmax_gangs_per_player#qbx:max_gangs_per_player":"Sets the maximum number of gangs a player can have with the built-in multigang.\nset qbx:max_gangs_per_player 1\nType: integer","qbxsetjob_replaces#qbx:setjob_replaces":"Controls if the /setjob command replaces or adds a job to a player.\nset qbx:setjob_replaces true\nType: boolean","qbxsetgang_replaces#qbx:setgang_replaces":"Controls if the /setgang command replaces or adds a gang to a player.\nset qbx:setgang_replaces true\nType: boolean","qbxenablequeue#qbx:enablequeue":"Enables or disables the built-in qbx_core queuing system.\nset qbx:enablequeue true\nType: boolean","qbxcleanplayergroups#qbx:cleanPlayerGroups":"Controls if the player_groups SQL table is automatically cleaned of invalid groups (jobs/gangs) on startup.\nset qbx:cleanPlayerGroups true\nType: boolean","qbxallowmethodoverrides#qbx:allowmethodoverrides":"Enables or disables the ability of resources to override existing methods in player object.\nset qbx:allowmethodoverrides true\nType: boolean","qbxdisableoverridewarning#qbx:disableoverridewarning":"Enables or disables warning from resources overriding existing methods in player object.\nset qbx:disableoverridewarning true\nType: boolean","qbxqbxenablevehiclepersistence#qbx:qbx:enableVehiclePersistence":"When enabled, player owned vehicles deleted by the server which have persistence enabled on them (either via having spawned using qbx.spawnVehicle or through exports.qbx_core:EnablePersistence), will be respawned with the same properties as when the vehicle was deleted.\nThis is a fix to a FiveM bug which can result in vehicles randomly being deleted; ensuring that vehicles that players leave, will be there when they return.\nsetr qbx:enableVehiclePersistence\nType: boolean"}},"/resources/qbx_core/events/client":{"title":"Client Events","data":{"":"These events MUST NOT be triggered by any other scripts.\nSome of these events use custom types.\nYou can learn more about those in the Types section of this resource.","non-networked-events#Non-Networked Events":"","qbcoreclientonplayerloaded#QBCore:Client:OnPlayerLoaded":"Triggered when the player finishes spawning.\nAddEventHandler('QBCore:Client:OnPlayerLoaded', function() end)","networked-events#Networked Events":"","qbcoreclientsetduty#QBCore:Client:SetDuty":"Triggered when the player's job duty is updated.\nRegisterNetEvent('QBCore:Client:SetDuty', function(onDuty) end)\nonDuty: boolean","qbcoreclientonpermissionupdate#QBCore:Client:OnPermissionUpdate":"Triggered when the player's permissions are updated. \nOnly works for permissions set via Qbox.\nRegisterNetEvent('QBCore:Client:OnPermissionUpdate', function() end)","qbx_coreclientplayerloggedout#qbx_core:client:playerLoggedOut":"Triggered when the player logs out and no longer exists in qbx_core's memory.\nRegisterNetEvent('qbx_core:client:playerLoggedOut', function() end)","qbcoreclientonjobupdate#QBCore:Client:OnJobUpdate":"Triggered when the player's job is updated.\nRegisterNetEvent('QBCore:Client:OnJobUpdate', function(job) end)\njob: Job","qbcoreclientongangupdate#QBCore:Client:OnGangUpdate":"Triggered when the player's gang is updated.\nRegisterNetEvent('QBCore:Client:OnGangUpdate', function(gang) end)\ngang: Gang","qbx_coreclientongroupupdate#qbx_core:client:onGroupUpdate":"Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added\nRegisterNetEvent('qbx_core:client:onGroupUpdate', function(groupName, groupGrade) end)\ngroupName: string\ngroupGrade: number?","qbcoreclientonmoneychange#QBCore:Client:OnMoneyChange":"Triggered when the player's cash/bank balance is updated.\nRegisterNetEvent('QBCore:Client:OnMoneyChange', function(moneytype, amount, operation, reason) end)\nmoneyType: 'cash' | 'bank' | 'crypto'\namount: number\noperation: 'add' | 'remove' | 'set'\nreason: string","qbx_coreclientonsetmetadata#qbx_core:client:onSetMetaData":"Triggered when player.Functions.setMetaData() is used.\nRegisterNetEvent('qbx_core:client:onSetMetaData', function(key, oldValue, newValue) end)\nkey: string\noldValue: any\nnewValue: any"}},"/resources/qbx_core/events/server":{"title":"Server Events","data":{"":"These events MUST NOT be triggered by any other scripts.\nSome of these events use custom types.\nYou can learn more about those in the Types section of this resource.","non-networked-events#Non-Networked Events":"","qbcoreserveronplayerunload#QBCore:Server:OnPlayerUnload":"Triggered when aplayer begins the process of logging out. \nThere is no guarantee that the player still exists in qbx_core's memory at the time this event is triggered.\nAddEventHandler('QBCore:Server:OnPlayerUnload', function(source) end)\nsource: integer","qbcoreserveronpermissionupdate#QBCore:Server:OnPermissionUpdate":"Triggered when the player's permissions are updated. \nOnly applies to permissions created through QB permission functions.\nAddEventHandler('QBCore:Server:OnPermissionUpdate', function(source) end)\nsource: integer","qbcoreserveronjobupdate#QBCore:Server:OnJobUpdate":"Triggered when a player's job updates.\nAddEventHandler('QBCore:Server:OnJobUpdate', function(source, job) end)\nsource: integer\njob: Job","qbcoreserverongangupdate#QBCore:Server:OnGangUpdate":"Triggered when a player's gang updates.\nAddEventHandler('QBCore:Server:OnGangUpdate', function(source, gang) end)\nsource: integer\ngang: Gang","qbcoreserversetduty#QBCore:Server:SetDuty":"Triggered when a player's job duty updates.\nAddEventHandler('QBCore:Server:SetDuty', function(source, onDuty) end)\nsource: integer\nonDuty: boolean","qbx_coreserverongroupupdate#qbx_core:server:onGroupUpdate":"Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added\nAddEventHandler('qbx_core:server:onGroupUpdate', function(source, groupName, groupGrade) end)\nsource: integer\ngroupName: string\ngroupGrade: number?","qbcoreserveronmoneychange#QBCore:Server:OnMoneyChange":"Triggered when a player's cash/bank balance updates.\nAddEventHandler('QBCore:Server:OnMoneyChange', function(source, moneyType, amount, operation, reason) end)\nsource: integer\nmoneyType: 'cash' | 'bank' | 'crypto'\namount: number\noperation: 'add' | 'remove' | 'set'\nreason: string","networked-events#Networked Events":"","qbcoreserveronplayerloaded#QBCore:Server:OnPlayerLoaded":"Triggered when a player has finished loading.\nRegisterNetEvent('QBCore:Server:OnPlayerLoaded', function() end)","qbx_coreserveronsetmetadata#qbx_core:server:onSetMetaData":"Triggered when player.Functions.setMetaData() is used.\nRegisterNetEvent('qbx_core:server:onSetMetaData', function(key, oldValue, newValue, source) end)\nkey: string\noldValue: any\nnewValue: any\nsource: number"}},"/resources/qbx_core/exports/client":{"title":"Client Exports","data":{"notify#Notify":"See lib.notify for more details.\nText box popup which disappears after a given amount of time.\nexports.qbx_core:Notify(text, notifyType, duration, subTitle, notifyPosition, notifyStyle, notifyIcon, notifyIconColor)\ntext: table | string\nThe text of the notification.\nCan be a string, or a table containing:\ntext?: string\ncaption?: string\nnotifyType?: 'inform' | 'error' | 'success' | 'warning'\nDefault: 'inform'\nduration?: integer\nThe duration in milliseconds for which the notification will remain on screen.\nDefault: 5000\nsubTitle?: string\nAdditional text under the title.\nnotifyPosition?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left' | 'center-right' | 'center-left'\nDefault: top-right (changable in config)\nnotifyStyle?: table\nCustom styling. Refer to lib.notify.\nnotifyIcon?: string\nFont Awesome 6 icon name.\nnotifyIconColor?: string\nCustom color for notifyIcon.","hasprimarygroup#HasPrimaryGroup":"Checks if the player's current Job/Gang or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasPrimaryGroup(filter)\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","hasgroup#HasGroup":"Checks if the player's list of groups (Jobs/Gangs) or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasGroup(filter)\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","getgroups#GetGroups":"Returns a combined table of all the groups the current player currently has.\nexports.qbx_core:GetGroups()\nReturns:\ngroups: table"}},"/resources/qbx_core/exports/shared":{"title":"Shared Exports","data":{"":"Some of these exports use custom types.\nYou can learn more about those in the Types section of this resource.","getjobs#GetJobs":"Returns the jobs table.\nexports.qbx_core:GetJobs()\nReturns: table","getgangs#GetGangs":"Returns the gangs table.\nexports.qbx_core:GetGangs()\nReturns: table","getjob#GetJob":"Returns the given job if it exists.\nexports.qbx_core:GetJob(jobName)\njobName: string\nReturns: Job?","getgang#GetGang":"Returns the given gang if it exists.\nexports.qbx_core:GetGang(gangName)\ngangName: string\nReturns: Gang?","getvehiclesbyname#GetVehiclesByName":"Returns a table mapping vehicle name to vehicle.\nexports.qbx_core:GetVehiclesByName()\nReturns: table","getvehiclesbyhash#GetVehiclesByHash":"Returns a table mapping vehicle hash to vehicle.\nexports.qbx_core:GetVehiclesByHash()\nReturns: table","getvehiclesbycategory#GetVehiclesByCategory":"Returns a table mapping vehicle category to vehicles.\nexports.qbx_core:GetVehiclesByCategory()\nReturns: table","getweapons#GetWeapons":"Returns the weapons table.\nexports.qbx_core:GetWeapons()\nReturns: table","getlocations#GetLocations":"Returns the locations table.\nexports.qbx_core:GetLocations()\nReturns: table"}},"/resources/qbx_core/modules/hooks":{"title":"hooks","data":{"":"Event hooks allow 3rd party resources to define new behaviour without modifying your resource directly.","registerhook#registerHook":"Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event\nexports.my_resource:registerHook(eventName, cb)\neventName: string\npayload: table\nReturn:\nhookId: number","removehooks#removeHooks":"Remove a previously registered hook by it's id.\nIf no id is provided then all hooks registered by the resource are removed.\nexports.my_resource:removeHooks(id)\nid?: number","usage#Usage":"An example hook setup in your resource\nlocal triggerEventHooks = require '@qbx_core.modules.hooks' -- Import triggerEventHooks function from hooks module\n-- Example of some sort of event that could be in your resource\nRegisterNetEvent('your_resource:server:check_condition', function(source)\n -- Checks to see if any registered hooks return false\n\tif not triggerEventHooks('checkCondition', {source = source, myNumber = 10}) then return end \n -- Do stuff\nend)\nNow a 3rd party resource can modify the behavior of your resource without having to change any of your code\nexports.qbx_core:registerHook('checkCondition', function(payload)\n -- payload contains everything passed into triggerEventHooks, which will depend on the resource to document\n if payload.myNumber == 10 then\n return true -- Continue as normal\n else\n return false -- Stop execution\n end\nend)"}},"/resources/qbx_core/modules/lib":{"title":"lib","data":{"":"Provides the qbx global table with various utility functions.","prerequisites#Prerequisites":"Lua 5.4 - add lua54 'yes' to your fxmanifest.\nox_lib - add @ox_lib/init.lua to shared_scripts in your fxmanifest.","installation#Installation":"Add @qbx_core/modules/lib.lua to shared_scripts in your fxmanifest. Make sure it's below the @ox_lib/init.lua script."}},"/resources/qbx_core/modules/lib/client":{"title":"Client Lib","data":{"drawtext2d#drawText2d":"Draws text onto the screen in 2D space for a single frame.\nqbx.drawText2d(params)\nparams: table\ntext: string\ncoords: vector2\nOn-screen coordinates.\nscale?: integer\nDefault: 0.35\nfont?: integer\nDefault: 4\ncolor?: vector4\nAn RGBA value; white by default.\nwidth?: number\nDefault: 1.0\nheight?: number\nDefault: 1.0","drawtext3d#drawText3d":"Draws text onto the screen in 3D space for a single frame.\nqbx.drawText3d(params)\nparams: table\ntext: string\ncoords: vector3\nIn-world coordinates.\nscale?: integer\nDefault: 0.35\nfont?: integer\nDefault: 4\ncolor?: vector4\nAn RGBA value; white by default.\ndisableDrawRect?: boolean\nDisables drawing a rectangle background for the text.","getentityandnetidfrombagname#getEntityAndNetIdFromBagName":"Gets and returns an entity handle and network id from a state bag name. \nWill return 0 for both if an invalid entity was received.\nqbx.getEntityAndNetIdFromBagName(bagName)\nbagName: string\nReturns:\nentity: integer\nnetId: integer","entitystatehandler#entityStateHandler":"Returns a state bag handler made for entities.\nqbx.entityStateHandler(keyFilter, cb)\nkeyFilter: string\ncb: fun(entity: number, netId: number, value: any, bagName: string)\nReturns: number","deletevehicle#deleteVehicle":"Deletes the specified vehicle and returns whether it was successful.\nqbx.deleteVehicle(vehicle)\nvehicle: integer\nReturns: boolean","getvehicledisplayname#getVehicleDisplayName":"Returns the model name of the given vehicle.\nqbx.getVehicleDisplayName(vehicle)\nvehicle: integer\nReturns: string","getvehiclemakename#getVehicleMakeName":"Returns the brand name of the given vehicle.\nqbx.getVehicleMakeName(vehicle)\nvehicle: integer\nReturns: string","getvehiclemodname#getVehicleModName":"Returns the mod type name of the given vehicle.\nqbx.getVehicleModName(vehicle, modType, modIndex)\nvehicle: integer\nmodType: integer\nmodIndex: integer\nReturns: string","getvehicleliveryname#getVehicleLiveryName":"Returns the livery name of the given vehicle.\nqbx.getVehicleLiveryName(vehicle, liveryIndex)\nvehicle: integer\nliveryIndex: integer\nReturns: string","getstreetname#getStreetName":"Returns the street name and cross section name at the given coords.\nqbx.getStreetName(coords)\ncoords: vector3\nReturns:\nstreetName: table\nmain: string\ncross: string","getzonename#getZoneName":"Returns the name of the zone at the given coords.\nqbx.getZoneName(coords)\ncoords: vector3\nReturns: string","setvehicleextra#setVehicleExtra":"Set an extra on the given vehicle.\nqbx.setVehicleExtra(vehicle, extra, enable)\nvehicle: integer\nextra: integer\nenable: boolean\nWhether to enable the extra.","resetvehicleextras#resetVehicleExtras":"Enables all the extras of the given vehicle.\nqbx.resetVehicleExtras(vehicle)\nvehicle: integer","setvehicleextras#setVehicleExtras":"Sets all the extras of the given vehicle.\nqbx.setVehicleExtra(vehicle, extras)\nvehicle: integer\nextras: table","iswearinggloves#isWearingGloves":"Returns if the local ped is wearing gloves.\nqbx.isWearingGloves()\nReturns: boolean","loadaudiobank#loadAudioBank":"Attempts to load an audio bank and returns whether it was successful. \nRemember to use ReleaseScriptAudioBank since you can only load up to 10 banks.\nqbx.loadAudioBank(audioBank, timeout)\naudioBank: string\ntimeout?: number\nReturns: boolean","playaudio#playAudio":"Plays a sound with the provided audio name and audio ref. \nIf returnSoundId is false or not specified the soundId is released, \notherwise the function returns the soundId without releasing it.\nqbx.playAudio(params)\nparams: table\naudioName: string\naudioRef: string\nreturnSoundId?: boolean\naudioSource?: number | vector3\nEntity handle or vector3 coords.\nrange?: number\nOnly used if audioSource is a vector3 coordinate.\nReturns: number?"}},"/resources/qbx_core/modules/lib/server":{"title":"Server Lib","data":{"spawnvehicle#spawnVehicle":"Creates a vehicle on the server-side and returns its net ID. If this is a player owned vehicle, and the persistence convar is enabled, the spawned vehicle will be persisted.\nqbx.spawnVehicle(params)\nparams: table\nmodel: integer\nA vehicle modle hash.\nspawnSource: integer | vector3 | vector4\nThe handle of an entity or coords to spawn the vehicle at.\nwarp?: boolean | integer\nAn optional ped ID to warp into the vehicle after it spawns.\nIf spawnSource is a ped ID, you can pass true to warp the ped specified there instead.\nprops?: table\nRefer to ox_lib's Vehicle Properties.\nbucket? integer\nAn optional routing bucket to move the spawned entity to.\nReturns:\nnetId: integer\nentity: integer\n-- spawns the vehicle at `myVectorCoords` and warps `myPed` inside\nqbx.spawnVehicle({\n model = `asbo`,\n spawnSource = myVectorCoords,\n warp = myPed,\n})\n-- spawns the vehicle at `myPed` and warps the same ped inside\nqbx.spawnVehicle({\n model = `asbo`,\n spawnSource = myPed,\n warp = true, -- causes `myPed` to be warped into the vehicle\n})"}},"/resources/qbx_core/modules/lib/shared":{"title":"Shared Lib","data":{"armswithoutglovesmale#armsWithoutGloves.male":"A set of male torso drawable variations that don't have gloves. \nUsed for qbx.isWearingGloves and backwards compatibility.\nqbx.armsWithoutGloves.male\nType: table","armswithoutglovesfemale#armsWithoutGloves.female":"A set of female torso drawable variations that don't have gloves. \nUsed for qbx.isWearingGloves and backwards compatibility.\nqbx.armsWithoutGloves.female\nType: table","stringtrim#string.trim":"Returns the given string with its trailing whitespaces removed.\nqbx.string.trim(str)\nstr: string\nReturns: string","stringcapitalize#string.capitalize":"Returns the given string with its first character capitalized.\nqbx.string.capitalize(str)\nstr: string\nReturns: string","mathround#math.round":"Rounds and returns the given number.\nqbx.math.round(num, decimalPlaces)\nnum: number\ndecimalPlaces?: integer\nReturns: number","tablesize#table.size":"Returns the number of items in a table. Useful for non-array tables.\nqbx.table.size(tbl)\ntbl: table\nReturns: integer","tablemapbysubfield#table.mapBySubfield":"Maps and returns the values of the given table by the given subfield.\nqbx.table.mapBySubfield(tbl, subfield)\ntbl: table\nsubfield: any\nReturns: table\nlocal tble = {\n {\n myCategory = 'first',\n someValue = 1,\n },\n {\n myCategory = 'second',\n someValue = 2,\n },\n}\nlocal mapped = qbx.table.mapBySubfield(tble, 'myCategory')\nprint(json.encode(mapped))\n-- Output: { \"first\": [{ myCategory: \"first\", someValue: 1 }], \"second\": [{ myCategory: \"second\", someValue: 2 }] }","getvehicleplate#getVehiclePlate":"Returns the number plate of the given vehicle, or nil if the vehicle or plate does not exist.\nqbx.getVehiclePlate(vehicle)\nvehicle: integer\nReturns: string?","generaterandomplate#generateRandomPlate":"Generates and returns a random number plate with the given pattern. \nNote that the generated plate may or may not be already used by an existing vehicle.\nFor more info about the pattern see lib.string.random from ox_lib.\nqbx.generateRandomPlate(pattern)\npattern?: string\nReturns: string","getcardinaldirection#getCardinalDirection":"Returns the cardinal direction that the given entity is staring towards.\n North\n 45° 0° 315°\n \\ .- - - - - - -. /\n X X\n .' \\ / '.\n | \\ / |\nWest | X | East\n | / \\ |\n '. / \\ .'\n X X\n / '- - - - - - -' \\\n 135° 225°\n South\n(art inspired by SET_PED_TURNING_THRESHOLDS)\nqbx.getCardinalDirection(entity)\nentity: integer\nReturns: 'North' | 'South' | 'East' | 'West'"}},"/resources/qbx_core/modules/logger":{"title":"logger","data":{"":"See the ox_lib Logger for further details.\nAdds a logger that logs to Discord if a webhook is given, and with ox_lib otherwise.\nlocal logger = require '@qbx_core.modules.logger'\nlogger.log(log)\nlog: table\nsource: string\nThe source of the log; usually a player ID or the name of a resource.\nevent: string\nThe action or event being logged; usually a verb describing what the name is doing.\nExample: 'SpawnVehicle'\nmessage: string\nA message attached to the log.\nwebhook?: string\nDiscord logs only.\nThe URL of the webhook that this should log to.\ncolor?: string\nDiscord logs only.\nThe color the message should be.\ntags?: string[]\nDiscord logs only.\nTags to be added to the Discord message.\nExample: { '<@&roleid>', '<@userid>', '@everyone' }","example-usage#Example Usage":"local logger = require '@qbx_core.modules.logger'\nlogger.log({\n source = 'my source',\n event = 'my event',\n message = 'my message',\n tags = { '@everyone' },\n})"}},"/resources/qbx_core/modules/playerdata":{"title":"playerdata","data":{"":"Adds a QBX.PlayerData global and keeps it updated.","installation#Installation":"Add @qbx_core/modules/playerdata.lua to client_scripts in your fxmanifest."}},"/resources/qbx_core/types/gang":{"title":"Gang","data":{"":"Extends: GangData","fields#Fields":"grades: table"}},"/resources/qbx_core/types/gang_data":{"title":"GangData","data":{"fields#Fields":"label: string"}},"/resources/qbx_core/types/gang_grade_data":{"title":"GangGradeData","data":{"fields#Fields":"name: string\nisboss?: boolean\nbankAuth?: boolean"}},"/resources/qbx_core/types/job":{"title":"Job","data":{"":"Extends: JobData","fields#Fields":"grades: table"}},"/resources/qbx_core/types/job_data":{"title":"JobData","data":{"fields#Fields":"label: string\ntype?: string\ndefaultDuty: boolean\noffDutyPay: boolean"}},"/resources/qbx_core/types/job_grade_data":{"title":"JobGradeData","data":{"fields#Fields":"name: string\nisboss?: boolean\nbankAuth?: boolean\npayment: number"}},"/resources/qbx_core/types/player":{"title":"Player","data":{"fields#Fields":"Functions: table\nPlayerData: PlayerData\nOffline: boolean","functions#Functions":"","setjob#SetJob":"Attempts to overwrite the player's primary job and grade, and returns whether it was successful.\nPlayer.Functions.SetJob(jobName, grade)\njobName: string\ngrade: integer\nReturns: boolean","setgang#SetGang":"Attempts to overwrite the player's primary gang and grade, and returns whether it was successful.\nPlayer.Functions.SetGang(gangName, grade)\ngangName: string\ngrade: integer\nReturns: boolean","setjobduty#SetJobDuty":"Sets the player's duty.\nPlayer.Functions.SetJobDuty(onDuty)\nonDuty: boolean","setplayerdata#SetPlayerData":"Overwrites the given top level key of the PlayerData with the given value.\nPlayer.Functions.SetPlayerData(key, val)\nkey: string\nval: any","setmetadata#SetMetaData":"Stores the given key value pair in the player's metadata.\nPlayer.Functions.SetMetaData(meta, val)\nmeta: string\nval: any","getmetadata#GetMetaData":"Returns the value pair of the given key in the player's metadata.\nPlayer.Functions.GetMetaData(meta)\nmeta: string\nReturns: any","addjobreputation#AddJobReputation":"Adds the given amount to the player's job reputation.\nPlayer.Functions.AddJobReputation(amount)\namount: number","addmoney#AddMoney":"Attempts to add the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.AddMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","removemoney#RemoveMoney":"Attempts to subtract the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.RemoveMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","setmoney#SetMoney":"Attempts to set the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.SetMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","getmoney#GetMoney":"Returns the amount of money of the given type, or false if the type doesn't exist.\nPlayer.Functions.GetMoney(moneytype)\nmoneytype: 'cash' | 'bank' | 'crypto'\nReturns: number | false","setcreditcard#SetCreditCard":"Sets the player's owned credit card number. \nDoes not give the player's character any items.\nPlayer.Functions.SetCreditCard(cardNumber)\ncardNumber: number","save#Save":"Saves the player's current character info to the database.\nPlayer.Functions.Save()"}},"/resources/qbx_core/types/player_data":{"title":"PlayerData","data":{"":"Extends: PlayerEntity","fields#Fields":"source?: integer\nPresent if the player is online.\noptin?: boolean\nPresent if the player is online."}},"/resources/qbx_core/types/player_entity":{"title":"PlayerEntity","data":{"fields#Fields":"citizenid: string\nlicense: string\nname: string\nmoney: table\ncash: number\nbank: number\ncrypto: number\ncharinfo: table\nfirstname: string\nlastname: string\nbirthdate: string\nnationality: string\ncid: integer\ngender: integer\nbackstory: string\nphone: string\naccount: string\ncard: number\njob: table\nname: string\nlabel: string\npayment: number\ntype: string\nonduty: boolean\nisboss: boolean\ngrade: table\nname: string\nlevel: number\njobs: table maps job name to job grade that the player has. Unemployed not included.\ngang: table\nname: string\nlabel: string\nisboss: boolean\ngrade: table\nname: string\nlevel: number\ngangs: table maps gang name to gang grade that the player has. None gang not included.\nposition: vector4\nmetadata: table\nhealth: number\narmor: number\nhunger: number\nthirst: number\nstress: number\nisdead: boolean\ninlaststand: boolean\nishandcuffed: boolean\ntracker: boolean\ninjail: number\njailitems: table\nstatus: table\nphone: table\nbackground: any\nprofilepicture: any\nbloodtype: string\ndealerrep: number\ncraftingrep: number\nattachmentcraftingrep: number\ncurrentapartment?: integer\njobrep: table\ntow: number\ntrucker: number\ntaxi: number\nhotdog: number\ncallsign: string\nfingerprint: string\nwalletid: string\ncriminalrecord: table\nhasRecord: number\ndate?: table\nlicences: table\nid: boolean\ndriver: boolean\nweapon: boolean\ninside: table\nhouse?: any\napartment: table\napartmentType?: any\napartmentId?: integer\nphonedata: table\nSerialNumber: string\nInstalledApps: table\ncid: integer\nitems: table\nDeprecated.\nlastLoggedOut: integer"}},"/resources/qbx_core/types/vehicle":{"title":"Vehicle","data":{"fields#Fields":"name: string\nbrand: string\nmodel: string\nprice: number\ncategory: string\nhash: integer"}},"/resources/qbx_core/types/weapon":{"title":"Weapon","data":{"fields#Fields":"name: string\nlabel: string\nweapontype: string\nammotype?: string\ndamagereason: string"}},"/resources/qbx_divegear":{"title":"qbx_divegear","data":{}},"/resources/qbx_diving":{"title":"qbx_diving","data":{}},"/resources/qbx_diving/events/server":{"title":"Server Events","data":{"":"These events MUST NOT be triggered by any other scripts.","non-networked-events#Non-Networked Events":"","qbx_divingservercoraltaken#qbx_diving:server:coralTaken":"Triggered when a player has collected coral from the sea bed.\nAddEventHandler('qbx_diving:server:coralTaken', function(coords) end)\ncoords: vector3","networked-events#Networked Events":"","qbx_divingserversellcoral#qbx_diving:server:sellCoral":"Triggered when a player attempts to sell coral. \nDoes not guarantee that the player has any coral in their inventory.\nRegisterNetEvent('qbx_diving:server:sellCoral', function() end)"}},"/resources/qbx_garages":{"title":"qbx_garages","data":{}},"/resources/qbx_garages/callbacks/client":{"title":"Server Callbacks","data":{"":"Can be used to support a custom UI. Called from the client.","getgarages#getGarages":"Get the currently registered garages\nlib.callback.await('qbx_garages:server:getGarages')","getgaragevehicles#getGarageVehicles":"Get vehicles that the player has access to in the given garage. Does not return vehicles currently spawned in the world.\nlib.callback.await('qbx_garages:server:getGarageVehicles', false, garageName)","isparkable#isParkable":"Returns true if the player can access the garage and the vehicle matches the garage filters\nlib.callback.await('qbx_garages:server:isParkable', false, garageName, netId)","parkvehicle#parkVehicle":"Stores the vehicle in the garage and deletes the entity from the world\nlib.callback.await('qbx_garages:server:parkVehicle', false, netId, props, garageName)","paydepotprice#payDepotPrice":"Takes vehicle's depot price from cash or bank and returns true if player paid. Does not update the vehicle's depot price after payment.\nlib.callback.await('qbx_garages:server:payDepotPrice', false, vehicleId)","spawnvehicle#spawnVehicle":"Spawns the vehicle entity in the world at the given garage's access point. Checks that the player has required access permissions to do so.\nAttempts to give the player vehicle keys.\nlib.callback.await('qbx_garages:server:spawnVehicle', false, vehicleId, garageName, accessPointIndex)"}},"/resources/qbx_loading":{"title":"qbx_loading","data":{}},"/resources/qbx_management":{"title":"qbx_management","data":{}},"/resources/qbx_management/exports/client":{"title":"Client Exports","data":{"openbossmenu#OpenBossMenu":"Open the primary job or gang boss menu as long as you have the proper permissions.\nexports.qbx_management:OpenBossMenu(groupType)\ngroupType: 'gang' | 'job'"}},"/resources/qbx_radio":{"title":"qbx_radio","data":{}},"/resources/qbx_smallresources":{"title":"qbx_smallresources","data":{}},"/resources/qbx_truckrobbery":{"title":"qbx_truckrobbery","data":{}},"/resources/qbx_vehicles":{"title":"qbx_vehicles","data":{}},"/resources/qbx_vehicles/exports/hooks":{"title":"Hooks","data":{"":"Event hooks allow 3rd party resources to define new behavior without modifying qbx_vehicles code directly.","registerhook#registerHook":"Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event\nexports.qbx_vehicles:registerHook(eventName, function(payload) end)\neventName: string\npayload: table\nReturn:\nhookId: number","createplayervehicle#createPlayerVehicle":"Triggered when a new vehicle is created. Return false to cancel the creation\npayload: table\ncitizenid: string\ngarage: string\nprops: table","changevehicleowner#changeVehicleOwner":"Triggered when a vehicle's owner changes. Return false to cancel the change.\npayload: table\nvehicleId: integer\nnewCitizenId: string","removehooks#removeHooks":"Remove a previously registered hook by it's id.\nIf no id is provided then all hooks registered by the resource are removed.\nexports.qbx_vehicles:removeHooks(id)\nid?: number"}},"/resources/qbx_vehicles/exports/server":{"title":"Server Exports","data":{"createplayervehicle#CreatePlayerVehicle":"Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner.\nexports.qbx_vehicles:CreatePlayerVehicle(request)\nrequest: table\nmodel: string\ncitizenid?: string\ngarage?: string\nprops?: ox_lib vehicle properties\nReturns:\nvehicleId?: integer\nerrorResult?: {code: string, message: string}\nError Codes: N/A","deleteplayervehicles#DeletePlayerVehicles":"Delete player vehicles matching some identifier. Only handles deleting from the database.\nexports.qbx_vehicles:DeletePlayerVehicles(idType, idValue)\nidType: 'citizenid' | 'license' | 'plate' | 'vehicleId'\nidValue: string | number\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes: N/A","doesplayervehicleplateexist#DoesPlayerVehiclePlateExist":"Returns whether a player owned vehicle has the matching plate\nexports.qbx_vehicles:DoesPlayerVehiclePlateExist(plate)\nplate: string\nReturns: boolean","getplayervehicle#GetPlayerVehicle":"Queries a player vehicle by vehicleId. Can optionally pass filter criteria.\nexports.qbx_vehicles:GetPlayerVehicle(vehicleId, filters)\nvehicleId: number\nfilters?: PlayerVehiclesFilters\nReturns: PlayerVehicle?","getplayervehicles#GetPlayerVehicles":"Queries player vehicles by various filter criteria. If no filters are set, queries all vehicles.\nexports.qbx_vehicles:GetPlayerVehicles(filters)\nfilters?: PlayerVehiclesFilters\nReturns: PlayerVehicle[]","setplayervehicleowner#SetPlayerVehicleOwner":"Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner.\nexports.qbx_vehicles:SetPlayerVehicleOwner(vehicleId, citizenid)\nvehicleId: integer\ncitizenid?: string\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes: N/A","getvehicleidbyplate#GetVehicleIdByPlate":"Looks up the vehicleId with the given plate\nexports.qbx_vehicles:GetVehicleIdByPlate(plate)\nplate: string\nReturns vehicleId?: integer","savevehicle#SaveVehicle":"Update an existing vehicle's attributes\nexports.qbx_vehicles:SaveVehicle(vehicle, options)\nvehicle: number entity\noptions: table\ngarage?: string\nstate?: VehicleState\ndepotPrice?: integer\nprops?: ox_lib vehicle properties\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes:\nnot_owned: unable to locate the vehicle's row in the player_vehicles table","common-types#Common Types":"","vehiclestate#VehicleState":"OUT = 0\nGARAGED = 1\nIMPOUNDED = 2","playervehicle#PlayerVehicle":"id: integer\ncitizenid?: string\nmodelName: string\ngarage: string\nstate: VehicleState\ndepotPrice: integer\nprops: ox_lib vehicle properties","playervehiclesfilters#PlayerVehiclesFilters":"citizenid?: string\nstates?: VehicleState | VehicleState[]\ngarage?: string"}},"/installation":{"title":"Installation","data":{"":"We highly recommend using txAdmin to install your FiveM server. \nFor detailed instructions, refer to Setting up a server using txAdmin.","download-the-server#Download the server":"Download the latest FiveM artifacts and extract the files.","start-the-server-installation#Start the server installation":"Run FXServer.exe to begin the installation and follow all the steps.","deploy-the-recipe#Deploy the recipe":"When prompted, select Remote URL Template:Use the raw recipe link shown below.\nThe Qbox Unstable Recipe comes with all of our actively maintained resources. \nUse this if you're looking for a complete server base.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox.yaml\nThe Qbox Lean Recipe is a stripped down version of Qbox, without excess resources,\nand it does not include any criminal or civilian activities. \nUse this if you're looking for a smaller server base to build off of.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox-lean.yaml\nThe Qbox Stable Recipe comes with the resources we consider stable, based on our Release Readiness guidelines. \nUse this if you're looking for the most stable experience.\nSince many Qbox resources are still a work-in-progress, some important resources are still considered unstable,\nand are currently missing from this recipe. This may result in various issues.\nYou are expected to find alternatives by yourself, or to download the unstable versions of those resources.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox-stable.yaml","run-the-server#Run the server":"Once you have completed all of the installation steps, run the server."}},"/resources/qbx_core/exports/server":{"title":"Server Exports","data":{"":"Some of these exports use custom types.\nYou can learn more about those in the Types section of this resource.","createjobs#CreateJobs":"Adds or overwrites the given jobs.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:CreateJobs(jobs)\njobs: table","removejob#RemoveJob":"Removes the given job.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveJob(jobName)\njobName: string\nReturns:\nsuccess: boolean\nmessage: 'success' | 'invalid_job_name' | 'job_not_exists'","creategangs#CreateGangs":"Adds or overwrites the given gangs.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:CreateGangs(gangs)\ngangs: table","removegang#RemoveGang":"Removes the given gang.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveGang(gangName)\ngangName: string\nReturns:\nsuccess: boolean\nmessage: 'success' | 'invalid_gang_name' | 'gang_not_exists'","getcoreversion#GetCoreVersion":"Returns the current version of qbx_core set in its fxmanifest.\nexports.qbx_core:GetCoreVersion(InvokingResource)\nInvokingResource: string\nReturns: string","exploitban#ExploitBan":"Bans the given player for the given reason.\nexports.qbx_core:ExploitBan(playerId, origin)\nplayerId: integer\norigin: string","getsource#GetSource":"Returns the ID of the player that has the given identifier, or 0 if the player is not in the server.\nexports.qbx_core:GetSource(identifier)\nidentifier: string\nReturns: integer","getplayer#GetPlayer":"Returns the Player object for the given player ID or identifier.\nexports.qbx_core:GetPlayer(source)\nsource: integer\nReturns: Player?","getplayerbycitizenid#GetPlayerByCitizenId":"Returns the Player object for the given citizenid.\nexports.qbx_core:GetPlayerByCitizenId(citizenid)\ncitizenid: string\nReturns: Player?","getplayerbyphone#GetPlayerByPhone":"Returns the Player object for the given phone number.\nexports.qbx_core:GetPlayerByPhone(number)\nnumber: string\nReturns: Player?","getqbplayers#GetQBPlayers":"Returns the player ID to Player object map of logged-in players.\nexports.qbx_core:GetQBPlayers()\nReturns: table","getplayersdata#GetPlayersData":"Returns all PlayerData tables for all active players.\nexports.qbx_core:GetPlayersData()\nReturns: PlayerData[]","getdutycountjob#GetDutyCountJob":"Returns the amount of players that are on-duty in the given job, and a list of their IDs.\nexports.qbx_core:GetDutyCountJob(job)\njob: string\nReturns:\ncount: integer\nplayers: integer[]","getdutycounttype#GetDutyCountType":"Returns the amount of players that are on-duty in the given job type, and a list of their IDs.\nexports.qbx_core:GetDutyCountType(jobType)\njobType: string\nReturns:\ncount: integer\nplayers: integer[]","getbucketobjects#GetBucketObjects":"Returns the player to bucket and entity to bucket maps.\nexports.qbx_core:GetBucketObjects()\nReturns:\nplayerBuckets: table\nentityBuckets: table","setplayerbucket#SetPlayerBucket":"Sets the given player to the given bucket. \nReturns false if one of the parameters is nil, and true otherwise.\nexports.qbx_core:SetPlayerBucket(source, bucket)\nsource: integer\nbucket: integer\nReturns: boolean","setentitybucket#SetEntityBucket":"Sets the given entity (e.g. ped, vehicle, prop, etc.) to the given bucket. \nReturns false if one of the parameters is nil, and true otherwise.\nexports.qbx_core:SetEntityBucket(entity, bucket)\nentity: integer\nbucket: integer\nReturns: boolean","getplayersinbucket#GetPlayersInBucket":"Returns a list of all the players in the given bucket, or false if there are no known player buckets.\nexports.qbx_core:GetPlayersInBucket(bucket)\nbucket: integer\nReturns: integer[] | false","getentitiesinbucket#GetEntitiesInBucket":"Returns a list of all the entities in the given bucket, or false if there are no known entity buckets.\nexports.qbx_core:GetPlayersInBucket(bucket)\nbucket: integer\nReturns: integer[] | false","createuseableitem#CreateUseableItem":"Registers the given function to run when the given item is used.\nexports.qbx_core:CreateUseableItem(item, data)\nitem: string\ndata: fun(source: integer, item: unknown)","canuseitem#CanUseItem":"Returns the data set to run when the given item is used, or nil if none exists.\nexports.qbx_core:CanUseItem(item)\nitem: string\nReturns: unknown","iswhitelisted#IsWhitelisted":"Returns whether the given player is whitelisted.\nexports.qbx_core:IsWhitelisted(source)\nsource: integer\nReturns: boolean","addpermission#AddPermission":"Deprecated as of v1.8.0. Use ox_lib ACE permissions instead\nAdds the given permission to the given player.\nexports.qbx_core:AddPermission(source, permission)\nsource: integer\npermission: string","removepermission#RemovePermission":"Deprecated as of v1.8.0. Use ox_lib ACE permissions instead\nRemoves the given permission from the given player.\nexports.qbx_core:RemovePermission(source, permission)\nsource: integer\npermission: string","haspermission#HasPermission":"Deprecated as of v1.8.0. Use ACE permissions instead.\nReturns whether the given player has the given permission.\nexports.qbx_core:HasPermission(source, permission)\nsource: integer\npermission: string\nReturns: boolean","getpermission#GetPermission":"Deprecated as of v1.8.0. Use ACE permissions instead.\nGets the given player's permissions.\nexports.qbx_core:GetPermission(source)\nsource: integer\nReturns: table","isoptin#IsOptin":"Returns whether the given player is optin to admin reports.\nexports.qbx_core:IsOptin(source)\nsource: integer\nReturns: boolean","toggleoptin#ToggleOptin":"Opts the given player in and out of admin reports.\nexports.qbx_core:ToggleOptin(source)\nsource: integer","isplayerbanned#IsPlayerBanned":"Returns whether the given player is banned, and a message to be shown to the player.\nexports.qbx_core:IsPlayerBanned(source)\nsource: integer\nReturns:\nbanned: boolean\nplayerMessage: string\nA message written to be shown to the player.","notify#Notify":"See lib.notify for more details.\nText box popup for the given player which disappears after a given amount of time.\nexports.qbx_core:Notify(source, text, notifyType, duration, subTitle, notifyPosition, notifyStyle, notifyIcon, notifyIconColor)\nsource: integer\ntext: table | string\nThe text of the notification.\nCan be a string, or a table containing:\ntext?: string\ncaption?: string\nnotifyType?: 'inform' | 'error' | 'success' | 'warning'\nDefault: 'inform'\nduration?: integer\nThe duration in milliseconds for which the notification will remain on screen.\nDefault: 5000\nsubTitle?: string\nAdditional text under the title.\nnotifyPosition?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left' | 'center-right' | 'center-left'\nDefault: top-right (changable in config)\nnotifyStyle?: table\nCustom styling. Refer to lib.notify.\nnotifyIcon?: string\nFont Awesome 6 icon name.\nnotifyIconColor?: string\nCustom color for notifyIcon.","login#Login":"Logs into an existing character or creates a new one, and returns whether it was successful. \nThis is the preferred function for creating characters if the owning player is online.\nexports.qbx_core:Login(source, citizenid, newData)\nsource: integer\ncitizenid?: string\nnewData?: PlayerEntity\nReturns: boolean","getofflineplayer#GetOfflinePlayer":"Gets a Player object using the given citizenid and returns it, or nil if nothing was found.\nexports.qbx_core:GetOfflinePlayer(citizenid)\ncitizenid: string\nReturns: Player?","logout#Logout":"Logs the given player out of their current character.\nexports.qbx_core:Logout(source)\nsource: integer","createplayer#CreatePlayer":"Creates a new character and saves it to the database.\nexports.qbx_core:CreatePlayer(playerData, offline)\nplayerData: PlayerData\noffline: boolean\nReturns: Player","save#Save":"Save the given player's info to the database.\nexports.qbx_core:Save(source)\nsource: integer","saveoffline#SaveOffline":"Saves the given PlayerData to the database.\nexports.qbx_core:SaveOffline(playerData)\nplayerData: PlayerEntity","deletecharacter#DeleteCharacter":"Delete a character permanently by the given citizenid.\nThis action cannot be undone.\nexports.qbx_core:DeleteCharacter(citizenid)\ncitizenid: string","generateuniqueidentifier#GenerateUniqueIdentifier":"Returns unique values for player identifiers.\nexports.qbx_core:GenerateUniqueIdentifier(type)\ntype: 'citizenid' | 'AccountNumber' | 'PhoneNumber' | 'FingerId' | 'WalletId' | 'SerialNumber'\nReturns: string | number","upsertjobdata#UpsertJobData":"Inserts or overwrites fields of the given job temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertJobData(jobName, data)\njobName: string\ndata: JobData","upsertgangdata#UpsertGangData":"Inserts or overwrites fields of the given gang temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertGangData(gangName, data)\ngangName: string\ndata: GangData","upsertjobgrade#UpsertJobGrade":"Inserts or overwrites fields of the given job's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertJobGrade(jobName, grade, data)\njobName: string\ngrade: integer\ndata: JobGradeData","upsertganggrade#UpsertGangGrade":"Inserts or overwrites fields of the given gang's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertGangGrade(gangName, grade, data)\ngangName: string\ngrade: integer\ndata: GangGradeData","removejobgrade#RemoveJobGrade":"Removes the given job's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveJobGrade(jobName, grade)\njobName: string\ngrade: integer","removeganggrade#RemoveGangGrade":"Removes the given gang's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveGangGrade(gangName, grade)\ngangName: string\ngrade: integer","setplayerprimaryjob#SetPlayerPrimaryJob":"Sets the given player's primary job to the given job, only if they already have it.\nexports.qbx_core:SetPlayerPrimaryJob(citizenid, jobName)\ncitizenid: string\njobName: string","addplayertojob#AddPlayerToJob":"Adds the given player to the given job, or overwrites their grade if they're already in that job.\nexports.qbx_core:AddPlayerToJob(citizenid, jobName, grade)\ncitizenid: string\njobName: string\ngrade: integer","removeplayerfromjob#RemovePlayerFromJob":"Removes the given player from the given job.\nAlso updates the given player's primary job to unemployed if the given job is the player's primary.\nexports.qbx_core:RemovePlayerFromJob(citizenid, jobName)\ncitizenid: string\njobName: string","setplayerprimarygang#SetPlayerPrimaryGang":"Sets the given player's primary gang to the given gang, only if they already have it.\nexports.qbx_core:SetPlayerPrimaryGang(citizenid, gangName)\ncitizenid: string\ngangName: string","addplayertogang#AddPlayerToGang":"Adds the given player to the given gang, or overwrites their grade if they're already in that gang.\nexports.qbx_core:AddPlayerToGang(citizenid, gangName, grade)\ncitizenid: string\ngangName: string\ngrade: integer","removeplayerfromgang#RemovePlayerFromGang":"Removes the given player from the given gang.\nAlso updates the given player's primary gang to no gang if the given gang is the player's primary.\nexports.qbx_core:RemovePlayerFromGang(citizenid, gangName)\ncitizenid: string\ngangName: string","hasprimarygroup#HasPrimaryGroup":"Checks if the given player's current Job/Gang or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasPrimaryGroup(source, filter)\nsource: integer\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","hasgroup#HasGroup":"Checks if the given player's list of groups (Jobs/Gangs) or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty for any particular filter\nexports.qbx_core:HasGroup(source, filter)\nsource: integer\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","getgroups#GetGroups":"Returns a combined table of all the groups a given player currently has.\nexports.qbx_core:GetGroups(source)\nsource: integer\nReturns:\ntable","isgradeboss#IsGradeBoss":"Returns boolean on if a given group/grade combination is a boss grade. Currently this is based on the presence of a isboss boolean being true in the grade definition\nexports.qbx_core:IsGradeBoss(group, grade)\ngroup: string\ngrade: integer\nReturns:\nsuccess: boolean","getgroupmembers#GetGroupMembers":"Returns a table of all citizenids and associated grade for a given group and type\ngroup: string\ntype: job|gang\nReturns:\ntable","deletevehicle#DeleteVehicle":"Deletes the vehicle entity from the game world. Preferred over the native DeleteEntity function as DeleteVehicle will remove persistence from the vehicle to allow it to be deleted.\nexports.qbx_core:DeleteVehicle(entity)\nentity: number","enablepersistence#EnablePersistence":"Marks a vehicle to be persisted, which will respawn the vehicle with the same properties if it is deleted by the server. Idempotent.\nexports.qbx_core:EnablePersistence(entity)\nentity: number","disablepersistence#DisablePersistence":"Removes the persistence attribute from a vehicle, allowing it to be deleted without being respawned. Idempotent. No-op if the vehicle is not already persisted.\nexports.qbx_core:DisablePersistence(entity)\nentity: number","getvehicleclass#GetVehicleClass":"Equivalent to GetVehicleClass client native, but for the server. Works by asking a random client for all the vehicle models and their classes, then caching this while the server is online.\nDue to this, may not work if there is no client on to query.\nexports.qbx_core:GetVehicleClass(hash)\nhash: number"}},"/resources/qbx_garages/exports/server":{"title":"Server Exports","data":{"registergarage#RegisterGarage":"Registers a garage at runtime. This is an alternative to defining them in the qbx_garages config.\nexports.qbx_garages:RegisterGarage(name, config)","setvehiclegarage#SetVehicleGarage":"Sets the vehicle's garage. Only affects the database.\nexports.qbx_garages:SetVehicleGarage(vehicleId, garageName)","setvehicledepotprice#SetVehicleDepotPrice":"Sets the price to take the car out of the depot\nexports.qbx_garages:SetVehicleDepotPrice(vehicleId, depotPrice)","getgarages#GetGarages":"Returns the registered garages\nexports.qbx_garages:GetGarages()"}},"/resources/qbx_management/exports/server":{"title":"Server Exports","data":{"registerbossmenu#RegisterBossMenu":"Creates a boss menu.\nThis is a runtime-only change.\nThis won't persist across restarts and won't modify files.\nexports.qbx_management:RegisterBossMenu(menuInfo)\nmenuInfo: table\ngroupName: string\ntype: 'gang' | 'job'\ncoords: vector3\nsize?: vector3\nDefault: vec3(1.5, 1.5, 1.5)\nrotation?: number\nDefault: 0.0"}}} \ No newline at end of file +{"/contributors":{"title":"Contributing to Qbox","data":{"":"Thank you for taking the time to contribute!These guidelines will help you help us in the best way possible regardless of your skill level. We ask that you try to read everything related to the way you'd like to contribute and try and use your best judgement for anything not covered.Make sure to also read our Contributor Code of Conduct.If you still have further questions after reading be sure to join the Qbox Discord server.","issues#Issues":"Open a new issue to report a bug or request a new feature or improvement.If you want to ask a question, issues are not the place to do so. Please join our Discord server and ask over there instead.Before opening a new issue:\nSearch for existing issues; maybe someone else already experienced the same problem that you're having! Duplicate issues will be closed.\nDownload the latest release of the resource you are opening the issue for to make sure that it wasn't already fixed. Issues that are already fixed are considered invalid and will be closed.\nWhen opening a new issue, make sure to pick the right type of form and fill it out. The more information you provide, the easier it will be for us to work on your new issue. Issues that are invalid or do not follow the correct form may be ignored or even closed.","pull-requests#Pull Requests":"Open a new pull request to contribute code.You can use your own editor of choice, but we recommend using VSCode with these extensions:\nGitLens\nLua Language Server\nEditorConfig\nCfxLua IntelliSense\nIf you are new to contributing code, you can check out and try to fix issues marked with good first issue.If you want to contribute code but don't know what to do, please check out issues marked with help wanted as those are issues that we actually need help with.If you want to contribute code unrelated to an existing issue, you should open an issue yourself or ask over on the Discord server to discuss it with our team and ask whether your change is wanted, especially if you are planning on adding new features or large designs.Before opening a pull request:\nMake sure that your contribution fits our code conventions described below. After opening a pull request your code will be checked according to them.\nMake sure that your pull request is small and focused. Break it into multiple smaller pull requests if not (see Small Pull Request Manifesto).\nIt is recommended to test your changes to make sure they work and don't break existing functionality.\nWhen opening a pull request, make sure to follow the template and explain your changes. If you are trying to contribute something related to a GitHub issue, make sure to mention it as well.","code-conventions#Code Conventions":"Below are conventions that you must follow when contributing code.","commit-message-conventions#Commit Message Conventions":"The first line of a commit message must be 72 characters at most.\nCommit messages and pull request titles must follow Conventional Commits.\nUse fix: when patching a bug.\nUse feat: when introducing a new feature.\nUse refactor: when altering code without changing functionality.\nUse chore: when your changes don't alter production code.\nAppend a ! after the type/scope of the feature when you change code and introduce a breaking API change. Optionally add a footer to the bottom of your commit message separated by 2 newlines, starting with BREAKING CHANGE:, and explaining the breaking change.","lua-conventions#Lua Conventions":"","general-style#General Style":"Use 4 space indentation.\nPrefer creating local variables over global ones.\nDon't repeat yourself. If you're using the same operations in multiple different places convert them into a flexible function.\nExported functions must be properly annotated (see LuaLS Annotations).\nUtilize ox_lib to make your life easier. Prefer lib calls over native ones.\nMake use of config options where it makes sense to make features optional and/or customizable. Configs should not be modified by other code.","optimization--security#Optimization & Security":"Consider this Lua Performance guide.\nDon't create unnecessary threads. Always try to find a better method of triggering events.\nSet longer Wait calls in distance checking loops when the player is out of range.\nDon't waste cycles; job specific loops should only run for players with that job.\nWhen possible don't trust the client, especially with transactions.\nBalance security and optimizations.\nUse #(vector3 - vector3) instead of GetDistanceBetweenCoords().\nUse myTable[#myTable + 1] = 'value' instead of table.insert(myTable, 'value').\nUse myTable['key'] = 'value' instead of table.insert(myTable, 'key', 'value').","naming#Naming":"Use camelCase for local variables and functions.\nUse PascalCase for global variables and functions.\nAvoid acronyms as they can be confusing and context dependant.\nBe descriptive; make it easy for the reader.\nBooleans may be prefixed with is, has, are, etc.\nArrays should have plural names.","javascripttypescript-conventions#JavaScript/TypeScript Conventions":"Consider following the Google JavaScript Style Guide and the Google TypeScript Style Guide."}},"/converting":{"title":"Converting from QBCore","data":{"check-your-job-grades-in-qbx_coresharedjobslua#Check your job grades in qbx_core/shared/jobs.lua.":"In Qbox, job grades are numbers without quotations, whereas in QBCore they are strings.","configure-ox_inventory-and-convert-your-database#Configure ox_inventory and convert your database.":"Back it up first! (see ox_inventory documentation)","qbox-has-multicharacter-built-into-qbx_core#Qbox has multicharacter built into qbx_core.":"If you want to keep using your own multicharacter resource, configure qbx_core accordingly.\nOtherwise you can disable or delete your old multicharacter resource.","qbox-has-a-queue-system-built-into-qbx_core#Qbox has a queue system built into qbx_core.":"If you want to keep using your own queue system, specify set qbx:enablequeue \"false\" inside your cfg file.\nOtherwise you can disable or delete your old queue system.","run-the-sql-file-provided-with-qbx_core#Run the SQL file provided with qbx_core":"This will alter the players table in the following ways:\nAdd to the players table to add the new column last_logged_out\nChange the collation of players.citizenid column to utf8mb4_unicode_ci\nNote: You may need to manually change the collation of other tables' citizenid column if you get an error that a foreign key constraint was violated.","configure-multijobmultigang#Configure multijob/multigang":"Qbox has a multijob/gang system built into core that cannot be disabled. By default, players may only be in one job & gang. This can be overriden by setting qbx:max_jobs_per_player and qbx:max_gangs_per_player in server.cfg.\nDo not use an external multijob/gang resource that isn't guaranteed by the developer to be Qbox compatible.\nUsing incompatible multijobs or resources which modify core's database tables may lead to data corruption. First, double check that the player.citizenid column in your database has collation utf8mb4_unicode_ci. If not, change it.\nThen, run qbx_core.sql to create the new player_groups table. Start the server and type convertjobs into the txAdmin console once the server is running to populate the player_groups table.\nThis needs to be done even if you don't already have a multijob/gang system.","migrating-a-resource-from-qbcore-to-qbox#Migrating a resource from QBCore to Qbox":"This is optional as Qbox has 99% compatibility with existing QB scripts\nWithin Qbox, the core object no longer exists.\nInstead, the data can be accessed via a combination of export functions and imported modules.\nImport the needed modules from qbx_core to supply replacement functions for ones from QBCore;\nReplace calls to QBCore one by one with calls to the imported modules and exported functions. Both can be used at the same time, so conversion can be done partially, or over time.","common-replacements#Common replacements":"QBCore.Functions. -> exports.qbx_core:\nQBCore.Functions.GetPlayerData() -> QBX.PlayerData -- requires importing the playerdata module\nQBCore.Functions.GetPlate(vehicle) -> qbx.getVehiclePlate(vehicle) -- requires importing the lib module\nQBCore.Shared.Jobs -> exports.qbx_core:GetJobs()\nQBCore.Shared.Gangs -> exports.qbx_core:GetGangs()\nQBCore.Shared.Vehicles -> exports.qbx_core:GetVehiclesByName()\nQBCore.Shared.Weapons -> exports.qbx_core:GetWeapons()\nQBCore.Shared.Locations -> exports.qbx_core:GetLocations()\nQBCore.Shared.Items -> exports.ox_inventory:Items()\nexports['qb-core']:KeyPressed() -> lib.hideTextUI()\nexports['qb-core']:HideText() -> lib.hideTextUI()\nexports['qb-core']:DrawText(text, position) -> lib.showTextUI(text, { position = position })\nexports['qb-core']:ChangeText(text, position) -> lib.hideTextUI() lib.showTextUI(text, { position = position })"}},"/developers":{"title":"Developer's Guide","data":{"":"This guide is intended for those creating scripts using qbx_core.\nFollowing these principles will make it less likely for your script to break in future updates.","do-not-access-database-tables-owned-by-core#Do not access database tables owned by core":"Doing this will break your script if the database schema changes in the future.\nIf the data you need can't be read or written using a qbx_core/qbx_vehicles export,\ncreate a GitHub issue so we can rectify the problem for everyone.","do-not-modify-core-code#Do not modify core code":"Doing this will make it difficult for you to update in the future, and create confusion when debugging issues that may or may not be due to your custom changes.We've attempted to design things with flexibility in mind. \nHowever, if you really feel you need to modify core, file a GitHub issue first.\nWe'll see if we can trigger an event for you, surface a config value, or re-design something for the flexibility you need.","do-not-use-deprecated-functionsevents#Do not use deprecated functions/events":"These are likely to be removed in future updates.","set-statebag-when-spawning-an-owned-vehicle#Set statebag when spawning an owned vehicle":"When spawning a vehicle that is owned by a player, the vehicle's vehicleid statebag should be set to the id from the player_vehicles table. This allows other resources to look up info about the vehicle in the database using a stable identifier","to-set-vehicle-properties-when-spawning-a-vehicle-pass-the-properties-into-the-spawnvehicle-function#To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function":"Do not manually set the properties after the vehicle exists. This is an anti-pattern and may cause issues if the client is not the entity owner.","do-not-rely-on-unversionedunreleased-resources#Do not rely on unversioned/unreleased resources":"We make no guarantees about rapid breaking changes in these resources. They are not stable."}},"/faq":{"title":"Frequently Asked Questions","data":{"what-are-the-differences-between-qbcore-and-qbox#What are the differences between QBCore and Qbox?":"While originally forked from QBCore, many Qbox resources have been refactored to improve code quality, enhance security, lower performance overhead, and integrate with overextended resources.\nWhere appropriate Qbox also integrates directly with other open source projects, rather than maintaining subpar resources in-house.Qbox maintains high quality standards, with a strong community of regular contributors.\nAs time goes on, expect greater differences in player facing features.","will-my-qbcore-scripts-work-with-qbox#Will my QBCore scripts work with Qbox?":"TL;DR: Yes (in most cases).We've created a bridge layer for backwards compatibility with the documented and proper ways of using qb-core,\nand you can continue to use most QBCore scripts without any modifications.An exception to this is resources that use qb-core in undocumented, unsupported, invalid, and/or improper ways, such as:\nDirect access to database tables;\nDirect access to qb-core files that aren't meant to be used by other resources;\nInvalid usages of existing functions;\nAnd other unexpected ways not mentioned here.","who-should-use-qbox#Who should use Qbox?":"Servers currently using QBCore and servers interested in running QBCore in the future.","is-qbox-ready-to-use#Is Qbox ready to use?":"Since qbx_core is backwards compatible with qb-core resources, we recommend using only the released Qbox resources for a stable experience.","which-resources-are-ready-to-use#Which resources are ready to use?":"qbx_core\nqbx_divegear\nqbx_diving\nqbx_binoculars\nqbx_management\nqbx_radio\nqbx_truckrobbery\nqbx_vehicles\nqbx_garages\nqbx_loading\nqbx_smallresources","are-multijob-resources-compatible-with-qbox#Are multijob resources compatible with Qbox?":"They can be, but only if calling qbx_core exports to add/modify/remove player's jobs.\nThe two common issues with multijob resources are:\nDirectly accessing Qbox's database tables\nMaintaining Qbox's core data in a resource's own table","do-i-need-to-convert-my-resources-to-qbox-to-make-them-work#Do I need to convert my resources to Qbox to make them work?":"No, the bridge layer handles the compatibility for resources expecting QBCore style exports and events. Converting resources only helps to improve readability and reduce the memory footprint","common-problems-and-questions#Common Problems and Questions":"","no-such-export-getcoreobject-in-resource-qbx_core#No such export GetCoreObject in resource qbx_core":"Qbox does not have the core object. However, you can continue to use exports['qb-core']:GetCoreObject() to get a core object from Qbox's QB bridge layer.","warn-this-resource-is-still-using-the-deprecated-qbx_core-utils#[WARN] This resource is still using the deprecated qbx_core utils!":"If you are receiving this warning then please download the latest release/commit for that resource. With the exception of archived resources this dependency has been resolved.","can-i-use-my-own-multicharacter#Can I use my own multicharacter?":"Yes, you can. To disable the built in multicharacter change this setting to true in qbx_core/config/client.lua\n useExternalCharacters = false, -- Whether you have an external character management resource. (If true, disables the character management inside the core)","can-i-use-my-own-notification-system#Can I use my own notification system?":"Yes, you can but you will need to modify ox_lib to pass the event to your notification system.","vehicle-model-names-starting-with-a-number#Vehicle model names starting with a number":"When using vehicle names that start with a number you need to enclose them in square brackets like this\n ['5vigero'] =","keybind-changes-do-not-work#Keybind changes do not work":"Changing keybinds via convars or configuration files will not change them for clients that have already connected to the server. You need to clear your binds manually in order them to reset to the defaults","txadmin-installation-task-failed-response-code-403-rate-limit-exceeded#txAdmin Installation: Task Failed: Response code 403 (rate limit exceeded)":"This is due to Github rate limits which is outside our control. You can keep trying or change your IP address","script-error-failed-to-load-model#SCRIPT ERROR: failed to load model":"This is likely due to a low performance PC. If the error is qbx_core you can adjust the timeout in qbx_core/config/client.lua under loadingModelsTimeout","do-i-need-to-add-items-to-qbx_coreshareditemslua-and-ox_inventory#Do I need to add items to qbx_core/shared/items.lua and ox_inventory?":"No you don't need to add items there unless they are being accessed in a resource via the bridge such as a script that is not ox_inventory compatible. Items added here will be automatically added to ox_inventory but you will have to manually add things like client/server exports in the ox_inventory/data/items.lua","error-sql-cant-create-table-xyz-foreign-key-constraint-is-incorrectly-formed#Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)":"This is due to a mismatch of collation types between the table being created and existing tables. Add the following to the end of the CREATE TABLE parts of the sql you are trying to add and that should fix the issue. You may need to drop the table and readd it for the changes to apply\nDEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"}},"/":{"title":"Introduction","data":{"":"Qbox is a FiveM roleplay framework created on September 27, 2022.Starting as a QBCore fork, its goal was improving upon QBCore while maintaining backwards compatibility. \nToday this framework strives to be much greater, and utilizes overextended's resources to achieve its goals.","support--questions#Support & Questions":"Support for Qbox is provided by the community in the support channels of the Qbox Discord.Luckily, Qbox benefits from a great community with varied experience.\nWe encourage everyone to help each other in a friendly and respectable manner.","converting-from-qbcore#Converting from QBCore":"Already have a server that uses QBCore? No worries!\nQbox has backwards-compatibility for almost all QBCore scripts, with a few exceptions (learn more in the FAQ).Planning on converting to Qbox anyway to be able to utilize its new and modern functions and features?\nLearn how to convert your resources to Qbox in Converting from QBCore.","note-for-developers#Note for Developers":"Planning on utilizing qbx_core in your next resource?\nMake sure to read the Developer's Guide to learn about principles that make you avoid bad practices and help you in having a better developer expetience.","contributing-to-qbox#Contributing to Qbox":"Contributions are always welcome, but we prefer quality over quantity!\nPlease read our contributing guidelines to learn how best to contribute.","frequently-asked-questions#Frequently Asked Questions":"Check out the FAQ to learn more about Qbox."}},"/release":{"title":"Release Readiness","data":{"":"Guidelines for indicating that a resource is stable and ready for release.","code-quality#Code Quality":"No lint errors are present.\nAll print statements are replaced with lib.print.\nox_lib is used to replace natives where possible.\nCode uses best practices and follows the contribution guidelines.\nCode is readable and well organized.\nNo deprecated functions are being invoked.","database-practices#Database Practices":"Does not read directly from tables it does not own, and uses exports and functions from the owning resources to get the data instead.\nHas direct database calls to tables it does own in a designated storage layer of the resource (see server/storage.lua in qbx_core).","config-practices#Config Practices":"Config is located inside of a config folder and is split between client.lua, shared.lua, server.lua, and optionally more. Each of these are a module (i.e. returns a table).","core-practices#Core Practices":"Client PlayerData is accessed using playerdata module, instead of a qbx_core export.\nLib module is used to replace duplicate code like DrawText.","resource-quality#Resource Quality":"Resource features provide a good experience for players/devs/owners/admins.\nResource is scoped appropriately (i.e. it shouldn't be split, or combined with another resource).\nREADME is not outdated.\nNo known bugs.","stability#Stability":"No breaking changes are planned in the near future.\nResource has been tested or unchanged for long enough to give confidence that major bugs are not present.","dependencies#Dependencies":"Dependencies are declared and enforced using lib.checkDependency. fxmanifest dependencies should be used intentionally; understanding the behavior of restarting a resource.\nDependencies are stable.","release-automation--documentation#Release Automation & Documentation":"The first line of code executed by the server is lib.versionCheck.\nThe resource has a .github folder with bug/suggestion templates, automated version updater & release script.\nThe resource has a README which contains marketing material about the resource and it's features. Note that this is not technical documentation.\nThe resource's public API (events & exports) are documented on the technical docs (here)."}},"/resources/qbx_binoculars":{"title":"qbx_binoculars","data":{}},"/resources/qbx_core":{"title":"qbx_core","data":{}},"/resources/qbx_core/convars":{"title":"Convars","data":{"":"Below is a list of convars used within qbx_core.\nThe value shown in the example is the default value for each convar.","qbxenablebridge#qbx:enablebridge":"Enables or disables the qb-core bridge for compatibility with QBCore resources.\nsetr qbx:enablebridge true\nType: boolean","qbxdiscordlink#qbx:discordlink":"Sets the Discord link for kick messages.\nThis convar is only used by the qb-core bridge, and the deprecated utils module.\nset qbx:discordlink 'discord.gg/qbox'\nType: string","qbxbucketlockdownmode#qbx:bucketlockdownmode":"Sets entity lockdown mode for bucket 0.\nSee SET_ROUTING_BUCKET_ENTITY_LOCKDOWN_MODE for more information.\nset qbx:bucketlockdownmode inactive\nType: 'inactive' | 'relaxed' | 'strict'","qbxmax_jobs_per_player#qbx:max_jobs_per_player":"Sets the maximum number of jobs a player can have with the built-in multijob.\nset qbx:max_jobs_per_player 1\nType: integer","qbxmax_gangs_per_player#qbx:max_gangs_per_player":"Sets the maximum number of gangs a player can have with the built-in multigang.\nset qbx:max_gangs_per_player 1\nType: integer","qbxsetjob_replaces#qbx:setjob_replaces":"Controls if the /setjob command replaces or adds a job to a player.\nset qbx:setjob_replaces true\nType: boolean","qbxsetgang_replaces#qbx:setgang_replaces":"Controls if the /setgang command replaces or adds a gang to a player.\nset qbx:setgang_replaces true\nType: boolean","qbxenablequeue#qbx:enablequeue":"Enables or disables the built-in qbx_core queuing system.\nset qbx:enablequeue true\nType: boolean","qbxcleanplayergroups#qbx:cleanPlayerGroups":"Controls if the player_groups SQL table is automatically cleaned of invalid groups (jobs/gangs) on startup.\nset qbx:cleanPlayerGroups true\nType: boolean","qbxallowmethodoverrides#qbx:allowmethodoverrides":"Enables or disables the ability of resources to override existing methods in player object.\nset qbx:allowmethodoverrides true\nType: boolean","qbxdisableoverridewarning#qbx:disableoverridewarning":"Enables or disables warning from resources overriding existing methods in player object.\nset qbx:disableoverridewarning true\nType: boolean","qbxqbxenablevehiclepersistence#qbx:qbx:enableVehiclePersistence":"When enabled, player owned vehicles deleted by the server which have persistence enabled on them (either via having spawned using qbx.spawnVehicle or through exports.qbx_core:EnablePersistence), will be respawned with the same properties as when the vehicle was deleted.\nThis is a fix to a FiveM bug which can result in vehicles randomly being deleted; ensuring that vehicles that players leave, will be there when they return.\nsetr qbx:enableVehiclePersistence\nType: boolean"}},"/resources/qbx_core/events/client":{"title":"Client Events","data":{"":"These events MUST NOT be triggered by any other scripts.\nSome of these events use custom types.\nYou can learn more about those in the Types section of this resource.","non-networked-events#Non-Networked Events":"","qbcoreclientonplayerloaded#QBCore:Client:OnPlayerLoaded":"Triggered when the player finishes spawning.\nAddEventHandler('QBCore:Client:OnPlayerLoaded', function() end)","networked-events#Networked Events":"","qbcoreclientsetduty#QBCore:Client:SetDuty":"Triggered when the player's job duty is updated.\nRegisterNetEvent('QBCore:Client:SetDuty', function(onDuty) end)\nonDuty: boolean","qbcoreclientonpermissionupdate#QBCore:Client:OnPermissionUpdate":"Triggered when the player's permissions are updated. \nOnly works for permissions set via Qbox.\nRegisterNetEvent('QBCore:Client:OnPermissionUpdate', function() end)","qbx_coreclientplayerloggedout#qbx_core:client:playerLoggedOut":"Triggered when the player logs out and no longer exists in qbx_core's memory.\nRegisterNetEvent('qbx_core:client:playerLoggedOut', function() end)","qbcoreclientonjobupdate#QBCore:Client:OnJobUpdate":"Triggered when the player's job is updated.\nRegisterNetEvent('QBCore:Client:OnJobUpdate', function(job) end)\njob: Job","qbcoreclientongangupdate#QBCore:Client:OnGangUpdate":"Triggered when the player's gang is updated.\nRegisterNetEvent('QBCore:Client:OnGangUpdate', function(gang) end)\ngang: Gang","qbx_coreclientongroupupdate#qbx_core:client:onGroupUpdate":"Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added\nRegisterNetEvent('qbx_core:client:onGroupUpdate', function(groupName, groupGrade) end)\ngroupName: string\ngroupGrade: number?","qbcoreclientonmoneychange#QBCore:Client:OnMoneyChange":"Triggered when the player's cash/bank balance is updated.\nRegisterNetEvent('QBCore:Client:OnMoneyChange', function(moneytype, amount, operation, reason) end)\nmoneyType: 'cash' | 'bank' | 'crypto'\namount: number\noperation: 'add' | 'remove' | 'set'\nreason: string","qbx_coreclientonsetmetadata#qbx_core:client:onSetMetaData":"Triggered when player.Functions.setMetaData() is used.\nRegisterNetEvent('qbx_core:client:onSetMetaData', function(key, oldValue, newValue) end)\nkey: string\noldValue: any\nnewValue: any"}},"/resources/qbx_core/events/server":{"title":"Server Events","data":{"":"These events MUST NOT be triggered by any other scripts.\nSome of these events use custom types.\nYou can learn more about those in the Types section of this resource.","non-networked-events#Non-Networked Events":"","qbcoreserveronplayerunload#QBCore:Server:OnPlayerUnload":"Triggered when aplayer begins the process of logging out. \nThere is no guarantee that the player still exists in qbx_core's memory at the time this event is triggered.\nAddEventHandler('QBCore:Server:OnPlayerUnload', function(source) end)\nsource: integer","qbcoreserveronpermissionupdate#QBCore:Server:OnPermissionUpdate":"Triggered when the player's permissions are updated. \nOnly applies to permissions created through QB permission functions.\nAddEventHandler('QBCore:Server:OnPermissionUpdate', function(source) end)\nsource: integer","qbcoreserveronjobupdate#QBCore:Server:OnJobUpdate":"Triggered when a player's job updates.\nAddEventHandler('QBCore:Server:OnJobUpdate', function(source, job) end)\nsource: integer\njob: Job","qbcoreserverongangupdate#QBCore:Server:OnGangUpdate":"Triggered when a player's gang updates.\nAddEventHandler('QBCore:Server:OnGangUpdate', function(source, gang) end)\nsource: integer\ngang: Gang","qbcoreserversetduty#QBCore:Server:SetDuty":"Triggered when a player's job duty updates.\nAddEventHandler('QBCore:Server:SetDuty', function(source, onDuty) end)\nsource: integer\nonDuty: boolean","qbx_coreserverongroupupdate#qbx_core:server:onGroupUpdate":"Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added\nAddEventHandler('qbx_core:server:onGroupUpdate', function(source, groupName, groupGrade) end)\nsource: integer\ngroupName: string\ngroupGrade: number?","qbcoreserveronmoneychange#QBCore:Server:OnMoneyChange":"Triggered when a player's cash/bank balance updates.\nAddEventHandler('QBCore:Server:OnMoneyChange', function(source, moneyType, amount, operation, reason) end)\nsource: integer\nmoneyType: 'cash' | 'bank' | 'crypto'\namount: number\noperation: 'add' | 'remove' | 'set'\nreason: string","networked-events#Networked Events":"","qbcoreserveronplayerloaded#QBCore:Server:OnPlayerLoaded":"Triggered when a player has finished loading.\nRegisterNetEvent('QBCore:Server:OnPlayerLoaded', function() end)","qbx_coreserveronsetmetadata#qbx_core:server:onSetMetaData":"Triggered when player.Functions.setMetaData() is used.\nRegisterNetEvent('qbx_core:server:onSetMetaData', function(key, oldValue, newValue, source) end)\nkey: string\noldValue: any\nnewValue: any\nsource: number"}},"/resources/qbx_core/exports/client":{"title":"Client Exports","data":{"notify#Notify":"See lib.notify for more details.\nText box popup which disappears after a given amount of time.\nexports.qbx_core:Notify(text, notifyType, duration, subTitle, notifyPosition, notifyStyle, notifyIcon, notifyIconColor)\ntext: table | string\nThe text of the notification.\nCan be a string, or a table containing:\ntext?: string\ncaption?: string\nnotifyType?: 'inform' | 'error' | 'success' | 'warning'\nDefault: 'inform'\nduration?: integer\nThe duration in milliseconds for which the notification will remain on screen.\nDefault: 5000\nsubTitle?: string\nAdditional text under the title.\nnotifyPosition?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left' | 'center-right' | 'center-left'\nDefault: top-right (changable in config)\nnotifyStyle?: table\nCustom styling. Refer to lib.notify.\nnotifyIcon?: string\nFont Awesome 6 icon name.\nnotifyIconColor?: string\nCustom color for notifyIcon.","hasprimarygroup#HasPrimaryGroup":"Checks if the player's current Job/Gang or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasPrimaryGroup(filter)\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","hasgroup#HasGroup":"Checks if the player's list of groups (Jobs/Gangs) or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasGroup(filter)\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","getgroups#GetGroups":"Returns a combined table of all the groups the current player currently has.\nexports.qbx_core:GetGroups()\nReturns:\ngroups: table"}},"/resources/qbx_core/exports/shared":{"title":"Shared Exports","data":{"":"Some of these exports use custom types.\nYou can learn more about those in the Types section of this resource.","getjobs#GetJobs":"Returns the jobs table.\nexports.qbx_core:GetJobs()\nReturns: table","getgangs#GetGangs":"Returns the gangs table.\nexports.qbx_core:GetGangs()\nReturns: table","getjob#GetJob":"Returns the given job if it exists.\nexports.qbx_core:GetJob(jobName)\njobName: string\nReturns: Job?","getgang#GetGang":"Returns the given gang if it exists.\nexports.qbx_core:GetGang(gangName)\ngangName: string\nReturns: Gang?","getvehiclesbyname#GetVehiclesByName":"Returns a table mapping vehicle name to vehicle.\nexports.qbx_core:GetVehiclesByName()\nReturns: table","getvehiclesbyhash#GetVehiclesByHash":"Returns a table mapping vehicle hash to vehicle.\nexports.qbx_core:GetVehiclesByHash()\nReturns: table","getvehiclesbycategory#GetVehiclesByCategory":"Returns a table mapping vehicle category to vehicles.\nexports.qbx_core:GetVehiclesByCategory()\nReturns: table","getweapons#GetWeapons":"Returns the weapons table.\nexports.qbx_core:GetWeapons()\nReturns: table","getlocations#GetLocations":"Returns the locations table.\nexports.qbx_core:GetLocations()\nReturns: table"}},"/resources/qbx_core/modules/hooks":{"title":"hooks","data":{"":"Event hooks allow 3rd party resources to define new behaviour without modifying your resource directly.","registerhook#registerHook":"Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event\nexports.my_resource:registerHook(eventName, cb)\neventName: string\npayload: table\nReturn:\nhookId: number","removehooks#removeHooks":"Remove a previously registered hook by it's id.\nIf no id is provided then all hooks registered by the resource are removed.\nexports.my_resource:removeHooks(id)\nid?: number","usage#Usage":"An example hook setup in your resource\nlocal triggerEventHooks = require '@qbx_core.modules.hooks' -- Import triggerEventHooks function from hooks module\n-- Example of some sort of event that could be in your resource\nRegisterNetEvent('your_resource:server:check_condition', function(source)\n -- Checks to see if any registered hooks return false\n\tif not triggerEventHooks('checkCondition', {source = source, myNumber = 10}) then return end \n -- Do stuff\nend)\nNow a 3rd party resource can modify the behavior of your resource without having to change any of your code\nexports.qbx_core:registerHook('checkCondition', function(payload)\n -- payload contains everything passed into triggerEventHooks, which will depend on the resource to document\n if payload.myNumber == 10 then\n return true -- Continue as normal\n else\n return false -- Stop execution\n end\nend)"}},"/resources/qbx_core/modules/lib":{"title":"lib","data":{"":"Provides the qbx global table with various utility functions.","prerequisites#Prerequisites":"Lua 5.4 - add lua54 'yes' to your fxmanifest.\nox_lib - add @ox_lib/init.lua to shared_scripts in your fxmanifest.","installation#Installation":"Add @qbx_core/modules/lib.lua to shared_scripts in your fxmanifest. Make sure it's below the @ox_lib/init.lua script."}},"/resources/qbx_core/modules/lib/client":{"title":"Client Lib","data":{"drawtext2d#drawText2d":"Draws text onto the screen in 2D space for a single frame.\nqbx.drawText2d(params)\nparams: table\ntext: string\ncoords: vector2\nOn-screen coordinates.\nscale?: integer\nDefault: 0.35\nfont?: integer\nDefault: 4\ncolor?: vector4\nAn RGBA value; white by default.\nwidth?: number\nDefault: 1.0\nheight?: number\nDefault: 1.0","drawtext3d#drawText3d":"Draws text onto the screen in 3D space for a single frame.\nqbx.drawText3d(params)\nparams: table\ntext: string\ncoords: vector3\nIn-world coordinates.\nscale?: integer\nDefault: 0.35\nfont?: integer\nDefault: 4\ncolor?: vector4\nAn RGBA value; white by default.\ndisableDrawRect?: boolean\nDisables drawing a rectangle background for the text.","getentityandnetidfrombagname#getEntityAndNetIdFromBagName":"Gets and returns an entity handle and network id from a state bag name. \nWill return 0 for both if an invalid entity was received.\nqbx.getEntityAndNetIdFromBagName(bagName)\nbagName: string\nReturns:\nentity: integer\nnetId: integer","entitystatehandler#entityStateHandler":"Returns a state bag handler made for entities.\nqbx.entityStateHandler(keyFilter, cb)\nkeyFilter: string\ncb: fun(entity: number, netId: number, value: any, bagName: string)\nReturns: number","deletevehicle#deleteVehicle":"Deletes the specified vehicle and returns whether it was successful.\nqbx.deleteVehicle(vehicle)\nvehicle: integer\nReturns: boolean","getvehicledisplayname#getVehicleDisplayName":"Returns the model name of the given vehicle.\nqbx.getVehicleDisplayName(vehicle)\nvehicle: integer\nReturns: string","getvehiclemakename#getVehicleMakeName":"Returns the brand name of the given vehicle.\nqbx.getVehicleMakeName(vehicle)\nvehicle: integer\nReturns: string","getvehiclemodname#getVehicleModName":"Returns the mod type name of the given vehicle.\nqbx.getVehicleModName(vehicle, modType, modIndex)\nvehicle: integer\nmodType: integer\nmodIndex: integer\nReturns: string","getvehicleliveryname#getVehicleLiveryName":"Returns the livery name of the given vehicle.\nqbx.getVehicleLiveryName(vehicle, liveryIndex)\nvehicle: integer\nliveryIndex: integer\nReturns: string","getstreetname#getStreetName":"Returns the street name and cross section name at the given coords.\nqbx.getStreetName(coords)\ncoords: vector3\nReturns:\nstreetName: table\nmain: string\ncross: string","getzonename#getZoneName":"Returns the name of the zone at the given coords.\nqbx.getZoneName(coords)\ncoords: vector3\nReturns: string","setvehicleextra#setVehicleExtra":"Set an extra on the given vehicle.\nqbx.setVehicleExtra(vehicle, extra, enable)\nvehicle: integer\nextra: integer\nenable: boolean\nWhether to enable the extra.","resetvehicleextras#resetVehicleExtras":"Enables all the extras of the given vehicle.\nqbx.resetVehicleExtras(vehicle)\nvehicle: integer","setvehicleextras#setVehicleExtras":"Sets all the extras of the given vehicle.\nqbx.setVehicleExtra(vehicle, extras)\nvehicle: integer\nextras: table","iswearinggloves#isWearingGloves":"Returns if the local ped is wearing gloves.\nqbx.isWearingGloves()\nReturns: boolean","loadaudiobank#loadAudioBank":"Attempts to load an audio bank and returns whether it was successful. \nRemember to use ReleaseScriptAudioBank since you can only load up to 10 banks.\nqbx.loadAudioBank(audioBank, timeout)\naudioBank: string\ntimeout?: number\nReturns: boolean","playaudio#playAudio":"Plays a sound with the provided audio name and audio ref. \nIf returnSoundId is false or not specified the soundId is released, \notherwise the function returns the soundId without releasing it.\nqbx.playAudio(params)\nparams: table\naudioName: string\naudioRef: string\nreturnSoundId?: boolean\naudioSource?: number | vector3\nEntity handle or vector3 coords.\nrange?: number\nOnly used if audioSource is a vector3 coordinate.\nReturns: number?"}},"/resources/qbx_core/modules/lib/server":{"title":"Server Lib","data":{"spawnvehicle#spawnVehicle":"Creates a vehicle on the server-side and returns its net ID. If this is a player owned vehicle, and the persistence convar is enabled, the spawned vehicle will be persisted.\nqbx.spawnVehicle(params)\nparams: table\nmodel: integer\nA vehicle modle hash.\nspawnSource: integer | vector3 | vector4\nThe handle of an entity or coords to spawn the vehicle at.\nwarp?: boolean | integer\nAn optional ped ID to warp into the vehicle after it spawns.\nIf spawnSource is a ped ID, you can pass true to warp the ped specified there instead.\nprops?: table\nRefer to ox_lib's Vehicle Properties.\nbucket? integer\nAn optional routing bucket to move the spawned entity to.\nReturns:\nnetId: integer\nentity: integer\n-- spawns the vehicle at `myVectorCoords` and warps `myPed` inside\nqbx.spawnVehicle({\n model = `asbo`,\n spawnSource = myVectorCoords,\n warp = myPed,\n})\n-- spawns the vehicle at `myPed` and warps the same ped inside\nqbx.spawnVehicle({\n model = `asbo`,\n spawnSource = myPed,\n warp = true, -- causes `myPed` to be warped into the vehicle\n})"}},"/resources/qbx_core/modules/lib/shared":{"title":"Shared Lib","data":{"armswithoutglovesmale#armsWithoutGloves.male":"A set of male torso drawable variations that don't have gloves. \nUsed for qbx.isWearingGloves and backwards compatibility.\nqbx.armsWithoutGloves.male\nType: table","armswithoutglovesfemale#armsWithoutGloves.female":"A set of female torso drawable variations that don't have gloves. \nUsed for qbx.isWearingGloves and backwards compatibility.\nqbx.armsWithoutGloves.female\nType: table","stringtrim#string.trim":"Returns the given string with its trailing whitespaces removed.\nqbx.string.trim(str)\nstr: string\nReturns: string","stringcapitalize#string.capitalize":"Returns the given string with its first character capitalized.\nqbx.string.capitalize(str)\nstr: string\nReturns: string","mathround#math.round":"Rounds and returns the given number.\nqbx.math.round(num, decimalPlaces)\nnum: number\ndecimalPlaces?: integer\nReturns: number","tablesize#table.size":"Returns the number of items in a table. Useful for non-array tables.\nqbx.table.size(tbl)\ntbl: table\nReturns: integer","tablemapbysubfield#table.mapBySubfield":"Maps and returns the values of the given table by the given subfield.\nqbx.table.mapBySubfield(tbl, subfield)\ntbl: table\nsubfield: any\nReturns: table\nlocal tble = {\n {\n myCategory = 'first',\n someValue = 1,\n },\n {\n myCategory = 'second',\n someValue = 2,\n },\n}\nlocal mapped = qbx.table.mapBySubfield(tble, 'myCategory')\nprint(json.encode(mapped))\n-- Output: { \"first\": [{ myCategory: \"first\", someValue: 1 }], \"second\": [{ myCategory: \"second\", someValue: 2 }] }","getvehicleplate#getVehiclePlate":"Returns the number plate of the given vehicle, or nil if the vehicle or plate does not exist.\nqbx.getVehiclePlate(vehicle)\nvehicle: integer\nReturns: string?","generaterandomplate#generateRandomPlate":"Generates and returns a random number plate with the given pattern. \nNote that the generated plate may or may not be already used by an existing vehicle.\nFor more info about the pattern see lib.string.random from ox_lib.\nqbx.generateRandomPlate(pattern)\npattern?: string\nReturns: string","getcardinaldirection#getCardinalDirection":"Returns the cardinal direction that the given entity is staring towards.\n North\n 45° 0° 315°\n \\ .- - - - - - -. /\n X X\n .' \\ / '.\n | \\ / |\nWest | X | East\n | / \\ |\n '. / \\ .'\n X X\n / '- - - - - - -' \\\n 135° 225°\n South\n(art inspired by SET_PED_TURNING_THRESHOLDS)\nqbx.getCardinalDirection(entity)\nentity: integer\nReturns: 'North' | 'South' | 'East' | 'West'","arraycontains#array.contains":"Returns true if the given array contains the given value\nqbx.array.contains(arr, value)\narr: table\nvalue: any\nReturns: boolean"}},"/resources/qbx_core/modules/playerdata":{"title":"playerdata","data":{"":"Adds a QBX.PlayerData global and keeps it updated.","installation#Installation":"Add @qbx_core/modules/playerdata.lua to client_scripts in your fxmanifest."}},"/resources/qbx_core/modules/logger":{"title":"logger","data":{"":"See the ox_lib Logger for further details.\nAdds a logger that logs to Discord if a webhook is given, and with ox_lib otherwise.\nlocal logger = require '@qbx_core.modules.logger'\nlogger.log(log)\nlog: table\nsource: string\nThe source of the log; usually a player ID or the name of a resource.\nevent: string\nThe action or event being logged; usually a verb describing what the name is doing.\nExample: 'SpawnVehicle'\nmessage: string\nA message attached to the log.\nwebhook?: string\nDiscord logs only.\nThe URL of the webhook that this should log to.\ncolor?: string\nDiscord logs only.\nThe color the message should be.\ntags?: string[]\nDiscord logs only.\nTags to be added to the Discord message.\nExample: { '<@&roleid>', '<@userid>', '@everyone' }","example-usage#Example Usage":"local logger = require '@qbx_core.modules.logger'\nlogger.log({\n source = 'my source',\n event = 'my event',\n message = 'my message',\n tags = { '@everyone' },\n})"}},"/resources/qbx_core/types/gang":{"title":"Gang","data":{"":"Extends: GangData","fields#Fields":"grades: table"}},"/resources/qbx_core/types/gang_data":{"title":"GangData","data":{"fields#Fields":"label: string"}},"/resources/qbx_core/types/gang_grade_data":{"title":"GangGradeData","data":{"fields#Fields":"name: string\nisboss?: boolean\nbankAuth?: boolean"}},"/resources/qbx_core/types/job":{"title":"Job","data":{"":"Extends: JobData","fields#Fields":"grades: table"}},"/resources/qbx_core/types/job_data":{"title":"JobData","data":{"fields#Fields":"label: string\ntype?: string\ndefaultDuty: boolean\noffDutyPay: boolean"}},"/resources/qbx_core/types/job_grade_data":{"title":"JobGradeData","data":{"fields#Fields":"name: string\nisboss?: boolean\nbankAuth?: boolean\npayment: number"}},"/resources/qbx_core/types/player":{"title":"Player","data":{"fields#Fields":"Functions: table\nPlayerData: PlayerData\nOffline: boolean","functions#Functions":"","setjob#SetJob":"Attempts to overwrite the player's primary job and grade, and returns whether it was successful.\nPlayer.Functions.SetJob(jobName, grade)\njobName: string\ngrade: integer\nReturns: boolean","setgang#SetGang":"Attempts to overwrite the player's primary gang and grade, and returns whether it was successful.\nPlayer.Functions.SetGang(gangName, grade)\ngangName: string\ngrade: integer\nReturns: boolean","setjobduty#SetJobDuty":"Sets the player's duty.\nPlayer.Functions.SetJobDuty(onDuty)\nonDuty: boolean","setplayerdata#SetPlayerData":"Overwrites the given top level key of the PlayerData with the given value.\nPlayer.Functions.SetPlayerData(key, val)\nkey: string\nval: any","setmetadata#SetMetaData":"Stores the given key value pair in the player's metadata.\nPlayer.Functions.SetMetaData(meta, val)\nmeta: string\nval: any","getmetadata#GetMetaData":"Returns the value pair of the given key in the player's metadata.\nPlayer.Functions.GetMetaData(meta)\nmeta: string\nReturns: any","addjobreputation#AddJobReputation":"Adds the given amount to the player's job reputation.\nPlayer.Functions.AddJobReputation(amount)\namount: number","addmoney#AddMoney":"Attempts to add the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.AddMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","removemoney#RemoveMoney":"Attempts to subtract the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.RemoveMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","setmoney#SetMoney":"Attempts to set the given amount of money as the given type, and returns whether it was successful.\nPlayer.Functions.SetMoney(moneytype, amount, reason)\nmoneytype: 'cash' | 'bank' | 'crypto'\namount: number\nreason?: string\nReturns: boolean","getmoney#GetMoney":"Returns the amount of money of the given type, or false if the type doesn't exist.\nPlayer.Functions.GetMoney(moneytype)\nmoneytype: 'cash' | 'bank' | 'crypto'\nReturns: number | false","setcreditcard#SetCreditCard":"Sets the player's owned credit card number. \nDoes not give the player's character any items.\nPlayer.Functions.SetCreditCard(cardNumber)\ncardNumber: number","save#Save":"Saves the player's current character info to the database.\nPlayer.Functions.Save()"}},"/resources/qbx_core/types/player_data":{"title":"PlayerData","data":{"":"Extends: PlayerEntity","fields#Fields":"source?: integer\nPresent if the player is online.\noptin?: boolean\nPresent if the player is online."}},"/resources/qbx_core/types/player_entity":{"title":"PlayerEntity","data":{"fields#Fields":"citizenid: string\nlicense: string\nname: string\nmoney: table\ncash: number\nbank: number\ncrypto: number\ncharinfo: table\nfirstname: string\nlastname: string\nbirthdate: string\nnationality: string\ncid: integer\ngender: integer\nbackstory: string\nphone: string\naccount: string\ncard: number\njob: table\nname: string\nlabel: string\npayment: number\ntype: string\nonduty: boolean\nisboss: boolean\ngrade: table\nname: string\nlevel: number\njobs: table maps job name to job grade that the player has. Unemployed not included.\ngang: table\nname: string\nlabel: string\nisboss: boolean\ngrade: table\nname: string\nlevel: number\ngangs: table maps gang name to gang grade that the player has. None gang not included.\nposition: vector4\nmetadata: table\nhealth: number\narmor: number\nhunger: number\nthirst: number\nstress: number\nisdead: boolean\ninlaststand: boolean\nishandcuffed: boolean\ntracker: boolean\ninjail: number\njailitems: table\nstatus: table\nphone: table\nbackground: any\nprofilepicture: any\nbloodtype: string\ndealerrep: number\ncraftingrep: number\nattachmentcraftingrep: number\ncurrentapartment?: integer\njobrep: table\ntow: number\ntrucker: number\ntaxi: number\nhotdog: number\ncallsign: string\nfingerprint: string\nwalletid: string\ncriminalrecord: table\nhasRecord: number\ndate?: table\nlicences: table\nid: boolean\ndriver: boolean\nweapon: boolean\ninside: table\nhouse?: any\napartment: table\napartmentType?: any\napartmentId?: integer\nphonedata: table\nSerialNumber: string\nInstalledApps: table\ncid: integer\nitems: table\nDeprecated.\nlastLoggedOut: integer"}},"/resources/qbx_core/types/vehicle":{"title":"Vehicle","data":{"fields#Fields":"name: string\nbrand: string\nmodel: string\nprice: number\ncategory: string\nhash: integer"}},"/resources/qbx_core/types/weapon":{"title":"Weapon","data":{"fields#Fields":"name: string\nlabel: string\nweapontype: string\nammotype?: string\ndamagereason: string"}},"/resources/qbx_divegear":{"title":"qbx_divegear","data":{}},"/resources/qbx_diving":{"title":"qbx_diving","data":{}},"/resources/qbx_garages":{"title":"qbx_garages","data":{}},"/resources/qbx_diving/events/server":{"title":"Server Events","data":{"":"These events MUST NOT be triggered by any other scripts.","non-networked-events#Non-Networked Events":"","qbx_divingservercoraltaken#qbx_diving:server:coralTaken":"Triggered when a player has collected coral from the sea bed.\nAddEventHandler('qbx_diving:server:coralTaken', function(coords) end)\ncoords: vector3","networked-events#Networked Events":"","qbx_divingserversellcoral#qbx_diving:server:sellCoral":"Triggered when a player attempts to sell coral. \nDoes not guarantee that the player has any coral in their inventory.\nRegisterNetEvent('qbx_diving:server:sellCoral', function() end)"}},"/resources/qbx_garages/callbacks/client":{"title":"Server Callbacks","data":{"":"Can be used to support a custom UI. Called from the client.","getgarages#getGarages":"Get the currently registered garages\nlib.callback.await('qbx_garages:server:getGarages')","getgaragevehicles#getGarageVehicles":"Get vehicles that the player has access to in the given garage. Does not return vehicles currently spawned in the world.\nlib.callback.await('qbx_garages:server:getGarageVehicles', false, garageName)","isparkable#isParkable":"Returns true if the player can access the garage and the vehicle matches the garage filters\nlib.callback.await('qbx_garages:server:isParkable', false, garageName, netId)","parkvehicle#parkVehicle":"Stores the vehicle in the garage and deletes the entity from the world\nlib.callback.await('qbx_garages:server:parkVehicle', false, netId, props, garageName)","paydepotprice#payDepotPrice":"Takes vehicle's depot price from cash or bank and returns true if player paid. Does not update the vehicle's depot price after payment.\nlib.callback.await('qbx_garages:server:payDepotPrice', false, vehicleId)","spawnvehicle#spawnVehicle":"Spawns the vehicle entity in the world at the given garage's access point. Checks that the player has required access permissions to do so.\nAttempts to give the player vehicle keys.\nlib.callback.await('qbx_garages:server:spawnVehicle', false, vehicleId, garageName, accessPointIndex)"}},"/resources/qbx_loading":{"title":"qbx_loading","data":{}},"/resources/qbx_management":{"title":"qbx_management","data":{}},"/resources/qbx_management/exports/client":{"title":"Client Exports","data":{"openbossmenu#OpenBossMenu":"Open the primary job or gang boss menu as long as you have the proper permissions.\nexports.qbx_management:OpenBossMenu(groupType)\ngroupType: 'gang' | 'job'"}},"/resources/qbx_radio":{"title":"qbx_radio","data":{}},"/resources/qbx_smallresources":{"title":"qbx_smallresources","data":{}},"/resources/qbx_truckrobbery":{"title":"qbx_truckrobbery","data":{}},"/resources/qbx_vehicles":{"title":"qbx_vehicles","data":{}},"/resources/qbx_vehicles/exports/hooks":{"title":"Hooks","data":{"":"Event hooks allow 3rd party resources to define new behavior without modifying qbx_vehicles code directly.","registerhook#registerHook":"Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event\nexports.qbx_vehicles:registerHook(eventName, function(payload) end)\neventName: string\npayload: table\nReturn:\nhookId: number","createplayervehicle#createPlayerVehicle":"Triggered when a new vehicle is created. Return false to cancel the creation\npayload: table\ncitizenid: string\ngarage: string\nprops: table","changevehicleowner#changeVehicleOwner":"Triggered when a vehicle's owner changes. Return false to cancel the change.\npayload: table\nvehicleId: integer\nnewCitizenId: string","removehooks#removeHooks":"Remove a previously registered hook by it's id.\nIf no id is provided then all hooks registered by the resource are removed.\nexports.qbx_vehicles:removeHooks(id)\nid?: number"}},"/resources/qbx_vehicles/exports/server":{"title":"Server Exports","data":{"createplayervehicle#CreatePlayerVehicle":"Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner.\nexports.qbx_vehicles:CreatePlayerVehicle(request)\nrequest: table\nmodel: string\ncitizenid?: string\ngarage?: string\nprops?: ox_lib vehicle properties\nReturns:\nvehicleId?: integer\nerrorResult?: {code: string, message: string}\nError Codes: N/A","deleteplayervehicles#DeletePlayerVehicles":"Delete player vehicles matching some identifier. Only handles deleting from the database.\nexports.qbx_vehicles:DeletePlayerVehicles(idType, idValue)\nidType: 'citizenid' | 'license' | 'plate' | 'vehicleId'\nidValue: string | number\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes: N/A","doesplayervehicleplateexist#DoesPlayerVehiclePlateExist":"Returns whether a player owned vehicle has the matching plate\nexports.qbx_vehicles:DoesPlayerVehiclePlateExist(plate)\nplate: string\nReturns: boolean","getplayervehicle#GetPlayerVehicle":"Queries a player vehicle by vehicleId. Can optionally pass filter criteria.\nexports.qbx_vehicles:GetPlayerVehicle(vehicleId, filters)\nvehicleId: number\nfilters?: PlayerVehiclesFilters\nReturns: PlayerVehicle?","getplayervehicles#GetPlayerVehicles":"Queries player vehicles by various filter criteria. If no filters are set, queries all vehicles.\nexports.qbx_vehicles:GetPlayerVehicles(filters)\nfilters?: PlayerVehiclesFilters\nReturns: PlayerVehicle[]","setplayervehicleowner#SetPlayerVehicleOwner":"Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner.\nexports.qbx_vehicles:SetPlayerVehicleOwner(vehicleId, citizenid)\nvehicleId: integer\ncitizenid?: string\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes: N/A","getvehicleidbyplate#GetVehicleIdByPlate":"Looks up the vehicleId with the given plate\nexports.qbx_vehicles:GetVehicleIdByPlate(plate)\nplate: string\nReturns vehicleId?: integer","savevehicle#SaveVehicle":"Update an existing vehicle's attributes\nexports.qbx_vehicles:SaveVehicle(vehicle, options)\nvehicle: number entity\noptions: table\ngarage?: string\nstate?: VehicleState\ndepotPrice?: integer\nprops?: ox_lib vehicle properties\nReturns:\nsuccess: boolean\nerrorResult?: {code: string, message: string}\nError Codes:\nnot_owned: unable to locate the vehicle's row in the player_vehicles table","common-types#Common Types":"","vehiclestate#VehicleState":"OUT = 0\nGARAGED = 1\nIMPOUNDED = 2","playervehicle#PlayerVehicle":"id: integer\ncitizenid?: string\nmodelName: string\ngarage: string\nstate: VehicleState\ndepotPrice: integer\nprops: ox_lib vehicle properties","playervehiclesfilters#PlayerVehiclesFilters":"citizenid?: string\nstates?: VehicleState | VehicleState[]\ngarage?: string"}},"/installation":{"title":"Installation","data":{"":"We highly recommend using txAdmin to install your FiveM server. \nFor detailed instructions, refer to Setting up a server using txAdmin.","download-the-server#Download the server":"Download the latest FiveM artifacts and extract the files.","start-the-server-installation#Start the server installation":"Run FXServer.exe to begin the installation and follow all the steps.","deploy-the-recipe#Deploy the recipe":"When prompted, select Remote URL Template:Use the raw recipe link shown below.\nThe Qbox Unstable Recipe comes with all of our actively maintained resources. \nUse this if you're looking for a complete server base.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox.yaml\nThe Qbox Lean Recipe is a stripped down version of Qbox, without excess resources,\nand it does not include any criminal or civilian activities. \nUse this if you're looking for a smaller server base to build off of.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox-lean.yaml\nThe Qbox Stable Recipe comes with the resources we consider stable, based on our Release Readiness guidelines. \nUse this if you're looking for the most stable experience.\nSince many Qbox resources are still a work-in-progress, some important resources are still considered unstable,\nand are currently missing from this recipe. This may result in various issues.\nYou are expected to find alternatives by yourself, or to download the unstable versions of those resources.\nhttps://raw.githubusercontent.com/Qbox-project/txAdminRecipe/main/qbox-stable.yaml","run-the-server#Run the server":"Once you have completed all of the installation steps, run the server."}},"/resources/qbx_core/exports/server":{"title":"Server Exports","data":{"":"Some of these exports use custom types.\nYou can learn more about those in the Types section of this resource.","createjobs#CreateJobs":"Adds or overwrites the given jobs.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:CreateJobs(jobs)\njobs: table","removejob#RemoveJob":"Removes the given job.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveJob(jobName)\njobName: string\nReturns:\nsuccess: boolean\nmessage: 'success' | 'invalid_job_name' | 'job_not_exists'","creategangs#CreateGangs":"Adds or overwrites the given gangs.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:CreateGangs(gangs)\ngangs: table","removegang#RemoveGang":"Removes the given gang.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveGang(gangName)\ngangName: string\nReturns:\nsuccess: boolean\nmessage: 'success' | 'invalid_gang_name' | 'gang_not_exists'","getcoreversion#GetCoreVersion":"Returns the current version of qbx_core set in its fxmanifest.\nexports.qbx_core:GetCoreVersion(InvokingResource)\nInvokingResource: string\nReturns: string","exploitban#ExploitBan":"Bans the given player for the given reason.\nexports.qbx_core:ExploitBan(playerId, origin)\nplayerId: integer\norigin: string","getsource#GetSource":"Returns the ID of the player that has the given identifier, or 0 if the player is not in the server.\nexports.qbx_core:GetSource(identifier)\nidentifier: string\nReturns: integer","getplayer#GetPlayer":"Returns the Player object for the given player ID or identifier.\nexports.qbx_core:GetPlayer(source)\nsource: integer\nReturns: Player?","getplayerbycitizenid#GetPlayerByCitizenId":"Returns the Player object for the given citizenid.\nexports.qbx_core:GetPlayerByCitizenId(citizenid)\ncitizenid: string\nReturns: Player?","getplayerbyphone#GetPlayerByPhone":"Returns the Player object for the given phone number.\nexports.qbx_core:GetPlayerByPhone(number)\nnumber: string\nReturns: Player?","getqbplayers#GetQBPlayers":"Returns the player ID to Player object map of logged-in players.\nexports.qbx_core:GetQBPlayers()\nReturns: table","getplayersdata#GetPlayersData":"Returns all PlayerData tables for all active players.\nexports.qbx_core:GetPlayersData()\nReturns: PlayerData[]","getdutycountjob#GetDutyCountJob":"Returns the amount of players that are on-duty in the given job, and a list of their IDs.\nexports.qbx_core:GetDutyCountJob(job)\njob: string\nReturns:\ncount: integer\nplayers: integer[]","getdutycounttype#GetDutyCountType":"Returns the amount of players that are on-duty in the given job type, and a list of their IDs.\nexports.qbx_core:GetDutyCountType(jobType)\njobType: string\nReturns:\ncount: integer\nplayers: integer[]","getbucketobjects#GetBucketObjects":"Returns the player to bucket and entity to bucket maps.\nexports.qbx_core:GetBucketObjects()\nReturns:\nplayerBuckets: table\nentityBuckets: table","setplayerbucket#SetPlayerBucket":"Sets the given player to the given bucket. \nReturns false if one of the parameters is nil, and true otherwise.\nexports.qbx_core:SetPlayerBucket(source, bucket)\nsource: integer\nbucket: integer\nReturns: boolean","setentitybucket#SetEntityBucket":"Sets the given entity (e.g. ped, vehicle, prop, etc.) to the given bucket. \nReturns false if one of the parameters is nil, and true otherwise.\nexports.qbx_core:SetEntityBucket(entity, bucket)\nentity: integer\nbucket: integer\nReturns: boolean","getplayersinbucket#GetPlayersInBucket":"Returns a list of all the players in the given bucket, or false if there are no known player buckets.\nexports.qbx_core:GetPlayersInBucket(bucket)\nbucket: integer\nReturns: integer[] | false","getentitiesinbucket#GetEntitiesInBucket":"Returns a list of all the entities in the given bucket, or false if there are no known entity buckets.\nexports.qbx_core:GetPlayersInBucket(bucket)\nbucket: integer\nReturns: integer[] | false","createuseableitem#CreateUseableItem":"Registers the given function to run when the given item is used.\nexports.qbx_core:CreateUseableItem(item, data)\nitem: string\ndata: fun(source: integer, item: unknown)","canuseitem#CanUseItem":"Returns the data set to run when the given item is used, or nil if none exists.\nexports.qbx_core:CanUseItem(item)\nitem: string\nReturns: unknown","iswhitelisted#IsWhitelisted":"Returns whether the given player is whitelisted.\nexports.qbx_core:IsWhitelisted(source)\nsource: integer\nReturns: boolean","addpermission#AddPermission":"Deprecated as of v1.8.0. Use ox_lib ACE permissions instead\nAdds the given permission to the given player.\nexports.qbx_core:AddPermission(source, permission)\nsource: integer\npermission: string","removepermission#RemovePermission":"Deprecated as of v1.8.0. Use ox_lib ACE permissions instead\nRemoves the given permission from the given player.\nexports.qbx_core:RemovePermission(source, permission)\nsource: integer\npermission: string","haspermission#HasPermission":"Deprecated as of v1.8.0. Use ACE permissions instead.\nReturns whether the given player has the given permission.\nexports.qbx_core:HasPermission(source, permission)\nsource: integer\npermission: string\nReturns: boolean","getpermission#GetPermission":"Deprecated as of v1.8.0. Use ACE permissions instead.\nGets the given player's permissions.\nexports.qbx_core:GetPermission(source)\nsource: integer\nReturns: table","isoptin#IsOptin":"Returns whether the given player is optin to admin reports.\nexports.qbx_core:IsOptin(source)\nsource: integer\nReturns: boolean","toggleoptin#ToggleOptin":"Opts the given player in and out of admin reports.\nexports.qbx_core:ToggleOptin(source)\nsource: integer","isplayerbanned#IsPlayerBanned":"Returns whether the given player is banned, and a message to be shown to the player.\nexports.qbx_core:IsPlayerBanned(source)\nsource: integer\nReturns:\nbanned: boolean\nplayerMessage: string\nA message written to be shown to the player.","notify#Notify":"See lib.notify for more details.\nText box popup for the given player which disappears after a given amount of time.\nexports.qbx_core:Notify(source, text, notifyType, duration, subTitle, notifyPosition, notifyStyle, notifyIcon, notifyIconColor)\nsource: integer\ntext: table | string\nThe text of the notification.\nCan be a string, or a table containing:\ntext?: string\ncaption?: string\nnotifyType?: 'inform' | 'error' | 'success' | 'warning'\nDefault: 'inform'\nduration?: integer\nThe duration in milliseconds for which the notification will remain on screen.\nDefault: 5000\nsubTitle?: string\nAdditional text under the title.\nnotifyPosition?: 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left' | 'center-right' | 'center-left'\nDefault: top-right (changable in config)\nnotifyStyle?: table\nCustom styling. Refer to lib.notify.\nnotifyIcon?: string\nFont Awesome 6 icon name.\nnotifyIconColor?: string\nCustom color for notifyIcon.","login#Login":"Logs into an existing character or creates a new one, and returns whether it was successful. \nThis is the preferred function for creating characters if the owning player is online.\nexports.qbx_core:Login(source, citizenid, newData)\nsource: integer\ncitizenid?: string\nnewData?: PlayerEntity\nReturns: boolean","getofflineplayer#GetOfflinePlayer":"Gets a Player object using the given citizenid and returns it, or nil if nothing was found.\nexports.qbx_core:GetOfflinePlayer(citizenid)\ncitizenid: string\nReturns: Player?","logout#Logout":"Logs the given player out of their current character.\nexports.qbx_core:Logout(source)\nsource: integer","createplayer#CreatePlayer":"Creates a new character and saves it to the database.\nexports.qbx_core:CreatePlayer(playerData, offline)\nplayerData: PlayerData\noffline: boolean\nReturns: Player","save#Save":"Save the given player's info to the database.\nexports.qbx_core:Save(source)\nsource: integer","saveoffline#SaveOffline":"Saves the given PlayerData to the database.\nexports.qbx_core:SaveOffline(playerData)\nplayerData: PlayerEntity","deletecharacter#DeleteCharacter":"Delete a character permanently by the given citizenid.\nThis action cannot be undone.\nexports.qbx_core:DeleteCharacter(citizenid)\ncitizenid: string","generateuniqueidentifier#GenerateUniqueIdentifier":"Returns unique values for player identifiers.\nexports.qbx_core:GenerateUniqueIdentifier(type)\ntype: 'citizenid' | 'AccountNumber' | 'PhoneNumber' | 'FingerId' | 'WalletId' | 'SerialNumber'\nReturns: string | number","upsertjobdata#UpsertJobData":"Inserts or overwrites fields of the given job temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertJobData(jobName, data)\njobName: string\ndata: JobData","upsertgangdata#UpsertGangData":"Inserts or overwrites fields of the given gang temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertGangData(gangName, data)\ngangName: string\ndata: GangData","upsertjobgrade#UpsertJobGrade":"Inserts or overwrites fields of the given job's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertJobGrade(jobName, grade, data)\njobName: string\ngrade: integer\ndata: JobGradeData","upsertganggrade#UpsertGangGrade":"Inserts or overwrites fields of the given gang's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:UpsertGangGrade(gangName, grade, data)\ngangName: string\ngrade: integer\ndata: GangGradeData","removejobgrade#RemoveJobGrade":"Removes the given job's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveJobGrade(jobName, grade)\njobName: string\ngrade: integer","removeganggrade#RemoveGangGrade":"Removes the given gang's grade temporarily.\nThis is a runtime-only change. This won't persist across restarts and won't modify files.\nexports.qbx_core:RemoveGangGrade(gangName, grade)\ngangName: string\ngrade: integer","setplayerprimaryjob#SetPlayerPrimaryJob":"Sets the given player's primary job to the given job, only if they already have it.\nexports.qbx_core:SetPlayerPrimaryJob(citizenid, jobName)\ncitizenid: string\njobName: string","addplayertojob#AddPlayerToJob":"Adds the given player to the given job, or overwrites their grade if they're already in that job.\nexports.qbx_core:AddPlayerToJob(citizenid, jobName, grade)\ncitizenid: string\njobName: string\ngrade: integer","removeplayerfromjob#RemovePlayerFromJob":"Removes the given player from the given job.\nAlso updates the given player's primary job to unemployed if the given job is the player's primary.\nexports.qbx_core:RemovePlayerFromJob(citizenid, jobName)\ncitizenid: string\njobName: string","setplayerprimarygang#SetPlayerPrimaryGang":"Sets the given player's primary gang to the given gang, only if they already have it.\nexports.qbx_core:SetPlayerPrimaryGang(citizenid, gangName)\ncitizenid: string\ngangName: string","addplayertogang#AddPlayerToGang":"Adds the given player to the given gang, or overwrites their grade if they're already in that gang.\nexports.qbx_core:AddPlayerToGang(citizenid, gangName, grade)\ncitizenid: string\ngangName: string\ngrade: integer","removeplayerfromgang#RemovePlayerFromGang":"Removes the given player from the given gang.\nAlso updates the given player's primary gang to no gang if the given gang is the player's primary.\nexports.qbx_core:RemovePlayerFromGang(citizenid, gangName)\ncitizenid: string\ngangName: string","hasprimarygroup#HasPrimaryGroup":"Checks if the given player's current Job/Gang or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty\nexports.qbx_core:HasPrimaryGroup(source, filter)\nsource: integer\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","hasgroup#HasGroup":"Checks if the given player's list of groups (Jobs/Gangs) or citizenid matches against a single group, array of group, or group/grade or list of citizenids. Does not check if player is on or off duty for any particular filter\nexports.qbx_core:HasGroup(source, filter)\nsource: integer\nfilter: string or string[] or table\nA group/citizenid, array of groups/citizenids, or pairs of groups-grades required to pass the check.\nReturns:\nsuccess: boolean","getgroups#GetGroups":"Returns a combined table of all the groups a given player currently has.\nexports.qbx_core:GetGroups(source)\nsource: integer\nReturns:\ntable","isgradeboss#IsGradeBoss":"Returns boolean on if a given group/grade combination is a boss grade. Currently this is based on the presence of a isboss boolean being true in the grade definition\nexports.qbx_core:IsGradeBoss(group, grade)\ngroup: string\ngrade: integer\nReturns:\nsuccess: boolean","getgroupmembers#GetGroupMembers":"Returns a table of all citizenids and associated grade for a given group and type\ngroup: string\ntype: job|gang\nReturns:\ntable","deletevehicle#DeleteVehicle":"Deletes the vehicle entity from the game world. Preferred over the native DeleteEntity function as DeleteVehicle will remove persistence from the vehicle to allow it to be deleted.\nexports.qbx_core:DeleteVehicle(entity)\nentity: number","enablepersistence#EnablePersistence":"Marks a vehicle to be persisted, which will respawn the vehicle with the same properties if it is deleted by the server. Idempotent.\nexports.qbx_core:EnablePersistence(entity)\nentity: number","disablepersistence#DisablePersistence":"Removes the persistence attribute from a vehicle, allowing it to be deleted without being respawned. Idempotent. No-op if the vehicle is not already persisted.\nexports.qbx_core:DisablePersistence(entity)\nentity: number","getvehicleclass#GetVehicleClass":"Equivalent to GetVehicleClass client native, but for the server. Works by asking a random client for all the vehicle models and their classes, then caching this while the server is online.\nDue to this, may not work if there is no client on to query.\nexports.qbx_core:GetVehicleClass(hash)\nhash: number"}},"/resources/qbx_garages/exports/server":{"title":"Server Exports","data":{"registergarage#RegisterGarage":"Registers a garage at runtime. This is an alternative to defining them in the qbx_garages config.\nexports.qbx_garages:RegisterGarage(name, config)","setvehiclegarage#SetVehicleGarage":"Sets the vehicle's garage. Only affects the database.\nexports.qbx_garages:SetVehicleGarage(vehicleId, garageName)","setvehicledepotprice#SetVehicleDepotPrice":"Sets the price to take the car out of the depot\nexports.qbx_garages:SetVehicleDepotPrice(vehicleId, depotPrice)","getgarages#GetGarages":"Returns the registered garages\nexports.qbx_garages:GetGarages()"}},"/resources/qbx_management/exports/server":{"title":"Server Exports","data":{"registerbossmenu#RegisterBossMenu":"Creates a boss menu.\nThis is a runtime-only change.\nThis won't persist across restarts and won't modify files.\nexports.qbx_management:RegisterBossMenu(menuInfo)\nmenuInfo: table\ngroupName: string\ntype: 'gang' | 'job'\ncoords: vector3\nsize?: vector3\nDefault: vec3(1.5, 1.5, 1.5)\nrotation?: number\nDefault: 0.0"}}} \ No newline at end of file diff --git a/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-42c86e901f723778.js b/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-42c86e901f723778.js new file mode 100644 index 0000000..0d38612 --- /dev/null +++ b/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-42c86e901f723778.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[558],{415:function(e,s,l){(window.__NEXT_P=window.__NEXT_P||[]).push(["/resources/qbx_core/modules/lib/shared",function(){return l(3666)}])},3666:function(e,s,l){"use strict";l.r(s),l.d(s,{__toc:function(){return t}});var n=l(2676),a=l(6318),r=l(4603),i=l(9323);let t=[{depth:2,value:"armsWithoutGloves.male",id:"armswithoutglovesmale"},{depth:2,value:"armsWithoutGloves.female",id:"armswithoutglovesfemale"},{depth:2,value:"string.trim",id:"stringtrim"},{depth:2,value:"string.capitalize",id:"stringcapitalize"},{depth:2,value:"math.round",id:"mathround"},{depth:2,value:"table.size",id:"tablesize"},{depth:2,value:"table.mapBySubfield",id:"tablemapbysubfield"},{depth:2,value:"getVehiclePlate",id:"getvehicleplate"},{depth:2,value:"generateRandomPlate",id:"generaterandomplate"},{depth:2,value:"getCardinalDirection",id:"getcardinaldirection"},{depth:2,value:"array.contains",id:"arraycontains"}];function c(e){let s=Object.assign({h1:"h1",h2:"h2",p:"p",br:"br",a:"a",code:"code",pre:"pre",span:"span",ul:"ul",li:"li"},(0,r.a)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{children:"Shared Lib"}),"\n",(0,n.jsx)(s.h2,{id:"armswithoutglovesmale",children:"armsWithoutGloves.male"}),"\n",(0,n.jsxs)(s.p,{children:["A set of male torso drawable variations that don't have gloves. ",(0,n.jsx)(s.br,{}),"\n","Used for ",(0,n.jsx)(s.a,{href:"./client#iswearinggloves",children:(0,n.jsx)(s.code,{children:"qbx.isWearingGloves"})})," and backwards compatibility."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.armsWithoutGloves.male"})})})}),"\n",(0,n.jsxs)(s.p,{children:["Type: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.h2,{id:"armswithoutglovesfemale",children:"armsWithoutGloves.female"}),"\n",(0,n.jsxs)(s.p,{children:["A set of female torso drawable variations that don't have gloves. ",(0,n.jsx)(s.br,{}),"\n","Used for ",(0,n.jsx)(s.a,{href:"./client#iswearinggloves",children:(0,n.jsx)(s.code,{children:"qbx.isWearingGloves"})})," and backwards compatibility."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.armsWithoutGloves.female"})})})}),"\n",(0,n.jsxs)(s.p,{children:["Type: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.h2,{id:"stringtrim",children:"string.trim"}),"\n",(0,n.jsx)(s.p,{children:"Returns the given string with its trailing whitespaces removed."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.string."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"trim"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(str)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["str: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"stringcapitalize",children:"string.capitalize"}),"\n",(0,n.jsx)(s.p,{children:"Returns the given string with its first character capitalized."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.string."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"capitalize"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(str)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["str: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"mathround",children:"math.round"}),"\n",(0,n.jsx)(s.p,{children:"Rounds and returns the given number."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.math."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"round"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(num, decimalPlaces)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["num: ",(0,n.jsx)(s.code,{children:"number"})]}),"\n",(0,n.jsxs)(s.li,{children:["decimalPlaces?: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"number"})]}),"\n",(0,n.jsx)(s.h2,{id:"tablesize",children:"table.size"}),"\n",(0,n.jsx)(s.p,{children:"Returns the number of items in a table. Useful for non-array tables."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"size"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tbl)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["tbl: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n",(0,n.jsx)(s.h2,{id:"tablemapbysubfield",children:"table.mapBySubfield"}),"\n",(0,n.jsx)(s.p,{children:"Maps and returns the values of the given table by the given subfield."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mapBySubfield"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tbl, subfield)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["tbl: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsxs)(s.li,{children:["subfield: ",(0,n.jsx)(s.code,{children:"any"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.code,{"data-language":"lua","data-theme":"default",children:[(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"local"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" tble "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" myCategory "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'first'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" someValue "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"1"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" },"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" myCategory "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'second'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" someValue "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"2"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" },"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:" "}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"local"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" mapped "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mapBySubfield"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tble, "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'myCategory'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:" "}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"print"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(json."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"encode"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(mapped))"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:'-- Output: { "first": [{ myCategory: "first", someValue: 1 }], "second": [{ myCategory: "second", someValue: 2 }] }'})})]})}),"\n",(0,n.jsx)(s.h2,{id:"getvehicleplate",children:"getVehiclePlate"}),"\n",(0,n.jsxs)(s.p,{children:["Returns the number plate of the given vehicle, or ",(0,n.jsx)(s.code,{children:"nil"})," if the vehicle or plate does not exist."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"getVehiclePlate"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(vehicle)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["vehicle: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string?"})]}),"\n",(0,n.jsx)(s.h2,{id:"generaterandomplate",children:"generateRandomPlate"}),"\n",(0,n.jsxs)(s.p,{children:["Generates and returns a random number plate with the given pattern. ",(0,n.jsx)(s.br,{}),"\n","Note that the generated plate may or may not be already used by an existing vehicle."]}),"\n",(0,n.jsx)(i.UW,{type:"info",children:(0,n.jsxs)(s.p,{children:["For more info about the pattern see ",(0,n.jsx)(s.a,{href:"https://overextended.dev/ox_lib/Modules/String/Shared#stringrandom",children:(0,n.jsx)(s.code,{children:"lib.string.random"})})," from ox_lib."]})}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"generateRandomPlate"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(pattern)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["pattern?: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"getcardinaldirection",children:"getCardinalDirection"}),"\n",(0,n.jsx)(s.p,{children:"Returns the cardinal direction that the given entity is staring towards."}),"\n",(0,n.jsx)(s.pre,{"data-language":"text","data-theme":"default",children:(0,n.jsxs)(s.code,{"data-language":"text","data-theme":"default",children:[(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" North"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" 45\xb0 0\xb0 315\xb0"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\ .- - - - - - -. /"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" X X"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" .' \\ / '."})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" | \\ / |"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"West | X | East"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" | / \\ |"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" '. / \\ .'"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" X X"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" / '- - - - - - -' \\"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" 135\xb0 225\xb0"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" South"})})]})}),"\n",(0,n.jsxs)(s.p,{children:["(art inspired by ",(0,n.jsx)(s.a,{href:"https://github.com/citizenfx/fivem/blob/0b61c93a3308360ea70d443398eab17f47453e11/code/components/extra-natives-five/src/PedExtraNatives.cpp#L390-L400",children:(0,n.jsx)(s.code,{children:"SET_PED_TURNING_THRESHOLDS"})}),")"]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"getCardinalDirection"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(entity)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["entity: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"'North' | 'South' | 'East' | 'West'"})]}),"\n",(0,n.jsx)(s.h2,{id:"arraycontains",children:"array.contains"}),"\n",(0,n.jsx)(s.p,{children:"Returns true if the given array contains the given value"}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.array."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"contains"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(arr, value)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["arr: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsxs)(s.li,{children:["value: ",(0,n.jsx)(s.code,{children:"any"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"boolean"})]})]})}s.default=(0,a.j)({MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:s}=Object.assign({},(0,r.a)(),e.components);return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)},pageOpts:{filePath:"pages/resources/qbx_core/modules/lib/shared.mdx",route:"/resources/qbx_core/modules/lib/shared",timestamp:1726761049e3,title:"Shared Lib",headings:t},pageNextRoute:"/resources/qbx_core/modules/lib/shared"})}},function(e){e.O(0,[6318,2888,9774,179],function(){return e(e.s=415)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-bdcddc5189249c1b.js b/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-bdcddc5189249c1b.js deleted file mode 100644 index c2885fb..0000000 --- a/_next/static/chunks/pages/resources/qbx_core/modules/lib/shared-bdcddc5189249c1b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[558],{415:function(e,s,l){(window.__NEXT_P=window.__NEXT_P||[]).push(["/resources/qbx_core/modules/lib/shared",function(){return l(3666)}])},3666:function(e,s,l){"use strict";l.r(s),l.d(s,{__toc:function(){return t}});var n=l(2676),a=l(6318),r=l(4603),i=l(9323);let t=[{depth:2,value:"armsWithoutGloves.male",id:"armswithoutglovesmale"},{depth:2,value:"armsWithoutGloves.female",id:"armswithoutglovesfemale"},{depth:2,value:"string.trim",id:"stringtrim"},{depth:2,value:"string.capitalize",id:"stringcapitalize"},{depth:2,value:"math.round",id:"mathround"},{depth:2,value:"table.size",id:"tablesize"},{depth:2,value:"table.mapBySubfield",id:"tablemapbysubfield"},{depth:2,value:"getVehiclePlate",id:"getvehicleplate"},{depth:2,value:"generateRandomPlate",id:"generaterandomplate"},{depth:2,value:"getCardinalDirection",id:"getcardinaldirection"}];function c(e){let s=Object.assign({h1:"h1",h2:"h2",p:"p",br:"br",a:"a",code:"code",pre:"pre",span:"span",ul:"ul",li:"li"},(0,r.a)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{children:"Shared Lib"}),"\n",(0,n.jsx)(s.h2,{id:"armswithoutglovesmale",children:"armsWithoutGloves.male"}),"\n",(0,n.jsxs)(s.p,{children:["A set of male torso drawable variations that don't have gloves. ",(0,n.jsx)(s.br,{}),"\n","Used for ",(0,n.jsx)(s.a,{href:"./client#iswearinggloves",children:(0,n.jsx)(s.code,{children:"qbx.isWearingGloves"})})," and backwards compatibility."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.armsWithoutGloves.male"})})})}),"\n",(0,n.jsxs)(s.p,{children:["Type: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.h2,{id:"armswithoutglovesfemale",children:"armsWithoutGloves.female"}),"\n",(0,n.jsxs)(s.p,{children:["A set of female torso drawable variations that don't have gloves. ",(0,n.jsx)(s.br,{}),"\n","Used for ",(0,n.jsx)(s.a,{href:"./client#iswearinggloves",children:(0,n.jsx)(s.code,{children:"qbx.isWearingGloves"})})," and backwards compatibility."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.armsWithoutGloves.female"})})})}),"\n",(0,n.jsxs)(s.p,{children:["Type: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.h2,{id:"stringtrim",children:"string.trim"}),"\n",(0,n.jsx)(s.p,{children:"Returns the given string with its trailing whitespaces removed."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.string."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"trim"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(str)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["str: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"stringcapitalize",children:"string.capitalize"}),"\n",(0,n.jsx)(s.p,{children:"Returns the given string with its first character capitalized."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.string."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"capitalize"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(str)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["str: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"mathround",children:"math.round"}),"\n",(0,n.jsx)(s.p,{children:"Rounds and returns the given number."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.math."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"round"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(num, decimalPlaces)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["num: ",(0,n.jsx)(s.code,{children:"number"})]}),"\n",(0,n.jsxs)(s.li,{children:["decimalPlaces?: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"number"})]}),"\n",(0,n.jsx)(s.h2,{id:"tablesize",children:"table.size"}),"\n",(0,n.jsx)(s.p,{children:"Returns the number of items in a table. Useful for non-array tables."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"size"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tbl)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["tbl: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n",(0,n.jsx)(s.h2,{id:"tablemapbysubfield",children:"table.mapBySubfield"}),"\n",(0,n.jsx)(s.p,{children:"Maps and returns the values of the given table by the given subfield."}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mapBySubfield"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tbl, subfield)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["tbl: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsxs)(s.li,{children:["subfield: ",(0,n.jsx)(s.code,{children:"any"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"table"})]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.code,{"data-language":"lua","data-theme":"default",children:[(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"local"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" tble "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" myCategory "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'first'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" someValue "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"1"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" },"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" myCategory "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'second'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" someValue "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"2"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:","})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" },"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:" "}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"local"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" mapped "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" qbx.table."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mapBySubfield"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(tble, "}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'myCategory'"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:" "}),"\n",(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"print"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(json."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"encode"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(mapped))"})]}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:'-- Output: { "first": [{ myCategory: "first", someValue: 1 }], "second": [{ myCategory: "second", someValue: 2 }] }'})})]})}),"\n",(0,n.jsx)(s.h2,{id:"getvehicleplate",children:"getVehiclePlate"}),"\n",(0,n.jsxs)(s.p,{children:["Returns the number plate of the given vehicle, or ",(0,n.jsx)(s.code,{children:"nil"})," if the vehicle or plate does not exist."]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"getVehiclePlate"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(vehicle)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["vehicle: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string?"})]}),"\n",(0,n.jsx)(s.h2,{id:"generaterandomplate",children:"generateRandomPlate"}),"\n",(0,n.jsxs)(s.p,{children:["Generates and returns a random number plate with the given pattern. ",(0,n.jsx)(s.br,{}),"\n","Note that the generated plate may or may not be already used by an existing vehicle."]}),"\n",(0,n.jsx)(i.UW,{type:"info",children:(0,n.jsxs)(s.p,{children:["For more info about the pattern see ",(0,n.jsx)(s.a,{href:"https://overextended.dev/ox_lib/Modules/String/Shared#stringrandom",children:(0,n.jsx)(s.code,{children:"lib.string.random"})})," from ox_lib."]})}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"generateRandomPlate"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(pattern)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["pattern?: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"string"})]}),"\n",(0,n.jsx)(s.h2,{id:"getcardinaldirection",children:"getCardinalDirection"}),"\n",(0,n.jsx)(s.p,{children:"Returns the cardinal direction that the given entity is staring towards."}),"\n",(0,n.jsx)(s.pre,{"data-language":"text","data-theme":"default",children:(0,n.jsxs)(s.code,{"data-language":"text","data-theme":"default",children:[(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" North"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" 45\xb0 0\xb0 315\xb0"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\ .- - - - - - -. /"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" X X"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" .' \\ / '."})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" | \\ / |"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"West | X | East"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" | / \\ |"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" '. / \\ .'"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" X X"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" / '- - - - - - -' \\"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" 135\xb0 225\xb0"})}),"\n",(0,n.jsx)(s.span,{className:"line",children:(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" South"})})]})}),"\n",(0,n.jsxs)(s.p,{children:["(art inspired by ",(0,n.jsx)(s.a,{href:"https://github.com/citizenfx/fivem/blob/0b61c93a3308360ea70d443398eab17f47453e11/code/components/extra-natives-five/src/PedExtraNatives.cpp#L390-L400",children:(0,n.jsx)(s.code,{children:"SET_PED_TURNING_THRESHOLDS"})}),")"]}),"\n",(0,n.jsx)(s.pre,{"data-language":"lua","data-theme":"default",children:(0,n.jsx)(s.code,{"data-language":"lua","data-theme":"default",children:(0,n.jsxs)(s.span,{className:"line",children:[(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"qbx."}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"getCardinalDirection"}),(0,n.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(entity)"})]})})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["entity: ",(0,n.jsx)(s.code,{children:"integer"})]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Returns: ",(0,n.jsx)(s.code,{children:"'North' | 'South' | 'East' | 'West'"})]})]})}s.default=(0,a.j)({MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:s}=Object.assign({},(0,r.a)(),e.components);return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)},pageOpts:{filePath:"pages/resources/qbx_core/modules/lib/shared.mdx",route:"/resources/qbx_core/modules/lib/shared",timestamp:1717468655e3,title:"Shared Lib",headings:t},pageNextRoute:"/resources/qbx_core/modules/lib/shared"})}},function(e){e.O(0,[6318,2888,9774,179],function(){return e(e.s=415)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/contributors.html b/contributors.html index 0fa4ca4..b79256e 100644 --- a/contributors.html +++ b/contributors.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Contributing

Contributing to Qbox

+

Qbox Project
\ No newline at end of file +

Consider following the Google JavaScript Style Guide (opens in a new tab) and the Google TypeScript Style Guide (opens in a new tab).


Qbox Project
\ No newline at end of file diff --git a/converting.html b/converting.html index dfedcc0..99fe78f 100644 --- a/converting.html +++ b/converting.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Converting from QBCore

Converting from QBCore

+
Converting from QBCore

Converting from QBCore

Check your job grades in qbx_core/shared/jobs.lua.

In Qbox, job grades are numbers without quotations, whereas in QBCore they are strings.

Configure ox_inventory and convert your database.

Back it up first! (see ox_inventory documentation (opens in a new tab))

Qbox has multicharacter built into qbx_core.

If you want to keep using your own multicharacter resource, configure qbx_core accordingly. Otherwise you can disable or delete your old multicharacter resource.

Qbox has a queue system built into qbx_core.

If you want to keep using your own queue system, specify set qbx:enablequeue "false" inside your cfg file. Otherwise you can disable or delete your old queue system.

Run the SQL file provided with qbx_core

This will alter the players table in the following ways:

    @@ -44,4 +44,4 @@

    exports['qb-core']:KeyPressed() -> lib.hideTextUI() exports['qb-core']:HideText() -> lib.hideTextUI() exports['qb-core']:DrawText(text, position) -> lib.showTextUI(text, { position = position }) -exports['qb-core']:ChangeText(text, position) -> lib.hideTextUI() lib.showTextUI(text, { position = position })


Qbox Project
\ No newline at end of file +exports['qb-core']:ChangeText(text, position) -> lib.hideTextUI() lib.showTextUI(text, { position = position })

Qbox Project
\ No newline at end of file diff --git a/developers.html b/developers.html index a1ac146..15bb24a 100644 --- a/developers.html +++ b/developers.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Developer's Guide

Developer's Guide

+
Developer's Guide

Developer's Guide

This guide is intended for those creating scripts using qbx_core. Following these principles will make it less likely for your script to break in future updates.

Do not access database tables owned by core

@@ -30,4 +30,4 @@

To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function

Do not manually set the properties after the vehicle exists. This is an anti-pattern and may cause issues if the client is not the entity owner.

Do not rely on unversioned/unreleased resources

-

We make no guarantees about rapid breaking changes in these resources. They are not stable.


Qbox Project
\ No newline at end of file +

We make no guarantees about rapid breaking changes in these resources. They are not stable.


Qbox Project
\ No newline at end of file diff --git a/faq.html b/faq.html index 7caad25..bba6212 100644 --- a/faq.html +++ b/faq.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
FAQ

Frequently Asked Questions

+
FAQ

Frequently Asked Questions

What are the differences between QBCore and Qbox?

While originally forked from QBCore, many Qbox resources have been refactored to improve code quality, enhance security, lower performance overhead, and integrate with overextended (opens in a new tab) resources. Where appropriate Qbox also integrates directly with other open source projects, rather than maintaining subpar resources in-house.

@@ -78,4 +78,4 @@

No you don't need to add items there unless they are being accessed in a resource via the bridge such as a script that is not ox_inventory compatible. Items added here will be automatically added to ox_inventory but you will have to manually add things like client/server exports in the ox_inventory/data/items.lua

Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)

This is due to a mismatch of collation types between the table being created and existing tables. Add the following to the end of the CREATE TABLE parts of the sql you are trying to add and that should fix the issue. You may need to drop the table and readd it for the changes to apply

-
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Qbox Project
\ No newline at end of file +
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Qbox Project
\ No newline at end of file diff --git a/index.html b/index.html index b48fd9b..c58683e 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Introduction

Introduction

+
Introduction

Introduction

Qbox is a FiveM roleplay framework created on September 27, 2022.

Starting as a QBCore fork, its goal was improving upon QBCore while maintaining backwards compatibility.
Today this framework strives to be much greater, and utilizes overextended's resources (opens in a new tab) to achieve its goals.

@@ -31,4 +31,4 @@

Contributions are always welcome, but we prefer quality over quantity! Please read our contributing guidelines (opens in a new tab) to learn how best to contribute.

Frequently Asked Questions

-

Check out the FAQ to learn more about Qbox.


Qbox Project
\ No newline at end of file +

Check out the FAQ to learn more about Qbox.


Qbox Project
\ No newline at end of file diff --git a/installation.html b/installation.html index 70fa8f5..c7e4e95 100644 --- a/installation.html +++ b/installation.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Installation

Installation

+
Installation

Installation

We highly recommend using txAdmin to install your FiveM server.
For detailed instructions, refer to Setting up a server using txAdmin (opens in a new tab).

-

Download the server

Download the latest FiveM artifacts (opens in a new tab) and extract the files.

Start the server installation

Run FXServer.exe to begin the installation and follow all the steps.

Deploy the recipe

When prompted, select Remote URL Template:

Deployment Type

Use the raw recipe link shown below.

Run the server

Once you have completed all of the installation steps, run the server.


Qbox Project
\ No newline at end of file +

Download the server

Download the latest FiveM artifacts (opens in a new tab) and extract the files.

Start the server installation

Run FXServer.exe to begin the installation and follow all the steps.

Deploy the recipe

When prompted, select Remote URL Template:

Deployment Type

Use the raw recipe link shown below.

Run the server

Once you have completed all of the installation steps, run the server.


Qbox Project
\ No newline at end of file diff --git a/release.html b/release.html index bb3bef9..50ac77c 100644 --- a/release.html +++ b/release.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Release Readiness

Release Readiness

+
Release Readiness

Release Readiness

Guidelines for indicating that a resource is stable and ready for release.

Code Quality

    @@ -59,4 +59,4 @@

    The resource has a .github folder with bug/suggestion templates, automated version updater & release script.
  1. The resource has a README which contains marketing material about the resource and it's features. Note that this is not technical documentation.
  2. The resource's public API (events & exports) are documented on the technical docs (here).
  3. -


Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_binoculars.html b/resources/qbx_binoculars.html index 10aa41b..b855e68 100644 --- a/resources/qbx_binoculars.html +++ b/resources/qbx_binoculars.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_core.html b/resources/qbx_core.html index 1717d98..b03ce9c 100644 --- a/resources/qbx_core.html +++ b/resources/qbx_core.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_core/convars.html b/resources/qbx_core/convars.html index aeefc0b..1fe19da 100644 --- a/resources/qbx_core/convars.html +++ b/resources/qbx_core/convars.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Convars

Convars

+
Resources
Convars

Convars

Below is a list of convars used within qbx_core. The value shown in the example is the default value for each convar.

qbx:enablebridge

@@ -64,4 +64,4 @@

When enabled, player owned vehicles deleted by the server which have persistence enabled on them (either via having spawned using qbx.spawnVehicle or through exports.qbx_core:EnablePersistence), will be respawned with the same properties as when the vehicle was deleted. This is a fix to a FiveM bug which can result in vehicles randomly being deleted; ensuring that vehicles that players leave, will be there when they return.

setr qbx:enableVehiclePersistence
-

Type: boolean


Qbox Project
\ No newline at end of file +

Type: boolean


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/events/client.html b/resources/qbx_core/events/client.html index ecbdec9..3549165 100644 --- a/resources/qbx_core/events/client.html +++ b/resources/qbx_core/events/client.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Events
Client

Client Events

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/events/server.html b/resources/qbx_core/events/server.html index cee3c4a..c630db5 100644 --- a/resources/qbx_core/events/server.html +++ b/resources/qbx_core/events/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Events
Server

Server Events

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/exports/client.html b/resources/qbx_core/exports/client.html index 5b1705e..fb3ebfd 100644 --- a/resources/qbx_core/exports/client.html +++ b/resources/qbx_core/exports/client.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Client

Client Exports

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/exports/server.html b/resources/qbx_core/exports/server.html index 1bc978d..80cb4f9 100644 --- a/resources/qbx_core/exports/server.html +++ b/resources/qbx_core/exports/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Server

Server Exports

+
Resources
Exports
Server

Server Exports

Some of these exports use custom types. You can learn more about those in the Types section of this resource.

CreateJobs

@@ -538,4 +538,4 @@

exports.qbx_core:GetVehicleClass(hash)

  • hash: number
  • -

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/exports/shared.html b/resources/qbx_core/exports/shared.html index 168ad1c..f35c511 100644 --- a/resources/qbx_core/exports/shared.html +++ b/resources/qbx_core/exports/shared.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Shared

Shared Exports

+

Qbox Project
\ No newline at end of file +

Returns: table<string, vector4>


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/hooks.html b/resources/qbx_core/modules/hooks.html index 7c2c7f1..ce3ff75 100644 --- a/resources/qbx_core/modules/hooks.html +++ b/resources/qbx_core/modules/hooks.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
hooks

hooks

+
Resources
Modules
hooks

hooks

Event hooks allow 3rd party resources to define new behaviour without modifying your resource directly.

registerHook

Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event

@@ -49,4 +49,4 @@

else return false -- Stop execution end -end)


Qbox Project
\ No newline at end of file +end)

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/lib.html b/resources/qbx_core/modules/lib.html index ff1b550..b274df1 100644 --- a/resources/qbx_core/modules/lib.html +++ b/resources/qbx_core/modules/lib.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
lib

lib

+
Resources
Modules
lib

lib

Provides the qbx global table with various utility functions.

Prerequisites

Installation

-

Add @qbx_core/modules/lib.lua to shared_scripts in your fxmanifest. Make sure it's below the @ox_lib/init.lua script.


Qbox Project
\ No newline at end of file +

Add @qbx_core/modules/lib.lua to shared_scripts in your fxmanifest. Make sure it's below the @ox_lib/init.lua script.


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/lib/client.html b/resources/qbx_core/modules/lib/client.html index ca87bb9..ac1e77e 100644 --- a/resources/qbx_core/modules/lib/client.html +++ b/resources/qbx_core/modules/lib/client.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
Client

Client Lib

+

Qbox Project
\ No newline at end of file +

Returns: number?


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/lib/server.html b/resources/qbx_core/modules/lib/server.html index 8c79fdf..c6e9007 100644 --- a/resources/qbx_core/modules/lib/server.html +++ b/resources/qbx_core/modules/lib/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
Server

Server Lib

+
Resources
Modules
Server

Server Lib

spawnVehicle

Creates a vehicle on the server-side and returns its net ID. If this is a player owned vehicle, and the persistence convar is enabled, the spawned vehicle will be persisted.

qbx.spawnVehicle(params)
@@ -64,4 +64,4 @@

model = `asbo`, spawnSource = myPed, warp = true, -- causes `myPed` to be warped into the vehicle -})


Qbox Project
\ No newline at end of file +})

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/lib/shared.html b/resources/qbx_core/modules/lib/shared.html index eddcb19..0180dd0 100644 --- a/resources/qbx_core/modules/lib/shared.html +++ b/resources/qbx_core/modules/lib/shared.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
Shared

Shared Lib

+

Qbox Project
\ No newline at end of file +

Returns: 'North' | 'South' | 'East' | 'West'

+

array.contains

+

Returns true if the given array contains the given value

+
qbx.array.contains(arr, value)
+
    +
  • arr: table
  • +
  • value: any
  • +
+

Returns: boolean


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/logger.html b/resources/qbx_core/modules/logger.html index 63a213a..cfd1a29 100644 --- a/resources/qbx_core/modules/logger.html +++ b/resources/qbx_core/modules/logger.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
logger

logger

+

Qbox Project
\ No newline at end of file +})

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/modules/playerdata.html b/resources/qbx_core/modules/playerdata.html index eae9def..76aeb50 100644 --- a/resources/qbx_core/modules/playerdata.html +++ b/resources/qbx_core/modules/playerdata.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Modules
playerdata

playerdata

+

Qbox Project
\ No newline at end of file +

Add @qbx_core/modules/playerdata.lua to client_scripts in your fxmanifest.


Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/gang.html b/resources/qbx_core/types/gang.html index dbd37c7..f80da7f 100644 --- a/resources/qbx_core/types/gang.html +++ b/resources/qbx_core/types/gang.html @@ -11,9 +11,9 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
Gang

Gang

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/gang_data.html b/resources/qbx_core/types/gang_data.html index c45fddb..feb93db 100644 --- a/resources/qbx_core/types/gang_data.html +++ b/resources/qbx_core/types/gang_data.html @@ -11,8 +11,8 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
GangData

GangData

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/gang_grade_data.html b/resources/qbx_core/types/gang_grade_data.html index c2e41a6..72435d5 100644 --- a/resources/qbx_core/types/gang_grade_data.html +++ b/resources/qbx_core/types/gang_grade_data.html @@ -11,10 +11,10 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
GangGradeData

GangGradeData

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/job.html b/resources/qbx_core/types/job.html index 8be9cde..b340bba 100644 --- a/resources/qbx_core/types/job.html +++ b/resources/qbx_core/types/job.html @@ -11,9 +11,9 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
Job

Job

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/job_data.html b/resources/qbx_core/types/job_data.html index c260715..b845884 100644 --- a/resources/qbx_core/types/job_data.html +++ b/resources/qbx_core/types/job_data.html @@ -11,11 +11,11 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
JobData

JobData

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/job_grade_data.html b/resources/qbx_core/types/job_grade_data.html index 965d985..b039090 100644 --- a/resources/qbx_core/types/job_grade_data.html +++ b/resources/qbx_core/types/job_grade_data.html @@ -11,11 +11,11 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
JobGradeData

JobGradeData

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/player.html b/resources/qbx_core/types/player.html index 5ae41b9..e4fe3c3 100644 --- a/resources/qbx_core/types/player.html +++ b/resources/qbx_core/types/player.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
Player

Player

+

Qbox Project
\ No newline at end of file +
Player.Functions.Save()

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/player_data.html b/resources/qbx_core/types/player_data.html index 6f09f2d..bc9729d 100644 --- a/resources/qbx_core/types/player_data.html +++ b/resources/qbx_core/types/player_data.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
PlayerData

PlayerData

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/player_entity.html b/resources/qbx_core/types/player_entity.html index 45121ac..528b43e 100644 --- a/resources/qbx_core/types/player_entity.html +++ b/resources/qbx_core/types/player_entity.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
PlayerEntity

PlayerEntity

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/vehicle.html b/resources/qbx_core/types/vehicle.html index 6b1639f..677a4da 100644 --- a/resources/qbx_core/types/vehicle.html +++ b/resources/qbx_core/types/vehicle.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
Vehicle

Vehicle

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_core/types/weapon.html b/resources/qbx_core/types/weapon.html index 4b553c2..904e466 100644 --- a/resources/qbx_core/types/weapon.html +++ b/resources/qbx_core/types/weapon.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Types
Weapon

Weapon

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_divegear.html b/resources/qbx_divegear.html index a5c7bb1..a1ecb5a 100644 --- a/resources/qbx_divegear.html +++ b/resources/qbx_divegear.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_diving.html b/resources/qbx_diving.html index d0284f1..e0a292c 100644 --- a/resources/qbx_diving.html +++ b/resources/qbx_diving.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_diving/events/server.html b/resources/qbx_diving/events/server.html index 66df761..463e6da 100644 --- a/resources/qbx_diving/events/server.html +++ b/resources/qbx_diving/events/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Events
Server

Server Events

+
Resources
Events
Server

Server Events

⚠️

These events MUST NOT be triggered by any other scripts.

Non-Networked Events

qbx_diving:server:coralTaken

@@ -24,4 +24,4 @@

qbx_diving:server:sellCoral

Triggered when a player attempts to sell coral.
Does not guarantee that the player has any coral in their inventory.

-
RegisterNetEvent('qbx_diving:server:sellCoral', function() end)

Qbox Project
\ No newline at end of file +
RegisterNetEvent('qbx_diving:server:sellCoral', function() end)

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_garages.html b/resources/qbx_garages.html index a793592..0f0f199 100644 --- a/resources/qbx_garages.html +++ b/resources/qbx_garages.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_garages/callbacks/client.html b/resources/qbx_garages/callbacks/client.html index 26fa1f6..b21b492 100644 --- a/resources/qbx_garages/callbacks/client.html +++ b/resources/qbx_garages/callbacks/client.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Callbacks
Client

Server Callbacks

+
Resources
Callbacks
Client

Server Callbacks

Can be used to support a custom UI. Called from the client.

getGarages

Get the currently registered garages

@@ -31,4 +31,4 @@

spawnVehicle

Spawns the vehicle entity in the world at the given garage's access point. Checks that the player has required access permissions to do so. Attempts to give the player vehicle keys.

-
lib.callback.await('qbx_garages:server:spawnVehicle', false, vehicleId, garageName, accessPointIndex)

Qbox Project
\ No newline at end of file +
lib.callback.await('qbx_garages:server:spawnVehicle', false, vehicleId, garageName, accessPointIndex)

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_garages/exports/server.html b/resources/qbx_garages/exports/server.html index 7172bb6..ea9e065 100644 --- a/resources/qbx_garages/exports/server.html +++ b/resources/qbx_garages/exports/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Server

Server Exports

+

GetGarages

Returns the registered garages

-
exports.qbx_garages:GetGarages()

Qbox Project
\ No newline at end of file +
exports.qbx_garages:GetGarages()

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_loading.html b/resources/qbx_loading.html index 340b9a2..d741fff 100644 --- a/resources/qbx_loading.html +++ b/resources/qbx_loading.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_management.html b/resources/qbx_management.html index b691c4e..f8dbe56 100644 --- a/resources/qbx_management.html +++ b/resources/qbx_management.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_management/exports/client.html b/resources/qbx_management/exports/client.html index b159f7c..f4df544 100644 --- a/resources/qbx_management/exports/client.html +++ b/resources/qbx_management/exports/client.html @@ -11,10 +11,10 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Client

Client Exports

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_management/exports/server.html b/resources/qbx_management/exports/server.html index a4e9ee7..5abb10d 100644 --- a/resources/qbx_management/exports/server.html +++ b/resources/qbx_management/exports/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Server

Server Exports

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_radio.html b/resources/qbx_radio.html index b956e45..9c03a05 100644 --- a/resources/qbx_radio.html +++ b/resources/qbx_radio.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_smallresources.html b/resources/qbx_smallresources.html index a5a54a5..e2d0c08 100644 --- a/resources/qbx_smallresources.html +++ b/resources/qbx_smallresources.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_truckrobbery.html b/resources/qbx_truckrobbery.html index 4a66146..490263c 100644 --- a/resources/qbx_truckrobbery.html +++ b/resources/qbx_truckrobbery.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_vehicles.html b/resources/qbx_vehicles.html index d4a0fab..182cb93 100644 --- a/resources/qbx_vehicles.html +++ b/resources/qbx_vehicles.html @@ -11,5 +11,5 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
\ No newline at end of file +
\ No newline at end of file diff --git a/resources/qbx_vehicles/exports/hooks.html b/resources/qbx_vehicles/exports/hooks.html index 2546cd7..d66e12e 100644 --- a/resources/qbx_vehicles/exports/hooks.html +++ b/resources/qbx_vehicles/exports/hooks.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Hooks

Hooks

+
Resources
Exports
Hooks

Hooks

Event hooks allow 3rd party resources to define new behavior without modifying qbx_vehicles code directly.

registerHook

Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event

@@ -51,4 +51,4 @@

exports.qbx_vehicles:removeHooks(id)

  • id?: number
  • -

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file diff --git a/resources/qbx_vehicles/exports/server.html b/resources/qbx_vehicles/exports/server.html index 687100d..f8c33ee 100644 --- a/resources/qbx_vehicles/exports/server.html +++ b/resources/qbx_vehicles/exports/server.html @@ -11,7 +11,7 @@ --nextra-primary-hue: 200deg; --nextra-primary-saturation: 100%; } -
Resources
Exports
Server

Server Exports

+

Qbox Project
\ No newline at end of file +

Qbox Project
\ No newline at end of file