├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── auto_assign.yml ├── contributing.md ├── pull_request_template.md └── workflows │ ├── lint.yml │ └── stale.yml ├── LICENSE ├── README.md ├── client ├── drops.lua ├── main.lua └── vehicles.lua ├── config ├── config.lua └── vehicles.lua ├── fxmanifest.lua ├── html ├── app.js ├── images │ ├── 10kgoldchain.png │ ├── acetone.png │ ├── advancedkit.png │ ├── advancedlockpick.png │ ├── advscope_attachment.png │ ├── aluminum.png │ ├── aluminumoxide.png │ ├── antipatharia_coral.png │ ├── armor.png │ ├── attworkbench.png │ ├── bandage.png │ ├── bank_card.png │ ├── barrel_attachment.png │ ├── beer.png │ ├── bellend_muzzle_brake.png │ ├── binoculars.png │ ├── boomcamo_attachment.png │ ├── brushcamo_attachment.png │ ├── casinochips.png │ ├── certificate.png │ ├── cleaningkit.png │ ├── clip_attachment.png │ ├── cocaine_baggy.png │ ├── cocaineleaf.png │ ├── coffee.png │ ├── coke_brick.png │ ├── coke_small_brick.png │ ├── cola.png │ ├── comp_attachment.png │ ├── copper.png │ ├── crack_baggy.png │ ├── cryptostick.png │ ├── dendrogyra_coral.png │ ├── diamond_ring.png │ ├── digicamo_attachment.png │ ├── diving_gear.png │ ├── diving_tube.png │ ├── drill.png │ ├── driver_license.png │ ├── drum_attachment.png │ ├── electronickit.png │ ├── ephedrine.png │ ├── evidence.png │ ├── fat_end_muzzle_brake.png │ ├── firework1.png │ ├── firework2.png │ ├── firework3.png │ ├── firework4.png │ ├── firstaid.png │ ├── fish.png │ ├── fishbait.png │ ├── fishingrod.png │ ├── fitbit.png │ ├── flashlight_attachment.png │ ├── flat_muzzle_brake.png │ ├── geocamo_attachment.png │ ├── glass.png │ ├── goldbar.png │ ├── goldchain.png │ ├── grape.png │ ├── grapejuice.png │ ├── grip_attachment.png │ ├── handcuffs.png │ ├── harness.png │ ├── heavy_duty_muzzle_brake.png │ ├── holoscope_attachment.png │ ├── hydrochloricacid.png │ ├── id_card.png │ ├── ifaks.png │ ├── iphone.png │ ├── iron.png │ ├── ironoxide.png │ ├── jerry_can.png │ ├── joint.png │ ├── labkey.png │ ├── laptop.png │ ├── largescope_attachment.png │ ├── lawyerpass.png │ ├── leopardcamo_attachment.png │ ├── lighter.png │ ├── lockpick.png │ ├── markedbills.png │ ├── medscope_attachment.png │ ├── metalscrap.png │ ├── meth_baggy.png │ ├── meth_tray.png │ ├── mg_ammo.png │ ├── moneybag.png │ ├── newsbmic.png │ ├── newscam.png │ ├── newsmic.png │ ├── nitrous.png │ ├── nvscope_attachment.png │ ├── oxy.png │ ├── painkillers.png │ ├── parachute.png │ ├── patriotcamo_attachment.png │ ├── perseuscamo_attachment.png │ ├── phone.png │ ├── pinger.png │ ├── pistol_ammo.png │ ├── plastic.png │ ├── police_stormram.png │ ├── precision_muzzle_brake.png │ ├── printerdocument.png │ ├── radio.png │ ├── radioscanner.png │ ├── repairkit.png │ ├── rifle_ammo.png │ ├── rolex.png │ ├── rolling_paper.png │ ├── rubber.png │ ├── samsungphone.png │ ├── sandwich.png │ ├── screwdriverset.png │ ├── security_card_01.png │ ├── security_card_02.png │ ├── sessantacamo_attachment.png │ ├── shotgun_ammo.png │ ├── skullcamo_attachment.png │ ├── slanted_muzzle_brake.png │ ├── smallscope_attachment.png │ ├── smg_ammo.png │ ├── snikkel_candy.png │ ├── snowball.png │ ├── split_end_muzzle_brake.png │ ├── squared_muzzle_brake.png │ ├── steel.png │ ├── stickynote.png │ ├── suppressor_attachment.png │ ├── tablet.png │ ├── tactical_muzzle_brake.png │ ├── thermalscope_attachment.png │ ├── thermite.png │ ├── tirerepairkit.png │ ├── tosti.png │ ├── tunerchip.png │ ├── twerks_candy.png │ ├── usb_device.png │ ├── veh_armor.png │ ├── veh_brakes.png │ ├── veh_engine.png │ ├── veh_exterior.png │ ├── veh_interior.png │ ├── veh_neons.png │ ├── veh_plates.png │ ├── veh_suspension.png │ ├── veh_tint.png │ ├── veh_toolbox.png │ ├── veh_transmission.png │ ├── veh_turbo.png │ ├── veh_wheels.png │ ├── veh_xenons.png │ ├── vodka.png │ ├── walkstick.png │ ├── water_bottle.png │ ├── weapon_acidpackage.PNG │ ├── weapon_advancedrifle.png │ ├── weapon_appistol.png │ ├── weapon_assaultrifle.png │ ├── weapon_assaultrifle_mk2.png │ ├── weapon_assaultshotgun.png │ ├── weapon_assaultsmg.png │ ├── weapon_autoshotgun.png │ ├── weapon_ball.png │ ├── weapon_bat.png │ ├── weapon_battleaxe.png │ ├── weapon_bottle.png │ ├── weapon_bread.png │ ├── weapon_briefcase.PNG │ ├── weapon_briefcase_02.PNG │ ├── weapon_bullpuprifle.png │ ├── weapon_bullpuprifle_mk2.png │ ├── weapon_bullpupshotgun.png │ ├── weapon_bzgas.PNG │ ├── weapon_candycane.png │ ├── weapon_carbinerifle.png │ ├── weapon_carbinerifle_mk2.png │ ├── weapon_ceramicpistol.png │ ├── weapon_combatmg.png │ ├── weapon_combatmg_mk2.png │ ├── weapon_combatpdw.png │ ├── weapon_combatpistol.png │ ├── weapon_combatshotgun.png │ ├── weapon_compactlauncher.png │ ├── weapon_compactrifle.png │ ├── weapon_crowbar.png │ ├── weapon_dagger.png │ ├── weapon_dbshotgun.png │ ├── weapon_digiscanner.PNG │ ├── weapon_doubleaction.png │ ├── weapon_emplauncher.PNG │ ├── weapon_fertilizercan.png │ ├── weapon_fireextinguisher.png │ ├── weapon_firework.png │ ├── weapon_flare.png │ ├── weapon_flaregun.png │ ├── weapon_flashlight.png │ ├── weapon_gadgetpistol.png │ ├── weapon_garbagebag.png │ ├── weapon_gas.png │ ├── weapon_golfclub.png │ ├── weapon_grenade.png │ ├── weapon_grenadelauncher.png │ ├── weapon_grenadelauncher_smoke.PNG │ ├── weapon_gusenberg.png │ ├── weapon_hammer.png │ ├── weapon_handcuffs.png │ ├── weapon_hatchet.png │ ├── weapon_hazardcan.png │ ├── weapon_heavypistol.png │ ├── weapon_heavyrifle.png │ ├── weapon_heavyshotgun.png │ ├── weapon_heavysniper.png │ ├── weapon_heavysniper_mk2.png │ ├── weapon_hominglauncher.png │ ├── weapon_knife.png │ ├── weapon_knuckle.png │ ├── weapon_license.png │ ├── weapon_machete.png │ ├── weapon_machinepistol.png │ ├── weapon_marksmanpistol.png │ ├── weapon_marksmanrifle.png │ ├── weapon_marksmanrifle_mk2.png │ ├── weapon_metaldetector.PNG │ ├── weapon_mg.png │ ├── weapon_microsmg.png │ ├── weapon_militaryrifle.png │ ├── weapon_minigun.png │ ├── weapon_minismg.png │ ├── weapon_molotov.png │ ├── weapon_musket.png │ ├── weapon_navyrevolver.png │ ├── weapon_nightstick.png │ ├── weapon_petrolcan.png │ ├── weapon_pipebomb.png │ ├── weapon_pistol.png │ ├── weapon_pistol50.png │ ├── weapon_pistol_mk2.png │ ├── weapon_pistolxm3.png │ ├── weapon_poolcue.png │ ├── weapon_precisionrifle.PNG │ ├── weapon_proxmine.png │ ├── weapon_pumpshotgun.png │ ├── weapon_pumpshotgun_mk2.png │ ├── weapon_railgun.png │ ├── weapon_railgunxm3.PNG │ ├── weapon_raycarbine.png │ ├── weapon_rayminigun.png │ ├── weapon_raypistol.png │ ├── weapon_revolver.png │ ├── weapon_revolver_mk2.png │ ├── weapon_rpg.png │ ├── weapon_sawnoffshotgun.png │ ├── weapon_smg.png │ ├── weapon_smg_mk2.png │ ├── weapon_smokegrenade.PNG │ ├── weapon_sniperrifle.png │ ├── weapon_snowball.png │ ├── weapon_snspistol.png │ ├── weapon_snspistol_mk2.png │ ├── weapon_specialcarbine.png │ ├── weapon_specialcarbine_mk2.png │ ├── weapon_stickybomb.png │ ├── weapon_stone_hatchet.png │ ├── weapon_stungun.png │ ├── weapon_switchblade.png │ ├── weapon_tecpistol.PNG │ ├── weapon_vintagepistol.png │ ├── weapon_wrench.png │ ├── weapontint_army.png │ ├── weapontint_black.png │ ├── weapontint_gold.png │ ├── weapontint_green.png │ ├── weapontint_lspd.png │ ├── weapontint_orange.png │ ├── weapontint_pink.png │ ├── weapontint_plat.png │ ├── weed_baggy.png │ ├── weed_baggy_empty.png │ ├── weed_brick.png │ ├── weed_nutrition.png │ ├── weed_seed.png │ ├── whiskey.png │ ├── wine.png │ ├── woodcamo_attachment.png │ ├── workbench.png │ ├── xtc_baggy.png │ └── zebracamo_attachment.png ├── index.html └── main.css ├── locales ├── cs.lua ├── de.lua ├── en.lua ├── es.lua └── nl.lua ├── migrate.sql ├── qb-inventory.sql └── server ├── commands.lua ├── functions.lua └── main.lua /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Create a report to help us improve or fix something 3 | title: "[BUG]" 4 | labels: bug 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for taking the time to fill out a bug report! 10 | Please use our Discord Server to ask questions and receive support: https://discord.gg/qbcore 11 | - type: input 12 | id: summary 13 | attributes: 14 | label: Summary 15 | description: Write a short and concise description of your bug. 16 | validations: 17 | required: true 18 | - type: textarea 19 | id: repro 20 | attributes: 21 | label: Reproduction 22 | description: What did you do to make this happen? 23 | placeholder: | 24 | 1. Using ... 25 | 2. Do ... 26 | 3. Then use ... 27 | 4. See error 28 | validations: 29 | required: true 30 | - type: textarea 31 | id: expected 32 | attributes: 33 | label: Expected behavior 34 | description: What did you expect to happen? 35 | validations: 36 | required: true 37 | - type: textarea 38 | id: actual 39 | attributes: 40 | label: Actual behavior 41 | description: What actually happened? 42 | validations: 43 | required: true 44 | - type: textarea 45 | id: additional 46 | attributes: 47 | label: Additional context 48 | description: If you have any other context about the problem such as screenshots or videos, add them here. 49 | - type: input 50 | id: updated 51 | attributes: 52 | label: Last Updated 53 | description: When have you last updated? 54 | placeholder: e.g. last week, today 55 | validations: 56 | required: true 57 | - type: input 58 | id: custom 59 | attributes: 60 | label: Custom Resources 61 | description: Are you using custom resources? Which ones? 62 | placeholder: e.g. zdiscord, qb-target 63 | validations: 64 | required: true 65 | - type: input 66 | id: renamed 67 | attributes: 68 | label: Resource Rename 69 | description: Have you renamed this resource from `qb-` to something custom? 70 | validations: 71 | required: true 72 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: QBCore Discord Server 4 | url: https://discord.gg/qbcore 5 | about: Ask questions, receive support, and discuss with the community in our Discord server. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for QBCore 3 | title: "[SUGGESTION]" 4 | labels: enhancement 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Please use our Discord Server to ask questions and receive support: https://discord.gg/qbcore 10 | - type: textarea 11 | id: problem 12 | attributes: 13 | label: The problem 14 | description: A clear and concise description of what the problem is, or what feature you want to be implemented. 15 | placeholder: | 16 | Some examples: 17 | I'm frustrated that ... 18 | It would be nice if ... 19 | validations: 20 | required: true 21 | - type: textarea 22 | id: solution 23 | attributes: 24 | label: Ideal solution 25 | description: A clear and concise description of what you want to happen, with as much detail as possible. 26 | validations: 27 | required: true 28 | - type: textarea 29 | id: alternatives 30 | attributes: 31 | label: Alternative solutions 32 | description: A clear and concise description of any alternative solutions or features you've considered. 33 | - type: textarea 34 | id: additional 35 | attributes: 36 | label: Additional context 37 | description: If you have any other context about the problem such as screenshots or videos, add them here. 38 | -------------------------------------------------------------------------------- /.github/auto_assign.yml: -------------------------------------------------------------------------------- 1 | # Set to true to add reviewers to pull requests 2 | addReviewers: true 3 | 4 | # Set to true to add assignees to pull requests 5 | addAssignees: author 6 | 7 | # A list of reviewers to be added to pull requests (GitHub user name) 8 | reviewers: 9 | - /maintenance 10 | 11 | # A list of keywords to be skipped the process that add reviewers if pull requests include it 12 | skipKeywords: 13 | - wip 14 | 15 | # A number of reviewers added to the pull request 16 | # Set 0 to add all the reviewers (default: 0) 17 | numberOfReviewers: 0 -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to QBCore 2 | 3 | First of all, thank you for taking the time to contribute! 4 | 5 | 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. 6 | 7 | ### Table of Contents 8 | 9 | [Code of Conduct](#code-of-conduct) 10 | 11 | [I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question) 12 | 13 | [How Can I Contribute?](#how-can-i-contribute) 14 | * [Reporting Bugs](#reporting-bugs) 15 | * [Suggesting Features / Enhancements](#suggesting-features--enhancements) 16 | * [Your First Code Contribution](#your-first-code-contribution) 17 | * [Pull Requests](#pull-requests) 18 | 19 | [Styleguides](#styleguides) 20 | * [Git Commit Messages](#git-commit-messages) 21 | * [Lua Styleguide](#lua-styleguide) 22 | * [JavaScript Styleguide](#javascript-styleguide) 23 | 24 | 25 | 26 | ## Code of Conduct 27 | 28 | - Refrain from using languages other than English. 29 | - Refrain from discussing any politically charged or inflammatory topics. 30 | - Uphold mature conversations and respect each other; excessive profanity, hate speech or any kind of harassment will not be tolerated. 31 | - No advertising of any kind. 32 | - Follow these guidelines. 33 | - Do not mention members of github unless a question is directed at them and can't be answered by anyone else. 34 | - Do not mention any of the development team for any reason. We will read things as we get to them. 35 | 36 | ## I don't want to read this whole thing I just have a question!!! 37 | 38 | > **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below. 39 | 40 | * [QBCore Website](https://qbcore.org) 41 | * [QBCore Discord](https://discord.gg/qbcore) 42 | * [FiveM Discord - #qbcore channel](https://discord.gg/fivem) 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | ## How Can I Contribute? 54 | 55 | ### Reporting Bugs 56 | 57 | The easiest way to contribute for most people is just to report bugs you find cause if nobody reports it there's a chance we'll never know it exists and then we'll never fix it. 58 | 59 | Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out the bug-report template with the information it asks for helps us resolve issues faster. 60 | 61 | > **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. 62 | 63 | #### Before Submitting A Bug Report 64 | 65 | * **Check the docs** There's a chance what you see as a bug might just work differently than you expect and if you think it could work better consider a feature enhancement report instead. 66 | * **Search the [discord](https://discord.gg/qbcore)** to see if anyone else has run into the issue and see if it was solved through user error or code changes. (if the code change isn't pending a PR and you know what you're doing consider submitting one following [Pull Requests](#pull-requests) ) 67 | * **Determine which resource the problem should be reported in**. If the bug is related to the inventory for example report this bug under qb-inventory rather than under qb-core or some other resource. 68 | * **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aqbcore-framework)** to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one. 69 | 70 | #### How Do I Submit A (Good) Bug Report? 71 | 72 | Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've determined which resource your bug is related to, create an issue on that repository and provide the following information by filling in bug-report template. 73 | 74 | Explain the problem and include additional details to help maintainers reproduce the problem: 75 | 76 | * **Use a clear and descriptive title** for the issue to identify the problem. 77 | * **Describe the exact steps which reproduce the problem** in as many details as possible. 78 | * **Provide specific examples to demonstrate the steps**. If something happened with only a specific group or single item but not others, specify that. 79 | * **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. 80 | * **Explain which behavior you expected to see instead and why.** 81 | * **Include screenshots** which show the specific bug in action or before and after. 82 | * **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and share more information using the guidelines below. 83 | 84 | Provide more context by answering these questions if possible: 85 | 86 | * **Did the problem start happening recently** (e.g. after updating to a new version of QBCore?) or was this always a problem? 87 | * If the problem started happening recently, **can you reproduce the problem in an older version of QBCore?** What's the most recent commit in which the problem doesn't happen? 88 | * **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens. 89 | 90 | Include details about your setup: 91 | 92 | * **When was your QBCore last updated?** 93 | * **What OS is the server running on**? 94 | * **Which *extra* resources do you have installed?** 95 | 96 | 97 | --- 98 | 99 | 100 | ### Suggesting Features / Enhancements 101 | 102 | This section guides you through submitting an enhancement suggestion for QBCore, including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion. 103 | 104 | Before creating enhancement suggestions, please check [this list](#before-submitting-an-enhancement-suggestion) as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). Fill in feature request template, including the steps that you imagine you would take if the feature you're requesting existed. 105 | 106 | #### Before Submitting An Enhancement Suggestion 107 | 108 | * **Make sure it doesn't already exist.** Sounds silly, but there's a lot of features built in to qbcore that people don't realize so take a look through the docs and stuff to make sure it's not already there. 109 | * **Check if there's already PR which provides that enhancement.** 110 | * **Determine which resource the enhancement should be suggested in.** if it fits with another resource suggest it in that resource. if it would be it's own resource suggest it in the main qb-core repository. 111 | * **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aqbcore-framework)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. 112 | 113 | #### How Do I Submit A (Good) Enhancement Suggestion? 114 | 115 | Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've determined which resource your enhancement suggestion is related to, create an issue on that repository and provide the following information: 116 | 117 | * **Use a clear and descriptive title** for the issue to identify the suggestion. 118 | * **Provide a step-by-step description of the suggested enhancement** in as many details as possible. 119 | * **Provide specific examples to demonstrate the steps**. Include copy/pasteable snippets which you use in those examples, as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). 120 | * **Describe the current behavior** and **explain which behavior you expected to see instead** and why. 121 | * **Include screenshots and animated GIFs** which help you demonstrate the steps or point out the part of QBCore which the suggestion is related to. 122 | * **Explain why this enhancement would be useful.** 123 | * **Be creative and unique.** Stealing ideas from popular servers 1:1 detail isn't going to get accepted. 124 | 125 | 126 | --- 127 | 128 | 129 | 130 | ### Your First Code Contribution 131 | 132 | Unsure where to begin contributing to QBCore? You can start by looking through these `beginner` and `help-wanted` issues. 133 | 134 | 135 | 136 | --- 137 | 138 | 139 | ### Pull Requests 140 | 141 | The process described here has several goals: 142 | 143 | - Maintain QBCore's quality. 144 | - Fix problems that are important to users. 145 | - Engage the community in working toward the best possible QBCore. 146 | - Enable a sustainable system for QBCore's maintainers to review contributions. 147 | 148 | Please follow these steps to have your contribution considered by the maintainers: 149 | 150 | 1. Follow all instructions in The Pull Request template. 151 | 2. Follow the [styleguides](#styleguides). 152 | 3. Await review by the reviewer(s). 153 | 154 | While the prerequisites above must be satisfied prior to having your pull request reviewed, the reviewer(s) may ask you to complete additional design work, tests, or other changes before your pull request can be ultimately accepted. 155 | 156 | 157 | --- 158 | 159 | ## Styleguides 160 | 161 | ### Git Commit Messages 162 | 163 | * Limit the first line to 72 characters or less. 164 | * Reference issues and pull requests liberally after the first line. 165 | * Consider starting the commit message with an applicable emoji: 166 | * :art: `:art:` when improving the format/structure of the code 167 | * :racehorse: `:racehorse:` when improving performance 168 | * :memo: `:memo:` when writing docs 169 | * :bug: `:bug:` when fixing a bug 170 | * :fire: `:fire:` when removing code or files 171 | * :white_check_mark: `:white_check_mark:` when adding tests 172 | * :lock: `:lock:` when dealing with security 173 | * :arrow_up: `:arrow_up:` when upgrading dependencies 174 | * :arrow_down: `:arrow_down:` when downgrading dependencies 175 | * :shirt: `:shirt:` when removing linter warnings 176 | 177 | ### Lua Styleguide 178 | 179 | All lua code should be done using all the best practices of proper lua using the easiest to read yet fastest/most optimized methods of execution. 180 | 181 | - Use 4 Space indentation 182 | - Aim for lua 5.4 (include `lua54 'yes'` in the fxmanifest.lua) 183 | - Use `PlayerPedId()` instead of `GetPlayerPed(-1)` 184 | - Use `#(vector3 - vector3)` instead of `GetDistanceBetweenCoords()` 185 | - Don't create unnecessary threads. always try to find a better method of triggering events 186 | - Don't repeat yourself.. if you're using the same operations in many different places convert them into a function with flexible variables 187 | - For distance checking loops set longer waits if you're outside of a range 188 | - Job specific loops should only run for players with that job, don't waste cycles 189 | - When possible don't trust the client, esspecially with transactions 190 | - Balance security and optimizations 191 | - [Consider this Lua Performance guide](https://springrts.com/wiki/Lua_Performance) 192 | - Use local varriables everywhere possible 193 | - Make use of config options where it makes sense making features optional or customizable 194 | - Instead of `table.insert(myTable, "Value")` use `myTable[#myTable + 1] = "Value"` 195 | - Instead of `table.insert(ages, "bob", 30)` use `ages["bob"] = 30` 196 | 197 | 198 | ### JavaScript Styleguide 199 | 200 | - Use 4 Space indentation 201 | - Don't repeat yourself.. if you're using the same operations in many different places convert them into a function with flexible variables. 202 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | 5 | ## Checklist 6 | 7 | 8 | 9 | - [ ] I have personally loaded this code into an updated qbcore project and checked all of its functionality. 10 | - [ ] My code fits the style guidelines. 11 | - [ ] My PR fits the contribution guidelines. 12 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: [push, pull_request_target] 3 | jobs: 4 | lint: 5 | name: Lint Resource 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | with: 10 | ref: ${{ github.event.pull_request.head.sha }} 11 | - name: Lint 12 | uses: iLLeniumStudios/fivem-lua-lint-action@v2 13 | with: 14 | capture: "junit.xml" 15 | args: "-t --formatter JUnit" 16 | extra_libs: mysql+polyzone+qblocales 17 | - name: Generate Lint Report 18 | if: always() 19 | uses: mikepenz/action-junit-report@v3 20 | with: 21 | report_paths: "**/junit.xml" 22 | check_name: Linting Report 23 | fail_on_failure: false -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. 2 | # 3 | # You can adjust the behavior by modifying this file. 4 | # For more information, see: 5 | # https://github.com/actions/stale 6 | name: Mark stale issues and pull requests 7 | 8 | on: 9 | schedule: 10 | - cron: '41 15 * * *' 11 | 12 | jobs: 13 | stale: 14 | 15 | runs-on: ubuntu-latest 16 | permissions: 17 | issues: write 18 | pull-requests: write 19 | 20 | steps: 21 | - uses: actions/stale@v5 22 | with: 23 | repo-token: ${{ secrets.GITHUB_TOKEN }} 24 | stale-issue-message: 'This issue has had 60 days of inactivity & will close within 7 days' 25 | stale-pr-message: 'This PR has had 60 days of inactivity & will close within 7 days' 26 | close-issue-label: 'Stale Closed' 27 | close-pr-label: 'Stale Closed' 28 | exempt-issue-labels: 'Suggestion' 29 | exempt-pr-labels: 'Suggestion' 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # qb-inventory 2 | 3 | ## Dependencies 4 | - [qb-core](https://github.com/qbcore-framework/qb-core) 5 | - [qb-smallresources](https://github.com/qbcore-framework/qb-smallresources) - For logging transfer and other history 6 | 7 | ## Features 8 | - Stashes (Personal and/or Shared) 9 | - Vehicle Trunk & Glovebox 10 | - Weapon Attachments 11 | - Shops 12 | - Item Drops 13 | 14 | ## Documentation 15 | https://docs.qbcore.org/qbcore-documentation/qbcore-resources/qb-inventory 16 | 17 | ## Installation 18 | ### Manual 19 | - Download the script and put it in the `[qb]` directory. 20 | - Import `qb-inventory.sql` in your database 21 | - Add the following code to your server.cfg/resouces.cfg 22 | 23 | # Migrating from old qb-inventory 24 | 25 | ## Database 26 | ### Upload the new `inventory.sql` file to create the new `inventories` table 27 | ### Use the provided `migrate.sql` file to migrate all of your saved inventory data from stashes, trunks, etc 28 | ### Once complete, you can delete `gloveboxitems` `stashitems` and `trunkitems` tables from your database 29 | ```sql 30 | CREATE TABLE IF NOT EXISTS `inventories` ( 31 | `id` INT(11) NOT NULL AUTO_INCREMENT, 32 | `identifier` VARCHAR(50) NOT NULL, 33 | `items` LONGTEXT DEFAULT ('[]'), 34 | PRIMARY KEY (`identifier`), 35 | KEY `id` (`id`) 36 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; 37 | ``` 38 | 39 | # License 40 | 41 | QBCore Framework 42 | Copyright (C) 2021 Joshua Eger 43 | 44 | This program is free software: you can redistribute it and/or modify 45 | it under the terms of the GNU General Public License as published by 46 | the Free Software Foundation, either version 3 of the License, or 47 | (at your option) any later version. 48 | 49 | This program is distributed in the hope that it will be useful, 50 | but WITHOUT ANY WARRANTY; without even the implied warranty of 51 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 52 | GNU General Public License for more details. 53 | 54 | You should have received a copy of the GNU General Public License 55 | along with this program. If not, see 56 | -------------------------------------------------------------------------------- /client/drops.lua: -------------------------------------------------------------------------------- 1 | HoldingDrop = false 2 | local bagObject = nil 3 | local heldDrop = nil 4 | CurrentDrop = nil 5 | 6 | -- Functions 7 | 8 | function GetDrops() 9 | QBCore.Functions.TriggerCallback('qb-inventory:server:GetCurrentDrops', function(drops) 10 | if not drops then return end 11 | for k, v in pairs(drops) do 12 | local bag = NetworkGetEntityFromNetworkId(v.entityId) 13 | if DoesEntityExist(bag) then 14 | exports['qb-target']:AddTargetEntity(bag, { 15 | options = { 16 | { 17 | icon = 'fas fa-backpack', 18 | label = Lang:t('menu.o_bag'), 19 | action = function() 20 | TriggerServerEvent('qb-inventory:server:openDrop', k) 21 | CurrentDrop = k 22 | end, 23 | }, 24 | }, 25 | distance = 2.5, 26 | }) 27 | end 28 | end 29 | end) 30 | end 31 | 32 | -- Events 33 | 34 | RegisterNetEvent('qb-inventory:client:removeDropTarget', function(dropId) 35 | while not NetworkDoesNetworkIdExist(dropId) do Wait(10) end 36 | local bag = NetworkGetEntityFromNetworkId(dropId) 37 | while not DoesEntityExist(bag) do Wait(10) end 38 | exports['qb-target']:RemoveTargetEntity(bag) 39 | end) 40 | 41 | RegisterNetEvent('qb-inventory:client:setupDropTarget', function(dropId) 42 | while not NetworkDoesNetworkIdExist(dropId) do Wait(10) end 43 | local bag = NetworkGetEntityFromNetworkId(dropId) 44 | while not DoesEntityExist(bag) do Wait(10) end 45 | local newDropId = 'drop-' .. dropId 46 | exports['qb-target']:AddTargetEntity(bag, { 47 | options = { 48 | { 49 | icon = 'fas fa-backpack', 50 | label = Lang:t('menu.o_bag'), 51 | action = function() 52 | TriggerServerEvent('qb-inventory:server:openDrop', newDropId) 53 | CurrentDrop = newDropId 54 | end, 55 | }, 56 | { 57 | icon = 'fas fa-hand-pointer', 58 | label = 'Pick up bag', 59 | action = function() 60 | if IsPedArmed(PlayerPedId(), 4) then 61 | return QBCore.Functions.Notify("You can not be holding a Gun and a Bag!", "error", 5500) 62 | end 63 | if HoldingDrop then 64 | return QBCore.Functions.Notify("Your already holding a bag, Go Drop it!", "error", 5500) 65 | end 66 | AttachEntityToEntity( 67 | bag, 68 | PlayerPedId(), 69 | GetPedBoneIndex(PlayerPedId(), Config.ItemDropObjectBone), 70 | Config.ItemDropObjectOffset[1].x, 71 | Config.ItemDropObjectOffset[1].y, 72 | Config.ItemDropObjectOffset[1].z, 73 | Config.ItemDropObjectOffset[2].x, 74 | Config.ItemDropObjectOffset[2].y, 75 | Config.ItemDropObjectOffset[2].z, 76 | true, true, false, true, 1, true 77 | ) 78 | bagObject = bag 79 | HoldingDrop = true 80 | heldDrop = newDropId 81 | exports['qb-core']:DrawText('Press [G] to drop the bag') 82 | end, 83 | } 84 | }, 85 | distance = 2.5, 86 | }) 87 | end) 88 | 89 | -- NUI Callbacks 90 | 91 | RegisterNUICallback('DropItem', function(item, cb) 92 | QBCore.Functions.TriggerCallback('qb-inventory:server:createDrop', function(dropId) 93 | if dropId then 94 | while not NetworkDoesNetworkIdExist(dropId) do Wait(10) end 95 | local bag = NetworkGetEntityFromNetworkId(dropId) 96 | SetModelAsNoLongerNeeded(bag) 97 | PlaceObjectOnGroundProperly(bag) 98 | FreezeEntityPosition(bag, true) 99 | local newDropId = 'drop-' .. dropId 100 | cb(newDropId) 101 | else 102 | cb(false) 103 | end 104 | end, item) 105 | end) 106 | 107 | -- Thread 108 | 109 | CreateThread(function() 110 | while true do 111 | if HoldingDrop then 112 | if IsControlJustPressed(0, 47) then 113 | DetachEntity(bagObject, true, true) 114 | local coords = GetEntityCoords(PlayerPedId()) 115 | local forward = GetEntityForwardVector(PlayerPedId()) 116 | local x, y, z = table.unpack(coords + forward * 0.57) 117 | SetEntityCoords(bagObject, x, y, z - 0.9, false, false, false, false) 118 | FreezeEntityPosition(bagObject, true) 119 | exports['qb-core']:HideText() 120 | TriggerServerEvent('qb-inventory:server:updateDrop', heldDrop, coords) 121 | HoldingDrop = false 122 | bagObject = nil 123 | heldDrop = nil 124 | end 125 | end 126 | Wait(0) 127 | end 128 | end) 129 | -------------------------------------------------------------------------------- /client/main.lua: -------------------------------------------------------------------------------- 1 | QBCore = exports['qb-core']:GetCoreObject() 2 | PlayerData = nil 3 | local hotbarShown = false 4 | 5 | -- Handlers 6 | 7 | RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() 8 | LocalPlayer.state:set('inv_busy', false, true) 9 | PlayerData = QBCore.Functions.GetPlayerData() 10 | GetDrops() 11 | end) 12 | 13 | RegisterNetEvent('QBCore:Client:OnPlayerUnload', function() 14 | LocalPlayer.state:set('inv_busy', true, true) 15 | PlayerData = nil 16 | end) 17 | 18 | RegisterNetEvent('QBCore:Client:UpdateObject', function() 19 | QBCore = exports['qb-core']:GetCoreObject() 20 | end) 21 | 22 | RegisterNetEvent('QBCore:Player:SetPlayerData', function(val) 23 | PlayerData = val 24 | end) 25 | 26 | AddEventHandler('onResourceStart', function(resourceName) 27 | if resourceName == GetCurrentResourceName() then 28 | PlayerData = QBCore.Functions.GetPlayerData() 29 | end 30 | end) 31 | 32 | -- Functions 33 | 34 | function LoadAnimDict(dict) 35 | if HasAnimDictLoaded(dict) then return end 36 | 37 | RequestAnimDict(dict) 38 | while not HasAnimDictLoaded(dict) do 39 | Wait(10) 40 | end 41 | end 42 | 43 | local function FormatWeaponAttachments(itemdata) 44 | if not itemdata.info or not itemdata.info.attachments or #itemdata.info.attachments == 0 then 45 | return {} 46 | end 47 | local attachments = {} 48 | local weaponName = itemdata.name 49 | local WeaponAttachments = exports['qb-weapons']:getConfigWeaponAttachments() 50 | if not WeaponAttachments then return {} end 51 | for attachmentType, weapons in pairs(WeaponAttachments) do 52 | local componentHash = weapons[weaponName] 53 | if componentHash then 54 | for _, attachmentData in pairs(itemdata.info.attachments) do 55 | if attachmentData.component == componentHash then 56 | local label = QBCore.Shared.Items[attachmentType] and QBCore.Shared.Items[attachmentType].label or 'Unknown' 57 | attachments[#attachments + 1] = { 58 | attachment = attachmentType, 59 | label = label 60 | } 61 | end 62 | end 63 | end 64 | end 65 | return attachments 66 | end 67 | 68 | --- Checks if the player has a certain item or items in their inventory with a specified amount. 69 | --- @param items string|table - The item(s) to check for. Can be a table of items or a single item as a string. 70 | --- @param amount number [optional] - The minimum amount required for each item. If not provided, any amount greater than 0 will be considered. 71 | --- @return boolean - Returns true if the player has the item(s) with the specified amount, false otherwise. 72 | function HasItem(items, amount) 73 | local isTable = type(items) == 'table' 74 | local isArray = isTable and table.type(items) == 'array' or false 75 | local totalItems = isArray and #items or 0 76 | local count = 0 77 | 78 | if isTable and not isArray then 79 | for _ in pairs(items) do totalItems = totalItems + 1 end 80 | end 81 | 82 | if PlayerData and type(PlayerData.items) == "table" then 83 | for _, itemData in pairs(PlayerData.items) do 84 | if isTable then 85 | for k, v in pairs(items) do 86 | if itemData and itemData.name == (isArray and v or k) and ((amount and itemData.amount >= amount) or (not isArray and itemData.amount >= v) or (not amount and isArray)) then 87 | count = count + 1 88 | if count == totalItems then 89 | return true 90 | end 91 | end 92 | end 93 | else -- Single item as string 94 | if itemData and itemData.name == items and (not amount or (itemData and amount and itemData.amount >= amount)) then 95 | return true 96 | end 97 | end 98 | end 99 | end 100 | 101 | return false 102 | end 103 | 104 | exports('HasItem', HasItem) 105 | 106 | -- Events 107 | 108 | RegisterNetEvent('qb-inventory:client:requiredItems', function(items, bool) 109 | local itemTable = {} 110 | if bool then 111 | for k in pairs(items) do 112 | itemTable[#itemTable + 1] = { 113 | item = items[k].name, 114 | label = QBCore.Shared.Items[items[k].name]['label'], 115 | image = items[k].image, 116 | } 117 | end 118 | end 119 | 120 | SendNUIMessage({ 121 | action = 'requiredItem', 122 | items = itemTable, 123 | toggle = bool 124 | }) 125 | end) 126 | 127 | RegisterNetEvent('qb-inventory:client:hotbar', function(items) 128 | hotbarShown = not hotbarShown 129 | SendNUIMessage({ 130 | action = 'toggleHotbar', 131 | open = hotbarShown, 132 | items = items 133 | }) 134 | end) 135 | 136 | RegisterNetEvent('qb-inventory:client:closeInv', function() 137 | SendNUIMessage({ 138 | action = 'close', 139 | }) 140 | end) 141 | 142 | RegisterNetEvent('qb-inventory:client:updateInventory', function() 143 | local items = {} 144 | if PlayerData and type(PlayerData.items) == "table" then 145 | items = PlayerData.items 146 | end 147 | 148 | SendNUIMessage({ 149 | action = 'update', 150 | inventory = items 151 | }) 152 | end) 153 | 154 | RegisterNetEvent('qb-inventory:client:ItemBox', function(itemData, type, amount) 155 | SendNUIMessage({ 156 | action = 'itemBox', 157 | item = itemData, 158 | type = type, 159 | amount = amount 160 | }) 161 | end) 162 | 163 | RegisterNetEvent('qb-inventory:server:RobPlayer', function(TargetId) 164 | SendNUIMessage({ 165 | action = 'RobMoney', 166 | TargetId = TargetId, 167 | }) 168 | end) 169 | 170 | RegisterNetEvent('qb-inventory:client:openInventory', function(items, other) 171 | SetNuiFocus(true, true) 172 | SendNUIMessage({ 173 | action = 'open', 174 | inventory = items, 175 | slots = Config.MaxSlots, 176 | maxweight = Config.MaxWeight, 177 | other = other 178 | }) 179 | end) 180 | 181 | RegisterNetEvent('qb-inventory:client:giveAnim', function() 182 | if IsPedInAnyVehicle(PlayerPedId(), false) then return end 183 | LoadAnimDict('mp_common') 184 | TaskPlayAnim(PlayerPedId(), 'mp_common', 'givetake1_b', 8.0, 1.0, -1, 16, 0, false, false, false) 185 | end) 186 | 187 | -- NUI Callbacks 188 | 189 | RegisterNUICallback('PlayDropFail', function(_, cb) 190 | PlaySound(-1, 'Place_Prop_Fail', 'DLC_Dmod_Prop_Editor_Sounds', 0, 0, 1) 191 | cb('ok') 192 | end) 193 | 194 | RegisterNUICallback('AttemptPurchase', function(data, cb) 195 | QBCore.Functions.TriggerCallback('qb-inventory:server:attemptPurchase', function(canPurchase) 196 | cb(canPurchase) 197 | end, data) 198 | end) 199 | 200 | RegisterNUICallback('CloseInventory', function(data, cb) 201 | SetNuiFocus(false, false) 202 | if data.name then 203 | if data.name:find('trunk-') then 204 | CloseTrunk() 205 | end 206 | TriggerServerEvent('qb-inventory:server:closeInventory', data.name) 207 | elseif CurrentDrop then 208 | TriggerServerEvent('qb-inventory:server:closeInventory', CurrentDrop) 209 | CurrentDrop = nil 210 | end 211 | cb('ok') 212 | end) 213 | 214 | RegisterNUICallback('UseItem', function(data, cb) 215 | TriggerServerEvent('qb-inventory:server:useItem', data.item) 216 | cb('ok') 217 | end) 218 | 219 | RegisterNUICallback('SetInventoryData', function(data, cb) 220 | TriggerServerEvent('qb-inventory:server:SetInventoryData', data.fromInventory, data.toInventory, data.fromSlot, data.toSlot, data.fromAmount, data.toAmount) 221 | cb('ok') 222 | end) 223 | 224 | RegisterNUICallback('GiveItem', function(data, cb) 225 | local player, distance = QBCore.Functions.GetClosestPlayer(GetEntityCoords(PlayerPedId())) 226 | if player ~= -1 and distance < 3 then 227 | local playerId = GetPlayerServerId(player) 228 | QBCore.Functions.TriggerCallback('qb-inventory:server:giveItem', function(success) 229 | cb(success) 230 | end, playerId, data.item.name, data.amount, data.slot, data.info) 231 | else 232 | QBCore.Functions.Notify(Lang:t('notify.nonb'), 'error') 233 | cb(false) 234 | end 235 | end) 236 | 237 | RegisterNUICallback('GetWeaponData', function(cData, cb) 238 | local data = { 239 | WeaponData = QBCore.Shared.Items[cData.weapon], 240 | AttachmentData = FormatWeaponAttachments(cData.ItemData) 241 | } 242 | cb(data) 243 | end) 244 | 245 | RegisterNUICallback('RemoveAttachment', function(data, cb) 246 | local ped = PlayerPedId() 247 | local WeaponData = data.WeaponData 248 | local allAttachments = exports['qb-weapons']:getConfigWeaponAttachments() 249 | local Attachment = allAttachments[data.AttachmentData.attachment][WeaponData.name] 250 | local itemInfo = QBCore.Shared.Items[data.AttachmentData.attachment] 251 | QBCore.Functions.TriggerCallback('qb-weapons:server:RemoveAttachment', function(NewAttachments) 252 | if NewAttachments ~= false then 253 | local Attachies = {} 254 | RemoveWeaponComponentFromPed(ped, joaat(WeaponData.name), joaat(Attachment)) 255 | for _, v in pairs(NewAttachments) do 256 | for attachmentType, weapons in pairs(allAttachments) do 257 | local componentHash = weapons[WeaponData.name] 258 | if componentHash and v.component == componentHash then 259 | local label = itemInfo and itemInfo.label or 'Unknown' 260 | Attachies[#Attachies + 1] = { 261 | attachment = attachmentType, 262 | label = label, 263 | } 264 | end 265 | end 266 | end 267 | local DJATA = { 268 | Attachments = Attachies, 269 | WeaponData = WeaponData, 270 | itemInfo = itemInfo, 271 | } 272 | cb(DJATA) 273 | else 274 | RemoveWeaponComponentFromPed(ped, joaat(WeaponData.name), joaat(Attachment)) 275 | cb({}) 276 | end 277 | end, data.AttachmentData, WeaponData) 278 | end) 279 | 280 | -- Vending 281 | 282 | CreateThread(function() 283 | exports['qb-target']:AddTargetModel(Config.VendingObjects, { 284 | options = { 285 | { 286 | type = 'server', 287 | event = 'qb-inventory:server:openVending', 288 | icon = 'fa-solid fa-cash-register', 289 | label = Lang:t('menu.vending'), 290 | }, 291 | }, 292 | distance = 2.5 293 | }) 294 | end) 295 | 296 | -- Commands 297 | 298 | RegisterCommand('openInv', function() 299 | if IsNuiFocused() or IsPauseMenuActive() then return end 300 | ExecuteCommand('inventory') 301 | end, false) 302 | 303 | RegisterCommand('toggleHotbar', function() 304 | ExecuteCommand('hotbar') 305 | end, false) 306 | 307 | for i = 1, 5 do 308 | RegisterCommand('slot_' .. i, function() 309 | local itemData = PlayerData.items[i] 310 | if not itemData then return end 311 | if itemData.type == "weapon" then 312 | if HoldingDrop then 313 | return QBCore.Functions.Notify("Your already holding a bag, Go Drop it!", "error", 5500) 314 | end 315 | end 316 | TriggerServerEvent('qb-inventory:server:useItem', itemData) 317 | end, false) 318 | RegisterKeyMapping('slot_' .. i, Lang:t('inf_mapping.use_item') .. i, 'keyboard', i) 319 | end 320 | 321 | RegisterKeyMapping('openInv', Lang:t('inf_mapping.opn_inv'), 'keyboard', Config.Keybinds.Open) 322 | RegisterKeyMapping('toggleHotbar', Lang:t('inf_mapping.tog_slots'), 'keyboard', Config.Keybinds.Hotbar) 323 | -------------------------------------------------------------------------------- /client/vehicles.lua: -------------------------------------------------------------------------------- 1 | -- Functions 2 | 3 | local function IsBackEngine(vehModel) 4 | return BackEngineVehicles[vehModel] 5 | end 6 | 7 | local function OpenTrunk(vehicle) 8 | LoadAnimDict('amb@prop_human_bum_bin@idle_b') 9 | TaskPlayAnim(PlayerPedId(), 'amb@prop_human_bum_bin@idle_b', 'idle_d', 4.0, 4.0, -1, 50, 0, false, false, false) 10 | if IsBackEngine(GetEntityModel(vehicle)) then 11 | SetVehicleDoorOpen(vehicle, 4, false, false) 12 | else 13 | SetVehicleDoorOpen(vehicle, 5, false, false) 14 | end 15 | end 16 | 17 | function CloseTrunk() 18 | local vehicle, distance = QBCore.Functions.GetClosestVehicle() 19 | if vehicle == 0 or distance > 5 then return end 20 | LoadAnimDict('amb@prop_human_bum_bin@idle_b') 21 | TaskPlayAnim(PlayerPedId(), 'amb@prop_human_bum_bin@idle_b', 'exit', 4.0, 4.0, -1, 50, 0, false, false, false) 22 | if IsBackEngine(GetEntityModel(vehicle)) then 23 | SetVehicleDoorShut(vehicle, 4, false) 24 | else 25 | SetVehicleDoorShut(vehicle, 5, false) 26 | end 27 | end 28 | 29 | -- Callbacks 30 | 31 | QBCore.Functions.CreateClientCallback('qb-inventory:client:vehicleCheck', function(cb) 32 | local ped = PlayerPedId() 33 | 34 | -- Glovebox 35 | local inVehicle = GetVehiclePedIsIn(ped, false) 36 | if inVehicle ~= 0 then 37 | local plate = GetVehicleNumberPlateText(inVehicle) 38 | local class = GetVehicleClass(inVehicle) 39 | local inventory = 'glovebox-' .. plate 40 | cb(inventory, class) 41 | return 42 | end 43 | 44 | -- Trunk 45 | local vehicle, distance = QBCore.Functions.GetClosestVehicle() 46 | if vehicle ~= 0 and distance < 5 then 47 | local pos = GetEntityCoords(ped) 48 | local dimensionMin, dimensionMax = GetModelDimensions(GetEntityModel(vehicle)) 49 | local trunkpos = GetOffsetFromEntityInWorldCoords(vehicle, 0.0, (dimensionMin.y), 0.0) 50 | if BackEngineVehicles[GetEntityModel(vehicle)] then trunkpos = GetOffsetFromEntityInWorldCoords(vehicle, 0.0, (dimensionMax.y), 0.0) end 51 | if #(pos - trunkpos) < 1.5 then 52 | if GetVehicleDoorLockStatus(vehicle) < 2 then 53 | OpenTrunk(vehicle) 54 | local class = GetVehicleClass(vehicle) 55 | local plate = GetVehicleNumberPlateText(vehicle) 56 | local inventory = 'trunk-' .. plate 57 | cb(inventory, class) 58 | else 59 | QBCore.Functions.Notify(Lang:t('notify.vlocked'), 'error') 60 | return 61 | end 62 | end 63 | end 64 | cb(nil) 65 | end) 66 | -------------------------------------------------------------------------------- /config/config.lua: -------------------------------------------------------------------------------- 1 | Config = { 2 | UseTarget = GetConvar('UseTarget', 'false') == 'true', 3 | 4 | MaxWeight = 120000, 5 | MaxSlots = 40, 6 | 7 | StashSize = { 8 | maxweight = 2000000, 9 | slots = 100 10 | }, 11 | 12 | DropSize = { 13 | maxweight = 1000000, 14 | slots = 50 15 | }, 16 | 17 | Keybinds = { 18 | Open = 'TAB', 19 | Hotbar = 'Z', 20 | }, 21 | 22 | CleanupDropTime = 15, -- in minutes 23 | CleanupDropInterval = 1, -- in minutes 24 | 25 | ItemDropObject = `bkr_prop_duffel_bag_01a`, 26 | ItemDropObjectBone = 28422, 27 | ItemDropObjectOffset = { 28 | vector3(0.260000, 0.040000, 0.000000), 29 | vector3(90.000000, 0.000000, -78.989998), 30 | }, 31 | 32 | VendingObjects = { 33 | 'prop_vend_soda_01', 34 | 'prop_vend_soda_02', 35 | 'prop_vend_water_01', 36 | 'prop_vend_coffe_01', 37 | }, 38 | 39 | VendingItems = { 40 | { name = 'kurkakola', price = 4, amount = 50 }, 41 | { name = 'water_bottle', price = 4, amount = 50 }, 42 | }, 43 | } 44 | -------------------------------------------------------------------------------- /config/vehicles.lua: -------------------------------------------------------------------------------- 1 | VehicleStorage = { 2 | default = { 3 | gloveboxSlots = 5, 4 | gloveboxWeight = 10000, 5 | trunkSlots = 35, 6 | trunkWeight = 60000 7 | }, 8 | [0] = { -- Compacts 9 | gloveboxSlots = 5, 10 | gloveboxWeight = 10000, 11 | trunkSlots = 30, 12 | trunkWeight = 38000 13 | }, 14 | [1] = { -- Sedans 15 | gloveboxSlots = 5, 16 | gloveboxWeight = 10000, 17 | trunkSlots = 40, 18 | trunkWeight = 50000 19 | }, 20 | [2] = { -- SUVs 21 | gloveboxSlots = 5, 22 | gloveboxWeight = 10000, 23 | trunkSlots = 50, 24 | trunkWeight = 75000 25 | }, 26 | [3] = { -- Coupes 27 | gloveboxSlots = 5, 28 | gloveboxWeight = 10000, 29 | trunkSlots = 35, 30 | trunkWeight = 42000 31 | }, 32 | [4] = { -- Muscle 33 | gloveboxSlots = 5, 34 | gloveboxWeight = 10000, 35 | trunkSlots = 30, 36 | trunkWeight = 38000 37 | }, 38 | [5] = { -- Sports Classics 39 | gloveboxSlots = 5, 40 | gloveboxWeight = 10000, 41 | trunkSlots = 25, 42 | trunkWeight = 30000 43 | }, 44 | [6] = { -- Sports 45 | gloveboxSlots = 5, 46 | gloveboxWeight = 10000, 47 | trunkSlots = 25, 48 | trunkWeight = 30000 49 | }, 50 | [7] = { -- Super 51 | gloveboxSlots = 5, 52 | gloveboxWeight = 10000, 53 | trunkSlots = 25, 54 | trunkWeight = 30000 55 | }, 56 | [8] = { -- Motorcycles 57 | gloveboxSlots = 5, 58 | gloveboxWeight = 10000, 59 | trunkSlots = 15, 60 | trunkWeight = 15000 61 | }, 62 | [9] = { -- Off-road 63 | gloveboxSlots = 5, 64 | gloveboxWeight = 10000, 65 | trunkSlots = 35, 66 | trunkWeight = 60000 67 | }, 68 | [12] = { -- Vans 69 | gloveboxSlots = 5, 70 | gloveboxWeight = 10000, 71 | trunkSlots = 35, 72 | trunkWeight = 120000 73 | }, 74 | [13] = { -- Cycles 75 | gloveboxSlots = 5, 76 | gloveboxWeight = 10000, 77 | trunkSlots = 0, 78 | trunkWeight = 0 79 | }, 80 | [14] = { -- Boats 81 | gloveboxSlots = 5, 82 | gloveboxWeight = 10000, 83 | trunkSlots = 50, 84 | trunkWeight = 120000 85 | }, 86 | [15] = { -- Helicopters 87 | gloveboxSlots = 5, 88 | gloveboxWeight = 10000, 89 | trunkSlots = 50, 90 | trunkWeight = 120000 91 | }, 92 | [16] = { -- Planes 93 | gloveboxSlots = 5, 94 | gloveboxWeight = 10000, 95 | trunkSlots = 50, 96 | trunkWeight = 120000 97 | }, 98 | [17] = { -- service 99 | gloveboxSlots = 0, 100 | gloveboxWeight = 0, 101 | trunkSlots = 0, 102 | trunkWeight = 0 103 | }, 104 | [18] = { -- Emergency 105 | gloveboxSlots = 4, 106 | gloveboxWeight = 10000, 107 | trunkSlots = 12, 108 | trunkWeight = 150000 109 | }, 110 | [19] = { -- Military 111 | gloveboxSlots = 0, 112 | gloveboxWeight = 0, 113 | trunkSlots = 0, 114 | trunkWeight = 0 115 | }, 116 | [20] = { -- Commercial 117 | gloveboxSlots = 0, 118 | gloveboxWeight = 0, 119 | trunkSlots = 0, 120 | trunkWeight = 0 121 | }, 122 | [21] = { -- trains 123 | gloveboxSlots = 0, 124 | gloveboxWeight = 0, 125 | trunkSlots = 0, 126 | trunkWeight = 0 127 | }, 128 | [22] = { -- Commercial 129 | gloveboxSlots = 0, 130 | gloveboxWeight = 0, 131 | trunkSlots = 0, 132 | trunkWeight = 0 133 | }, 134 | } 135 | 136 | BackEngineVehicles = { 137 | [`ninef`] = true, 138 | [`adder`] = true, 139 | [`vagner`] = true, 140 | [`t20`] = true, 141 | [`infernus`] = true, 142 | [`zentorno`] = true, 143 | [`reaper`] = true, 144 | [`comet2`] = true, 145 | [`comet3`] = true, 146 | [`jester`] = true, 147 | [`jester2`] = true, 148 | [`cheetah`] = true, 149 | [`cheetah2`] = true, 150 | [`prototipo`] = true, 151 | [`turismor`] = true, 152 | [`pfister811`] = true, 153 | [`ardent`] = true, 154 | [`nero`] = true, 155 | [`nero2`] = true, 156 | [`tempesta`] = true, 157 | [`vacca`] = true, 158 | [`bullet`] = true, 159 | [`osiris`] = true, 160 | [`entityxf`] = true, 161 | [`turismo2`] = true, 162 | [`fmj`] = true, 163 | [`re7b`] = true, 164 | [`tyrus`] = true, 165 | [`italigtb`] = true, 166 | [`italirsx`] = true, 167 | [`penetrator`] = true, 168 | [`monroe`] = true, 169 | [`ninef2`] = true, 170 | [`stingergt`] = true, 171 | [`surfer`] = true, 172 | [`surfer2`] = true, 173 | [`gp1`] = true, 174 | [`autarch`] = true, 175 | [`tyrant`] = true 176 | } 177 | -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'cerulean' 2 | game 'gta5' 3 | lua54 'yes' 4 | author 'Kakarot' 5 | description 'Player inventory system providing a variety of features for storing and managing items' 6 | version '2.0.0' 7 | 8 | shared_scripts { 9 | '@qb-core/shared/locale.lua', 10 | 'locales/en.lua', 11 | 'locales/*.lua', 12 | 'config/*.lua', 13 | } 14 | 15 | client_scripts { 16 | 'client/main.lua', 17 | 'client/drops.lua', 18 | 'client/vehicles.lua', 19 | } 20 | 21 | server_scripts { 22 | '@oxmysql/lib/MySQL.lua', 23 | 'server/main.lua', 24 | 'server/functions.lua', 25 | 'server/commands.lua', 26 | } 27 | 28 | ui_page 'html/index.html' 29 | 30 | files { 31 | 'html/index.html', 32 | 'html/main.css', 33 | 'html/app.js', 34 | 'html/images/*.png', 35 | } 36 | 37 | dependency 'qb-weapons' 38 | -------------------------------------------------------------------------------- /html/images/10kgoldchain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/10kgoldchain.png -------------------------------------------------------------------------------- /html/images/acetone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/acetone.png -------------------------------------------------------------------------------- /html/images/advancedkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/advancedkit.png -------------------------------------------------------------------------------- /html/images/advancedlockpick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/advancedlockpick.png -------------------------------------------------------------------------------- /html/images/advscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/advscope_attachment.png -------------------------------------------------------------------------------- /html/images/aluminum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/aluminum.png -------------------------------------------------------------------------------- /html/images/aluminumoxide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/aluminumoxide.png -------------------------------------------------------------------------------- /html/images/antipatharia_coral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/antipatharia_coral.png -------------------------------------------------------------------------------- /html/images/armor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/armor.png -------------------------------------------------------------------------------- /html/images/attworkbench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/attworkbench.png -------------------------------------------------------------------------------- /html/images/bandage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/bandage.png -------------------------------------------------------------------------------- /html/images/bank_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/bank_card.png -------------------------------------------------------------------------------- /html/images/barrel_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/barrel_attachment.png -------------------------------------------------------------------------------- /html/images/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/beer.png -------------------------------------------------------------------------------- /html/images/bellend_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/bellend_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/binoculars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/binoculars.png -------------------------------------------------------------------------------- /html/images/boomcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/boomcamo_attachment.png -------------------------------------------------------------------------------- /html/images/brushcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/brushcamo_attachment.png -------------------------------------------------------------------------------- /html/images/casinochips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/casinochips.png -------------------------------------------------------------------------------- /html/images/certificate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/certificate.png -------------------------------------------------------------------------------- /html/images/cleaningkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/cleaningkit.png -------------------------------------------------------------------------------- /html/images/clip_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/clip_attachment.png -------------------------------------------------------------------------------- /html/images/cocaine_baggy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/cocaine_baggy.png -------------------------------------------------------------------------------- /html/images/cocaineleaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/cocaineleaf.png -------------------------------------------------------------------------------- /html/images/coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/coffee.png -------------------------------------------------------------------------------- /html/images/coke_brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/coke_brick.png -------------------------------------------------------------------------------- /html/images/coke_small_brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/coke_small_brick.png -------------------------------------------------------------------------------- /html/images/cola.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/cola.png -------------------------------------------------------------------------------- /html/images/comp_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/comp_attachment.png -------------------------------------------------------------------------------- /html/images/copper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/copper.png -------------------------------------------------------------------------------- /html/images/crack_baggy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/crack_baggy.png -------------------------------------------------------------------------------- /html/images/cryptostick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/cryptostick.png -------------------------------------------------------------------------------- /html/images/dendrogyra_coral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/dendrogyra_coral.png -------------------------------------------------------------------------------- /html/images/diamond_ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/diamond_ring.png -------------------------------------------------------------------------------- /html/images/digicamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/digicamo_attachment.png -------------------------------------------------------------------------------- /html/images/diving_gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/diving_gear.png -------------------------------------------------------------------------------- /html/images/diving_tube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/diving_tube.png -------------------------------------------------------------------------------- /html/images/drill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/drill.png -------------------------------------------------------------------------------- /html/images/driver_license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/driver_license.png -------------------------------------------------------------------------------- /html/images/drum_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/drum_attachment.png -------------------------------------------------------------------------------- /html/images/electronickit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/electronickit.png -------------------------------------------------------------------------------- /html/images/ephedrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/ephedrine.png -------------------------------------------------------------------------------- /html/images/evidence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/evidence.png -------------------------------------------------------------------------------- /html/images/fat_end_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/fat_end_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/firework1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/firework1.png -------------------------------------------------------------------------------- /html/images/firework2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/firework2.png -------------------------------------------------------------------------------- /html/images/firework3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/firework3.png -------------------------------------------------------------------------------- /html/images/firework4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/firework4.png -------------------------------------------------------------------------------- /html/images/firstaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/firstaid.png -------------------------------------------------------------------------------- /html/images/fish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/fish.png -------------------------------------------------------------------------------- /html/images/fishbait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/fishbait.png -------------------------------------------------------------------------------- /html/images/fishingrod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/fishingrod.png -------------------------------------------------------------------------------- /html/images/fitbit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/fitbit.png -------------------------------------------------------------------------------- /html/images/flashlight_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/flashlight_attachment.png -------------------------------------------------------------------------------- /html/images/flat_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/flat_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/geocamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/geocamo_attachment.png -------------------------------------------------------------------------------- /html/images/glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/glass.png -------------------------------------------------------------------------------- /html/images/goldbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/goldbar.png -------------------------------------------------------------------------------- /html/images/goldchain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/goldchain.png -------------------------------------------------------------------------------- /html/images/grape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/grape.png -------------------------------------------------------------------------------- /html/images/grapejuice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/grapejuice.png -------------------------------------------------------------------------------- /html/images/grip_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/grip_attachment.png -------------------------------------------------------------------------------- /html/images/handcuffs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/handcuffs.png -------------------------------------------------------------------------------- /html/images/harness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/harness.png -------------------------------------------------------------------------------- /html/images/heavy_duty_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/heavy_duty_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/holoscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/holoscope_attachment.png -------------------------------------------------------------------------------- /html/images/hydrochloricacid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/hydrochloricacid.png -------------------------------------------------------------------------------- /html/images/id_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/id_card.png -------------------------------------------------------------------------------- /html/images/ifaks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/ifaks.png -------------------------------------------------------------------------------- /html/images/iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/iphone.png -------------------------------------------------------------------------------- /html/images/iron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/iron.png -------------------------------------------------------------------------------- /html/images/ironoxide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/ironoxide.png -------------------------------------------------------------------------------- /html/images/jerry_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/jerry_can.png -------------------------------------------------------------------------------- /html/images/joint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/joint.png -------------------------------------------------------------------------------- /html/images/labkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/labkey.png -------------------------------------------------------------------------------- /html/images/laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/laptop.png -------------------------------------------------------------------------------- /html/images/largescope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/largescope_attachment.png -------------------------------------------------------------------------------- /html/images/lawyerpass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/lawyerpass.png -------------------------------------------------------------------------------- /html/images/leopardcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/leopardcamo_attachment.png -------------------------------------------------------------------------------- /html/images/lighter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/lighter.png -------------------------------------------------------------------------------- /html/images/lockpick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/lockpick.png -------------------------------------------------------------------------------- /html/images/markedbills.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/markedbills.png -------------------------------------------------------------------------------- /html/images/medscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/medscope_attachment.png -------------------------------------------------------------------------------- /html/images/metalscrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/metalscrap.png -------------------------------------------------------------------------------- /html/images/meth_baggy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/meth_baggy.png -------------------------------------------------------------------------------- /html/images/meth_tray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/meth_tray.png -------------------------------------------------------------------------------- /html/images/mg_ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/mg_ammo.png -------------------------------------------------------------------------------- /html/images/moneybag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/moneybag.png -------------------------------------------------------------------------------- /html/images/newsbmic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/newsbmic.png -------------------------------------------------------------------------------- /html/images/newscam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/newscam.png -------------------------------------------------------------------------------- /html/images/newsmic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/newsmic.png -------------------------------------------------------------------------------- /html/images/nitrous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/nitrous.png -------------------------------------------------------------------------------- /html/images/nvscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/nvscope_attachment.png -------------------------------------------------------------------------------- /html/images/oxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/oxy.png -------------------------------------------------------------------------------- /html/images/painkillers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/painkillers.png -------------------------------------------------------------------------------- /html/images/parachute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/parachute.png -------------------------------------------------------------------------------- /html/images/patriotcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/patriotcamo_attachment.png -------------------------------------------------------------------------------- /html/images/perseuscamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/perseuscamo_attachment.png -------------------------------------------------------------------------------- /html/images/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/phone.png -------------------------------------------------------------------------------- /html/images/pinger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/pinger.png -------------------------------------------------------------------------------- /html/images/pistol_ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/pistol_ammo.png -------------------------------------------------------------------------------- /html/images/plastic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/plastic.png -------------------------------------------------------------------------------- /html/images/police_stormram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/police_stormram.png -------------------------------------------------------------------------------- /html/images/precision_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/precision_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/printerdocument.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/printerdocument.png -------------------------------------------------------------------------------- /html/images/radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/radio.png -------------------------------------------------------------------------------- /html/images/radioscanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/radioscanner.png -------------------------------------------------------------------------------- /html/images/repairkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/repairkit.png -------------------------------------------------------------------------------- /html/images/rifle_ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/rifle_ammo.png -------------------------------------------------------------------------------- /html/images/rolex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/rolex.png -------------------------------------------------------------------------------- /html/images/rolling_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/rolling_paper.png -------------------------------------------------------------------------------- /html/images/rubber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/rubber.png -------------------------------------------------------------------------------- /html/images/samsungphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/samsungphone.png -------------------------------------------------------------------------------- /html/images/sandwich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/sandwich.png -------------------------------------------------------------------------------- /html/images/screwdriverset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/screwdriverset.png -------------------------------------------------------------------------------- /html/images/security_card_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/security_card_01.png -------------------------------------------------------------------------------- /html/images/security_card_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/security_card_02.png -------------------------------------------------------------------------------- /html/images/sessantacamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/sessantacamo_attachment.png -------------------------------------------------------------------------------- /html/images/shotgun_ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/shotgun_ammo.png -------------------------------------------------------------------------------- /html/images/skullcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/skullcamo_attachment.png -------------------------------------------------------------------------------- /html/images/slanted_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/slanted_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/smallscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/smallscope_attachment.png -------------------------------------------------------------------------------- /html/images/smg_ammo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/smg_ammo.png -------------------------------------------------------------------------------- /html/images/snikkel_candy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/snikkel_candy.png -------------------------------------------------------------------------------- /html/images/snowball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/snowball.png -------------------------------------------------------------------------------- /html/images/split_end_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/split_end_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/squared_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/squared_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/steel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/steel.png -------------------------------------------------------------------------------- /html/images/stickynote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/stickynote.png -------------------------------------------------------------------------------- /html/images/suppressor_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/suppressor_attachment.png -------------------------------------------------------------------------------- /html/images/tablet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/tablet.png -------------------------------------------------------------------------------- /html/images/tactical_muzzle_brake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/tactical_muzzle_brake.png -------------------------------------------------------------------------------- /html/images/thermalscope_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/thermalscope_attachment.png -------------------------------------------------------------------------------- /html/images/thermite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/thermite.png -------------------------------------------------------------------------------- /html/images/tirerepairkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/tirerepairkit.png -------------------------------------------------------------------------------- /html/images/tosti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/tosti.png -------------------------------------------------------------------------------- /html/images/tunerchip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/tunerchip.png -------------------------------------------------------------------------------- /html/images/twerks_candy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/twerks_candy.png -------------------------------------------------------------------------------- /html/images/usb_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/usb_device.png -------------------------------------------------------------------------------- /html/images/veh_armor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_armor.png -------------------------------------------------------------------------------- /html/images/veh_brakes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_brakes.png -------------------------------------------------------------------------------- /html/images/veh_engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_engine.png -------------------------------------------------------------------------------- /html/images/veh_exterior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_exterior.png -------------------------------------------------------------------------------- /html/images/veh_interior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_interior.png -------------------------------------------------------------------------------- /html/images/veh_neons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_neons.png -------------------------------------------------------------------------------- /html/images/veh_plates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_plates.png -------------------------------------------------------------------------------- /html/images/veh_suspension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_suspension.png -------------------------------------------------------------------------------- /html/images/veh_tint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_tint.png -------------------------------------------------------------------------------- /html/images/veh_toolbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_toolbox.png -------------------------------------------------------------------------------- /html/images/veh_transmission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_transmission.png -------------------------------------------------------------------------------- /html/images/veh_turbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_turbo.png -------------------------------------------------------------------------------- /html/images/veh_wheels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_wheels.png -------------------------------------------------------------------------------- /html/images/veh_xenons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/veh_xenons.png -------------------------------------------------------------------------------- /html/images/vodka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/vodka.png -------------------------------------------------------------------------------- /html/images/walkstick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/walkstick.png -------------------------------------------------------------------------------- /html/images/water_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/water_bottle.png -------------------------------------------------------------------------------- /html/images/weapon_acidpackage.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_acidpackage.PNG -------------------------------------------------------------------------------- /html/images/weapon_advancedrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_advancedrifle.png -------------------------------------------------------------------------------- /html/images/weapon_appistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_appistol.png -------------------------------------------------------------------------------- /html/images/weapon_assaultrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_assaultrifle.png -------------------------------------------------------------------------------- /html/images/weapon_assaultrifle_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_assaultrifle_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_assaultshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_assaultshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_assaultsmg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_assaultsmg.png -------------------------------------------------------------------------------- /html/images/weapon_autoshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_autoshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_ball.png -------------------------------------------------------------------------------- /html/images/weapon_bat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bat.png -------------------------------------------------------------------------------- /html/images/weapon_battleaxe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_battleaxe.png -------------------------------------------------------------------------------- /html/images/weapon_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bottle.png -------------------------------------------------------------------------------- /html/images/weapon_bread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bread.png -------------------------------------------------------------------------------- /html/images/weapon_briefcase.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_briefcase.PNG -------------------------------------------------------------------------------- /html/images/weapon_briefcase_02.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_briefcase_02.PNG -------------------------------------------------------------------------------- /html/images/weapon_bullpuprifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bullpuprifle.png -------------------------------------------------------------------------------- /html/images/weapon_bullpuprifle_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bullpuprifle_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_bullpupshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bullpupshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_bzgas.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_bzgas.PNG -------------------------------------------------------------------------------- /html/images/weapon_candycane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_candycane.png -------------------------------------------------------------------------------- /html/images/weapon_carbinerifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_carbinerifle.png -------------------------------------------------------------------------------- /html/images/weapon_carbinerifle_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_carbinerifle_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_ceramicpistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_ceramicpistol.png -------------------------------------------------------------------------------- /html/images/weapon_combatmg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_combatmg.png -------------------------------------------------------------------------------- /html/images/weapon_combatmg_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_combatmg_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_combatpdw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_combatpdw.png -------------------------------------------------------------------------------- /html/images/weapon_combatpistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_combatpistol.png -------------------------------------------------------------------------------- /html/images/weapon_combatshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_combatshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_compactlauncher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_compactlauncher.png -------------------------------------------------------------------------------- /html/images/weapon_compactrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_compactrifle.png -------------------------------------------------------------------------------- /html/images/weapon_crowbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_crowbar.png -------------------------------------------------------------------------------- /html/images/weapon_dagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_dagger.png -------------------------------------------------------------------------------- /html/images/weapon_dbshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_dbshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_digiscanner.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_digiscanner.PNG -------------------------------------------------------------------------------- /html/images/weapon_doubleaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_doubleaction.png -------------------------------------------------------------------------------- /html/images/weapon_emplauncher.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_emplauncher.PNG -------------------------------------------------------------------------------- /html/images/weapon_fertilizercan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_fertilizercan.png -------------------------------------------------------------------------------- /html/images/weapon_fireextinguisher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_fireextinguisher.png -------------------------------------------------------------------------------- /html/images/weapon_firework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_firework.png -------------------------------------------------------------------------------- /html/images/weapon_flare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_flare.png -------------------------------------------------------------------------------- /html/images/weapon_flaregun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_flaregun.png -------------------------------------------------------------------------------- /html/images/weapon_flashlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_flashlight.png -------------------------------------------------------------------------------- /html/images/weapon_gadgetpistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_gadgetpistol.png -------------------------------------------------------------------------------- /html/images/weapon_garbagebag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_garbagebag.png -------------------------------------------------------------------------------- /html/images/weapon_gas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_gas.png -------------------------------------------------------------------------------- /html/images/weapon_golfclub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_golfclub.png -------------------------------------------------------------------------------- /html/images/weapon_grenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_grenade.png -------------------------------------------------------------------------------- /html/images/weapon_grenadelauncher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_grenadelauncher.png -------------------------------------------------------------------------------- /html/images/weapon_grenadelauncher_smoke.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_grenadelauncher_smoke.PNG -------------------------------------------------------------------------------- /html/images/weapon_gusenberg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_gusenberg.png -------------------------------------------------------------------------------- /html/images/weapon_hammer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_hammer.png -------------------------------------------------------------------------------- /html/images/weapon_handcuffs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_handcuffs.png -------------------------------------------------------------------------------- /html/images/weapon_hatchet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_hatchet.png -------------------------------------------------------------------------------- /html/images/weapon_hazardcan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_hazardcan.png -------------------------------------------------------------------------------- /html/images/weapon_heavypistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_heavypistol.png -------------------------------------------------------------------------------- /html/images/weapon_heavyrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_heavyrifle.png -------------------------------------------------------------------------------- /html/images/weapon_heavyshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_heavyshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_heavysniper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_heavysniper.png -------------------------------------------------------------------------------- /html/images/weapon_heavysniper_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_heavysniper_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_hominglauncher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_hominglauncher.png -------------------------------------------------------------------------------- /html/images/weapon_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_knife.png -------------------------------------------------------------------------------- /html/images/weapon_knuckle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_knuckle.png -------------------------------------------------------------------------------- /html/images/weapon_license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_license.png -------------------------------------------------------------------------------- /html/images/weapon_machete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_machete.png -------------------------------------------------------------------------------- /html/images/weapon_machinepistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_machinepistol.png -------------------------------------------------------------------------------- /html/images/weapon_marksmanpistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_marksmanpistol.png -------------------------------------------------------------------------------- /html/images/weapon_marksmanrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_marksmanrifle.png -------------------------------------------------------------------------------- /html/images/weapon_marksmanrifle_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_marksmanrifle_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_metaldetector.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_metaldetector.PNG -------------------------------------------------------------------------------- /html/images/weapon_mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_mg.png -------------------------------------------------------------------------------- /html/images/weapon_microsmg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_microsmg.png -------------------------------------------------------------------------------- /html/images/weapon_militaryrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_militaryrifle.png -------------------------------------------------------------------------------- /html/images/weapon_minigun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_minigun.png -------------------------------------------------------------------------------- /html/images/weapon_minismg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_minismg.png -------------------------------------------------------------------------------- /html/images/weapon_molotov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_molotov.png -------------------------------------------------------------------------------- /html/images/weapon_musket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_musket.png -------------------------------------------------------------------------------- /html/images/weapon_navyrevolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_navyrevolver.png -------------------------------------------------------------------------------- /html/images/weapon_nightstick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_nightstick.png -------------------------------------------------------------------------------- /html/images/weapon_petrolcan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_petrolcan.png -------------------------------------------------------------------------------- /html/images/weapon_pipebomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pipebomb.png -------------------------------------------------------------------------------- /html/images/weapon_pistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pistol.png -------------------------------------------------------------------------------- /html/images/weapon_pistol50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pistol50.png -------------------------------------------------------------------------------- /html/images/weapon_pistol_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pistol_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_pistolxm3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pistolxm3.png -------------------------------------------------------------------------------- /html/images/weapon_poolcue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_poolcue.png -------------------------------------------------------------------------------- /html/images/weapon_precisionrifle.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_precisionrifle.PNG -------------------------------------------------------------------------------- /html/images/weapon_proxmine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_proxmine.png -------------------------------------------------------------------------------- /html/images/weapon_pumpshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pumpshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_pumpshotgun_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_pumpshotgun_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_railgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_railgun.png -------------------------------------------------------------------------------- /html/images/weapon_railgunxm3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_railgunxm3.PNG -------------------------------------------------------------------------------- /html/images/weapon_raycarbine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_raycarbine.png -------------------------------------------------------------------------------- /html/images/weapon_rayminigun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_rayminigun.png -------------------------------------------------------------------------------- /html/images/weapon_raypistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_raypistol.png -------------------------------------------------------------------------------- /html/images/weapon_revolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_revolver.png -------------------------------------------------------------------------------- /html/images/weapon_revolver_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_revolver_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_rpg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_rpg.png -------------------------------------------------------------------------------- /html/images/weapon_sawnoffshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_sawnoffshotgun.png -------------------------------------------------------------------------------- /html/images/weapon_smg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_smg.png -------------------------------------------------------------------------------- /html/images/weapon_smg_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_smg_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_smokegrenade.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_smokegrenade.PNG -------------------------------------------------------------------------------- /html/images/weapon_sniperrifle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_sniperrifle.png -------------------------------------------------------------------------------- /html/images/weapon_snowball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_snowball.png -------------------------------------------------------------------------------- /html/images/weapon_snspistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_snspistol.png -------------------------------------------------------------------------------- /html/images/weapon_snspistol_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_snspistol_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_specialcarbine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_specialcarbine.png -------------------------------------------------------------------------------- /html/images/weapon_specialcarbine_mk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_specialcarbine_mk2.png -------------------------------------------------------------------------------- /html/images/weapon_stickybomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_stickybomb.png -------------------------------------------------------------------------------- /html/images/weapon_stone_hatchet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_stone_hatchet.png -------------------------------------------------------------------------------- /html/images/weapon_stungun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_stungun.png -------------------------------------------------------------------------------- /html/images/weapon_switchblade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_switchblade.png -------------------------------------------------------------------------------- /html/images/weapon_tecpistol.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_tecpistol.PNG -------------------------------------------------------------------------------- /html/images/weapon_vintagepistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_vintagepistol.png -------------------------------------------------------------------------------- /html/images/weapon_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapon_wrench.png -------------------------------------------------------------------------------- /html/images/weapontint_army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_army.png -------------------------------------------------------------------------------- /html/images/weapontint_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_black.png -------------------------------------------------------------------------------- /html/images/weapontint_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_gold.png -------------------------------------------------------------------------------- /html/images/weapontint_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_green.png -------------------------------------------------------------------------------- /html/images/weapontint_lspd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_lspd.png -------------------------------------------------------------------------------- /html/images/weapontint_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_orange.png -------------------------------------------------------------------------------- /html/images/weapontint_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_pink.png -------------------------------------------------------------------------------- /html/images/weapontint_plat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weapontint_plat.png -------------------------------------------------------------------------------- /html/images/weed_baggy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weed_baggy.png -------------------------------------------------------------------------------- /html/images/weed_baggy_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weed_baggy_empty.png -------------------------------------------------------------------------------- /html/images/weed_brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weed_brick.png -------------------------------------------------------------------------------- /html/images/weed_nutrition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weed_nutrition.png -------------------------------------------------------------------------------- /html/images/weed_seed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/weed_seed.png -------------------------------------------------------------------------------- /html/images/whiskey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/whiskey.png -------------------------------------------------------------------------------- /html/images/wine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/wine.png -------------------------------------------------------------------------------- /html/images/woodcamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/woodcamo_attachment.png -------------------------------------------------------------------------------- /html/images/workbench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/workbench.png -------------------------------------------------------------------------------- /html/images/xtc_baggy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/xtc_baggy.png -------------------------------------------------------------------------------- /html/images/zebracamo_attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qbcore-framework/qb-inventory/7feaf52f79c776d8becd17523cd30fab75743b63/html/images/zebracamo_attachment.png -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | QB Inventory 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 |
21 |
22 |
23 |
24 |

