Servidores de Jogos

Estruturando tabelas para um servidor de roleplay

Estruturando tabelas para um servidor de roleplay

Um servidor de roleplay guarda muita informação. Um banco bem estruturado desde o início evita dores de cabeça quando a comunidade crescer. Veja um modelo de referência.

Visão geral

contas ──< personagens ──< inventario
                │
                ├──< veiculos
                ├──< propriedades (casas/empresas)
                └──> faccoes (membros)
logs_dinheiro, logs_staff, punicoes

Contas e personagens

Separe conta (login) de personagem (quem joga). Assim, uma conta pode ter mais de um personagem, se o servidor permitir.

CREATE TABLE contas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario VARCHAR(32) NOT NULL UNIQUE,
    senha_hash VARCHAR(255) NOT NULL,
    serial VARCHAR(64),
    vip_ate DATETIME NULL,
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE personagens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    conta_id INT NOT NULL,
    nome VARCHAR(32) NOT NULL UNIQUE,
    dinheiro BIGINT DEFAULT 0,
    banco BIGINT DEFAULT 0,
    emprego VARCHAR(32) NULL,
    faccao_id INT NULL,
    cargo INT DEFAULT 0,
    x FLOAT, y FLOAT, z FLOAT, interior INT DEFAULT 0, dimensao INT DEFAULT 0,
    minutos_jogados INT DEFAULT 0,
    INDEX (conta_id), INDEX (faccao_id)
);

Inventário

CREATE TABLE inventario (
    personagem_id INT NOT NULL,
    item VARCHAR(32) NOT NULL,
    quantidade INT NOT NULL,
    PRIMARY KEY (personagem_id, item)
);

Veículos

CREATE TABLE veiculos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dono_id INT NOT NULL,
    modelo INT NOT NULL,
    placa VARCHAR(8) UNIQUE,
    x FLOAT, y FLOAT, z FLOAT, rotacao FLOAT,
    cor VARCHAR(32), combustivel FLOAT DEFAULT 100,
    tunagem TEXT,
    INDEX (dono_id)
);

Propriedades

CREATE TABLE propriedades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipo ENUM('casa','empresa') NOT NULL,
    dono_id INT NULL,
    preco BIGINT NOT NULL,
    entrada_x FLOAT, entrada_y FLOAT, entrada_z FLOAT,
    interior_id INT,
    INDEX (dono_id)
);

Facções

CREATE TABLE faccoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(48) NOT NULL UNIQUE,
    tipo VARCHAR(16) NOT NULL,   -- policia, medicos, gangue...
    cofre BIGINT DEFAULT 0
);

Logs (essenciais!)

CREATE TABLE logs_dinheiro (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    personagem_id INT, valor BIGINT, motivo VARCHAR(64),
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (personagem_id), INDEX (criado_em)
);

CREATE TABLE punicoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    conta_id INT, staff VARCHAR(32), tipo VARCHAR(16), motivo VARCHAR(255),
    expira_em DATETIME NULL, criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

Logs permitem investigar duplicações, abusos de staff e reclamações de jogadores.

Boas práticas

  • utf8mb4 em todas as tabelas;
  • Índices nas colunas de busca (dono_id, conta_id, faccao_id);
  • BIGINT para dinheiro (evita estouro);
  • Guarde identificadores, não nomes, nas relações (nomes mudam);
  • Limpe logs antigos periodicamente ou arquive-os.

Hospede seu servidor com a VittHost

Todos os planos MTASA-BR da VittHost incluem 1 banco MySQL para o seu roleplay. Servidores no Brasil, painel Pterodactyl, proteção DDoS, downloads acelerados por nginx dedicado e teste grátis de 3 dias.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS