Como Implementar Loja In-Game Avançada no Servidor de MU Online
Aprenda a configurar uma loja in-game completa no seu servidor de MU Online S6, com NPCs, tabelas SQL e integração de sistemas de moeda.
O que é a Loja In-Game e por que ela importa
No contexto de servidores privados de MU Online Season 6, a loja in-game é um NPC customizado que permite que jogadores troquem moedas internas — Zen, Créditos, Ruud, WCoin ou qualquer moeda personalizada — por itens, buffs temporários, consumíveis e serviços. Ela não é uma funcionalidade nativa do cliente MU S6, mas pode ser implementada através da edição de tabelas SQL, configuração de NPCs e integração com o GameServer.
Uma loja bem configurada melhora a retenção de jogadores, equilibra a economia do servidor e reduz a dependência de drops aleatórios nos primeiros níveis. Mal configurada, ela destrói a progressão e esvazia os mapas de farm.
Pré-requisitos Técnicos
Antes de iniciar a configuração da loja, certifique-se de que você possui:
- Servidor MU Online S6 funcional (GameServer, ConnectServer, DataServer ativos)
- Acesso ao SQL Server com o banco de dados
MuOnlineconfigurado - Editor de texto (Notepad++ recomendado) e acesso às pastas do servidor
- Conhecimento básico de SQL e das tabelas
T_Item,T_ShopItem,T_Money - Cliente compatível com Season 6 Episode 3 configurado localmente
O MU Online S6 possui 6 classes jogáveis com árvores de evolução distintas:
Dark Knight → Blade Knight → Blade Master
Dark Wizard → Soul Master → Grand Master
Fairy Elf → Muse Elf → High Elf
Magic Gladiator → Duel Master (sem 1ª/2ª quest, sem Wing L1)
Dark Lord → Lord Emperor (stat exclusiva: CMD)
Summoner → Bloody Summoner → Dimension Master
Cada classe possui restrições de equipamento. A loja in-game precisa respeitar essas restrições para evitar conflitos de cliente.
Estrutura SQL da Loja
A loja in-game opera principalmente sobre a tabela T_ShopItem (ou equivalente no seu pacote de servidor). A estrutura básica é:
-- Exemplo de estrutura de tabela de loja customizada
CREATE TABLE [dbo].[CustomShop] (
[ShopID] INT NOT NULL,
[ItemCategory] INT NOT NULL, -- 0=Armas, 1=Armaduras, 2=Joias, 3=Consumiveis
[ItemIndex] SMALLINT NOT NULL,
[ItemLevel] TINYINT DEFAULT 0,
[ItemOption] TINYINT DEFAULT 0, -- Luck, Skill, etc.
[ItemExc] TINYINT DEFAULT 0,
[PriceZen] BIGINT DEFAULT 0,
[PriceCredit] INT DEFAULT 0,
[RequireClass] TINYINT DEFAULT 0, -- Bitmask de classe
[RequireLevel] SMALLINT DEFAULT 0,
[StockLimit] INT DEFAULT -1, -- -1 = ilimitado
[Active] BIT DEFAULT 1,
CONSTRAINT [PK_CustomShop] PRIMARY KEY ([ShopID])
);
Para popular a loja com itens iniciais voltados para novos jogadores:
-- Adicionar conjunto de itens iniciais para Dark Knight (RequireClass bitmask = 1)
INSERT INTO [dbo].[CustomShop]
(ShopID, ItemCategory, ItemIndex, ItemLevel, PriceZen, PriceCredit, RequireClass, RequireLevel)
VALUES
(1, 0, 0, 4, 500000, 0, 1, 150), -- Espada Bronzina +4, DK, nível 150
(2, 1, 5, 3, 300000, 0, 1, 100), -- Armadura Escarlate +3, DK, nível 100
(3, 2, 14, 0, 50000, 0, 0, 1), -- Jóia da Bênção, qualquer classe
(4, 2, 15, 0, 50000, 0, 0, 1), -- Jóia da Alma, qualquer classe
(5, 3, 0, 0, 10000, 0, 0, 1); -- Poção de Vida Grande, qualquer classe
Configuração do NPC de Loja
No MU Online S6, NPCs são definidos nos arquivos de configuração do servidor, tipicamente em Data\MonsterSetBase.txt (ou equivalente). O NPC de loja precisa de uma entrada específica:
// Formato: MapaID, NPC_ID, PosX, PosY, Dir, Respawn, Quest
// Lorencia = Mapa 0 — posição próxima ao centro (130, 135)
0 237 130 135 3 0 0
O NPC de índice 237 é comumente o Wandering Merchant ou um NPC customizado mapeado para a rotina de loja. Verifique no seu pacote de servidor qual índice está livre e configure o arquivo de texto correspondente no cliente para exibir o nome correto.
Para servidores que utilizam WebEngine ou sistemas similares, a configuração do NPC pode ser feita via painel administrativo web, sem edição manual de arquivos. Nesse caso, o formulário de criação de NPC já expõe os campos ShopID, MapID, PosX e PosY.
Integração com Sistemas de Moeda
A maioria dos pacotes S6 suporta múltiplas moedas simultâneas. A loja avançada deve aceitar pelo menos:
Zen — moeda base do MU. Gerada por drops de monstros em todos os mapas, de Lorencia ao Acheron. Alta disponibilidade no early-game, mas infla conforme o servidor envelhece.
Créditos / WCoin — moeda secundária, geralmente distribuída por tempo online, eventos automáticos como Blood Castle e Devil Square, ou recompensas de quests administrativas. Nunca associe créditos a pagamentos reais neste contexto educacional.
Ruud — presente em algumas versões do S6 e em seasons posteriores. Se o seu pacote suporta, configure a tabela T_Ruud e referencie o campo PriceRuud na loja.
-- Procedure para processar compra com validação de saldo
CREATE PROCEDURE [dbo].[usp_ShopPurchase]
@AccountID NVARCHAR(10),
@CharName NVARCHAR(10),
@ShopID INT
AS
BEGIN
DECLARE @Price BIGINT
DECLARE @ZenAtual BIGINT
SELECT @Price = PriceZen FROM CustomShop WHERE ShopID = @ShopID AND Active = 1
SELECT @ZenAtual = Money FROM Character WHERE Name = @CharName
IF @ZenAtual >= @Price
BEGIN
UPDATE Character SET Money = Money - @Price WHERE Name = @CharName
-- Lógica de entrega do item via GameServer packet ou tabela de pendências
INSERT INTO PendingItems (CharName, ShopID, RequestTime)
VALUES (@CharName, @ShopID, GETDATE())
END
ELSE
RAISERROR('Zen insuficiente.', 16, 1)
END
PendingItems) em vez de entregar itens diretamente via SQL. O GameServer lê essa tabela no login do personagem e entrega os itens de forma segura, evitando erros de duplicação ou perda de item em caso de desconexão durante a transação.Balanceamento de Preços por Fase de Progressão
Uma loja desequilibrada é mais danosa que nenhuma loja. Use esta referência de faixas de nível do S6 como guia:
- Nível 1–150: Itens de baixo nível, sem opções, preços em Zen acessível. Objetivo: facilitar o early-game sem eliminar o farm de Lorencia, Noria e Devias.
- Nível 151–300: Consumíveis, Joias de Bênção e Alma, pergaminhos. Preços moderados. O farm em Dungeon (3 andares), Lost Tower (7 andares) e Atlans (3 andares) ainda deve ser mais eficiente para itens de equipamento.
- Nível 301–400: Sets de segundo tier, opções básicas. Créditos como moeda preferencial. O farm em Tarkan, Icarus, Aida e Karutan deve continuar relevante.
- Nível 400+: Apenas consumíveis e suporte. Itens de end-game como sets excelentes devem vir exclusivamente de drops em Raklion, Vulcanus, Acheron, Land of Trials e da mecânica de Chaos Castle / Kanturu / Kalima (mapas 1 a 7).
Logs e Auditoria
Toda transação de loja deve ser registrada. Implemente uma tabela de log:
CREATE TABLE [dbo].[ShopLog] (
[LogID] BIGINT IDENTITY(1,1) PRIMARY KEY,
[LogDate] DATETIME DEFAULT GETDATE(),
[AccountID] NVARCHAR(10),
[CharName] NVARCHAR(10),
[ShopID] INT,
[ItemCategory] INT,
[ItemIndex] SMALLINT,
[PricePaid] BIGINT,
[Currency] NVARCHAR(10) -- 'ZEN', 'CREDIT', 'RUUD'
);
Com o log ativo, o Game Master pode identificar abusos, duplicações e comportamentos anômalos. Use a procedure de compra para inserir nessa tabela a cada transação bem-sucedida.
Erros Comuns e Como Evitar
Item entregue com atributos errados: Verifique os campos ItemLevel, ItemOption e ItemExc na tabela. Um item com ItemExc = 63 tem todas as opções excelentes ativas — isso pode quebrar o balanceamento.
NPC sumindo após reinício: Certifique-se de que a entrada no MonsterSetBase.txt usa respawn desabilitado (Respawn = 0) para NPCs fixos. Alguns pacotes resetam NPCs dinâmicos ao reiniciar o GameServer.
Compra duplicada: Sempre use transações SQL (BEGIN TRAN / COMMIT / ROLLBACK) na procedure de compra. Sem controle transacional, duas requisições simultâneas podem debitar o Zen duas vezes ou entregar o item duas vezes.
Magic Gladiator sem acesso a itens: O MG não passa pela 1ª e 2ª quest e começa como Duel Master. Configure o RequireClass corretamente — o MG normalmente usa bitmask diferente do DK e DW puros. Consulte a documentação do seu pacote para os valores corretos.
Perguntas frequentes
Posso vender Wings de Nível 3 na loja in-game?
Tecnicamente é possível registrar o item na tabela, mas não é recomendado. As Wings L3 (Asa do Dragão, Asa da Alma, etc.) exigem o processo de criação com Loch's Feather — que só cai de Balgass quando o evento Crywolf FALHA — mais o Jóia da Criação, o que torna o item parte central da economia de progressão. Vendê-la desequilibra todo o mid e end-game.
O Magic Gladiator pode comprar itens de qualquer classe na loja?
O MG começa na terceira classe diretamente (Duel Master) e usa equipamentos de DK e DW. A loja deve filtrar por classe via a coluna de requisito — itens com RequireClass = 2 (DK) ou RequireClass = 8 (DW) podem ser tornados acessíveis ao MG conforme a configuração do servidor.
Como evitar que jogadores abusem da loja para farmar Zen infinito?
Configure preços de venda (SellPrice) muito baixos ou zero nos itens de loja. Desative a opção de revenda ao NPC padrão para itens comprados na loja customizada, usando uma flag de origem no item ou verificando via GameServer.exe a origem da transação.
O Dark Lord precisa de pontos em CMD para usar montura. A loja vende monturas?
O Dark Lord usa a stat exclusiva Comando (CMD) para invocar e fortalecer o Cavalo Escuro e o Águia Espírito. A loja pode oferecer Pergaminhos de Invocação ou itens relacionados, mas a montaria em si é vinculada ao personagem via quest — a loja não substitui o processo de conquista.