Accueil › Documentation › Installation · origen_reports
La ressource embarque un migrateur automatique. À chaque démarrage, il lit database.sql à la racine de la ressource, crée les tables manquantes et ajoute ou met à jour les colonnes manquantes ; aucun import SQL manuel n’est donc nécessaire.
Si tu préfères créer le schéma à la main, exécute le SQL suivant avant de démarrer la ressource :
CREATE TABLE `origen_reports_tickets` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`reporter_identifier` VARCHAR(100) NOT NULL,
`reporter_name` VARCHAR(100) NOT NULL,
`identifiers` LONGTEXT NOT NULL,
`type` VARCHAR(100) NOT NULL,
`description` TEXT NOT NULL,
`status` ENUM('pending','claimed','resolved') NOT NULL DEFAULT 'pending',
`assigned_name` VARCHAR(100) DEFAULT NULL,
`assigned_identifier` VARCHAR(100) DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_reporter` (`reporter_identifier`),
INDEX `idx_status` (`status`),
INDEX `idx_assigned_identifier` (`assigned_identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_messages` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`report_id` INT UNSIGNED NOT NULL,
`sender` VARCHAR(100) NOT NULL,
`text` TEXT NOT NULL,
`is_staff` TINYINT(1) NOT NULL DEFAULT 0,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_report` (`report_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_types` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`label` VARCHAR(100) NOT NULL,
`icon` VARCHAR(50) NOT NULL DEFAULT 'help',
`sort_order` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_teleports` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`coords` LONGTEXT NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_config` (
`key` VARCHAR(100) NOT NULL,
`value` LONGTEXT NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_groups` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`permissions` LONGTEXT NOT NULL,
`allow_all_items` TINYINT(1) NOT NULL DEFAULT 1,
`allowed_items` LONGTEXT DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `origen_reports_staff` (
`identifier` VARCHAR(100) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`group_id` INT UNSIGNED DEFAULT NULL,
`total_resolved` INT UNSIGNED NOT NULL DEFAULT 0,
`total_duty_seconds` INT UNSIGNED NOT NULL DEFAULT 0,
`last_seen` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`identifier`),
CONSTRAINT `fk_staff_group` FOREIGN KEY (`group_id`) REFERENCES `origen_reports_groups` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;origen_reports_groups doit exister avant origen_reports_staff à cause de la clé étrangère fk_staff_group. Conserve l’ordre ci-dessus si tu importes le fichier à la main.
Ajoute la ressource après ses dépendances :
ensure ox_lib
ensure oxmysql
ensure screenshot-basic # optional, only for the screenshot quick action
ensure origen_reportsLes ressources de framework, d’inventaire, de vêtements et d’ambulance doivent aussi démarrer avant origen_reports pour que la détection automatique les trouve.
Un joueur devient staff via l’un des trois niveaux d’accès :
| Niveau | Comment il est accordé | Permissions |
|---|---|---|
| Complet | Toute permission listée dans Config.StaffFullAccess |
Toutes les actions rapides et l’ensemble du panneau d’administration |
| Limité | Ajouté comme staff depuis le panneau d’administration avec un groupe assigné | Exactement les permissions de ce groupe |
| Basique | Toute permission listée dans Config.StaffBasicAccess |
Ensemble basique par défaut (voir ci-dessous) |
Chaque entrée de Config.StaffFullAccess / Config.StaffBasicAccess est vérifiée, dans l’ordre, avec :
<permission> ou group.<permission>.qbx_core — HasPermission / GetPermission.qb-core — Functions.GetPermission.es_extended — xPlayer.getGroup() doit être égal à la permission.Pour les configurations basées sur ACE, accorde les groupes dans ton server.cfg :
add_principal identifier.license:xxxxxxxxxxxxxxxx group.admin
add_principal identifier.license:yyyyyyyyyyyyyyyy group.modPermissions par défaut du niveau basique :
| Permission | Accordée |
|---|---|
teleport |
Oui |
inventory |
Oui |
revive |
Oui |
ropa |
Oui |
bucket |
Oui |
screenshot |
Oui |
spectate |
Oui |
giveitems |
Non |
video |
Non |
Le partage d’écran en direct (video) n’est jamais accordé par défaut au staff basique. Crée un groupe dans le panneau d’administration avec cette permission activée et assigne-le aux membres du staff qui en ont besoin.
Tous les webhooks se trouvent dans svconfig.lua. Remplace YOUR_WEBHOOK_URL par les URL de tes webhooks Discord, ou mets enabled = false pour désactiver complètement la journalisation.
return {
enabled = true,
webhooks = {
['report-created'] = 'https://discord.com/api/webhooks/...',
['report-claimed'] = 'https://discord.com/api/webhooks/...',
-- ...
['screenshot-upload'] = 'https://discord.com/api/webhooks/...',
}
}screenshot-upload n’est pas un canal de logs : c’est le webhook vers lequel screenshot-basic envoie la capture. L’action rapide de capture d’écran ne fait rien tant qu’il est vide ou encore à YOUR_WEBHOOK_URL.
Consulte Configuration pour la liste complète des clés de webhook.
Définis la langue de la ressource dans config.lua. Les fichiers de traduction se trouvent dans locales/.
Config.Language = 'en' -- 'es' | 'en'