Et komplet parkeringsbøde-system til FiveM/ESX med ox_lib integration.
- ✅ Job-locked til politiet (konfigurerbart)
- ✅ ox_lib UI integration (menuer, input, notifikationer)
- ✅ ESX Billing integration - Bøder oprettes i billing systemet
- ✅ Nummerplade-baseret (kræver ikke spiller i køretøj)
- ✅ Virker for både online og offline spillere
- ✅ MySQL database lagring af alle bøder
- ✅ Server-side validering og sikkerhed
- ✅ Keybind support (F7 som standard)
- ✅ Lokalisering (Dansk og Engelsk)
- ✅ Eksporter til eksterne scripts
- ✅ Command support (
/parkingfine,/payfine,/myfines)
Dette resource kræver følgende dependencies:
- es_extended - ESX Framework
- ox_lib - UI library
- ox_target - Eye Target
- oxmysql - MySQL driver
- esx_billing - ESX Billing system (v1.0)
- Download resourcen og placer den i din
resources/[custom]/[Luudi]mappe - Omdøb mappen til
luudi_parkingfinehvis ikke allerede gjort
Kør SQL-filen for at oprette tabellen i din database:
Gå til sql/schema.sql og kør SQL kommandoerne i din databaseEller kør denne SQL direkte:
CREATE TABLE IF NOT EXISTS `luudi_parkingfines` (
`id` INT NOT NULL AUTO_INCREMENT,
`identifier` VARCHAR(64) NOT NULL,
`issuer` VARCHAR(64) NOT NULL,
`issuer_name` VARCHAR(128) DEFAULT NULL,
`vehicle_plate` VARCHAR(16) DEFAULT NULL,
`amount` INT NOT NULL,
`reason` TEXT DEFAULT NULL,
`paid` TINYINT(1) NOT NULL DEFAULT 0,
`auto_deducted` TINYINT(1) NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`paid_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_identifier` (`identifier`),
INDEX `idx_paid` (`paid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Tilføj følgende til din server.cfg:
ensure luudi_parkingfineSørg for at resourcen startes EFTER dependencies:
ensure es_extended
ensure ox_lib
ensure oxmysql
ensure esx_billing
ensure luudi_parkingfineRediger config.lua for at tilpasse systemet til dine behov:
Config.Locale = 'da' -- Eller 'en' for engelsk
Config.AuthorizedJobs = {
['police'] = true,
-- Tilføj flere jobs her
}
Config.MinFineAmount = 100
Config.MaxFineAmount = 50000
Config.Keybind = 'F7' -- Tast til at åbne menu- Tryk på F7 (eller din konfigurerede keybind)
- Eller brug kommandoen:
/parkingfine
- Stil dig ved et parkeret køretøj (ingen person behøver at være i det)
- Åbn menuen med F7 eller
/parkingfine - Systemet finder nærmeste køretøj indenfor 5 meter og viser nummerpladen
- Indtast:
- Bødebeløb (mellem min og max værdier)
- Årsag til bøden
- Bekræft
- Bøden oprettes i ESX Billing systemet
- Hvis ejer er online, modtager de notifikation
- Hvis ejer er offline, venter bøden til de logger ind
- Ejer kan betale bøden via
/billskommando eller ESX billing menu
- Åbn menuen
- Vælg "Se Udstedte Bøder"
- Vælg en bøde for at se detaljer eller markere som betalt
Brug ESX Billing systemet:
/bills
Eller via F3 menu (ESX default) under "Fakturaer"
/myfines
Systemet opretter automatisk bøder i ESX Billing systemet:
- Online spillere: Modtager øjeblikkelig notifikation og bøde i billing system
- Offline spillere: Bøden venter i billing database til de logger ind
- Betaling: Spillere betaler via
/billseller ESX menu - Society: Alle bøder går til
society_police
TriggerEvent('luudi_parkingfine:client:openMenu')RegisterNetEvent('luudi_parkingfine:client:receiveFine', function(data)
-- data.amount
-- data.reason
-- data.autoDeducted
end)RegisterNetEvent('luudi_parkingfine:client:fineIssued', function(data)
-- data.amount
-- data.targetName
end)TriggerServerEvent('luudi_parkingfine:server:issueFine', {
vehiclePlate = "ABC123",
amount = 500,
reason = "Parkeret på fortov"
})Note: Bøder oprettes i ESX Billing systemet, så spillere kan betale via /bills
local fines = exports['luudi_parkingfine']:GetParkingFineForPlayer(identifier)local unpaidFines = exports['luudi_parkingfine']:GetAllUnpaidFines()local fine = exports['luudi_parkingfine']:GetFineById(fineId)- ✅ Alle autorisation checks sker server-side
- ✅ Ingen client-side trust for penge-transaktioner
- ✅ Input validering på både client og server
- ✅ SQL injection beskyttelse via prepared statements
- ✅ Balance checks før træk af penge
Aktivér debug mode i config.lua:
Config.Debug = trueBrug debug kommando:
/parkingfine_debug
For at integrere med ESX logs eller andre log-systemer, rediger LogAction funktionen i server/main.lua:
function LogAction(action, source, data)
-- Eksempel: Integration med discord webhook
TriggerEvent('esx:log', action, source, data)
-- Eller tilføj din egen log-logik her
end| Kommando | Beskrivelse | Tilladelse |
|---|---|---|
/parkingfine |
Åbn parkeringsbøde menu | Kun autoriserede jobs |
/bills |
Se og betal dine bøder (ESX Billing) | Alle spillere |
/myfines |
Vis dine parkeringsbøder (liste) | Alle spillere |
I config.lua:
Config.AuthorizedJobs = {
['police'] = true,
['sheriff'] = true,
['statepolice'] = true,
}Hvis dine bøder skal gå til en anden society (f.eks. sheriff):
I server/main.lua, find linjen:
TriggerEvent('esx_billing:sendBill', targetPlayer.source, 'society_police', 'police', reason, amount)Skift til:
TriggerEvent('esx_billing:sendBill', targetPlayer.source, 'society_sheriff', 'sheriff', reason, amount)I config.lua:
Config.NotificationDuration = 7000 -- 7 sekunderluudi_parkingfine/
├── fxmanifest.lua # Resource manifest
├── config.lua # Konfigurationsfil
├── client/
│ └── main.lua # Client-side logik
├── server/
│ └── main.lua # Server-side logik
├── sql/
│ └── schema.sql # Database schema
├── locales/
│ ├── da.lua # Danske oversættelser
│ └── en.lua # Engelske oversættelser
└── README.md # Denne fil
Hvis du oplever problemer:
- Tjek at alle dependencies er installeret og opdateret
- Tjek at SQL tabellen er oprettet korrekt
- Aktivér debug mode for at se fejl i konsollen
- Tjek server console for fejlmeddelelser
Dette resource er lavet af Luudi og er frit til brug.
- Initial release
- Basis funktionalitet implementeret
- ox_lib integration
- ESX Billing integration
- Nummerplade-baseret system
- Virker for online og offline spillere
- MySQL database support
- Lokalisering (DA/EN)
- Command support
- Eksporter til eksterne scripts
Lavet med ❤️ af Luudi