Início › Documentação › Instalação · origen_reports

Instalação · origen_reports

1. Base de dados

O recurso inclui um migrador automático. Em cada arranque lê database.sql da raiz do recurso, cria as tabelas em falta e adiciona ou atualiza as colunas em falta, pelo que não é preciso importar SQL manualmente.

Se preferires criar o esquema à mão, executa o seguinte SQL antes de arrancares o recurso:

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 tem de existir antes de origen_reports_staff por causa da chave estrangeira fk_staff_group. Mantém a ordem acima se importares o ficheiro à mão.


2. server.cfg

Adiciona o recurso depois das suas dependências:

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

Os recursos de framework, inventário, roupa e ambulância também têm de arrancar antes do origen_reports para que a deteção automática os encontre.


3. Acesso do staff

Um jogador passa a ser staff através de um de três níveis de acesso:

Nível Como é concedido Permissões
Completo Qualquer permissão incluída em Config.StaffFullAccess Todas as ações rápidas e todo o painel de administração
Limitado Adicionado como staff a partir do painel de administração com um grupo atribuído Exatamente as permissões desse grupo
Básico Qualquer permissão incluída em Config.StaffBasicAccess Conjunto básico por omissão (ver abaixo)

Cada entrada de Config.StaffFullAccess / Config.StaffBasicAccess é verificada, por ordem, com:

  1. O ACE <permission> ou group.<permission>.
  2. qbx_core — HasPermission / GetPermission.
  3. qb-core — Functions.GetPermission.
  4. es_extended — xPlayer.getGroup() tem de ser igual à permissão.

Para configurações baseadas em ACE, concede os grupos no teu server.cfg:

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

Permissões por omissão do nível básico:

Permissão Concedida
teleport Sim
inventory Sim
revive Sim
ropa Sim
bucket Sim
screenshot Sim
spectate Sim
giveitems Não
video Não

A partilha de ecrã em direto (video) nunca é concedida por omissão ao staff básico. Cria um grupo no painel de administração com essa permissão ativada e atribui-o aos membros do staff que precisem dela.


4. Webhooks do Discord (opcional)

Todos os webhooks estão em svconfig.lua. Substitui YOUR_WEBHOOK_URL pelos URL dos teus webhooks do Discord, ou põe enabled = false para desativar por completo o registo de logs.

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ão é um canal de logs: é o webhook para o qual o screenshot-basic envia a captura. A ação rápida de captura de ecrã não faz nada enquanto estiver vazio ou continuar com o valor YOUR_WEBHOOK_URL.

Consulta Configuração para veres a lista completa de chaves de webhook.


5. Idioma

Define o idioma do recurso em config.lua. Os ficheiros de tradução estão em locales/.

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