{{ inventoryLabel }}

25 |
26 |
27 |

{{ (playerWeight / 1000).toFixed(1) }} / {{ (maxWeight / 1000).toFixed(1) }}

28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |

{{ slot }}

39 |
40 |
41 | 42 |
43 |
44 |

x{{ getItemInSlot(slot, 'player').amount }}

45 |
46 |
47 |
57 |
58 |
59 | 62 |
63 |
64 |
65 |
66 | 67 |
68 |
69 | 70 | 73 |
74 |
75 | 76 | 77 |
78 |
79 |
80 |
81 |

{{ otherInventoryLabel }}

82 |
83 |
84 |

{{ (otherInventoryWeight / 1000).toFixed(1) }} / {{(otherInventoryMaxWeight / 1000).toFixed(1) }}

85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | 96 |
97 |
98 |

x{{ getItemInSlot(slot, 'other').amount }}

99 |
100 |
101 |

${{ getItemInSlot(slot, 'other').price }}

102 |
103 |
104 |
114 |
115 |
116 | 119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |

{{ slot }}

129 |
130 |
131 | 132 |
133 |
134 |

x{{ getHotbarItemInSlot(slot).amount }}

135 |
136 |
137 |
147 |
148 |
149 |
150 |

{{ getHotbarItemInSlot(slot).label }}

