O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Tutoriais

Como Configurar Sistema de Resets Customizado no Servidor de MU

Aprenda a configurar um sistema de resets personalizado no seu servidor MU Online com SQL, arquivos .ini e lógica de pontos customizada.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

Introdução

O sistema de resets é um dos pilares de qualquer servidor MU Online privado. Ele define o ritmo de progressão, o engajamento a longo prazo e o equilíbrio entre jogadores. Configurá-lo de forma genérica costuma resultar em servidores que ficam vazios em semanas.

Este tutorial cobre a configuração completa de um sistema de resets customizado para servidores rodando Season 6 Episode 3 com SQL Server 2008 ou superior. Os conceitos se aplicam com pequenos ajustes a outras seasons.


Pré-requisitos

  • Acesso ao SQL Server Management Studio (SSMS) com permissões de db_owner no banco MuOnline
  • Acesso ao diretório de instalação do GameServer (ex.: C:\MuServer\GameServer\)
  • Servidor parado ou em manutenção durante as alterações no banco

Passo 1 — Entender a estrutura padrão do reset no banco

A tabela principal que controla o reset é Character dentro do banco MuOnline. Os campos mais importantes são:

SELECT Name, cLevel, LevelUpPoint, cLevel_Reset, ResetCount
FROM MuOnline.dbo.Character
WHERE Name = 'NomeDoPersonagem'
  • cLevel — nível atual do personagem (1 a 400)
  • LevelUpPoint — pontos de atributo disponíveis
  • cLevel_Reset — contador de resets acumulados
  • ResetCount — campo alternativo usado em algumas builds; verifique qual sua versão utiliza
Nota: Em algumas builds de S6, o campo de reset fica na tabela AccountCharacter como ResetCount. Consulte a estrutura com sp_help AccountCharacter antes de prosseguir.

Passo 2 — Configurar o GameServerInfo.ini

Abra o arquivo GameServer/Data/GameServerInfo.ini e localize a seção de resets:

[ResetSystem]
; Ativar sistema de resets (0=desativado, 1=ativado)
ResetSystem=1

; Nível mínimo para realizar o reset
ResetMinLevel=400

; Nível após o reset (geralmente 1, alguns servidores usam 150)
ResetLevel=1

; Zen necessário para resetar (0 = gratuito)
ResetZen=0

; Pontos base concedidos por reset
ResetPoint=100

; Resetar os stats (STR/AGI/VIT/ENE/CMD) ao fazer reset?
ResetStats=1

; Acumular resets (1) ou limite máximo (0)
ResetAccumulate=1

; Limite máximo de resets (0 = sem limite)
MaxReset=100

Salve o arquivo após as alterações.

Dica: Use ResetLevel=150 em servidores com EXP muito alta para reduzir o tempo de re-nível e manter os jogadores engajados durante o processo.

Passo 3 — Criar a stored procedure de reset customizada

Se o servidor não possui uma stored procedure de reset, ou você quer customizá-la, execute o seguinte no SSMS conectado ao banco MuOnline:

USE MuOnline
GO

IF OBJECT_ID('dbo.sp_ResetCharacter', 'P') IS NOT NULL
    DROP PROCEDURE dbo.sp_ResetCharacter
GO

CREATE PROCEDURE dbo.sp_ResetCharacter
    @CharName NVARCHAR(10),
    @MinLevel INT = 400,
    @ResetLevel INT = 1,
    @PointsPerReset INT = 100
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @CurrentLevel INT
    DECLARE @CurrentReset INT
    DECLARE @BasePoints INT

    -- Buscar dados atuais do personagem
    SELECT @CurrentLevel = cLevel, @CurrentReset = cLevel_Reset
    FROM dbo.Character
    WHERE Name = @CharName

    -- Validar nível mínimo
    IF @CurrentLevel < @MinLevel
    BEGIN
        SELECT -1 AS Result, 'Nível insuficiente para reset.' AS Message
        RETURN
    END

    -- Calcular pontos de bônus acumulados (opcional: escala por reset)
    SET @BasePoints = @PointsPerReset + (@CurrentReset * 5)

    -- Executar o reset
    UPDATE dbo.Character
    SET
        cLevel       = @ResetLevel,
        LevelUpPoint = @BasePoints,
        Strength     = 20,
        Dexterity    = 20,
        Vitality     = 20,
        Energy       = 20,
        Leadership   = 0,
        cLevel_Reset = cLevel_Reset + 1,
        Experience   = 0,
        NextExperience = 100
    WHERE Name = @CharName

    SELECT 1 AS Result, 'Reset realizado com sucesso.' AS Message
END
GO
Atenção: Faça backup da tabela Character antes de executar qualquer UPDATE em massa: SELECT * INTO Character_Backup_20260703 FROM dbo.Character

Passo 4 — Criar tabela de bônus por faixa de resets

Para implementar escalonamento de pontos, crie a tabela auxiliar:

CREATE TABLE dbo.ResetBonusTable (
    MinReset    INT NOT NULL,
    MaxReset    INT NOT NULL,
    BonusPoints INT NOT NULL,
    CONSTRAINT PK_ResetBonus PRIMARY KEY (MinReset)
)

