Exports

Intégrez Perfect Rentals avec vos autres scripts via les exports.

Server-side

Lua (server)
-- Vérifie si un joueur a une location active
-- Retourne : bool, contract|nil
local hasRental, contract = exports['perfect_rentals']:HasActiveRental(source)

-- Récupère le contrat actif du joueur
-- Retourne : contract|nil
local contract = exports['perfect_rentals']:GetActiveContract(source)

-- Force la restitution d'un contrat par ID
-- Retourne : bool (succès)
exports['perfect_rentals']:ForceReturn(contractId)

Client-side

Lua (client)
-- Ouvre l'UI de location pour une agence spécifique
exports['perfect_rentals']:OpenRentalUI(locationId)

Objet contrat retourné

Les exports qui retournent un contrat fournissent cet objet :

ChampTypeDescription
idintID unique du contrat en base.
contract_numstringNuméro de contrat (ex : PR-2501-0042).
identifierstringIdentifiant du joueur (license/citizenid).
player_namestringNom du joueur.
vehicle_modelstringModèle du véhicule loué.
platestringPlaque d'immatriculation.
tokenstringToken unique (64 hex).
start_tsbigintTimestamp début (ms).
end_tsbigintTimestamp fin (ms).
price_totalintPrix total (hors caution).
depositintMontant de la caution.
insurancestringnone, standard ou premium.
fuel_policystringfull_to_full ou flat_rate.
statusstringactive, returned, forced, expired.

Commandes

CommandeAccèsDescription
/locationTousOuvre le menu de location active (temps restant, prolongation, restitution).
/rentaladminAdminOuvre le panel d'administration (véhicules, agences, contrats).

Webhooks Discord

Lorsque activé dans config.lua, le script envoie des notifications automatiques vers votre salon Discord :

Nouvelle location

Joueur, véhicule, plaque, montant, agence.

Restitution

Joueur, véhicule, plaque, pénalités, remboursement caution.

Prolongation

Joueur, nouvelle durée, coût supplémentaire.

Actions admin

Forcer retour, remboursement, ajout/suppression véhicule ou agence.

config.lua
Config.Webhook = {
    enabled = true,
    url     = 'https://discord.com/api/webhooks/VOTRE_WEBHOOK_ICI',
    botName = 'Perfect Rentals',
    color   = 3447003,
}

Sécurité

Perfect Rentals intègre plusieurs couches de protection contre les exploits et la triche.

Calculs 100% serveur

Prix, pénalités, durées, cautions — tout est calculé et validé exclusivement côté serveur. Aucune donnée NUI n'est trusted.

Token unique

Chaque contrat a un token de 64 caractères hex unique. Empêche le spoofing et la manipulation de contrats.

Vérification identité

Chaque action (louer, rendre, prolonger) vérifie l'identité du joueur côté serveur via le framework.

Rate-limiting

Cooldowns serveur sur les actions sensibles (location, restitution, prolongation) — configurable.

Anti-duplication

Impossible de spawn si le contrat est invalide, expiré, déjà spawné, ou si le joueur a déjà un contrat actif.

Plaque unique

Chaque plaque est vérifiée en base de données (50 tentatives max) pour garantir l'unicité.

Validation complète

Durées, assurances, politiques carburant — tout est revalidé côté serveur même si envoyé depuis le NUI.

Expiration auto

Les contrats expirés depuis trop longtemps sont automatiquement clos par le serveur (caution conservée).

Schéma de base

5 tables créées par install.sql :

TableDescription
rentals_vehiclesCatalogue des véhicules (modèle, label, catégorie, stats, prix, stock, image).
rentals_locationsPoints de location (coords PNJ, spawns, retour, showroom, blip, ped).
rentals_location_vehiclesVéhicules assignés par agence avec surcharges prix/caution/stock.
rentals_contractsContrats actifs (joueur, véhicule, plaque, token, dates, prix, statut).
rentals_historyHistorique (scan, pénalités, remboursement, date de restitution).

Licence

Usage personnel / serveur uniquement. Ne pas redistribuer, revendre ou partager ce script. Toute violation sera sanctionnée.

Pour toute question, rejoignez le Discord Spectre Script.