Servidores de Jogos

Estruturando tabelas para um servidor de roleplay

Estruturando tabelas para um servidor de roleplay

Um servidor de roleplay guarda muitas informações relacionadas: quem é dono de qual casa, quais veículos pertencem a quem, quem está em qual facção. Um banco bem modelado evita dados duplicados e facilita novos sistemas.

Contas x personagens

Muitos servidores RP permitem vários personagens por conta. Separe:

CREATE TABLE contas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  usuario VARCHAR(24) NOT NULL UNIQUE,
  senha_hash VARCHAR(255) NOT NULL,
  admin TINYINT NOT NULL DEFAULT 0,
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE personagens (
  id INT AUTO_INCREMENT PRIMARY KEY,
  conta_id INT NOT NULL,
  nome VARCHAR(24) NOT NULL UNIQUE,
  dinheiro INT NOT NULL DEFAULT 0,
  banco INT NOT NULL DEFAULT 0,
  skin SMALLINT NOT NULL DEFAULT 0,
  pos_x FLOAT, pos_y FLOAT, pos_z FLOAT,
  faccao_id INT NULL,
  FOREIGN KEY (conta_id) REFERENCES contas(id)
);

Propriedades

CREATE TABLE casas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  dono_id INT NULL,
  preco INT NOT NULL,
  entrada_x FLOAT, entrada_y FLOAT, entrada_z FLOAT,
  interior_id INT NOT NULL,
  trancada TINYINT NOT NULL DEFAULT 1,
  INDEX (dono_id)
);

CREATE TABLE veiculos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  dono_id INT NULL,
  modelo SMALLINT NOT NULL,
  cor1 TINYINT, cor2 TINYINT,
  pos_x FLOAT, pos_y FLOAT, pos_z FLOAT, angulo FLOAT,
  placa VARCHAR(16),
  INDEX (dono_id)
);

dono_id NULL significa "sem dono, à venda".

Facções

CREATE TABLE faccoes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(48) NOT NULL,
  tipo TINYINT NOT NULL -- polícia, gangue, empresa...
);

CREATE TABLE faccao_membros (
  personagem_id INT PRIMARY KEY,
  faccao_id INT NOT NULL,
  cargo TINYINT NOT NULL DEFAULT 0
);

Inventário

CREATE TABLE inventario (
  id INT AUTO_INCREMENT PRIMARY KEY,
  personagem_id INT NOT NULL,
  item_id SMALLINT NOT NULL,
  quantidade INT NOT NULL,
  INDEX (personagem_id)
);

Uma linha por item é mais flexível que 20 colunas item1, item2...

Logs

CREATE TABLE logs_transacoes (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  de_id INT, para_id INT,
  valor INT,
  tipo VARCHAR(32),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX (de_id), INDEX (para_id)
);

Logs de dinheiro, itens e ações de admin são essenciais para investigar dupes e abusos.

Boas práticas

  • IDs numéricos como chave, nunca o nome (nomes mudam);
  • Índices nas colunas de busca;
  • InnoDB e utf8mb4;
  • Tipos adequados (não use VARCHAR para números);
  • Scripts de criação e alteração (migrations) versionados no Git.

Hospede seu servidor com a VittHost

Os planos OPENMP-BR da VittHost incluem de 1 a 5 bancos MySQL, conforme o plano. Servidores no Brasil, painel Pterodactyl, proteção DDoS, compatibilidade total com scripts SA-MP 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