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:
- No Object Explorer do SSMS, expanda a pasta SQL Server Agent.
- Clique com o botão direito em Jobs e escolha New Job....
- Em General, defina o nome:
MuOnline - Premiacao Online (1 por IP). - Vá até a aba Steps, clique em New...:
- Step name:
Executar Premiacao. - Database: Selecione
MuOnline. - Command: Cole o script SQL acima.
- Step name:
- Vá até a aba Schedules, clique em New...:
- Name:
A cada 1 Hora. - Occurs:
Daily. - Recurs every:
1 hour(s)(ou30 minutes, conforme seu planejamento).
- Name:
- 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.