INSERT INTO dbo.ResetBonusTable VALUES (0,  9,   100)
INSERT INTO dbo.ResetBonusTable VALUES (10, 24,  120)
INSERT INTO dbo.ResetBonusTable VALUES (25, 49,  150)
INSERT INTO dbo.ResetBonusTable VALUES (50, 99,  200)
INSERT INTO dbo.ResetBonusTable VALUES (100, 999, 250)

Adapte a procedure para usar essa tabela:

-- Dentro da stored procedure, substitua o cálculo de @BasePoints por:
SELECT @BasePoints = BonusPoints
FROM dbo.ResetBonusTable
WHERE @CurrentReset >= MinReset AND @CurrentReset <= MaxReset

Passo 5 — Configurar cobrança de Wcoin (opcional)

Para cobrar WebCoin (Wcoin) no reset, adicione a validação antes do UPDATE principal:

DECLARE @WCoin INT

SELECT @WCoin = WCoinP
FROM dbo.AccountCharacter
WHERE GameIDC = (SELECT AccountID FROM dbo.Character WHERE Name = @CharName)

IF @WCoin < 500  -- custo em Wcoin
BEGIN
    SELECT -2 AS Result, 'Wcoin insuficiente.' AS Message
    RETURN
END

UPDATE dbo.AccountCharacter
SET WCoinP = WCoinP - 500
WHERE GameIDC = (SELECT AccountID FROM dbo.Character WHERE Name = @CharName)

Passo 6 — Verificar permissões do GameServer no banco

O processo do GameServer acessa o banco com uma conta específica. Garanta que ela tem permissão para executar a procedure:

-- Substitua 'mu_gameserver' pelo login real usado pelo GameServer
GRANT EXECUTE ON dbo.sp_ResetCharacter TO mu_gameserver
GRANT SELECT ON dbo.ResetBonusTable TO mu_gameserver
GRANT UPDATE ON dbo.AccountCharacter TO mu_gameserver

Passo 7 — Testar o reset manualmente

Com o servidor em modo de manutenção, execute uma chamada de teste:

EXEC dbo.sp_ResetCharacter
    @CharName      = 'TestChar',
    @MinLevel      = 400,
    @ResetLevel    = 1,
    @PointsPerReset = 100

-- Verificar resultado
SELECT Name, cLevel, LevelUpPoint, cLevel_Reset
FROM dbo.Character
WHERE Name = 'TestChar'

O campo cLevel deve ser 1, cLevel_Reset deve ter incrementado em 1, e LevelUpPoint deve refletir o valor calculado.


Solução de Problemas

Reset não funciona após salvar o .ini

Reinicie o GameServer completamente. Alterações no GameServerInfo.ini não são carregadas em tempo real — o arquivo é lido apenas na inicialização.

Pontos de reset não aparecem no personagem

Verifique se o campo correto é LevelUpPoint ou AddPoint na sua versão. Execute:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Character' AND COLUMN_NAME LIKE '%Point%'

Múltiplos resets simultâneos causando duplicação

Adicione um mecanismo de lock na procedure:

BEGIN TRANSACTION
-- todo o bloco de UPDATE aqui
COMMIT TRANSACTION
Dica: Registre cada reset em uma tabela de log: INSERT INTO ResetLog (CharName, ResetDate, ResetNumber) VALUES (@CharName, GETDATE(), @CurrentReset + 1). Isso facilita auditorias e suporte aos jogadores.

Conclusão

Com esses passos você tem um sistema de resets funcional, escalável e auditável. Ajuste os valores de PointsPerReset, os limites da ResetBonusTable e o custo em Zen/Wcoin de acordo com o equilíbrio desejado para o seu servidor. Teste sempre em ambiente de homologação antes de aplicar em produção.

Perguntas frequentes

Qual é o nível mínimo recomendado para permitir o reset?

Para Season 6, o padrão é nível 400 (Master Level 0). Muitos servidores usam 380 ou 350 dependendo das rates. Defina em GameServer/Data/GameServerInfo.ini no campo ResetMinLevel.

O reset está diminuindo os pontos de status mas não resetando o nível — o que fazer?

Verifique se a stored procedure sp_ResetCharacter existe no banco MuOnline e se o GameServer tem permissão de execução (EXECUTE) nela. Rode GRANT EXECUTE ON sp_ResetCharacter TO [conta_gameserver]; no SQL Server.

Como adicionar bônus de pontos por número de resets?

Use uma tabela auxiliar chamada ResetBonus com as colunas ResetCount e BonusPoints, depois adapte a stored procedure para fazer um SELECT nessa tabela com base no campo cLevel_Reset da tabela Character.

É possível cobrar Zen ou Wcoin no reset?

Sim. Na stored procedure, adicione um UPDATE na tabela AccountCharacter decrementando o campo WCoinP (ou na tabela Character o campo Money) antes de confirmar o reset. Inclua um IF para bloquear caso o saldo seja insuficiente.

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados