$ {{(cash)}}
198 |$ {{(bank)}}
203 |+ {{(amount)}}
207 |- {{(amount)}}
208 |├── stream
├── minimap.gfx
├── minimap.ytd
├── circlemap.ytd
└── squaremap.ytd
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── feature_request.yml
│ └── bug_report.yml
├── pull_request_template.md
├── auto_assign.yml
├── workflows
│ ├── lint.yml
│ └── stale.yml
└── contributing.md
├── fxmanifest.lua
├── locales
├── ja.lua
├── en.lua
├── ar.lua
├── da.lua
├── sv.lua
├── et.lua
├── fi.lua
├── fr.lua
├── tr.lua
├── it.lua
├── sk.lua
├── de.lua
├── ge.lua
├── nl.lua
├── pt.lua
├── cs.lua
├── es.lua
├── pl.lua
└── fa.lua
├── server.lua
├── README.md
├── html
├── brand-logo.svg
├── styles.css
├── responsive.css
├── index.html
└── app.js
├── config.lua
└── client.lua
/stream/minimap.gfx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qbcore-framework/qb-hud/HEAD/stream/minimap.gfx
--------------------------------------------------------------------------------
/stream/minimap.ytd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qbcore-framework/qb-hud/HEAD/stream/minimap.ytd
--------------------------------------------------------------------------------
/stream/circlemap.ytd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qbcore-framework/qb-hud/HEAD/stream/circlemap.ytd
--------------------------------------------------------------------------------
/stream/squaremap.ytd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qbcore-framework/qb-hud/HEAD/stream/squaremap.ytd
--------------------------------------------------------------------------------
/.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/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/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
--------------------------------------------------------------------------------
/fxmanifest.lua:
--------------------------------------------------------------------------------
1 | fx_version 'cerulean'
2 | game 'gta5'
3 | lua54 'yes'
4 | author 'Kakarot'
5 | description 'Heads-up display letting players track their hunger, thirst, stress, and more'
6 | version '2.2.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_script 'client.lua'
16 | server_script 'server.lua'
17 |
18 | ui_page 'html/index.html'
19 |
20 | files {
21 | 'html/*',
22 | 'html/index.html',
23 | 'html/styles.css',
24 | 'html/responsive.css',
25 | 'html/app.js',
26 | }
27 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/locales/ja.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD設定を読み込みました",
4 | ["hud_restart"] = "HUDを再起動しています",
5 | ["hud_start"] = "HUDを起動しました",
6 | ["hud_command_info"] = "このコマンドは現在のHUD設定をリセットします",
7 | ["load_square_map"] = "スクエアマップ読み込み中...",
8 | ["loaded_square_map"] = "スクエアマップ読み込み完了",
9 | ["load_circle_map"] = "サークルマップ読み込み中...",
10 | ["loaded_circle_map"] = "サークルマップ読み込み完了",
11 | ["cinematic_on"] = "シネマティックモードを有効にしました",
12 | ["cinematic_off"] = "シネマティックモードを無効にしました",
13 | ["engine_on"] = "エンジン始動",
14 | ["engine_off"] = "エンジン停止",
15 | ["low_fuel"] = "燃料が残りわずかです!",
16 | ["access_denied"] = "権限がありません!",
17 | ["stress_gain"] = "ストレスを感じた!",
18 | ["stress_removed"] = "リラックスした気分"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'ja' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/en.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD Settings Loaded!",
4 | ["hud_restart"] = "HUD Is Restarting!",
5 | ["hud_start"] = "HUD Is Now Started!",
6 | ["hud_command_info"] = "This command resets your current HUD settings!",
7 | ["load_square_map"] = "Square Map Loading...",
8 | ["loaded_square_map"] = "Square Map Has Loaded!",
9 | ["load_circle_map"] = "Circle Map Loading...",
10 | ["loaded_circle_map"] = "Circle Map Has Loaded!",
11 | ["cinematic_on"] = "Cinematic Mode On!",
12 | ["cinematic_off"] = "Cinematic Mode Off!",
13 | ["engine_on"] = "Engine Started!",
14 | ["engine_off"] = "Engine Shut Down!",
15 | ["low_fuel"] = "Fuel Level Low!",
16 | ["access_denied"] = "You Are Not Authorized!",
17 | ["stress_gain"] = "Feeling More Stressed!",
18 | ["stress_removed"] = "Feeling More Relaxed!"
19 | }
20 | }
21 |
22 | Lang = Lang or Locale:new({
23 | phrases = Translations,
24 | warnOnMissing = true
25 | })
26 |
--------------------------------------------------------------------------------
/locales/ar.lua:
--------------------------------------------------------------------------------
1 |
2 | local Translations = {
3 | notify = {
4 | ["hud_settings_loaded"] = "تم تحميل إعدادات الهود",
5 | ["hud_restart"] = "تم اعادة الهود للوضع الاصلي",
6 | ["hud_start"] = "تم تشغيل الهود",
7 | ["hud_command_info"] = "هذا الأمر يعيد ضبط إعدادات شاشة الهود الى الوضع الاصلي",
8 | ["load_square_map"] = "تحميل خريطة مربعة",
9 | ["loaded_square_map"] = "تم تحميل خريطة مربعة",
10 | ["load_circle_map"] = "تحميل خريطة الدائرة",
11 | ["loaded_circle_map"] = "تم تحميل خريطة الدائرة",
12 | ["cinematic_on"] = "الوضع السينمائي قيد التشغيل",
13 | ["cinematic_off"] = "الوضع السينمائي قيد الايقاف",
14 | ["engine_on"] = "بدأ المحرك",
15 | ["engine_off"] = "اغلاق المحرك",
16 | ["low_fuel"] = "مستوى الوقود منخفض",
17 | ["access_denied"] = "غير مسموح لك القيام بذالك",
18 | ["stress_gain"] = "الشعور بمزيد من التوتر",
19 | ["stress_removed"] = "الشعور براحة أكبر"
20 | }
21 | }
22 |
23 | if GetConvar('qb_locale', 'en') == 'ar' then
24 | Lang = Locale:new({
25 | phrases = Translations,
26 | warnOnMissing = true,
27 | fallbackLang = Lang,
28 | })
29 | end
30 |
--------------------------------------------------------------------------------
/locales/da.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD indstillinger indlæst!",
4 | ["hud_restart"] = "HUD genstarter!",
5 | ["hud_start"] = "HUD er nu startet!",
6 | ["hud_command_info"] = "Denne command nulstiller alle HUD indstillinger!",
7 | ["load_square_map"] = "Firkantet map indlæses...",
8 | ["loaded_square_map"] = "Firkantet map indlæst!",
9 | ["load_circle_map"] = "Cirkel map indlæses...",
10 | ["loaded_circle_map"] = "Cikel map indlæst!",
11 | ["cinematic_on"] = "Cinematic mode er aktiveret!",
12 | ["cinematic_off"] = "Cinematic mode er deaktiveret!",
13 | ["engine_on"] = "Motor startet!",
14 | ["engine_off"] = "Motor slukket!",
15 | ["low_fuel"] = "Lav brændstofstand!",
16 | ["access_denied"] = "Du har ikke adgang!",
17 | ["stress_gain"] = "Du føler dig mere stresset!",
18 | ["stress_removed"] = "Du føles mere afslappet!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'da' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/sv.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD Inställningar laddade!",
4 | ["hud_restart"] = "HUD startar om!",
5 | ["hud_start"] = "HUD är startad!",
6 | ["hud_command_info"] = "Detta kommando nollställer dina nuvarande HUD-inställningar!",
7 | ["load_square_map"] = "Kvadratisk karta laddas!",
8 | ["loaded_square_map"] = "Kvadratisk karta har laddats!",
9 | ["load_circle_map"] = "Cirkelkartan laddas!",
10 | ["loaded_circle_map"] = "Cirkelkartan har laddats!",
11 | ["cinematic_on"] = "Bioläge på!",
12 | ["cinematic_off"] = "Bioläge av!",
13 | ["engine_on"] = "Motorn startade!",
14 | ["engine_off"] = "Motorn stängs av!",
15 | ["low_fuel"] = "Låg bränslenivå!",
16 | ["access_denied"] = "Du är inte behörighet att göra detta!",
17 | ["stress_gain"] = "Känner dig mer stressad!",
18 | ["stress_removed"] = "Känner dig mer avslappnad!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'sv' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/et.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD-i seaded on laaditud!",
4 | ["hud_restart"] = "HUD taaskäivitub!",
5 | ["hud_start"] = "HUD on nüüd käivitatud!",
6 | ["hud_command_info"] = "See käsk lähtestab teie praegused HUD-seaded!",
7 | ["load_square_map"] = "Ruutkaardi laadimine...",
8 | ["loaded_square_map"] = "Ruutkaart on laaditud!",
9 | ["load_circle_map"] = "Ringi kaardi laadimine...",
10 | ["loaded_circle_map"] = "Ringi kaart on laaditud!",
11 | ["cinematic_on"] = "Cinematic režiim sees!",
12 | ["cinematic_off"] = "Cinematic režiim väljas!",
13 | ["engine_on"] = "Mootor käivitatud!",
14 | ["engine_off"] = "Mootor seisatud!",
15 | ["low_fuel"] = "Kütusetase madal!",
16 | ["access_denied"] = "Te pole volitatud!",
17 | ["stress_gain"] = "Tunnen end rohkem stressis!",
18 | ["stress_removed"] = "Tunnen end rohkem lõdvestunult!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'et' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/fi.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Hudin asetukset ladattu!",
4 | ["hud_restart"] = "Hudi resettaantuu!",
5 | ["hud_start"] = "Hudi päällä!",
6 | ["hud_command_info"] = "Tämä komento vaihtaa hudisi asetukset!",
7 | ["load_square_map"] = "Neliökartta latautuu...",
8 | ["loaded_square_map"] = "Neliökartta ladattu!",
9 | ["load_circle_map"] = "Mappi ladattu...",
10 | ["loaded_circle_map"] = "Pyöreä mappi ladattu!",
11 | ["cinematic_on"] = "Elokuvamode päällä!",
12 | ["cinematic_off"] = "Elokuvamode suljettu!",
13 | ["engine_on"] = "Moottori käynnistetty!",
14 | ["engine_off"] = "Moottori sammutettu!",
15 | ["low_fuel"] = "Bensasi on lopussa!",
16 | ["access_denied"] = "Eipä ollut tarpeaksi oikeuksia!",
17 | ["stress_gain"] = "Stressisi nousee!",
18 | ["stress_removed"] = "Stressisi on nyt loppunut! Otathan ihan clillisti sit"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'fi' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/fr.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Paramètres du HUD chargés!",
4 | ["hud_restart"] = "L'HUD redémarre!",
5 | ["hud_start"] = "L'HUD a demarré!",
6 | ["hud_command_info"] = "Cette commande réinitialise vos paramètre d'HUD!",
7 | ["load_square_map"] = "Chargement de la carte carrée...",
8 | ["loaded_square_map"] = "La carte carrée à chargée!",
9 | ["load_circle_map"] = "Chargement de la carte ronde...",
10 | ["loaded_circle_map"] = "La carte ronde à chargée!",
11 | ["cinematic_on"] = "Mode cinématique activé!",
12 | ["cinematic_off"] = "Mode cinématique désactivé!",
13 | ["engine_on"] = "Moteur allumé!",
14 | ["engine_off"] = "Moteur éteint!",
15 | ["low_fuel"] = "Niveau d'essence bas!",
16 | ["access_denied"] = "Vous n'êtes pas autorisé!",
17 | ["stress_gain"] = "Vous stressez!",
18 | ["stress_removed"] = "Vous-vous relaxez!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'fr' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/tr.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD Ayarları Yüklendi!",
4 | ["hud_restart"] = "HUD Yeniden Başlatılıyor!",
5 | ["hud_start"] = "HUD Şimdi Başladı!",
6 | ["hud_command_info"] = "Bu komut, mevcut HUD ayarlarınızı sıfırlar!",
7 | ["load_square_map"] = "Kare Harita Yükleniyor...",
8 | ["loaded_square_map"] = "Kare Harita Yüklendi!",
9 | ["load_circle_map"] = "Çember Haritası Yükleniyor...",
10 | ["loaded_circle_map"] = "Daire Haritası Yüklendi!",
11 | ["cinematic_on"] = "Sinema Modu Açık!",
12 | ["cinematic_off"] = "Sinema Modu Kapalı!",
13 | ["engine_on"] = "Motor Çalıştırıldı!",
14 | ["engine_off"] = "Motor Kapatıldı!",
15 | ["low_fuel"] = "Yakıt Seviyesi Düşük!",
16 | ["access_denied"] = "You Are Not Authorized!",
17 | ["stress_gain"] = "Daha Stresli Hissediyorum!",
18 | ["stress_removed"] = "Daha Rahatlamış Hissediyorum!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'tr' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/it.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Impostazioni HUD Caricate!",
4 | ["hud_restart"] = "L\'HUD si sta restartando!",
5 | ["hud_start"] = "L\'HUD si sta avviando!",
6 | ["hud_command_info"] = "Questo comando resetta le impostazioni dell\'HUD!",
7 | ["load_square_map"] = "Caricando Mappa Quadrata...",
8 | ["loaded_square_map"] = "Mappa Quadrata Caricata!",
9 | ["load_circle_map"] = "Caricando Mappa Rotonda...",
10 | ["loaded_circle_map"] = "Mappa Rotonda Caricata!",
11 | ["cinematic_on"] = "Modalità Cinematica On!",
12 | ["cinematic_off"] = "Modalità Cinematica Off!",
13 | ["engine_on"] = "Motore Avviato!",
14 | ["engine_off"] = "Motore Spento!",
15 | ["low_fuel"] = "Livello Carburante Basso!",
16 | ["access_denied"] = "Non Sei Autorizzato!",
17 | ["stress_gain"] = "Ti Stai Stressando!",
18 | ["stress_removed"] = "Ti Stai Rilassando!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'it' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/sk.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD nastavenia boli načítané!",
4 | ["hud_restart"] = "HUD sa reštartuje!",
5 | ["hud_start"] = "HUD je zapnutý!",
6 | ["hud_command_info"] = "Tento príkaz reštartuje tvoje aktuálne HUD nastavenia!",
7 | ["load_square_map"] = "Square Map sa načítava...",
8 | ["loaded_square_map"] = "Square Map sa načítala!",
9 | ["load_circle_map"] = "Circle Map sa načítava...",
10 | ["loaded_circle_map"] = "Circle Map sa načítala!",
11 | ["cinematic_on"] = "Filmový režim je zapnutý!",
12 | ["cinematic_off"] = "Filmový režim je vypnutý!",
13 | ["engine_on"] = "Motor je naštartovaný!",
14 | ["engine_off"] = "Motor je vypnutý!",
15 | ["low_fuel"] = "Nízka hladina paliva!",
16 | ["access_denied"] = "Nemáš oprávnenie!",
17 | ["stress_gain"] = "Pocituješ väčší stres!",
18 | ["stress_removed"] = "Pocituješ uvoľnenie!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'sk' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/de.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD Einstellungen geladen!",
4 | ["hud_restart"] = "HUD wird neugestartet!",
5 | ["hud_start"] = "HUD ist nun gestartet!",
6 | ["hud_command_info"] = "Dieser Befehl setzt deine jetzigen Einstellungen zurück!",
7 | ["load_square_map"] = "Quadratische Karte lädt..",
8 | ["loaded_square_map"] = "Quadratische Karte wurde geladen!",
9 | ["load_circle_map"] = "Kreiskarte lädt...",
10 | ["loaded_circle_map"] = "Kreiskarte wurde geladen!",
11 | ["cinematic_on"] = "Kino Modus aktiviert!",
12 | ["cinematic_off"] = "Kino Modus deaktiviert!",
13 | ["engine_on"] = "Motor ist nun an!",
14 | ["engine_off"] = "Motor ist nun aus!",
15 | ["low_fuel"] = "Tank Status niedrig!",
16 | ["access_denied"] = "Du bist nicht autorisiert!",
17 | ["stress_gain"] = "Stesslevel steigt!",
18 | ["stress_removed"] = "Du entspannst gerade!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'de' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/ge.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD პარამეტრების ჩატვირთვა!",
4 | ["hud_restart"] = "HUD -ი რესტარტდება!",
5 | ["hud_start"] = "HUD -ი ჩართულია!",
6 | ["hud_command_info"] = "ეს ბრძანება დაარესეტებს ასებულ მონაცმებს!",
7 | ["load_square_map"] = "რუკა იტვირთება...",
8 | ["loaded_square_map"] = "რუკა ჩაიტვირთა!",
9 | ["load_circle_map"] = "რგვალი რუკა იტვირთება...",
10 | ["loaded_circle_map"] = "მრგვალი რუკა ჩაიტვირთა!",
11 | ["cinematic_on"] = "Cinematic რეჯიმის ჩართვა!",
12 | ["cinematic_off"] = "Cinematic რეჟიმის გათიშვა!",
13 | ["engine_on"] = "ავტომობილის დაქოქვა!",
14 | ["engine_off"] = "ავტომობილის ჩაქრობა!",
15 | ["low_fuel"] = "საწვავის ავზის მაჩვენებელი მინიმუმზე!",
16 | ["access_denied"] = "არ ხარ ავტორიზირებული!",
17 | ["stress_gain"] = "თავს გრძნობ მეტი სტრესის ქვეშ!",
18 | ["stress_removed"] = "თავს გრძნობ რელაქსირებულად!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'ge' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/nl.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "HUD instellingen geladen!",
4 | ["hud_restart"] = "HUD is aan het herstarten!",
5 | ["hud_start"] = "HUD is herstart!",
6 | ["hud_command_info"] = "Deze command reset jouw huidige HUD instellingen!",
7 | ["load_square_map"] = "Vierkante map is aan het laden...",
8 | ["loaded_square_map"] = "Vierkante map is geladen!",
9 | ["load_circle_map"] = "Cirkel map is aan het laden...",
10 | ["loaded_circle_map"] = "Cirkel map is geladen!",
11 | ["cinematic_on"] = "Bioscoop modus aan!",
12 | ["cinematic_off"] = "Bioscoop modus uit!",
13 | ["engine_on"] = "Motor aangezet!",
14 | ["engine_off"] = "Motor uitgezet!",
15 | ["low_fuel"] = "Laag brandstofniveau!",
16 | ["access_denied"] = "Je bent niet gemachtigd!",
17 | ["stress_gain"] = "Je voelt je meer gestrest!",
18 | ["stress_removed"] = "Je voelt je meer relaxed!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'nl' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/pt.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Definições Do HUD Carregadas!",
4 | ["hud_restart"] = "O HUD Está A Reiniciar!",
5 | ["hud_start"] = "O HUD Está Agora Iniciada!",
6 | ["hud_command_info"] = "Este comando reseta as definições do teu HUD!",
7 | ["load_square_map"] = "A Carregar Mapa Quadrado...",
8 | ["loaded_square_map"] = "Mapa Quadrado Carregado!",
9 | ["load_circle_map"] = "A Carregar Mapa Redondo...",
10 | ["loaded_circle_map"] = "Mapa Redondo Carregado!",
11 | ["cinematic_on"] = "Modo Cinematic Ativado!",
12 | ["cinematic_off"] = "Modo Cinematic Desativado!",
13 | ["engine_on"] = "Motor Ligado!",
14 | ["engine_off"] = "Motor Desligado!",
15 | ["low_fuel"] = "Nível Do Combustivel Em Baixo!",
16 | ["access_denied"] = "Não Estás Autorizado!",
17 | ["stress_gain"] = "A Sentir-me Mais Stressado(a)!",
18 | ["stress_removed"] = "A Sentir-me Mais Calmo(a)!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'pt' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/cs.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Nastavení HUD načteno!",
4 | ["hud_restart"] = "HUD se restartuje!",
5 | ["hud_start"] = "HUD je nyní zapnutý!",
6 | ["hud_command_info"] = "Tento příkaz resetuje vaše momentální nastavení HUD!",
7 | ["load_square_map"] = "Načítání čtvercové mapy...",
8 | ["loaded_square_map"] = "Čtvercová mapa byla načtena!",
9 | ["load_circle_map"] = "Kruhová mapa se načítá...",
10 | ["loaded_circle_map"] = "Kruhová mapa byla načtena!",
11 | ["cinematic_on"] = "Cinematic Mode On!", -- Same as in English
12 | ["cinematic_off"] = "Cinematic Mode Off!", -- Same as in English
13 | ["engine_on"] = "Motor nastartován!",
14 | ["engine_off"] = "Motor vypnut!",
15 | ["low_fuel"] = "Nedostatek paliva!",
16 | ["access_denied"] = "Na toto nemáš oprávnění!",
17 | ["stress_gain"] = "Cítíš se být vystresovaná!",
18 | ["stress_removed"] = "Cítíš se volněj!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'cs' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/es.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Configuración de HUD cargada.",
4 | ["hud_restart"] = "HUD reiniciando.",
5 | ["hud_start"] = "HUD iniciado.",
6 | ["hud_command_info"] = "Este comando restablece la configuración del HUD",
7 | ["load_square_map"] = "Cargando mapa cuadrado.",
8 | ["loaded_square_map"] = "Cargado mapa cuadrado.",
9 | ["load_circle_map"] = "Cargando mapa circular.",
10 | ["loaded_circle_map"] = "Cargado mapa circular.",
11 | ["cinematic_on"] = "Modo cinematográfico activado",
12 | ["cinematic_off"] = "Modo cinematográfico desactivado.",
13 | ["engine_on"] = "Motor encendido",
14 | ["engine_off"] = "Motor apagado",
15 | ["low_fuel"] = "Nivel de gasolina bajo",
16 | ["access_denied"] = "No estas autorizado para hacer eso",
17 | ["stress_gain"] = "Te estás sintiendo más estresado/a.",
18 | ["stress_removed"] = "Te estás sintiendo más relajado/a."
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'es' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/pl.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Załadowano ustawienia HUD!",
4 | ["hud_restart"] = "HUD uruchamia się ponownie!",
5 | ["hud_start"] = "HUD jest już uruchomiony!",
6 | ["hud_command_info"] = "To polecenie resetuje twoje obecne ustawienia HUD!",
7 | ["load_square_map"] = "Ładowanie kwadratowej mapy...",
8 | ["loaded_square_map"] = "Załadowano kwadratową mapę!",
9 | ["load_circle_map"] = "Ładowanie okrągłej mapy...",
10 | ["loaded_circle_map"] = "Załadowano okrągłą mapę!",
11 | ["cinematic_on"] = "Tryb kinowy włączony!",
12 | ["cinematic_off"] = "Tryb kinowy wyłączony!",
13 | ["engine_on"] = "Silnik uruchomiony!",
14 | ["engine_off"] = "Wyłączenie silnika!",
15 | ["low_fuel"] = "Niski poziom paliwa!",
16 | ["access_denied"] = "Nie jesteś upoważniony!",
17 | ["stress_gain"] = "Czuję się bardziej zestresowany!",
18 | ["stress_removed"] = "Czuję się bardziej zrelaksowany!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'pl' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/locales/fa.lua:
--------------------------------------------------------------------------------
1 | local Translations = {
2 | notify = {
3 | ["hud_settings_loaded"] = "Tanzimat HUD Bargozari Shod!",
4 | ["hud_restart"] = "Dar Hale Bargozari Mojadad HUD!",
5 | ["hud_start"] = "HUD Bargozari Shod!",
6 | ["hud_command_info"] = "In Dastor Tanzimat HUD Feli Shoma Ra Taghir Midahad!",
7 | ["load_square_map"] = "Nagsheye Mostatili Bargozari Shod...",
8 | ["loaded_square_map"] = "Nagsheye Mostatili Bargozari Shod!",
9 | ["load_circle_map"] = "Nagsheye Daayerei Bargozari Shod...",
10 | ["loaded_circle_map"] = "Nagsheye Daayerei Bargozari Shod!",
11 | ["cinematic_on"] = "Halat Sinemayi Faal Shod!",
12 | ["cinematic_off"] = "Halat Sinemayi Gheyre Faal Shod!",
13 | ["engine_on"] = "Motor Roshan Shod!",
14 | ["engine_off"] = "Motor Khamosh Shod!",
15 | ["low_fuel"] = "Sokht Dar Hale Etmam Ast!",
16 | ["access_denied"] = "Shoma Mojaz Be In Kar Nistid!",
17 | ["stress_gain"] = "Mizan Estres Dar Hale Afzayesh Ast!",
18 | ["stress_removed"] = "Mizan Estres Dar Hale Kahesh Ast!"
19 | }
20 | }
21 |
22 | if GetConvar('qb_locale', 'en') == 'fa' then
23 | Lang = Locale:new({
24 | phrases = Translations,
25 | warnOnMissing = true,
26 | fallbackLang = Lang,
27 | })
28 | end
29 |
--------------------------------------------------------------------------------
/.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/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 |
--------------------------------------------------------------------------------
/server.lua:
--------------------------------------------------------------------------------
1 | local QBCore = exports['qb-core']:GetCoreObject()
2 | local ResetStress = false
3 |
4 | QBCore.Commands.Add('cash', 'Check Cash Balance', {}, false, function(source, _)
5 | local Player = QBCore.Functions.GetPlayer(source)
6 | local cashamount = Player.PlayerData.money.cash
7 | TriggerClientEvent('hud:client:ShowAccounts', source, 'cash', cashamount)
8 | end)
9 |
10 | QBCore.Commands.Add('bank', 'Check Bank Balance', {}, false, function(source, _)
11 | local Player = QBCore.Functions.GetPlayer(source)
12 | local bankamount = Player.PlayerData.money.bank
13 | TriggerClientEvent('hud:client:ShowAccounts', source, 'bank', bankamount)
14 | end)
15 |
16 | QBCore.Commands.Add('dev', 'Enable/Disable developer Mode', {}, false, function(source, _)
17 | TriggerClientEvent('qb-admin:client:ToggleDevmode', source)
18 | end, 'admin')
19 |
20 | RegisterNetEvent('hud:server:GainStress', function(amount)
21 | if Config.DisableStress then return end
22 | local src = source
23 | local Player = QBCore.Functions.GetPlayer(src)
24 | local Job = Player.PlayerData.job.name
25 | local JobType = Player.PlayerData.job.type
26 | local newStress
27 | if not Player or Config.WhitelistedJobs[JobType] or Config.WhitelistedJobs[Job] then return end
28 | if not ResetStress then
29 | if not Player.PlayerData.metadata['stress'] then
30 | Player.PlayerData.metadata['stress'] = 0
31 | end
32 | newStress = Player.PlayerData.metadata['stress'] + amount
33 | if newStress <= 0 then newStress = 0 end
34 | else
35 | newStress = 0
36 | end
37 | if newStress > 100 then
38 | newStress = 100
39 | end
40 | Player.Functions.SetMetaData('stress', newStress)
41 | TriggerClientEvent('hud:client:UpdateStress', src, newStress)
42 | TriggerClientEvent('QBCore:Notify', src, Lang:t('notify.stress_gain'), 'error', 1500)
43 | end)
44 |
45 | RegisterNetEvent('hud:server:RelieveStress', function(amount)
46 | if Config.DisableStress then return end
47 | local src = source
48 | local Player = QBCore.Functions.GetPlayer(src)
49 | local newStress
50 | if not Player then return end
51 | if not ResetStress then
52 | if not Player.PlayerData.metadata['stress'] then
53 | Player.PlayerData.metadata['stress'] = 0
54 | end
55 | newStress = Player.PlayerData.metadata['stress'] - amount
56 | if newStress <= 0 then newStress = 0 end
57 | else
58 | newStress = 0
59 | end
60 | if newStress > 100 then
61 | newStress = 100
62 | end
63 | Player.Functions.SetMetaData('stress', newStress)
64 | TriggerClientEvent('hud:client:UpdateStress', src, newStress)
65 | TriggerClientEvent('QBCore:Notify', src, Lang:t('notify.stress_removed'))
66 | end)
67 |
68 | QBCore.Functions.CreateCallback('hud:server:getMenu', function(_, cb)
69 | cb(Config.Menu)
70 | end)
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Things you should know:
3 | * To open the menu in-game the **default key** is **"I"** or you can type **"/menu"**
4 | * Your settings will **always** be **stored locally**, so even if you delete the resource it **will** keep your current settings. The **only** way you can wipe the local storage sucessfully is by clicking the **"Reset Settings"** button on the in-game menu
5 | * If you want the new super snazzy sound effects for the menu, you'll need to download the latest update of [interact-sound](https://github.com/qbcore-framework/interact-sound)
6 | (comes with new open menu sound, close menu sound, click menu sound)
7 | * If you receive ```attempt to index a nil value (global 'Lang')``` in your F8 console, the fastest way you can fix that issue is by downloading a new version via txAdminRecipe but if you are unable to do that because of the progress you’ve made on your existing build; you’ll have to unfortunately go through and download each one from the GitHub which I do not recommend. Save yourself a lot of time and pain by just downloading the recipe!
8 |
9 | # FAQ
10 | ##
11 | **Q:** Why do my borders not align with the maps?
12 |
13 | **A:** Most of the time it generally means your safezone is not set to default in your GTA settings. (Settings/Display/"Restore Defaults")
14 | ##
15 |
16 | ##
17 | **Q:** How do I enable dev mode?
18 |
19 | **A:** Simple! All you have to do is type /admin and navigate through the menu to the last section called "Developer Options" and inside there you should see "Dev Mode", this will keep you invincible and add a cool developer icon in your circles/radials
20 | ##
21 |
22 | ##
23 | **Q:** What does the purple circle/radial do?
24 |
25 | **A:** That is your harness indicator! When you have the item "harness" in your inventory and while in a vehicle it will appear. Also, when you use your item "harness", the circle/radial will reflect the amount of uses left and decrease overtime.
26 | ##
27 |
28 | # Previews
29 | ### menu config (this is just a preview more options included than what is shown here)
30 | 
31 | ### all radials
32 | 
33 | ### dead health
34 | 
35 | ### engine health
36 | 
37 | ### altitude
38 | 
39 | ### parachute
40 | 
41 | ### armed
42 | 
43 | ### cinematic
44 | 
45 | ### cruise
46 | 
47 | ### harness
48 | 
49 | ### cash
50 | 
51 | ### bank
52 | 
53 | ### nitro
54 | 
55 | ### stamina
56 | 
57 | ### oxygen
58 | 
59 | ### radio (outdated color)
60 | 
61 |
--------------------------------------------------------------------------------
/html/brand-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
61 |
--------------------------------------------------------------------------------
/config.lua:
--------------------------------------------------------------------------------
1 | Config = {}
2 | Config.OpenMenu = 'I' -- https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
3 | Config.StressChance = 0.1 -- Default: 10% -- Percentage Stress Chance When Shooting (0-1)
4 | Config.UseMPH = true -- If true speed math will be done as MPH, if false KPH will be used (YOU HAVE TO CHANGE CONTENT IN STYLES.CSS TO DISPLAY THE CORRECT TEXT)
5 | Config.MinimumStress = 50 -- Minimum Stress Level For Screen Shaking
6 | Config.MinimumSpeedUnbuckled = 50 -- Going Over This Speed Unbuckled Will Cause Stress
7 | Config.MinimumSpeed = 100 -- Going Over This Speed While Buckled Will Cause Stress
8 | Config.DisableStress = false -- If true will disable stress completely for all players
9 |
10 | -- Stress
11 | Config.WhitelistedWeaponArmed = { -- Disable showing armed icon from weapons in this table
12 | -- miscellaneous
13 | [`weapon_petrolcan`] = true,
14 | [`weapon_hazardcan`] = true,
15 | [`weapon_fireextinguisher`] = true,
16 | -- melee
17 | [`weapon_dagger`] = true,
18 | [`weapon_bat`] = true,
19 | [`weapon_bottle`] = true,
20 | [`weapon_crowbar`] = true,
21 | [`weapon_flashlight`] = true,
22 | [`weapon_golfclub`] = true,
23 | [`weapon_hammer`] = true,
24 | [`weapon_hatchet`] = true,
25 | [`weapon_knuckle`] = true,
26 | [`weapon_knife`] = true,
27 | [`weapon_machete`] = true,
28 | [`weapon_switchblade`] = true,
29 | [`weapon_nightstick`] = true,
30 | [`weapon_wrench`] = true,
31 | [`weapon_battleaxe`] = true,
32 | [`weapon_poolcue`] = true,
33 | [`weapon_briefcase`] = true,
34 | [`weapon_briefcase_02`] = true,
35 | [`weapon_garbagebag`] = true,
36 | [`weapon_handcuffs`] = true,
37 | [`weapon_bread`] = true,
38 | [`weapon_stone_hatchet`] = true,
39 | -- throwables
40 | [`weapon_grenade`] = true,
41 | [`weapon_bzgas`] = true,
42 | [`weapon_molotov`] = true,
43 | [`weapon_stickybomb`] = true,
44 | [`weapon_proxmine`] = true,
45 | [`weapon_snowball`] = true,
46 | [`weapon_pipebomb`] = true,
47 | [`weapon_ball`] = true,
48 | [`weapon_smokegrenade`] = true,
49 | [`weapon_flare`] = true
50 | }
51 |
52 | Config.WhitelistedWeaponStress = { -- Disable gaining stress from weapons in this table
53 | [`weapon_petrolcan`] = true,
54 | [`weapon_hazardcan`] = true,
55 | [`weapon_fireextinguisher`] = true
56 | }
57 |
58 | Config.VehClassStress = { -- Enable/Disable gaining stress from vehicle classes in this table
59 | ['0'] = true, -- Compacts
60 | ['1'] = true, -- Sedans
61 | ['2'] = true, -- SUVs
62 | ['3'] = true, -- Coupes
63 | ['4'] = true, -- Muscle
64 | ['5'] = true, -- Sports Classics
65 | ['6'] = true, -- Sports
66 | ['7'] = true, -- Super
67 | ['8'] = true, -- Motorcycles
68 | ['9'] = true, -- Off Road
69 | ['10'] = true, -- Industrial
70 | ['11'] = true, -- Utility
71 | ['12'] = true, -- Vans
72 | ['13'] = false, -- Cycles
73 | ['14'] = false, -- Boats
74 | ['15'] = false, -- Helicopters
75 | ['16'] = false, -- Planes
76 | ['18'] = false, -- Emergency
77 | ['19'] = false, -- Military
78 | ['20'] = false, -- Commercial
79 | ['21'] = false -- Trains
80 | }
81 |
82 | Config.WhitelistedVehicles = { -- Disable gaining stress from speeding in any vehicle in this table
83 | --[`adder`] = true
84 | }
85 |
86 | Config.WhitelistedJobs = { -- Disable stress completely for players with matching job or job type
87 | ['leo'] = true,
88 | ['ambulance'] = true
89 | }
90 |
91 | Config.Intensity = {
92 | ['blur'] = {
93 | [1] = {
94 | min = 50,
95 | max = 60,
96 | intensity = 1500,
97 | },
98 | [2] = {
99 | min = 60,
100 | max = 70,
101 | intensity = 2000,
102 | },
103 | [3] = {
104 | min = 70,
105 | max = 80,
106 | intensity = 2500,
107 | },
108 | [4] = {
109 | min = 80,
110 | max = 90,
111 | intensity = 2700,
112 | },
113 | [5] = {
114 | min = 90,
115 | max = 100,
116 | intensity = 3000,
117 | },
118 | }
119 | }
120 |
121 | Config.EffectInterval = {
122 | [1] = {
123 | min = 50,
124 | max = 60,
125 | timeout = math.random(50000, 60000)
126 | },
127 | [2] = {
128 | min = 60,
129 | max = 70,
130 | timeout = math.random(40000, 50000)
131 | },
132 | [3] = {
133 | min = 70,
134 | max = 80,
135 | timeout = math.random(30000, 40000)
136 | },
137 | [4] = {
138 | min = 80,
139 | max = 90,
140 | timeout = math.random(20000, 30000)
141 | },
142 | [5] = {
143 | min = 90,
144 | max = 100,
145 | timeout = math.random(15000, 20000)
146 | }
147 | }
148 |
149 | Config.Menu = {
150 | isOutMapChecked = false, -- isOutMapChecked
151 | isOutCompassChecked = false, -- isOutMapChecked
152 | isCompassFollowChecked = true, -- isCompassFollowChecked
153 | isOpenMenuSoundsChecked = true, -- isOpenMenuSoundsChecked
154 | isResetSoundsChecked = true, -- isResetSoundsChecked
155 | isListSoundsChecked = true, -- isListSoundsChecked
156 | isMapNotifChecked = true, -- isMapNotifChecked
157 | isLowFuelChecked = true, -- isLowFuelChecked
158 | isCinematicNotifChecked = true, -- isCinematicNotifChecked
159 | isDynamicHealthChecked = true, -- isDynamicHealthChecked
160 | isDynamicArmorChecked = true, -- isDynamicArmorChecked
161 | isDynamicHungerChecked = true, -- isDynamicHungerChecked
162 | isDynamicThirstChecked = true, -- isDynamicThirstChecked
163 | isDynamicStressChecked = true, -- isDynamicStressChecked
164 | isDynamicOxygenChecked = true, -- isDynamicOxygenChecked
165 | isChangeFPSChecked = true, -- isChangeFPSChecked
166 | isHideMapChecked = false, -- isHideMapChecked
167 | isToggleMapBordersChecked = true, -- isToggleMapBordersChecked
168 | isDynamicEngineChecked = true, -- isDynamicEngineChecked
169 | isDynamicNitroChecked = true, -- isDynamicNitroChecked
170 | isChangeCompassFPSChecked = true, -- isChangeCompassFPSChecked
171 | isCompassShowChecked = true, -- isShowCompassChecked
172 | isShowStreetsChecked = true, -- isShowStreetsChecked
173 | isPointerShowChecked = true, -- isPointerShowChecked
174 | isDegreesShowChecked = true, -- isDegreesShowChecked
175 | isCinematicModeChecked = false, -- isCinematicModeChecked
176 | isToggleMapShapeChecked = 'square', -- isToggleMapShapeChecked
177 | }
178 |
--------------------------------------------------------------------------------
/html/styles.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
2 | @import url("https://fonts.cdnfonts.com/css/pricedown");
3 | @import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
4 | @import url("https://fonts.googleapis.com/css2?family=Yantramanav:wght@100;300;400;500;700;900&display=swap");
5 | @import url("https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Yantramanav:wght@100;300;400;500;700;900&display=swap");
6 |
7 | /* Menu */
8 | div#openmenu {
9 | display: none;
10 | position: absolute;
11 | width: 50%;
12 | top: 45%;
13 | left: 50%;
14 | transform: translate(-50%, -50%);
15 | }
16 | .brand-logo {
17 | width: 25%;
18 | } /* when using an svg all you need to change is the width and it will resize it */
19 |
20 | /* Menu tab & panel styles */
21 | .text-tabcolor {
22 | color: rgb(255, 255, 255) !important;
23 | }
24 | .bg-active-tab {
25 | background: rgb(23 23 23) !important;
26 | }
27 | .bg-panel {
28 | background: rgb(30 30 30) !important;
29 | }
30 | .q-tab-panels {
31 | border-top-right-radius: 12px !important;
32 | border-bottom-right-radius: 12px !important;
33 | } /* change all 12px for a different border radius (rounds edges of the menu) */
34 | .q-splitter__panel.q-splitter__before {
35 | border-top-left-radius: 12px !important;
36 | border-bottom-left-radius: 12px !important;
37 | } /* change all 12px for a different border radius (rounds edges of the menu) */
38 | .q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content {
39 | border-top-left-radius: 12px !important;
40 | border-bottom-left-radius: 12px !important;
41 | } /* change all 12px for a different border radius (rounds edges of the menu) */
42 |
43 | /* Menu text styles */
44 | .text-h6 {
45 | color: rgb(255, 255, 255) !important;
46 | }
47 | .text-h7 {
48 | color: rgba(255, 255, 255, 0.8) !important;
49 | }
50 |
51 | /* Menu buttons & checkboxes & toggle switch icons styles */
52 | .text-textbutton {
53 | color: rgb(0, 0, 0) !important;
54 | }
55 | .bg-bgbutton {
56 | background: rgb(220 20 60) !important;
57 | }
58 | .q-checkbox__inner {
59 | color: rgb(255 255 255 / 70%) !important;
60 | }
61 | .text-checkbox {
62 | color: rgb(220 20 60) !important;
63 | }
64 | .q-checkbox__svg {
65 | color: rgb(0, 0, 0) !important;
66 | }
67 | .q-checkbox__inner--truthy .q-checkbox__bg {
68 | box-shadow: 0px 0px 3px 3px rgb(220 20 60 / 15%) !important;
69 | } /* if you want the checkboxes to have a glow/shadow */
70 | .text-toggleicons {
71 | color: rgb(0, 0, 0) !important;
72 | }
73 |
74 | /* Menu misc */
75 | hr {
76 | opacity: 0.1 !important;
77 | } /* horizontal line that seperates sections */
78 | .q-mb-md {
79 | margin-bottom: 0px !important;
80 | } /* removes extra top padding */
81 | .q-mb-md-d {
82 | padding-left: 10px !important;
83 | padding-bottom: 10px !important;
84 | } /* keeps q-items aligned */
85 | .q-item {
86 | padding: 8px 0px !important;
87 | } /* keeps q-items aligned */
88 | .q-item__section--avatar {
89 | min-width: 40px !important;
90 | } /* keeps q-items aligned */
91 | .q-item__section--side {
92 | padding-right: 0px !important;
93 | } /* keeps q-items aligned */
94 | .q-splitter--vertical > .q-splitter__separator {
95 | width: 0px !important;
96 | } /* keeps navigation tab panel seamless */
97 | div#q-loading-bar {
98 | display: none !important;
99 | } /* makes sure there's no ajax load from quasar */
100 | ::-webkit-scrollbar {
101 | display: none !important;
102 | } /* makes sure there's no ugly scrollbar on menu*/
103 |
104 | /* Hud radial styles */
105 | .text-health {
106 | color: rgb(33, 171, 97) !important;
107 | }
108 | .text-stress {
109 | color: rgb(255, 0, 0) !important;
110 | }
111 | .text-nos {
112 | color: rgb(255, 72, 133) !important;
113 | }
114 | .text-cruise {
115 | color: rgb(255, 72, 133) !important;
116 | }
117 | .text-armed {
118 | color: rgb(255, 72, 133) !important;
119 | }
120 | .text-harness {
121 | color: rgb(182, 72, 255) !important;
122 | }
123 | .text-oxygen {
124 | color: rgb(138, 168, 189) !important;
125 | }
126 | .text-parachute {
127 | color: rgb(0, 0, 0) !important;
128 | }
129 | .text-dev {
130 | color: rgb(0, 0, 0) !important;
131 | }
132 | .text-gauge {
133 | color: rgb(255, 255, 255) !important;
134 | }
135 |
136 | #main-container {
137 | width: 100%;
138 | height: auto;
139 | }
140 |
141 | /* Money */
142 | #money-container {
143 | position: absolute;
144 | right: 2vw;
145 | top: 5vh;
146 | font-weight: 400;
147 | font-size: 40px;
148 | }
149 |
150 | #sign,
151 | #bank {
152 | font-family: "Pricedown Bl", sans-serif;
153 | text-align: right;
154 | color: #00ac31;
155 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
156 | }
157 |
158 | #plus {
159 | font-size: 50px;
160 | font-family: "Pricedown Bl", sans-serif;
161 | text-align: right;
162 | color: #00ac31;
163 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
164 | }
165 |
166 | #minus {
167 | font-size: 50px;
168 | font-family: "Pricedown Bl", sans-serif;
169 | text-align: right;
170 | color: #ac0000;
171 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
172 | }
173 |
174 | #money {
175 | font-family: "Pricedown Bl", sans-serif;
176 | text-align: right;
177 | color: #ffffff;
178 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
179 | }
180 |
181 | /* Player HUD */
182 |
183 | #playerhud {
184 | position: absolute;
185 | display: flex;
186 | left: 3vh;
187 | bottom: 0.2vw;
188 | }
189 |
190 | .q-ml-xl {
191 | margin-left: -22px !important; /* Change this to space radials */
192 | }
193 |
194 | /* Vehicle HUD */
195 |
196 | speed:after {
197 | content: "MPH"; /* If using KPH change this content from MPH */
198 | display: block;
199 | padding-top: 3px;
200 | padding-left: 2px;
201 | padding-right: 2px;
202 | padding-bottom: 8px;
203 | font-weight: 900;
204 | }
205 |
206 | altitude:after {
207 | content: "ALT";
208 | display: block;
209 | padding-top: 10px;
210 | padding-left: 2px;
211 | padding-right: 2px;
212 | font-weight: 900;
213 | }
214 |
215 | speed {
216 | transform: rotate(150deg);
217 | font-size: 2.4vh;
218 | position: fixed;
219 | color: #fff;
220 | text-align: center;
221 | font-weight: 600;
222 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
223 | }
224 |
225 | altitude {
226 | transform: rotate(135deg);
227 | font-size: 2.4vh;
228 | position: fixed;
229 | color: #fff;
230 | text-align: center;
231 | font-weight: 600;
232 | text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.7), 1px -1px 0 rgba(0, 0, 0, 0.7), -1px 1px 0 rgba(0, 0, 0, 0.7), 1px 1px 0 rgba(0, 0, 0, 0.7);
233 | }
234 |
235 | .border {
236 | bottom: 7.9%;
237 | left: 1.3%;
238 | width: 0%;
239 | text-align: center;
240 | }
241 |
242 | .square {
243 | bottom: 6.3%;
244 | width: 29vh;
245 | height: 18.5vh;
246 | border: 4px solid #bababa;
247 | position: absolute;
248 | display: inline-block;
249 | }
250 |
251 | .circle {
252 | bottom: 6.9%;
253 | width: 27vh;
254 | height: 22.9vh;
255 | border: 4px solid #bababa;
256 | position: absolute;
257 | display: inline-block;
258 | border-radius: 50%;
259 | }
260 |
261 | /* Animation */
262 | .slide-fade-enter-active {
263 | transition: all 0.3s ease-out;
264 | }
265 |
266 | .slide-fade-leave-active {
267 | transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
268 | }
269 |
270 | .slide-fade-enter-from,
271 | .slide-fade-leave-to {
272 | transform: translateX(20px);
273 | opacity: 0;
274 | }
275 |
276 | .fade-enter-active,
277 | .fade-leave-active {
278 | transition: opacity 2s ease;
279 | }
280 |
281 | .fade-enter-from,
282 | .fade-leave-to {
283 | opacity: 0;
284 | }
285 |
286 | /* Compass */
287 | .baseplate {
288 | position: relative;
289 | margin: 0 auto;
290 | top: -0.8vh;
291 | width: 150px;
292 | height: auto;
293 | }
294 |
295 | .street-container {
296 | position: relative;
297 | top: 0.5vh;
298 | font-family: Arial, Helvetica, sans-serif;
299 | font-size: 1.4vh;
300 | letter-spacing: 0.7px;
301 | text-decoration: none;
302 | font-style: normal;
303 | font-variant: small-caps;
304 | text-transform: none;
305 | font-weight: 800;
306 | text-shadow: 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6);
307 | }
308 |
309 | .street1 {
310 | position: absolute;
311 | margin: 0 auto;
312 | right: 55%;
313 | text-align: right !important;
314 | color: rgb(255, 255, 255);
315 | }
316 |
317 | .street2 {
318 | position: absolute;
319 | margin: 0 auto;
320 | left: 55%;
321 | text-align: left !important;
322 | color: rgb(255, 255, 255);
323 | }
324 |
325 | .pointer {
326 | position: absolute;
327 | margin: 0 auto;
328 | top: -2%;
329 | left: 0;
330 | right: 0;
331 | font-family: "Yantramanav", sans-serif;
332 | color: rgb(255, 255, 255);
333 | font-size: 2.2vh;
334 | text-align: center;
335 | text-shadow: 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6);
336 | z-index: 9999;
337 | }
338 |
339 | .degrees {
340 | position: absolute;
341 | margin: 0 auto;
342 | top: 80%;
343 | left: 0;
344 | right: 0;
345 | opacity: 0.8;
346 | font-family: "Yantramanav", sans-serif;
347 | color: rgb(255, 255, 255);
348 | font-size: 1.5vh;
349 | font-weight: 600;
350 | text-align: center;
351 | text-shadow: 0 0 1px rgb(0 0 0 / 60%), 0 0 1px rgb(0 0 0 / 60%), 0 0 1px rgb(0 0 0 / 60%), 0 0 1px rgb(0 0 0 / 60%);
352 | }
353 |
354 | .bezel {
355 | position: relative;
356 | width: 100%;
357 | height: 2vh;
358 | font-family: "Yantramanav", sans-serif;
359 | font-size: 0.35vh;
360 | font-weight: 700;
361 | text-shadow: 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6);
362 | }
363 |
364 | .bearing {
365 | position: relative;
366 | width: 100%;
367 | top: -0.5vh;
368 | height: 3.5vh;
369 | padding-left: 0.12vw;
370 | font-family: Arial, Helvetica, sans-serif;
371 | font-size: 2.3vh;
372 | letter-spacing: 0.7px;
373 | text-decoration: none;
374 | font-style: normal;
375 | font-variant: small-caps;
376 | text-transform: none;
377 | font-weight: 600;
378 | text-shadow: 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6), 0 0 1px rgba(0, 0, 0, 0.6);
379 | }
380 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/html/responsive.css:
--------------------------------------------------------------------------------
1 | .responsive {
2 | position: absolute !important;
3 | }
4 |
5 | @media (min-width: 800px) {
6 | .responsive {
7 | margin-left: 32vh !important;
8 | transform: scale(1, 1);
9 | bottom: 6.9vh !important;
10 | }
11 | .q-ml-xl {
12 | font-size: 50px;
13 | }
14 | #Speedo {
15 | font-size: 70px !important;
16 | }
17 | #FuelGaugeBackground {
18 | font-size: 36px;
19 | }
20 | #FuelGaugeValue {
21 | font-size: 36px;
22 | }
23 | #FuelGaugeIcon {
24 | font-size: 14px;
25 | }
26 | #Icons {
27 | font-size: 19.5px;
28 | }
29 | #speedometer {
30 | position: relative;
31 | left: 2.5vh !important;
32 | }
33 | #fuelgauge {
34 | position: relative;
35 | left: 7vh !important;
36 | bottom: 6.7vh !important;
37 | }
38 | #altitudegauge {
39 | position: relative;
40 | left: 11vh !important;
41 | }
42 | #seatbelt {
43 | position: relative;
44 | left: 8.5vh !important;
45 | }
46 | speed {
47 | font-size: 2vh !important;
48 | }
49 | speed:after {
50 | font-size: 0.9vh !important;
51 | }
52 | altitude {
53 | font-size: 2vh !important;
54 | }
55 | altitude:after {
56 | font-size: 0.9vh !important;
57 | }
58 | .square {
59 | left: 2.5vh !important;
60 | bottom: 6% !important;
61 | }
62 | .circle {
63 | left: 3.2vh !important;
64 | width: 27.6vh !important;
65 | bottom: 6.9% !important;
66 | }
67 | }
68 |
69 | @media (width: 3840px) and (height: 2160px) {
70 | .responsive {
71 | margin-left: 32.8vh !important;
72 | transform: scale(1.3, 1.3);
73 | bottom: 7.6vh !important;
74 | }
75 | .q-ml-xl {
76 | font-size: 100px;
77 | margin-left: -45px !important; /* Change this to space radials */
78 | }
79 | #Speedo {
80 | font-size: 125px !important;
81 | }
82 | #Speed {
83 | font-size: 50px !important;
84 | }
85 | #FuelGaugeBackground {
86 | font-size: 75px !important;
87 | left: 50% !important;
88 | top: 20px !important;
89 | }
90 | #FuelGaugeValue {
91 | font-size: 75px !important;
92 | left: 0% !important;
93 | top: 20px !important;
94 | }
95 | #FuelGaugeIcon {
96 | font-size: 25px;
97 | }
98 | #Altimeter {
99 | font-size: 125px !important;
100 | left: 41% !important;
101 | }
102 | #AltimeterValue {
103 | font-size: 125px !important;
104 | left: -9% !important;
105 | }
106 | #Alt {
107 | font-size: 50px !important;
108 | }
109 | #Icons {
110 | font-size: 50px;
111 | }
112 | #SeatbeltLocation {
113 | left: 35% !important;
114 | top: -40px;
115 | }
116 | #SeatbeltIcon {
117 | font-size: 40px !important;
118 | }
119 | #speedometer {
120 | position: relative;
121 | left: 2.5vh !important;
122 | }
123 | #fuelgauge {
124 | position: relative;
125 | left: 5.3vh !important;
126 | bottom: 7.1vh !important;
127 | }
128 | #altitudegauge {
129 | position: relative;
130 | left: 8.2vh !important;
131 | }
132 | #seatbelt {
133 | position: relative;
134 | left: 6.5vh !important;
135 | }
136 | speed {
137 | font-size: 1.2vh !important;
138 | }
139 | speed:after {
140 | font-size: 0.6vh !important;
141 | }
142 | altitude {
143 | font-size: 1.2vh !important;
144 | }
145 | altitude:after {
146 | font-size: 0.6vh !important;
147 | }
148 | .square {
149 | left: 2.4vh !important;
150 | bottom: 6.1% !important;
151 | width: 29.3vh !important;
152 | }
153 | .circle {
154 | left: 3.6vh !important;
155 | width: 27.6vh !important;
156 | bottom: 6.9% !important;
157 | }
158 | }
159 |
160 | @media (width: 3440px) and (height: 1440px) {
161 | .responsive {
162 | margin-left: 33vh !important;
163 | transform: scale(1.3, 1.3);
164 | bottom: 7.6vh !important;
165 | }
166 | .q-ml-xl {
167 | font-size: 50px;
168 | }
169 | #Speedo {
170 | font-size: 70px !important;
171 | }
172 | #FuelGaugeBackground {
173 | font-size: 36px;
174 | }
175 | #FuelGaugeValue {
176 | font-size: 36px;
177 | }
178 | #FuelGaugeIcon {
179 | font-size: 14px;
180 | }
181 | #Icons {
182 | font-size: 19.5px;
183 | }
184 | #speedometer {
185 | position: relative;
186 | left: 2.5vh !important;
187 | }
188 | #fuelgauge {
189 | position: relative;
190 | left: 6.4vh !important;
191 | bottom: 6.85vh !important;
192 | }
193 | #altitudegauge {
194 | position: relative;
195 | left: 11.2vh !important;
196 | }
197 | #seatbelt {
198 | position: relative;
199 | left: 8.8vh !important;
200 | }
201 | speed {
202 | font-size: 1.4vh !important;
203 | }
204 | speed:after {
205 | font-size: 0.7vh !important;
206 | }
207 | altitude {
208 | font-size: 1.4vh !important;
209 | }
210 | altitude:after {
211 | font-size: 0.7vh !important;
212 | }
213 | .square {
214 | left: 2.3vh !important;
215 | bottom: 6.1% !important;
216 | width: 29.3vh !important;
217 | }
218 | .circle {
219 | left: 3.5vh !important;
220 | width: 27.6vh !important;
221 | bottom: 6.9% !important;
222 | }
223 | }
224 |
225 | @media (width: 2560px) and (height: 1440px) {
226 | .responsive {
227 | margin-left: 33.5vh !important;
228 | transform: scale(1.3, 1.3);
229 | bottom: 7.2vh !important;
230 | }
231 | .q-ml-xl {
232 | font-size: 50px;
233 | }
234 | #Speedo {
235 | font-size: 70px !important;
236 | }
237 | #FuelGaugeBackground {
238 | font-size: 36px;
239 | }
240 | #FuelGaugeValue {
241 | font-size: 36px;
242 | }
243 | #FuelGaugeIcon {
244 | font-size: 14px;
245 | }
246 | #Icons {
247 | font-size: 19.5px;
248 | }
249 | #speedometer {
250 | position: relative;
251 | left: 2.5vh !important;
252 | }
253 | #fuelgauge {
254 | position: relative;
255 | left: 6.3vh !important;
256 | bottom: 6.5vh !important;
257 | }
258 | #altitudegauge {
259 | position: relative;
260 | left: 11vh !important;
261 | }
262 | #seatbelt {
263 | position: relative;
264 | left: 8.8vh !important;
265 | }
266 | speed {
267 | font-size: 1.4vh !important;
268 | }
269 | speed:after {
270 | font-size: 0.7vh !important;
271 | }
272 | altitude {
273 | font-size: 1.4vh !important;
274 | }
275 | altitude:after {
276 | font-size: 0.7vh !important;
277 | }
278 | .square {
279 | left: 2.3vh !important;
280 | bottom: 6% !important;
281 | }
282 | .circle {
283 | left: 3.5vh !important;
284 | width: 27.6vh !important;
285 | bottom: 6.7% !important;
286 | }
287 | }
288 |
289 | @media (width: 2560px) and (height: 1080px) {
290 | #speedometer {
291 | position: relative;
292 | left: 2.5vh !important;
293 | }
294 | #fuelgauge {
295 | position: relative;
296 | left: 6.5vh !important;
297 | bottom: 5.7vh !important;
298 | }
299 | #seatbelt {
300 | position: relative;
301 | left: 6.5vh !important;
302 | }
303 | .square {
304 | left: 2.5vh !important;
305 | bottom: 6% !important;
306 | }
307 | .circle {
308 | left: 3.2vh !important;
309 | width: 27.6vh !important;
310 | bottom: 6.9% !important;
311 | }
312 | }
313 |
314 | @media (width: 1920px) and (height: 1440px) {
315 | .responsive {
316 | margin-left: 32vh !important;
317 | transform: scale(1.2, 1.2);
318 | bottom: 7.4vh !important;
319 | }
320 | .q-ml-xl {
321 | font-size: 50px;
322 | }
323 | #Speedo {
324 | font-size: 70px !important;
325 | }
326 | #FuelGaugeBackground {
327 | font-size: 36px;
328 | }
329 | #FuelGaugeValue {
330 | font-size: 36px;
331 | }
332 | #FuelGaugeIcon {
333 | font-size: 14px;
334 | }
335 | #Icons {
336 | font-size: 19.5px;
337 | }
338 | #speedometer {
339 | position: relative;
340 | left: 2.5vh !important;
341 | }
342 | #fuelgauge {
343 | position: relative;
344 | left: 6.3vh !important;
345 | bottom: 6.9vh !important;
346 | }
347 | #altitudegauge {
348 | position: relative;
349 | left: 10vh !important;
350 | }
351 | #seatbelt {
352 | position: relative;
353 | left: 8vh !important;
354 | }
355 | speed {
356 | font-size: 1.6vh !important;
357 | }
358 | speed:after {
359 | font-size: 0.7vh !important;
360 | }
361 | altitude {
362 | font-size: 1.6vh !important;
363 | }
364 | altitude:after {
365 | font-size: 0.7vh !important;
366 | }
367 | .square {
368 | left: 2vh !important;
369 | bottom: 6% !important;
370 | }
371 | .circle {
372 | left: 2.7vh !important;
373 | width: 27.6vh !important;
374 | bottom: 7% !important;
375 | }
376 | }
377 |
378 | @media (width: 1920px) and (height: 1200px) {
379 | .responsive {
380 | margin-left: 31.5vh !important;
381 | transform: scale(1, 1);
382 | bottom: 6.4vh !important;
383 | }
384 | .q-ml-xl {
385 | font-size: 50px;
386 | }
387 | #Speedo {
388 | font-size: 70px !important;
389 | }
390 | #FuelGaugeBackground {
391 | font-size: 36px;
392 | }
393 | #FuelGaugeValue {
394 | font-size: 36px;
395 | }
396 | #FuelGaugeIcon {
397 | font-size: 14px;
398 | }
399 | #Icons {
400 | font-size: 19.5px;
401 | }
402 | #speedometer {
403 | position: relative;
404 | left: 2.5vh !important;
405 | }
406 | #fuelgauge {
407 | position: relative;
408 | left: 6.6vh !important;
409 | bottom: 6.05vh !important;
410 | }
411 | #altitudegauge {
412 | position: relative;
413 | left: 10vh !important;
414 | }
415 | #seatbelt {
416 | position: relative;
417 | left: 8vh !important;
418 | }
419 | speed {
420 | font-size: 1.8vh !important;
421 | }
422 | speed:after {
423 | font-size: 0.8vh !important;
424 | }
425 | altitude {
426 | font-size: 1.8vh !important;
427 | }
428 | altitude:after {
429 | font-size: 0.8vh !important;
430 | }
431 | .square {
432 | left: 2.2vh !important;
433 | bottom: 6% !important;
434 | }
435 | .circle {
436 | left: 3.2vh !important;
437 | width: 27.6vh !important;
438 | bottom: 7% !important;
439 | }
440 | }
441 |
442 | @media (width: 1920px) and (height: 1080px) {
443 | .responsive {
444 | margin-left: 32vh !important;
445 | transform: scale(1, 1);
446 | bottom: 6.9vh !important;
447 | }
448 | .q-ml-xl {
449 | font-size: 50px;
450 | }
451 | #Speedo {
452 | font-size: 70px !important;
453 | }
454 | #FuelGaugeBackground {
455 | font-size: 36px;
456 | }
457 | #FuelGaugeValue {
458 | font-size: 36px;
459 | }
460 | #FuelGaugeIcon {
461 | font-size: 14px;
462 | }
463 | #Icons {
464 | font-size: 19.5px;
465 | }
466 | #speedometer {
467 | position: relative;
468 | left: 2.5vh !important;
469 | }
470 | #fuelgauge {
471 | position: relative;
472 | left: 7.2vh !important;
473 | bottom: 6.6vh !important;
474 | }
475 | #altitudegauge {
476 | position: relative;
477 | left: 11vh !important;
478 | }
479 | #seatbelt {
480 | position: relative;
481 | left: 8.5vh !important;
482 | }
483 | speed {
484 | font-size: 2vh !important;
485 | }
486 | speed:after {
487 | font-size: 1.2vh !important;
488 | }
489 | altitude {
490 | font-size: 2vh !important;
491 | }
492 | altitude:after {
493 | font-size: 0.9vh !important;
494 | }
495 | .square {
496 | left: 2.5vh !important;
497 | bottom: 6% !important;
498 | }
499 | .circle {
500 | left: 3.7vh !important;
501 | width: 27.3vh !important;
502 | bottom: 7% !important;
503 | }
504 | }
505 |
506 | @media (width: 1280px) and (height: 720px) {
507 | .responsive {
508 | margin-left: 30vh !important;
509 | transform: scale(0.65, 0.65);
510 | bottom: 4.7vh !important;
511 | }
512 | .q-ml-xl {
513 | font-size: 50px;
514 | }
515 | #Speedo {
516 | font-size: 70px !important;
517 | }
518 | #FuelGaugeBackground {
519 | font-size: 36px;
520 | }
521 | #FuelGaugeValue {
522 | font-size: 36px;
523 | }
524 | #FuelGaugeIcon {
525 | font-size: 14px;
526 | }
527 | #Icons {
528 | font-size: 19.5px;
529 | }
530 | #speedometer {
531 | position: relative;
532 | left: 2.5vh !important;
533 | }
534 | #fuelgauge {
535 | position: relative;
536 | left: 8.6vh !important;
537 | bottom: 5.2vh !important;
538 | }
539 | #altitudegauge {
540 | position: relative;
541 | left: 11vh !important;
542 | }
543 | #seatbelt {
544 | position: relative;
545 | left: 8.5vh !important;
546 | }
547 | speed {
548 | font-size: 3vh !important;
549 | }
550 | speed:after {
551 | font-size: 1.4vh !important;
552 | }
553 | altitude {
554 | font-size: 3vh !important;
555 | }
556 | altitude:after {
557 | font-size: 1.4vh !important;
558 | }
559 | .square {
560 | left: 2.5vh !important;
561 | bottom: 6% !important;
562 | }
563 | .circle {
564 | left: 4vh !important;
565 | width: 27.6vh !important;
566 | bottom: 6.9% !important;
567 | }
568 | }
569 |
--------------------------------------------------------------------------------
/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
$ {{(cash)}}
198 |$ {{(bank)}}
203 |+ {{(amount)}}
207 |- {{(amount)}}
208 |