Black Friday: 50% OFF nas 3 primeiras mensalidades. Ver ofertas
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 Pelican, proteção DDoS, downloads acelerados por nginx dedicado e teste grátis de 3 dias.

Compartilhar:

Black Friday: 50% OFF nas 3 primeiras mensalidades

Em servidores de jogos e VPS no Brasil, até 30/11/2026. O botão de cada plano já leva o cupom ao carrinho.

Ver as ofertas