151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |

{{ notificationType }}

159 |
160 |
161 | 162 |
163 |
164 |

x{{ notificationAmount }}

165 |
166 |
167 |

{{ notificationText }}

168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 | 176 |
177 |
178 |

{{ item.label }}

179 |
180 |
181 |
182 |
183 |
184 | 185 |
186 | 187 |
188 |
189 |
190 |
191 | 192 |
193 |
194 |

x{{ draggedItem.amount }}

195 |
196 |
197 |

{{ draggedItem.label }}

198 |
199 |
200 | 222 |
223 | 224 | 225 | -------------------------------------------------------------------------------- /html/main.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Exo+2:wght@300;400;500;600;700&display=swap"); 2 | 3 | :root { 4 | /* Dark Theme Colors from Style Guide */ 5 | --primary: #f44336; 6 | --on-primary: #ffffff; 7 | --primary-container: #ffdad6; 8 | --on-primary-container: #410002; 9 | --secondary: #d32f2f; 10 | --on-secondary: #ffffff; 11 | --secondary-container: #ffdad5; 12 | --on-secondary-container: #410001; 13 | --tertiary: #ff8a65; 14 | --on-tertiary: #ffffff; 15 | --tertiary-container: #ffdacc; 16 | --on-tertiary-container: #410002; 17 | --surface: #1c1b1f; 18 | --on-surface: #e6e1e5; 19 | --surface-container-lowest: #0f0d13; 20 | --surface-container-low: #1d1b20; 21 | --surface-container: #211f26; 22 | --surface-container-high: #2b2930; 23 | --surface-container-highest: #36343b; 24 | --error: #b3261e; 25 | --on-error: #ffffff; 26 | --error-container: #93000a; 27 | --on-error-container: #ffdad5; 28 | --outline: #79747e; 29 | --outline-variant: #49454f; 30 | --success: #9bd880; 31 | --on-success: #193800; 32 | --success-container: #275000; 33 | --on-success-container: #b6f397; 34 | --warning: #ffba47; 35 | --on-warning: #422b00; 36 | --warning-container: #5f3f00; 37 | --on-warning-container: #ffddb0; 38 | --info: #b3c5ff; 39 | --on-info: #002a77; 40 | --info-container: #003ea7; 41 | --on-info-container: #dae1ff; 42 | --scrim: rgba(0, 0, 0, 0.6); 43 | --shadow: rgba(0, 0, 0, 0.15); 44 | 45 | /* Shape values */ 46 | --radius-small: 8px; 47 | --radius-medium: 12px; 48 | --radius-large: 16px; 49 | 50 | /* Typography */ 51 | --font-primary: "Exo 2", sans-serif; 52 | --font-weight-regular: 400; 53 | --font-weight-medium: 500; 54 | --font-weight-bold: 700; 55 | 56 | /* Elevation */ 57 | --elevation-1: 0px 1px 3px 1px rgba(0, 0, 0, 0.15); 58 | --elevation-2: 0px 2px 6px 2px rgba(0, 0, 0, 0.15); 59 | --elevation-3: 0px 4px 8px 3px rgba(0, 0, 0, 0.15); 60 | 61 | /* Tooltip */ 62 | --v-popper-theme-background-color: var(--surface-container-high); 63 | --v-popper-theme-text-color: var(--on-surface); 64 | --v-popper-theme-border-radius: var(--radius-small); 65 | --v-popper-theme-padding: 12px; 66 | --v-popper-theme-box-shadow: var(--elevation-2); 67 | } 68 | 69 | body { 70 | margin: 0; 71 | } 72 | 73 | div { 74 | font-family: var(--font-primary); 75 | } 76 | 77 | ::-webkit-scrollbar { 78 | display: none; 79 | } 80 | 81 | #app { 82 | height: 100vh; 83 | width: 100vw; 84 | } 85 | 86 | .inventory-container { 87 | height: 100%; 88 | width: 100%; 89 | } 90 | 91 | .inventory-section { 92 | position: absolute; 93 | top: 50vh; 94 | width: 28vw; 95 | height: 47.16vh; 96 | transform: translateY(-50%); 97 | display: flex; 98 | flex-direction: column; 99 | } 100 | 101 | .player-inventory-section { 102 | left: 14vw; 103 | } 104 | 105 | .other-inventory-section { 106 | right: 14vw; 107 | } 108 | 109 | .centered-inventory-section { 110 | left: 50vw; 111 | transform: translate(-50%, -50%); 112 | } 113 | 114 | .inventory-header { 115 | box-sizing: border-box; 116 | width: 100%; 117 | height: fit-content; 118 | font-weight: var(--font-weight-bold); 119 | color: var(--on-surface); 120 | display: flex; 121 | flex-direction: column; 122 | align-items: flex-start; 123 | background-color: rgba(30, 30, 30, 0.6); 124 | border: 1px solid rgba(80, 80, 80, 0.5); 125 | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); 126 | padding: 0px 10px 10px; 127 | margin-bottom: 8px; 128 | } 129 | 130 | .inventory-grid { 131 | flex-grow: 1; 132 | overflow-x: hidden; 133 | overflow-y: scroll; 134 | } 135 | 136 | .labels-container { 137 | display: flex; 138 | width: 100%; 139 | } 140 | 141 | .inventory-label { 142 | flex-grow: 1; 143 | } 144 | 145 | .item-grid { 146 | display: flex; 147 | flex-wrap: wrap; 148 | gap: 2px; 149 | align-content: flex-start; 150 | width: 100%; 151 | box-sizing: border-box; 152 | } 153 | 154 | .item-slot { 155 | position: relative; 156 | display: flex; 157 | align-items: center; 158 | justify-content: center; 159 | width: calc(20% - 2px); 160 | height: 10vh; 161 | background-color: rgba(30, 30, 30, 0.6); 162 | border: 1px solid rgba(80, 80, 80, 0.5); 163 | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); 164 | box-sizing: border-box; 165 | } 166 | 167 | .item-slot-img { 168 | display: flex; 169 | justify-content: center; 170 | align-items: center; 171 | width: 80%; 172 | height: 80%; 173 | } 174 | 175 | .item-slot-img img { 176 | width: 75%; 177 | height: auto; 178 | filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.5)); 179 | } 180 | 181 | .item-slot-key { 182 | font-weight: var(--font-weight-bold); 183 | color: var(--on-primary-container); 184 | position: absolute; 185 | top: 5px; 186 | left: 5px; 187 | width: 20px; 188 | height: 20px; 189 | background-color: var(--primary-container); 190 | display: flex; 191 | align-items: center; 192 | justify-content: center; 193 | box-shadow: var(--elevation-1); 194 | } 195 | 196 | .item-slot-amount { 197 | font-size: 0.7vh; 198 | color: var(--on-surface); 199 | position: absolute; 200 | top: 5px; 201 | right: 5px; 202 | width: 20px; 203 | height: 20px; 204 | display: flex; 205 | align-items: center; 206 | justify-content: center; 207 | text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.7); 208 | } 209 | 210 | .item-slot:hover { 211 | border-color: rgba(100, 100, 100, 0.8); 212 | background-color: rgba(40, 40, 40, 0.7); 213 | } 214 | 215 | .item-slot:empty { 216 | background-color: rgba(30, 30, 30, 0.3); 217 | border: 1px solid rgba(80, 80, 80, 0.3); 218 | } 219 | 220 | .item-price { 221 | font-size: 0.7vh; 222 | color: var(--on-surface); 223 | position: absolute; 224 | top: 5px; 225 | left: 5px; 226 | width: 20px; 227 | height: 20px; 228 | display: flex; 229 | align-items: center; 230 | justify-content: center; 231 | } 232 | 233 | .item-slot-label { 234 | position: absolute; 235 | white-space: nowrap; 236 | bottom: 0; 237 | height: 1vh; 238 | width: 100%; 239 | background-color: var(--primary-container); 240 | display: flex; 241 | justify-content: center; 242 | align-items: center; 243 | box-shadow: var(--elevation-1); 244 | } 245 | 246 | .item-slot-durability { 247 | position: absolute; 248 | bottom: 0vh; 249 | width: 99%; 250 | height: 6px; 251 | background-color: var(--surface-container-high); 252 | } 253 | 254 | .item-slot-durability-fill { 255 | height: 100%; 256 | transition: width 0.2s; 257 | } 258 | 259 | .item-slot-durability-fill.high { 260 | background-color: var(--success); 261 | } 262 | 263 | .item-slot-durability-fill.medium { 264 | background-color: var(--warning); 265 | } 266 | 267 | .item-slot-durability-fill.low { 268 | background-color: var(--error); 269 | } 270 | 271 | .item-slot-label > p { 272 | text-transform: uppercase; 273 | font-weight: var(--font-weight-bold); 274 | color: var(--on-primary-container); 275 | font-size: 0.7vh; 276 | text-align: center; 277 | } 278 | 279 | /* Weight Bar Styles */ 280 | 281 | .current-weight > p { 282 | text-align: right; 283 | padding-right: 5px; 284 | } 285 | 286 | .weight-bar { 287 | width: 100%; 288 | background-color: var(--surface-container-high); 289 | } 290 | 291 | .weight-bar-fill { 292 | height: 5px; 293 | transition: width 0.2s; 294 | } 295 | 296 | .weight-bar-fill.low { 297 | background-color: var(--success); 298 | } 299 | 300 | .weight-bar-fill.medium { 301 | background-color: var(--warning); 302 | } 303 | 304 | .weight-bar-fill.high { 305 | background-color: var(--error); 306 | } 307 | 308 | /* Hotbar */ 309 | 310 | .hotbar-container { 311 | display: flex; 312 | justify-content: center; 313 | position: fixed; 314 | bottom: 0; 315 | left: 50%; 316 | transform: translateX(-50%); 317 | padding-bottom: 3vh; 318 | } 319 | 320 | .hotbar { 321 | display: flex; 322 | justify-content: space-between; 323 | width: 25vw; 324 | padding: 0 10px; 325 | } 326 | 327 | .notification-container { 328 | display: flex; 329 | justify-content: center; 330 | position: fixed; 331 | bottom: 2vh; 332 | left: 50%; 333 | transform: translate(-50%); 334 | } 335 | 336 | .notification-slot { 337 | position: relative; 338 | width: 10vh; 339 | height: 10vh; 340 | display: flex; 341 | flex-direction: column; 342 | align-items: center; 343 | justify-content: center; 344 | background-color: rgba(30, 30, 30, 0.6); 345 | border: 1px solid rgba(80, 80, 80, 0.5); 346 | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); 347 | } 348 | 349 | .notification-title { 350 | color: var(--on-surface); 351 | align-self: flex-start; 352 | margin-top: 5px; 353 | margin-left: 5px; 354 | } 355 | 356 | .notification-title p { 357 | margin: 0; 358 | padding: 0; 359 | font-size: 0.7vh; 360 | } 361 | 362 | .required-item-container { 363 | display: flex; 364 | justify-content: center; 365 | position: fixed; 366 | bottom: 2vh; 367 | left: 50%; 368 | transform: translate(-50%); 369 | } 370 | 371 | .required-item { 372 | display: flex; 373 | justify-content: center; 374 | width: 25vw; 375 | padding: 0 10px; 376 | } 377 | 378 | .required-item .item-slot { 379 | margin-left: 10px; 380 | } 381 | 382 | .context-menu { 383 | position: absolute; 384 | font-size: 1vh; 385 | background-color: var(--surface-container-high); 386 | border: 1px solid var(--outline); 387 | z-index: 1000; 388 | width: fit-content; 389 | cursor: pointer; 390 | color: var(--on-surface); 391 | list-style-type: none; 392 | margin: 0; 393 | padding: 0; 394 | box-shadow: var(--elevation-3); 395 | } 396 | 397 | .context-menu li { 398 | padding: 8px 12px; 399 | display: flex; 400 | align-items: center; 401 | } 402 | 403 | .context-menu li:hover { 404 | background-color: var(--surface-container-highest); 405 | } 406 | 407 | .submenu { 408 | position: absolute; 409 | top: 0; 410 | left: 100%; 411 | font-size: 0.9vh; 412 | background-color: var(--surface-container-high); 413 | border: 1px solid var(--outline); 414 | list-style-type: none; 415 | margin: 0; 416 | padding: 0; 417 | display: none; 418 | box-shadow: var(--elevation-3); 419 | z-index: 1001; 420 | } 421 | 422 | .context-menu li:hover .submenu { 423 | display: block; 424 | } 425 | 426 | .submenu li { 427 | padding: 8px 12px; 428 | display: flex; 429 | align-items: center; 430 | } 431 | 432 | .submenu li:hover { 433 | background-color: var(--surface-container-highest); 434 | } 435 | 436 | /* Input Container */ 437 | 438 | .input-container { 439 | position: absolute; 440 | width: 4%; 441 | top: calc(26% + ((47.16% - 3vh) / 2)); 442 | left: 50%; 443 | transform: translate(-50%, -50%); 444 | background-color: var(--surface-container-high); 445 | padding: 10px; 446 | display: flex; 447 | flex-direction: column; 448 | align-items: center; 449 | justify-content: center; 450 | box-shadow: var(--elevation-2); 451 | } 452 | 453 | .input-wrapper { 454 | display: flex; 455 | align-items: center; 456 | } 457 | 458 | .input-container input { 459 | border: none; 460 | background-color: transparent; 461 | color: var(--on-surface); 462 | font-size: 1vh; 463 | font-family: var(--font-primary); 464 | width: 85%; 465 | outline: none; 466 | text-align: center; 467 | flex: 1; 468 | } 469 | 470 | .clear-button { 471 | margin-left: 5px; 472 | background-color: transparent; 473 | border: none; 474 | color: var(--on-surface); 475 | cursor: pointer; 476 | } 477 | 478 | .clear-button .fas { 479 | color: var(--on-surface); 480 | } 481 | 482 | .v-popper--theme-tooltip .v-popper__inner { 483 | background-color: var(--surface-container-high) !important; 484 | color: var(--on-surface) !important; 485 | border-radius: var(--radius-small) !important; 486 | padding: 12px !important; 487 | box-shadow: var(--elevation-2) !important; 488 | max-width: 20vw !important; 489 | } 490 | 491 | .v-popper--theme-tooltip .v-popper__arrow-outer { 492 | border-color: var(--surface-container-high) !important; 493 | } 494 | 495 | .weapon-attachments { 496 | display: flex; 497 | justify-content: center; 498 | align-items: center; 499 | width: 12vw; 500 | height: 21vh; 501 | border-radius: 50%; 502 | margin: 0 auto; 503 | top: 50%; 504 | left: 15%; 505 | position: absolute; 506 | transform: translate(-50%, -50%); 507 | } 508 | 509 | .weapon { 510 | position: absolute; 511 | width: 100px; 512 | height: 100px; 513 | display: flex; 514 | justify-content: center; 515 | align-items: center; 516 | } 517 | 518 | .attachment-slot { 519 | position: absolute; 520 | width: 100px; 521 | height: 100px; 522 | background-color: var(--surface-container); 523 | border-radius: 50%; 524 | display: flex; 525 | justify-content: center; 526 | align-items: center; 527 | box-shadow: var(--elevation-1); 528 | } 529 | 530 | .attachment-slot img { 531 | width: 75%; 532 | height: auto; 533 | } 534 | 535 | .attachment-slot:nth-child(0) { 536 | transform: rotate(0deg) translate(150px) rotate(0deg); 537 | } 538 | 539 | .attachment-slot:nth-child(1) { 540 | transform: rotate(0deg) translate(150px) rotate(0deg); 541 | } 542 | 543 | .attachment-slot:nth-child(2) { 544 | transform: rotate(60deg) translate(150px) rotate(-60deg); 545 | } 546 | 547 | .attachment-slot:nth-child(3) { 548 | transform: rotate(120deg) translate(150px) rotate(-120deg); 549 | } 550 | 551 | .attachment-slot:nth-child(4) { 552 | transform: rotate(180deg) translate(150px) rotate(-180deg); 553 | } 554 | 555 | .attachment-slot:nth-child(5) { 556 | transform: rotate(240deg) translate(150px) rotate(-240deg); 557 | } 558 | 559 | .attachment-slot:nth-child(6) { 560 | transform: rotate(300deg) translate(150px) rotate(-300deg); 561 | } 562 | 563 | .attachment-slot:nth-child(7) { 564 | transform: rotate(0deg) translate(150px) rotate(0deg); 565 | } 566 | 567 | .invalid-slot-highlight { 568 | border: 2px solid var(--error); 569 | } 570 | 571 | .dragged-item { 572 | position: fixed; 573 | pointer-events: none; 574 | z-index: 1000; 575 | opacity: 0.8; 576 | box-shadow: var(--elevation-2); 577 | } 578 | -------------------------------------------------------------------------------- /locales/cs.lua: -------------------------------------------------------------------------------- 1 | local Translations = { 2 | progress = { 3 | ['snowballs'] = 'Sbíráš sněhové koule..', 4 | }, 5 | notify = { 6 | ['failed'] = 'Nepovedlo se', 7 | ['canceled'] = 'Zrušeno', 8 | ['vlocked'] = 'Vozidlo uzamčeno', 9 | ['notowned'] = 'Tento předmět nevlastníš!', 10 | ['missitem'] = 'Nemáš tento předmět!', 11 | ['nonb'] = 'Nikdo v okolí není!', 12 | ['noaccess'] = 'Nepřístupné', 13 | ['nosell'] = 'Tento předmět nemůžeš prodat.', 14 | ['itemexist'] = 'Předmět neexistuje', 15 | ['notencash'] = 'Nemáš dost hotovosti..', 16 | ['noitem'] = 'Nemáš správné předměty..', 17 | ['gsitem'] = 'Nemůžeš si dát předmět sám sobě?', 18 | ['tftgitem'] = 'Jsi příliš daleko na to, aby sis dal předmět!', 19 | ['infound'] = 'Předmět, který se snažíš dát, nebyl nalezen!', 20 | ['iifound'] = 'Nalezen nesprávný předmět, zkus to znovu!', 21 | ['gitemrec'] = 'Dostal jsi ', 22 | ['gitemfrom'] = ' Od ', 23 | ['gitemyg'] = 'Dal jsi ', 24 | ['gitinvfull'] = 'Inventář druhého hráče je plný!', 25 | ['giymif'] = 'Tvůj inventář je plný!', 26 | ['gitydhei'] = 'Nemáš dost tohoto předmětu', 27 | ['gitydhitt'] = 'Nemáš dost předmětů na přenos', 28 | ['navt'] = 'Neplatný typ..', 29 | ['anfoc'] = 'Argumenty nejsou správně vyplněny..', 30 | ['yhg'] = 'Dal jsi ', 31 | ['cgitem'] = 'Nelze dát předmět!', 32 | ['idne'] = 'Předmět neexistuje', 33 | ['pdne'] = 'Hráč není online', 34 | }, 35 | inf_mapping = { 36 | ['opn_inv'] = 'Otevři inventář', 37 | ['tog_slots'] = 'Přepíná sloty klávesových zkratek', 38 | ['use_item'] = 'Používá předmět ve slotu ', 39 | }, 40 | menu = { 41 | ['vending'] = 'Automat', 42 | ['bin'] = 'Otevři kontejner', 43 | ['craft'] = 'Craft', 44 | ['o_bag'] = 'Otevři tašku', 45 | }, 46 | interaction = { 47 | ['craft'] = '~g~E~w~ - Craft', 48 | }, 49 | } 50 | 51 | if GetConvar('qb_locale', 'en') == 'cs' then 52 | Lang = Locale:new({ 53 | phrases = Translations, 54 | warnOnMissing = true, 55 | fallbackLang = Lang, 56 | }) 57 | end 58 | -------------------------------------------------------------------------------- /locales/de.lua: -------------------------------------------------------------------------------- 1 | local Translations = { 2 | progress = { 3 | ['snowballs'] = 'Schneebälle sammeln..', 4 | }, 5 | notify = { 6 | ['failed'] = 'Fehlgeschlagen', 7 | ['canceled'] = 'Abgebrochen', 8 | ['vlocked'] = 'Fahrzeug verriegelt', 9 | ['notowned'] = 'Du besitzt diesen Gegenstand nicht!', 10 | ['missitem'] = 'Du hast diesen Gegenstand nicht!', 11 | ['nonb'] = 'Niemand in der Nähe!', 12 | ['noaccess'] = 'Nicht zugänglich', 13 | ['nosell'] = 'Du kannst diesen Gegenstand nicht verkaufen..', 14 | ['itemexist'] = 'Der Gegenstand existiert nicht', 15 | ['notencash'] = 'Du hast nicht genug Bargeld..', 16 | ['noitem'] = 'Du hast nicht die richtigen Gegenstände..', 17 | ['gsitem'] = 'Du kannst dir keinen Gegenstand geben?', 18 | ['tftgitem'] = 'Du bist zu weit weg, um Gegenstände zu geben!', 19 | ['infound'] = 'Der Gegenstand, den du geben wolltest, wurde nicht gefunden!', 20 | ['iifound'] = 'Falscher Gegenstand gefunden, versuche es erneut!', 21 | ['gitemrec'] = 'Du hast erhalten ', 22 | ['gitemfrom'] = ' Von ', 23 | ['gitemyg'] = 'Du hast gegeben ', 24 | ['gitinvfull'] = 'Das Inventar des anderen Spielers ist voll!', 25 | ['giymif'] = 'Dein Inventar ist voll!', 26 | ['gitydhei'] = 'Du hast nicht genug von dem Gegenstand', 27 | ['gitydhitt'] = 'Du hast nicht genug Gegenstände zum Übertragen', 28 | ['navt'] = 'Ungültiger Typ..', 29 | ['anfoc'] = 'Argumente nicht korrekt ausgefüllt..', 30 | ['yhg'] = 'Du hast gegeben ', 31 | ['cgitem'] = 'Kann den Gegenstand nicht geben!', 32 | ['idne'] = 'Gegenstand existiert nicht', 33 | ['pdne'] = 'Spieler ist nicht online', 34 | }, 35 | inf_mapping = { 36 | ['opn_inv'] = 'Inventar öffnen', 37 | ['tog_slots'] = 'Schaltet die belegten Slots um', 38 | ['use_item'] = 'Verwendet den Gegenstand im Slot ', 39 | }, 40 | menu = { 41 | ['vending'] = 'Verkaufsautomat', 42 | ['bin'] = 'Müllcontainer öffnen', 43 | ['craft'] = 'Herstellen', 44 | ['o_bag'] = 'Tasche öffnen', 45 | }, 46 | interaction = { 47 | ['craft'] = '~g~E~w~ - Herstellen', 48 | }, 49 | } 50 | 51 | if GetConvar('qb_locale', 'en') == 'de' then 52 | Lang = Locale:new({ 53 | phrases = Translations, 54 | warnOnMissing = true, 55 | fallbackLang = Lang, 56 | }) 57 | end 58 | -------------------------------------------------------------------------------- /locales/en.lua: -------------------------------------------------------------------------------- 1 | local Translations = { 2 | progress = { 3 | ['snowballs'] = 'Collecting snowballs..', 4 | }, 5 | notify = { 6 | ['failed'] = 'Failed', 7 | ['canceled'] = 'Canceled', 8 | ['vlocked'] = 'Vehicle Locked', 9 | ['notowned'] = 'You do not own this item!', 10 | ['missitem'] = 'You don\'t have this item!', 11 | ['nonb'] = 'No one nearby!', 12 | ['noaccess'] = 'Not Accessible', 13 | ['nosell'] = 'You can\'t sell this item..', 14 | ['itemexist'] = 'Item doesn\'t exist', 15 | ['notencash'] = 'You don\'t have enough cash..', 16 | ['noitem'] = 'You don\'t have the right items..', 17 | ['gsitem'] = 'You can\'t give yourself an item?', 18 | ['tftgitem'] = 'You are too far away to give items!', 19 | ['infound'] = 'Item you tried giving not found!', 20 | ['iifound'] = 'Incorrect item found try again!', 21 | ['gitemrec'] = 'You Received ', 22 | ['gitemfrom'] = ' From ', 23 | ['gitemyg'] = 'You gave ', 24 | ['gitinvfull'] = 'The other players inventory is full!', 25 | ['giymif'] = 'Your inventory is full!', 26 | ['gitydhei'] = 'You do not have enough of the item', 27 | ['gitydhitt'] = 'You do not have enough items to transfer', 28 | ['navt'] = 'Not a valid type..', 29 | ['anfoc'] = 'Arguments not filled out correctly..', 30 | ['yhg'] = 'You Have Given ', 31 | ['cgitem'] = 'Can\'t give item!', 32 | ['idne'] = 'Item Does Not Exist', 33 | ['pdne'] = 'Player Is Not Online', 34 | }, 35 | inf_mapping = { 36 | ['opn_inv'] = 'Open Inventory', 37 | ['tog_slots'] = 'Toggles keybind slots', 38 | ['use_item'] = 'Uses the item in slot ', 39 | }, 40 | menu = { 41 | ['vending'] = 'Vending Machine', 42 | ['bin'] = 'Open Dumpster', 43 | ['craft'] = 'Craft', 44 | ['o_bag'] = 'Open Bag', 45 | }, 46 | interaction = { 47 | ['craft'] = '~g~E~w~ - Craft', 48 | }, 49 | } 50 | 51 | Lang = Lang or Locale:new({ 52 | phrases = Translations, 53 | warnOnMissing = true 54 | }) 55 | -------------------------------------------------------------------------------- /locales/es.lua: -------------------------------------------------------------------------------- 1 | local Translations = { 2 | progress = { 3 | ['snowballs'] = 'Recolectando bolas de nieve..', 4 | }, 5 | notify = { 6 | ['failed'] = 'Fallido', 7 | ['canceled'] = 'Cancelado', 8 | ['vlocked'] = 'Vehículo Bloqueado', 9 | ['notowned'] = '¡No posees este objeto!', 10 | ['missitem'] = '¡No tienes este objeto!', 11 | ['nonb'] = '¡No hay nadie cerca!', 12 | ['noaccess'] = 'No Accesible', 13 | ['nosell'] = 'No puedes vender este objeto..', 14 | ['itemexist'] = 'El objeto no existe', 15 | ['notencash'] = 'No tienes suficiente dinero..', 16 | ['noitem'] = 'No tienes los objetos adecuados..', 17 | ['gsitem'] = '¿No puedes darte un objeto a ti mismo?', 18 | ['tftgitem'] = '¡Estás demasiado lejos para dar objetos!', 19 | ['infound'] = '¡Objeto que intentaste dar no encontrado!', 20 | ['iifound'] = '¡Objeto incorrecto encontrado, intenta de nuevo!', 21 | ['gitemrec'] = 'Recibiste ', 22 | ['gitemfrom'] = ' De ', 23 | ['gitemyg'] = 'Diste ', 24 | ['gitinvfull'] = '¡El inventario del otro jugador está lleno!', 25 | ['giymif'] = '¡Tu inventario está lleno!', 26 | ['gitydhei'] = 'No tienes suficiente del objeto', 27 | ['gitydhitt'] = 'No tienes suficientes objetos para transferir', 28 | ['navt'] = 'No es un tipo válido..', 29 | ['anfoc'] = 'Argumentos no rellenados correctamente..', 30 | ['yhg'] = 'Has Dado ', 31 | ['cgitem'] = '¡No se puede dar el objeto!', 32 | ['idne'] = 'El Objeto No Existe', 33 | ['pdne'] = 'El Jugador No Está En Línea', 34 | }, 35 | inf_mapping = { 36 | ['opn_inv'] = 'Abrir Inventario', 37 | ['tog_slots'] = 'Alterna ranuras de teclas', 38 | ['use_item'] = 'Usa el objeto en la ranura', 39 | }, 40 | menu = { 41 | ['vending'] = 'Máquina Expendedora', 42 | ['bin'] = 'Abrir Contenedor de Basura', 43 | ['craft'] = 'Crear', 44 | ['o_bag'] = 'Abrir Bolsa', 45 | }, 46 | interaction = { 47 | ['craft'] = '~g~E~w~ - Fabricar', 48 | }, 49 | } 50 | 51 | if GetConvar('qb_locale', 'en') == 'es' then 52 | Lang = Locale:new({ 53 | phrases = Translations, 54 | warnOnMissing = true, 55 | fallbackLang = Lang, 56 | }) 57 | end 58 | -------------------------------------------------------------------------------- /locales/nl.lua: -------------------------------------------------------------------------------- 1 | local Translations = { 2 | progress = { 3 | ['snowballs'] = 'Sneeuwballen verzamelen..', 4 | }, 5 | notify = { 6 | ['failed'] = 'Mislukt', 7 | ['canceled'] = 'Geannuleerd', 8 | ['vlocked'] = 'Voertuig Vergrendeld', 9 | ['notowned'] = 'Dit item is niet van jou!', 10 | ['missitem'] = 'Je hebt dit item niet!', 11 | ['nonb'] = 'Niemand in de buurt!', 12 | ['noaccess'] = 'Geen toegang', 13 | ['nosell'] = 'Je kunt dit item niet verkopen..', 14 | ['itemexist'] = 'Item bestaat niet', 15 | ['notencash'] = 'Je hebt niet genoeg geld..', 16 | ['noitem'] = 'Je hebt niet de juiste items..', 17 | ['gsitem'] = 'Je kunt jezelf geen item geven?', 18 | ['tftgitem'] = 'Je bent te ver weg om items te geven!', 19 | ['infound'] = 'Het item dat je probeerde te geven is niet gevonden!', 20 | ['iifound'] = 'Onjuist item gevonden, probeer opnieuw!', 21 | ['gitemrec'] = 'Je hebt ontvangen ', 22 | ['gitemfrom'] = ' Van ', 23 | ['gitemyg'] = 'Je hebt gegeven ', 24 | ['gitinvfull'] = 'De inventaris van de andere speler is vol!', 25 | ['giymif'] = 'Jouw inventaris is vol!', 26 | ['gitydhei'] = 'Je hebt niet genoeg van het item', 27 | ['gitydhitt'] = 'Je hebt niet genoeg items om over te dragen', 28 | ['navt'] = 'Geen geldig type..', 29 | ['anfoc'] = 'Argumenten niet correct ingevuld..', 30 | ['yhg'] = 'Je hebt gegeven ', 31 | ['cgitem'] = 'Kan item niet geven!', 32 | ['idne'] = 'Item bestaat niet', 33 | ['pdne'] = 'Speler is niet online', 34 | }, 35 | inf_mapping = { 36 | ['opn_inv'] = 'Open Inventaris', 37 | ['tog_slots'] = 'Schakelt sleutelbind-slots om', 38 | ['use_item'] = 'Gebruikt het item in slot ', 39 | }, 40 | menu = { 41 | ['vending'] = 'Verkoopautomaat', 42 | ['bin'] = 'Open Prullenbak', 43 | ['craft'] = 'Maak', 44 | ['o_bag'] = 'Open Tas', 45 | }, 46 | interaction = { 47 | ['craft'] = '~g~E~w~ - Maken', 48 | }, 49 | } 50 | 51 | if GetConvar('qb_locale', 'en') == 'nl' then 52 | Lang = Locale:new({ 53 | phrases = Translations, 54 | warnOnMissing = true, 55 | }) 56 | end 57 | -------------------------------------------------------------------------------- /migrate.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO inventories (identifier, items) 2 | SELECT 3 | CONCAT('glovebox-', plate), 4 | items 5 | FROM 6 | gloveboxitems 7 | 8 | UNION ALL 9 | 10 | SELECT 11 | stash, 12 | items 13 | FROM 14 | stashitems 15 | 16 | UNION ALL 17 | 18 | SELECT 19 | CONCAT('trunk-', plate), 20 | items 21 | FROM 22 | trunkitems; -------------------------------------------------------------------------------- /qb-inventory.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS `inventories` ( 2 | `id` int(11) NOT NULL AUTO_INCREMENT, 3 | `identifier` varchar(255) NOT NULL, 4 | `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`items`)), 5 | PRIMARY KEY (`identifier`), 6 | KEY `id` (`id`) 7 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -------------------------------------------------------------------------------- /server/commands.lua: -------------------------------------------------------------------------------- 1 | -- Commands 2 | 3 | QBCore.Commands.Add('giveitem', 'Give An Item (Admin Only)', { { name = 'id', help = 'Player ID' }, { name = 'item', help = 'Name of the item (not a label)' }, { name = 'amount', help = 'Amount of items' } }, false, function(source, args) 4 | local id = tonumber(args[1]) 5 | local player = QBCore.Functions.GetPlayer(id) 6 | local amount = tonumber(args[3]) or 1 7 | local itemData = QBCore.Shared.Items[tostring(args[2]):lower()] 8 | if player then 9 | if itemData then 10 | -- check iteminfo 11 | local info = {} 12 | if itemData['name'] == 'id_card' then 13 | info.citizenid = player.PlayerData.citizenid 14 | info.firstname = player.PlayerData.charinfo.firstname 15 | info.lastname = player.PlayerData.charinfo.lastname 16 | info.birthdate = player.PlayerData.charinfo.birthdate 17 | info.gender = player.PlayerData.charinfo.gender 18 | info.nationality = player.PlayerData.charinfo.nationality 19 | elseif itemData['name'] == 'driver_license' then 20 | info.firstname = player.PlayerData.charinfo.firstname 21 | info.lastname = player.PlayerData.charinfo.lastname 22 | info.birthdate = player.PlayerData.charinfo.birthdate 23 | info.type = 'Class C Driver License' 24 | elseif itemData['type'] == 'weapon' then 25 | amount = 1 26 | info.serie = tostring(QBCore.Shared.RandomInt(2) .. QBCore.Shared.RandomStr(3) .. QBCore.Shared.RandomInt(1) .. QBCore.Shared.RandomStr(2) .. QBCore.Shared.RandomInt(3) .. QBCore.Shared.RandomStr(4)) 27 | info.quality = 100 28 | elseif itemData['name'] == 'harness' then 29 | info.uses = 20 30 | elseif itemData['name'] == 'markedbills' then 31 | info.worth = math.random(5000, 10000) 32 | elseif itemData['name'] == 'printerdocument' then 33 | info.url = 'https://cdn.discordapp.com/attachments/870094209783308299/870104331142189126/Logo_-_Display_Picture_-_Stylized_-_Red.png' 34 | end 35 | 36 | if AddItem(id, itemData['name'], amount, false, info, 'give item command') then 37 | QBCore.Functions.Notify(source, Lang:t('notify.yhg') .. GetPlayerName(id) .. ' ' .. amount .. ' ' .. itemData['name'] .. '', 'success') 38 | TriggerClientEvent('qb-inventory:client:ItemBox', id, itemData, 'add', amount) 39 | if Player(id).state.inv_busy then TriggerClientEvent('qb-inventory:client:updateInventory', id) end 40 | else 41 | QBCore.Functions.Notify(source, Lang:t('notify.cgitem'), 'error') 42 | end 43 | else 44 | QBCore.Functions.Notify(source, Lang:t('notify.idne'), 'error') 45 | end 46 | else 47 | QBCore.Functions.Notify(source, Lang:t('notify.pdne'), 'error') 48 | end 49 | end, 'admin') 50 | 51 | QBCore.Commands.Add('randomitems', 'Receive random items', {}, false, function(source) 52 | local player = QBCore.Functions.GetPlayer(source) 53 | local playerInventory = player.PlayerData.items 54 | local filteredItems = {} 55 | for k, v in pairs(QBCore.Shared.Items) do 56 | if QBCore.Shared.Items[k]['type'] ~= 'weapon' then 57 | filteredItems[#filteredItems + 1] = v 58 | end 59 | end 60 | for _ = 1, 10, 1 do 61 | local randitem = filteredItems[math.random(1, #filteredItems)] 62 | local amount = math.random(1, 10) 63 | if randitem['unique'] then 64 | amount = 1 65 | end 66 | local emptySlot = nil 67 | for i = 1, Config.MaxSlots do 68 | if not playerInventory[i] then 69 | emptySlot = i 70 | break 71 | end 72 | end 73 | if emptySlot then 74 | if AddItem(source, randitem.name, amount, emptySlot, false, 'random items command') then 75 | TriggerClientEvent('qb-inventory:client:ItemBox', source, QBCore.Shared.Items[randitem.name], 'add') 76 | player = QBCore.Functions.GetPlayer(source) 77 | playerInventory = player.PlayerData.items 78 | if Player(source).state.inv_busy then TriggerClientEvent('qb-inventory:client:updateInventory', source) end 79 | end 80 | Wait(1000) 81 | end 82 | end 83 | end, 'god') 84 | 85 | QBCore.Commands.Add('clearinv', 'Clear Inventory (Admin Only)', { { name = 'id', help = 'Player ID' } }, false, function(source, args) 86 | local id = tonumber(args[1]) 87 | if not id then 88 | ClearInventory(source) 89 | return 90 | end 91 | ClearInventory(id) 92 | end, 'admin') 93 | 94 | -- Keybindings 95 | 96 | RegisterCommand('closeInv', function(source) 97 | CloseInventory(source) 98 | end, false) 99 | 100 | RegisterCommand('hotbar', function(source) 101 | if Player(source).state.inv_busy then return end 102 | local QBPlayer = QBCore.Functions.GetPlayer(source) 103 | if not QBPlayer then return end 104 | if not QBPlayer or QBPlayer.PlayerData.metadata['isdead'] or QBPlayer.PlayerData.metadata['inlaststand'] or QBPlayer.PlayerData.metadata['ishandcuffed'] then return end 105 | local hotbarItems = { 106 | QBPlayer.PlayerData.items[1], 107 | QBPlayer.PlayerData.items[2], 108 | QBPlayer.PlayerData.items[3], 109 | QBPlayer.PlayerData.items[4], 110 | QBPlayer.PlayerData.items[5], 111 | } 112 | TriggerClientEvent('qb-inventory:client:hotbar', source, hotbarItems) 113 | end, false) 114 | 115 | RegisterCommand('inventory', function(source) 116 | if Player(source).state.inv_busy then return end 117 | local QBPlayer = QBCore.Functions.GetPlayer(source) 118 | if not QBPlayer then return end 119 | if not QBPlayer or QBPlayer.PlayerData.metadata['isdead'] or QBPlayer.PlayerData.metadata['inlaststand'] or QBPlayer.PlayerData.metadata['ishandcuffed'] then return end 120 | QBCore.Functions.TriggerClientCallback('qb-inventory:client:vehicleCheck', source, function(inventory, class) 121 | if not inventory then return OpenInventory(source) end 122 | if inventory:find('trunk-') then 123 | OpenInventory(source, inventory, { 124 | slots = VehicleStorage[class] and VehicleStorage[class].trunkSlots or VehicleStorage.default.slots, 125 | maxweight = VehicleStorage[class] and VehicleStorage[class].trunkWeight or VehicleStorage.default.maxWeight 126 | }) 127 | return 128 | elseif inventory:find('glovebox-') then 129 | OpenInventory(source, inventory, { 130 | slots = VehicleStorage[class] and VehicleStorage[class].gloveboxSlots or VehicleStorage.default.slots, 131 | maxweight = VehicleStorage[class] and VehicleStorage[class].gloveboxWeight or VehicleStorage.default.maxWeight 132 | }) 133 | return 134 | end 135 | end) 136 | end, false) 137 | -------------------------------------------------------------------------------- /server/main.lua: -------------------------------------------------------------------------------- 1 | QBCore = exports['qb-core']:GetCoreObject() 2 | Inventories = {} 3 | Drops = {} 4 | RegisteredShops = {} 5 | 6 | CreateThread(function() 7 | MySQL.query('SELECT * FROM inventories', {}, function(result) 8 | if result and #result > 0 then 9 | for i = 1, #result do 10 | local inventory = result[i] 11 | local cacheKey = inventory.identifier 12 | Inventories[cacheKey] = { 13 | items = json.decode(inventory.items) or {}, 14 | isOpen = false 15 | } 16 | end 17 | print(#result .. ' inventories successfully loaded') 18 | end 19 | end) 20 | end) 21 | 22 | CreateThread(function() 23 | while true do 24 | for k, v in pairs(Drops) do 25 | if v and (v.createdTime + (Config.CleanupDropTime * 60) < os.time()) and not Drops[k].isOpen then 26 | local entity = NetworkGetEntityFromNetworkId(v.entityId) 27 | if DoesEntityExist(entity) then DeleteEntity(entity) end 28 | Drops[k] = nil 29 | end 30 | end 31 | Wait(Config.CleanupDropInterval * 60000) 32 | end 33 | end) 34 | 35 | -- Handlers 36 | 37 | AddEventHandler('playerDropped', function() 38 | for _, inv in pairs(Inventories) do 39 | if inv.isOpen == source then 40 | inv.isOpen = false 41 | end 42 | end 43 | end) 44 | 45 | AddEventHandler('txAdmin:events:serverShuttingDown', function() 46 | for inventory, data in pairs(Inventories) do 47 | if data.isOpen then 48 | MySQL.prepare('INSERT INTO inventories (identifier, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = ?', { inventory, json.encode(data.items), json.encode(data.items) }) 49 | end 50 | end 51 | end) 52 | 53 | RegisterNetEvent('QBCore:Server:UpdateObject', function() 54 | if source ~= '' then return end 55 | QBCore = exports['qb-core']:GetCoreObject() 56 | end) 57 | 58 | AddEventHandler('QBCore:Server:PlayerLoaded', function(Player) 59 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'AddItem', function(item, amount, slot, info, reason) 60 | return AddItem(Player.PlayerData.source, item, amount, slot, info, reason) 61 | end) 62 | 63 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'RemoveItem', function(item, amount, slot, reason) 64 | return RemoveItem(Player.PlayerData.source, item, amount, slot, reason) 65 | end) 66 | 67 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'GetItemBySlot', function(slot) 68 | return GetItemBySlot(Player.PlayerData.source, slot) 69 | end) 70 | 71 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'GetItemByName', function(item) 72 | return GetItemByName(Player.PlayerData.source, item) 73 | end) 74 | 75 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'GetItemsByName', function(item) 76 | return GetItemsByName(Player.PlayerData.source, item) 77 | end) 78 | 79 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'ClearInventory', function(filterItems) 80 | ClearInventory(Player.PlayerData.source, filterItems) 81 | end) 82 | 83 | QBCore.Functions.AddPlayerMethod(Player.PlayerData.source, 'SetInventory', function(items) 84 | SetInventory(Player.PlayerData.source, items) 85 | end) 86 | end) 87 | 88 | AddEventHandler('onResourceStart', function(resourceName) 89 | if resourceName ~= GetCurrentResourceName() then return end 90 | local Players = QBCore.Functions.GetQBPlayers() 91 | for k in pairs(Players) do 92 | QBCore.Functions.AddPlayerMethod(k, 'AddItem', function(item, amount, slot, info) 93 | return AddItem(k, item, amount, slot, info) 94 | end) 95 | 96 | QBCore.Functions.AddPlayerMethod(k, 'RemoveItem', function(item, amount, slot) 97 | return RemoveItem(k, item, amount, slot) 98 | end) 99 | 100 | QBCore.Functions.AddPlayerMethod(k, 'GetItemBySlot', function(slot) 101 | return GetItemBySlot(k, slot) 102 | end) 103 | 104 | QBCore.Functions.AddPlayerMethod(k, 'GetItemByName', function(item) 105 | return GetItemByName(k, item) 106 | end) 107 | 108 | QBCore.Functions.AddPlayerMethod(k, 'GetItemsByName', function(item) 109 | return GetItemsByName(k, item) 110 | end) 111 | 112 | QBCore.Functions.AddPlayerMethod(k, 'ClearInventory', function(filterItems) 113 | ClearInventory(k, filterItems) 114 | end) 115 | 116 | QBCore.Functions.AddPlayerMethod(k, 'SetInventory', function(items) 117 | SetInventory(k, items) 118 | end) 119 | 120 | Player(k).state.inv_busy = false 121 | end 122 | end) 123 | 124 | -- Functions 125 | 126 | local function checkWeapon(source, item) 127 | local currentWeapon = type(item) == 'table' and item.name or item 128 | local ped = GetPlayerPed(source) 129 | local weapon = GetSelectedPedWeapon(ped) 130 | local weaponInfo = QBCore.Shared.Weapons[weapon] 131 | if weaponInfo and weaponInfo.name == currentWeapon then 132 | RemoveWeaponFromPed(ped, weapon) 133 | TriggerClientEvent('qb-weapons:client:UseWeapon', source, { name = currentWeapon }, false) 134 | end 135 | end 136 | 137 | -- Events 138 | 139 | RegisterNetEvent('qb-inventory:server:openVending', function(data) 140 | local src = source 141 | local Player = QBCore.Functions.GetPlayer(src) 142 | if not Player then return end 143 | CreateShop({ 144 | name = 'vending', 145 | label = 'Vending Machine', 146 | coords = data.coords, 147 | slots = #Config.VendingItems, 148 | items = Config.VendingItems 149 | }) 150 | OpenShop(src, 'vending') 151 | end) 152 | 153 | RegisterNetEvent('qb-inventory:server:closeInventory', function(inventory) 154 | local src = source 155 | local QBPlayer = QBCore.Functions.GetPlayer(src) 156 | if not QBPlayer then return end 157 | Player(source).state.inv_busy = false 158 | if inventory:find('shop%-') then return end 159 | if inventory:find('otherplayer%-') then 160 | local targetId = tonumber(inventory:match('otherplayer%-(.+)')) 161 | Player(targetId).state.inv_busy = false 162 | return 163 | end 164 | if Drops[inventory] then 165 | Drops[inventory].isOpen = false 166 | if #Drops[inventory].items == 0 and not Drops[inventory].isOpen then -- if no listeed items in the drop on close 167 | TriggerClientEvent('qb-inventory:client:removeDropTarget', -1, Drops[inventory].entityId) 168 | Wait(500) 169 | local entity = NetworkGetEntityFromNetworkId(Drops[inventory].entityId) 170 | if DoesEntityExist(entity) then DeleteEntity(entity) end 171 | Drops[inventory] = nil 172 | end 173 | return 174 | end 175 | if not Inventories[inventory] then return end 176 | Inventories[inventory].isOpen = false 177 | MySQL.prepare('INSERT INTO inventories (identifier, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = ?', { inventory, json.encode(Inventories[inventory].items), json.encode(Inventories[inventory].items) }) 178 | end) 179 | 180 | RegisterNetEvent('qb-inventory:server:useItem', function(item) 181 | local src = source 182 | local itemData = GetItemBySlot(src, item.slot) 183 | if not itemData then return end 184 | local itemInfo = QBCore.Shared.Items[itemData.name] 185 | if itemData.type == 'weapon' then 186 | TriggerClientEvent('qb-weapons:client:UseWeapon', src, itemData, itemData.info.quality and itemData.info.quality > 0) 187 | TriggerClientEvent('qb-inventory:client:ItemBox', src, itemInfo, 'use') 188 | elseif itemData.name == 'id_card' then 189 | UseItem(itemData.name, src, itemData) 190 | TriggerClientEvent('qb-inventory:client:ItemBox', source, itemInfo, 'use') 191 | local playerPed = GetPlayerPed(src) 192 | local playerCoords = GetEntityCoords(playerPed) 193 | local players = QBCore.Functions.GetPlayers() 194 | local gender = item.info.gender == 0 and 'Male' or 'Female' 195 | for _, v in pairs(players) do 196 | local targetPed = GetPlayerPed(v) 197 | local dist = #(playerCoords - GetEntityCoords(targetPed)) 198 | if dist < 3.0 then 199 | TriggerClientEvent('chat:addMessage', v, { 200 | template = '', 201 | args = { 202 | 'ID Card', 203 | item.info.citizenid, 204 | item.info.firstname, 205 | item.info.lastname, 206 | item.info.birthdate, 207 | gender, 208 | item.info.nationality 209 | } 210 | }) 211 | end 212 | end 213 | elseif itemData.name == 'driver_license' then 214 | UseItem(itemData.name, src, itemData) 215 | TriggerClientEvent('qb-inventory:client:ItemBox', src, itemInfo, 'use') 216 | local playerPed = GetPlayerPed(src) 217 | local playerCoords = GetEntityCoords(playerPed) 218 | local players = QBCore.Functions.GetPlayers() 219 | for _, v in pairs(players) do 220 | local targetPed = GetPlayerPed(v) 221 | local dist = #(playerCoords - GetEntityCoords(targetPed)) 222 | if dist < 3.0 then 223 | TriggerClientEvent('chat:addMessage', v, { 224 | template = '', 225 | args = { 226 | 'Drivers License', 227 | item.info.firstname, 228 | item.info.lastname, 229 | item.info.birthdate, 230 | item.info.type 231 | } 232 | } 233 | ) 234 | end 235 | end 236 | else 237 | UseItem(itemData.name, src, itemData) 238 | TriggerClientEvent('qb-inventory:client:ItemBox', src, itemInfo, 'use') 239 | end 240 | end) 241 | 242 | RegisterNetEvent('qb-inventory:server:openDrop', function(dropId) 243 | local src = source 244 | local Player = QBCore.Functions.GetPlayer(src) 245 | if not Player then return end 246 | local playerPed = GetPlayerPed(src) 247 | local playerCoords = GetEntityCoords(playerPed) 248 | local drop = Drops[dropId] 249 | if not drop then return end 250 | if drop.isOpen then return end 251 | local distance = #(playerCoords - drop.coords) 252 | if distance > 2.5 then return end 253 | local formattedInventory = { 254 | name = dropId, 255 | label = dropId, 256 | maxweight = drop.maxweight, 257 | slots = drop.slots, 258 | inventory = drop.items 259 | } 260 | drop.isOpen = true 261 | TriggerClientEvent('qb-inventory:client:openInventory', source, Player.PlayerData.items, formattedInventory) 262 | end) 263 | 264 | RegisterNetEvent('qb-inventory:server:updateDrop', function(dropId, coords) 265 | Drops[dropId].coords = coords 266 | end) 267 | 268 | RegisterNetEvent('qb-inventory:server:snowball', function(action) 269 | if action == 'add' then 270 | AddItem(source, 'weapon_snowball', 1, false, false, 'qb-inventory:server:snowball') 271 | elseif action == 'remove' then 272 | RemoveItem(source, 'weapon_snowball', 1, false, 'qb-inventory:server:snowball') 273 | end 274 | end) 275 | 276 | -- Callbacks 277 | 278 | QBCore.Functions.CreateCallback('qb-inventory:server:GetCurrentDrops', function(_, cb) 279 | cb(Drops) 280 | end) 281 | 282 | QBCore.Functions.CreateCallback('qb-inventory:server:createDrop', function(source, cb, item) 283 | local src = source 284 | local Player = QBCore.Functions.GetPlayer(src) 285 | if not Player then 286 | cb(false) 287 | return 288 | end 289 | local playerPed = GetPlayerPed(src) 290 | local playerCoords = GetEntityCoords(playerPed) 291 | if RemoveItem(src, item.name, item.amount, item.fromSlot, 'dropped item') then 292 | if item.type == 'weapon' then checkWeapon(src, item) end 293 | TaskPlayAnim(playerPed, 'pickup_object', 'pickup_low', 8.0, -8.0, 2000, 0, 0, false, false, false) 294 | local bag = CreateObjectNoOffset(Config.ItemDropObject, playerCoords.x + 0.5, playerCoords.y + 0.5, playerCoords.z, true, true, false) 295 | local dropId = NetworkGetNetworkIdFromEntity(bag) 296 | local newDropId = 'drop-' .. dropId 297 | local itemsTable = setmetatable({ item }, { 298 | __len = function(t) 299 | local length = 0 300 | for _ in pairs(t) do length += 1 end 301 | return length 302 | end 303 | }) 304 | if not Drops[newDropId] then 305 | Drops[newDropId] = { 306 | name = newDropId, 307 | label = 'Drop', 308 | items = itemsTable, 309 | entityId = dropId, 310 | createdTime = os.time(), 311 | coords = playerCoords, 312 | maxweight = Config.DropSize.maxweight, 313 | slots = Config.DropSize.slots, 314 | isOpen = true 315 | } 316 | TriggerClientEvent('qb-inventory:client:setupDropTarget', -1, dropId) 317 | else 318 | table.insert(Drops[newDropId].items, item) 319 | end 320 | cb(dropId) 321 | else 322 | cb(false) 323 | end 324 | end) 325 | 326 | QBCore.Functions.CreateCallback('qb-inventory:server:attemptPurchase', function(source, cb, data) 327 | local itemInfo = data.item 328 | local amount = data.amount 329 | local shop = string.gsub(data.shop, 'shop%-', '') 330 | local Player = QBCore.Functions.GetPlayer(source) 331 | 332 | if not Player then 333 | cb(false) 334 | return 335 | end 336 | 337 | local shopInfo = RegisteredShops[shop] 338 | if not shopInfo then 339 | cb(false) 340 | return 341 | end 342 | 343 | local playerPed = GetPlayerPed(source) 344 | local playerCoords = GetEntityCoords(playerPed) 345 | if shopInfo.coords then 346 | local shopCoords = vector3(shopInfo.coords.x, shopInfo.coords.y, shopInfo.coords.z) 347 | if #(playerCoords - shopCoords) > 10 then 348 | cb(false) 349 | return 350 | end 351 | end 352 | 353 | if shopInfo.items[itemInfo.slot].name ~= itemInfo.name then -- Check if item name passed is the same as the item in that slot 354 | cb(false) 355 | return 356 | end 357 | 358 | if amount > shopInfo.items[itemInfo.slot].amount then 359 | TriggerClientEvent('QBCore:Notify', source, 'Cannot purchase larger quantity than currently in stock', 'error') 360 | cb(false) 361 | return 362 | end 363 | 364 | if not CanAddItem(source, itemInfo.name, amount) then 365 | TriggerClientEvent('QBCore:Notify', source, 'Cannot hold item', 'error') 366 | cb(false) 367 | return 368 | end 369 | 370 | local price = shopInfo.items[itemInfo.slot].price * amount 371 | if Player.PlayerData.money.cash >= price then 372 | Player.Functions.RemoveMoney('cash', price, 'shop-purchase') 373 | AddItem(source, itemInfo.name, amount, nil, itemInfo.info, 'shop-purchase') 374 | TriggerEvent('qb-shops:server:UpdateShopItems', shop, itemInfo, amount) 375 | cb(true) 376 | else 377 | TriggerClientEvent('QBCore:Notify', source, 'You do not have enough money', 'error') 378 | cb(false) 379 | end 380 | end) 381 | 382 | QBCore.Functions.CreateCallback('qb-inventory:server:giveItem', function(source, cb, target, item, amount, slot, info) 383 | local player = QBCore.Functions.GetPlayer(source) 384 | if not player or player.PlayerData.metadata['isdead'] or player.PlayerData.metadata['inlaststand'] or player.PlayerData.metadata['ishandcuffed'] then 385 | cb(false) 386 | return 387 | end 388 | local playerPed = GetPlayerPed(source) 389 | 390 | local Target = QBCore.Functions.GetPlayer(target) 391 | if not Target or Target.PlayerData.metadata['isdead'] or Target.PlayerData.metadata['inlaststand'] or Target.PlayerData.metadata['ishandcuffed'] then 392 | cb(false) 393 | return 394 | end 395 | local targetPed = GetPlayerPed(target) 396 | 397 | local pCoords = GetEntityCoords(playerPed) 398 | local tCoords = GetEntityCoords(targetPed) 399 | if #(pCoords - tCoords) > 5 then 400 | cb(false) 401 | return 402 | end 403 | 404 | local itemInfo = QBCore.Shared.Items[item:lower()] 405 | if not itemInfo then 406 | cb(false) 407 | return 408 | end 409 | 410 | local hasItem = HasItem(source, item) 411 | if not hasItem then 412 | cb(false) 413 | return 414 | end 415 | 416 | local itemAmount = GetItemByName(source, item).amount 417 | if itemAmount <= 0 then 418 | cb(false) 419 | return 420 | end 421 | 422 | local giveAmount = tonumber(amount) 423 | if giveAmount > itemAmount then 424 | cb(false) 425 | return 426 | end 427 | 428 | local removeItem = RemoveItem(source, item, giveAmount, slot, 'Item given to ID #' .. target) 429 | if not removeItem then 430 | cb(false) 431 | return 432 | end 433 | 434 | local giveItem = AddItem(target, item, giveAmount, false, info, 'Item given from ID #' .. source) 435 | if not giveItem then 436 | cb(false) 437 | return 438 | end 439 | 440 | if itemInfo.type == 'weapon' then checkWeapon(source, item) end 441 | TriggerClientEvent('qb-inventory:client:giveAnim', source) 442 | TriggerClientEvent('qb-inventory:client:ItemBox', source, itemInfo, 'remove', giveAmount) 443 | TriggerClientEvent('qb-inventory:client:giveAnim', target) 444 | TriggerClientEvent('qb-inventory:client:ItemBox', target, itemInfo, 'add', giveAmount) 445 | if Player(target).state.inv_busy then TriggerClientEvent('qb-inventory:client:updateInventory', target) end 446 | cb(true) 447 | end) 448 | 449 | -- Item move logic 450 | 451 | local function getItem(inventoryId, src, slot) 452 | local items = {} 453 | if inventoryId == 'player' then 454 | local Player = QBCore.Functions.GetPlayer(src) 455 | if Player and Player.PlayerData.items then 456 | items = Player.PlayerData.items 457 | end 458 | elseif inventoryId:find('otherplayer-') then 459 | local targetId = tonumber(inventoryId:match('otherplayer%-(.+)')) 460 | local targetPlayer = QBCore.Functions.GetPlayer(targetId) 461 | if targetPlayer and targetPlayer.PlayerData.items then 462 | items = targetPlayer.PlayerData.items 463 | end 464 | elseif inventoryId:find('drop-') == 1 then 465 | if Drops[inventoryId] and Drops[inventoryId]['items'] then 466 | items = Drops[inventoryId]['items'] 467 | end 468 | else 469 | if Inventories[inventoryId] and Inventories[inventoryId]['items'] then 470 | items = Inventories[inventoryId]['items'] 471 | end 472 | end 473 | 474 | for _, item in pairs(items) do 475 | if item.slot == slot then 476 | return item 477 | end 478 | end 479 | return nil 480 | end 481 | 482 | local function getIdentifier(inventoryId, src) 483 | if inventoryId == 'player' then 484 | return src 485 | elseif inventoryId:find('otherplayer-') then 486 | return tonumber(inventoryId:match('otherplayer%-(.+)')) 487 | else 488 | return inventoryId 489 | end 490 | end 491 | 492 | RegisterNetEvent('qb-inventory:server:SetInventoryData', function(fromInventory, toInventory, fromSlot, toSlot, fromAmount, toAmount) 493 | if toInventory:find('shop%-') then return end 494 | if not fromInventory or not toInventory or not fromSlot or not toSlot or not fromAmount or not toAmount then return end 495 | local src = source 496 | local Player = QBCore.Functions.GetPlayer(src) 497 | if not Player then return end 498 | 499 | fromSlot, toSlot, fromAmount, toAmount = tonumber(fromSlot), tonumber(toSlot), tonumber(fromAmount), tonumber(toAmount) 500 | 501 | local fromItem = getItem(fromInventory, src, fromSlot) 502 | local toItem = getItem(toInventory, src, toSlot) 503 | 504 | if fromItem then 505 | if not toItem and toAmount > fromItem.amount then return end 506 | if fromInventory == 'player' and toInventory ~= 'player' then checkWeapon(src, fromItem) end 507 | 508 | local fromId = getIdentifier(fromInventory, src) 509 | local toId = getIdentifier(toInventory, src) 510 | 511 | if toItem and fromItem.name == toItem.name then 512 | if RemoveItem(fromId, fromItem.name, toAmount, fromSlot, 'stacked item') then 513 | AddItem(toId, toItem.name, toAmount, toSlot, toItem.info, 'stacked item') 514 | end 515 | elseif not toItem and toAmount < fromAmount then 516 | if RemoveItem(fromId, fromItem.name, toAmount, fromSlot, 'split item') then 517 | AddItem(toId, fromItem.name, toAmount, toSlot, fromItem.info, 'split item') 518 | end 519 | else 520 | if toItem then 521 | local fromItemAmount = fromItem.amount 522 | local toItemAmount = toItem.amount 523 | 524 | if RemoveItem(fromId, fromItem.name, fromItemAmount, fromSlot, 'swapped item') and RemoveItem(toId, toItem.name, toItemAmount, toSlot, 'swapped item') then 525 | AddItem(toId, fromItem.name, fromItemAmount, toSlot, fromItem.info, 'swapped item') 526 | AddItem(fromId, toItem.name, toItemAmount, fromSlot, toItem.info, 'swapped item') 527 | end 528 | else 529 | if RemoveItem(fromId, fromItem.name, toAmount, fromSlot, 'moved item') then 530 | AddItem(toId, fromItem.name, toAmount, toSlot, fromItem.info, 'moved item') 531 | end 532 | end 533 | end 534 | end 535 | end) 536 | --------------------------------------------------------------------------------