├── .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 |
34 |
35 |
36 |
handleMouseDown(event, slot, 'player')">
37 |
40 |
41 |
![]()
42 |
43 |
44 |
x{{ getItemInSlot(slot, 'player').amount }}
45 |
46 |
59 |
62 |
63 |
64 |
65 |
66 |
67 |
75 |
76 |
77 |
78 |
91 |
92 |
93 |
handleMouseDown(event, slot, 'other')" @dragover.prevent>
94 |
95 |
![]()
96 |
97 |
98 |
x{{ getItemInSlot(slot, 'other').amount }}
99 |
100 |
101 |
${{ getItemInSlot(slot, 'other').price }}
102 |
103 |
116 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
130 |
131 |
![]()
132 |
133 |
134 |
x{{ getHotbarItemInSlot(slot).amount }}
135 |
136 |
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 = ' {0}
Civ ID: {1}
First Name: {2}
Last Name: {3}
Birthdate: {4}
Gender: {5}
Nationality: {6}
',
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 = ' {0}
First Name: {1}
Last Name: {2}
Birth Date: {3}
Licenses: {4}
',
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 |
--------------------------------------------------------------------------------