v4 Atualização da v4 disponível — framework refeito do zero. Ver novidades

Docs
Voltar ao blog
SQL Server

19 de August de 2026

Como Premiar Jogadores Online no SQL Server com Trava Anti-Farm (1 Conta por IP)

Aprenda a criar uma rotina no SQL Server Agent que entrega moedas ou pontos periodicamente para jogadores conectados, filtrando apenas 1 conta por endereço IP para evitar abusos com contas fakes.

Atenção: Este script é um modelo configurável. Ajuste os nomes das colunas da sua tabela de moedas (ex: Cash, WCoin, Gold) e da tabela de conexões de acordo com os padrões da sua versão do GameServer.

Como Premiar Jogadores Online no SQL Server com Trava Anti-Farm (1 Conta por IP)

Recompensar jogadores pelo tempo que passam conectados é uma das melhores estratégias para manter o servidor sempre movimentado. No entanto, sem uma trava de segurança, muitos usuários abrem múltiplas instâncias do jogo no mesmo computador apenas para acumular moedas em contas secundárias.

Neste tutorial, você aprenderá a criar uma rotina no SQL Server Agent que identifica as contas conectadas, aplica um filtro exclusivo por endereço IP (garantindo que cada rede receba apenas uma bonificação) e credita as moedas na conta do jogador.


1. Entendendo a Lógica da Trava por IP

O GameServer registra as contas conectadas na tabela MEMB_STAT, armazenando o login (memb___id), o status de conexão (ConnectStat = 1) e o endereço de rede (IP).

Para garantir que apenas uma conta por IP seja premiada a cada rodada, usamos a função de paginação analítica ROW_NUMBER() OVER (PARTITION BY IP ORDER BY ConnectTM ASC). Ela numera as contas conectadas sob o mesmo IP e nós filtramos apenas a primeira conectada (RowNum = 1), ignorando as demais máquinas virtuais ou instâncias extras abertas no mesmo local.


2. Script SQL de Premiação com Filtro Anti-Farm

Abra o SQL Server Management Studio (SSMS), conecte-se ao seu banco de dados MuOnline e execute o script abaixo:

USE [MuOnline];
GO

-- =========================================================================
-- ROTINA: PREMIAÇÃO DE PLAYERS ONLINE (1 CONTA POR IP)
-- =========================================================================

-- 1. Defina a quantidade de moedas entregues por execução
DECLARE @ValorPremio INT = 10; -- Quantidade de créditos/moedas

-- 2. Tabela temporária para armazenar as contas qualificadas
IF OBJECT_ID('tempdb..#ContasPremiadas') IS NOT NULL
    DROP TABLE #ContasPremiadas;

CREATE TABLE #ContasPremiadas (
    memb___id VARCHAR(10) PRIMARY KEY
);

-- 3. Seleciona apenas 1 conta única por endereço de IP
WITH ConexoesAtivas AS (
    SELECT 
        memb___id,
        IP,
        ROW_NUMBER() OVER(PARTITION BY IP ORDER BY ConnectTM ASC) AS RowNum
    FROM MEMB_STAT WITH (NOLOCK)
    WHERE ConnectStat = 1
      AND IP IS NOT NULL
      AND IP <> ''
)
INSERT INTO #ContasPremiadas (memb___id)
SELECT memb___id
FROM ConexoesAtivas
WHERE RowNum = 1;

-- 4. Credita o prêmio na tabela de contas (ajuste o nome da coluna de moeda)
UPDATE M
SET M.Cash = ISNULL(M.Cash, 0) + @ValorPremio
FROM MEMB_INFO M
INNER JOIN #ContasPremiadas C ON M.memb___id = C.memb___id;

-- 5. Limpa a tabela temporária da memória
DROP TABLE #ContasPremiadas;
GO

3. Como Agendar no SQL Server Agent

Para que a bonificação ocorra de hora em hora (ou no intervalo que preferir), configure o agendamento no SQL Server Agent:

  1. No Object Explorer do SSMS, expanda a pasta SQL Server Agent.
  2. Clique com o botão direito em Jobs e escolha New Job....
  3. Em General, defina o nome: MuOnline - Premiacao Online (1 por IP).
  4. Vá até a aba Steps, clique em New...:
    • Step name: Executar Premiacao.
    • Database: Selecione MuOnline.
    • Command: Cole o script SQL acima.
  5. Vá até a aba Schedules, clique em New...:
    • Name: A cada 1 Hora.
    • Occurs: Daily.
    • Recurs every: 1 hour(s) (ou 30 minutes, conforme seu planejamento).
  6. Clique em OK para salvar e ativar a rotina.

4. Benefícios Deste Método

  • Economia Equilibrada: Evita a inflação gerada por jogadores que deixam 10 clientes abertos ao mesmo tempo em máquinas virtuais.
  • Execução Leve: Utiliza tabelas temporárias e leitura sem bloqueio (NOLOCK), garantindo que o banco de dados não sofra lentidão enquanto os jogadores estão jogando.
  • 100% Automático: Não depende de softwares externos abertos na VPS; roda diretamente no motor do banco de dados.

Pronto para colocar o servidor no ar?

Licença Master a partir de R$ 24,99/mês.

Ver planos

Presente exclusivo

7 dias grátis

Crie sua conta agora e ganhe acesso completo por 7 dias.

Ao criar sua conta, você concorda com nossos Termos e Políticas.