Accueil › Documentation › Installation · origen_reports

Installation · origen_reports

1. Base de données

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 :

sql
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.


2. server.cfg

Ajoute la ressource après ses dépendances :

cfg
ensure ox_lib
ensure oxmysql
ensure screenshot-basic # optional, only for the screenshot quick action
ensure origen_reports

Les 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.


3. Accès du staff

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 :

  1. L’ACE <permission> ou group.<permission>.
  2. qbx_core — HasPermission / GetPermission.
  3. qb-core — Functions.GetPermission.
  4. es_extended — xPlayer.getGroup() doit être égal à la permission.

Pour les configurations basées sur ACE, accorde les groupes dans ton server.cfg :

cfg
add_principal identifier.license:xxxxxxxxxxxxxxxx group.admin
add_principal identifier.license:yyyyyyyyyyyyyyyy group.mod

Permissions 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.


4. Webhooks Discord (facultatif)

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.

lua
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.


5. Langue

Définis la langue de la ressource dans config.lua. Les fichiers de traduction se trouvent dans locales/.

lua
Config.Language = 'en' -- 'es' | 'en'