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