Warehouse Explicada: Guia Completo da Tabela de Baú do MU Online
Entenda como funciona a tabela warehouse do MU Online, como o baú é vinculado à conta, para que servem os campos de itens e dinheiro, por que o conteúdo costuma ser binário e como evitar baús corrompidos, cheios ou incompatíveis.
A tabela warehouse é utilizada em muitas databases de MU Online para armazenar os dados do baú da conta.
Diferente da tabela Character, que normalmente possui um registro para cada personagem, o warehouse costuma estar associado diretamente ao login da conta.
Nessa tabela podem existir campos relacionados ao login, Zen armazenado, conteúdo dos slots do baú, versão da estrutura e outros valores utilizados pela source.
Neste guia do Aprendiz MU Online, você vai entender como a warehouse funciona, por que os itens não devem ser editados como texto comum e quais erros podem gerar baús cheios, vazios ou corrompidos.
O que é a tabela warehouse?
A tabela warehouse normalmente armazena informações relacionadas ao baú compartilhado da conta.
Em uma estrutura simplificada:
MEMB_INFO
|
| memb___id
v
Conta
|
+--------> Character
|
+--------> warehouse
|
+-- Items
+-- Money
+-- outros campos
Como o warehouse é ligado à conta?
Em várias estruturas, a tabela possui um campo semelhante a:
AccountID
ou outra coluna equivalente ao login da conta.
Exemplo conceitual:
AccountID Money
--------- --------
allan 5000000
Esse registro corresponde ao baú da conta
allan.
Como ver a estrutura da tabela warehouse
No SQL Server Management Studio:
Databases
|
+-- MuOnline
|
+-- Tables
|
+-- dbo.warehouse
|
+-- Columns
Outra opção:
sp_help 'warehouse';
Esse comando mostra:
- nome dos campos;
- tipo SQL;
- tamanho;
- NULL ou NOT NULL;
- índices;
- restrições.
Campos comuns da tabela warehouse
A estrutura depende da versão, mas podem existir campos como:
| Campo | Uso comum |
|---|---|
| AccountID | Conta proprietária do baú. |
| Items | Conteúdo binário dos itens do warehouse. |
| Money | Zen armazenado no baú. |
| EndUseDate | Campo existente em algumas estruturas. |
| DbVersion | Controle de versão da estrutura em determinadas sources. |
| pw | Senha do baú em algumas implementações. |
O que é o campo Items?
O campo Items normalmente armazena o conteúdo
dos slots do baú.
Entretanto, ele não armazena os itens em texto legível como:
Sword
Shield
Jewel of Bless
Em muitas versões, os itens são codificados em uma sequência binária.
Cada bloco representa informações como:
- tipo do item;
- nível;
- durabilidade;
- opções;
- serial;
- excellent;
- ancient;
- harmony;
- outros recursos conforme a Season.
Por que o warehouse usa dados binários?
Um inventário contém muitos slots e cada item possui várias propriedades.
Para armazenar tudo de forma compacta, muitas versões do MU Online utilizam blocos de bytes.
Conceitualmente:
Slot 1
[bytes do item]
Slot 2
[bytes do item]
Slot 3
[bytes do item]
...
Slot vazio
[sequência representando slot sem item]
O tamanho de cada item e o tamanho total do warehouse variam conforme a versão.
Tamanho do campo Items
Não existe um único tamanho válido para todas as versões.
Sources diferentes podem trabalhar com quantidades distintas de slots, tamanho de item e recursos adicionais.
Por isso, antes de migrar dados entre databases, confira:
sp_help 'warehouse';
e compare o tamanho da coluna Items
em ambas as structures.
Money no warehouse
O campo Money normalmente representa o Zen
armazenado dentro do baú.
Exemplo:
SELECT
AccountID,
Money
FROM warehouse
WHERE AccountID = 'usuario';
Alterar Zen do baú
UPDATE warehouse
SET Money = 10000000
WHERE AccountID = 'usuario';
O que é DbVersion?
Algumas databases possuem uma coluna chamada
DbVersion.
Ela pode ser utilizada pela implementação para identificar a versão da estrutura de armazenamento.
Não altere esse valor apenas porque outro servidor utiliza um número diferente.
Senha do warehouse
Algumas implementações possuem um campo destinado a senha ou bloqueio do baú.
A lógica e o nome do campo variam entre as sources.
Antes de criar uma função de site para trocar senha do warehouse, confirme:
- qual campo é utilizado;
- qual formato é esperado;
- se existe procedure;
- se o GameServer mantém algum estado em memória.
Como funciona um warehouse novo?
Quando uma conta nova recebe um warehouse, o campo de itens normalmente precisa ser inicializado com a estrutura considerada vazia pela source.
Isso não significa necessariamente:
NULL
e também não significa necessariamente:
0x00
Algumas versões utilizam um padrão específico para representar slots vazios.
Baú novo aparece cheio de itens ou "criss"
Esse erro costuma aparecer quando o conteúdo inicial do campo
Items não corresponde ao padrão esperado
pela source.
O problema pode ocorrer quando:
- o site cria warehouse com valor incorreto;
- a coluna possui default incompatível;
- o tamanho do campo é diferente;
- database e GameServer são de versões distintas;
- um script de cadastro foi copiado de outra source.
Como diagnosticar
Compare uma conta cujo warehouse funciona com uma conta nova problemática.
Primeiro consulte:
SELECT
AccountID,
DATALENGTH(Items) AS TamanhoItems,
Money,
DbVersion
FROM warehouse
WHERE AccountID IN ('conta_ok', 'conta_erro');
Ajuste a query caso sua tabela não possua DbVersion.
Compare:
- tamanho do campo;
- valor inicial;
- DbVersion;
- campos obrigatórios.
Como verificar se a conta possui warehouse
SELECT *
FROM warehouse
WHERE AccountID = 'usuario';
Se nenhuma linha for retornada, a conta pode ainda não possuir registro de baú, dependendo da lógica utilizada pela source.
Listar warehouses
SELECT TOP 100
AccountID,
Money
FROM warehouse
ORDER BY AccountID;
Ver tamanho do campo Items
SELECT
AccountID,
DATALENGTH(Items) AS TamanhoBytes
FROM warehouse
WHERE AccountID = 'usuario';
Essa consulta é muito útil durante migrações.
Consultar Zen do baú
SELECT
AccountID,
Money
FROM warehouse
WHERE AccountID = 'usuario';
Como editar warehouse com segurança
Antes de realizar qualquer alteração:
- faça backup da database;
- desconecte a conta;
- execute um SELECT;
- confirme o registro correto;
- altere somente campos conhecidos;
- confira o resultado antes de abrir o jogo.
Posso limpar o warehouse pelo SQL?
Tecnicamente é possível, mas você precisa conhecer a sequência correta que representa um warehouse vazio naquela source.
Não use:
UPDATE warehouse
SET Items = NULL
sem antes confirmar que a source aceita esse formato.
Também não preencha a coluna com zeros arbitrariamente.
Como criar warehouse para uma nova conta?
Isso depende da estrutura original da database.
Algumas sources criam o registro automaticamente no primeiro acesso ao baú.
Outras dependem de:
- procedure de cadastro;
- trigger;
- site;
- DataServer;
- script SQL específico.
O melhor caminho é descobrir como o pacote original cria o registro.
Invalid Column Name na warehouse
Exemplo:
Invalid column name 'DbVersion'
Isso significa que algum sistema está tentando consultar uma coluna que não existe na sua tabela.
Verifique:
- source usada;
- database correta;
- scripts SQL;
- site ou painel incompatível.
String or Binary Data Would Be Truncated
Esse erro é especialmente importante em warehouses.
Ele pode ocorrer quando uma aplicação tenta gravar um bloco
binário maior do que a coluna Items suporta.
Exemplo:
GameServer envia:
3840 bytes
Coluna suporta:
1920 bytes
Nesse caso, a database e a source não estão alinhadas.
Baú fica vazio depois de relogar
Se os itens aparecem e depois desaparecem, investigue:
- erro ao salvar warehouse;
- tamanho incorreto da coluna Items;
- DataServer incompatível;
- conta online durante edição;
- query ou procedure sobrescrevendo dados;
- GameServer salvando formato diferente.
Baú não abre
Possíveis causas:
- registro warehouse ausente;
- Items corrompido;
- DbVersion incorreto;
- DataServer com erro;
- estrutura incompatível;
- erro de comunicação com a database.
Itens aparecem corrompidos
Esse comportamento costuma indicar incompatibilidade na forma como os bytes são interpretados.
Pode ocorrer quando:
- warehouse veio de outra Season;
- tamanho do item mudou;
- source adicionou novos bytes;
- serial ou opções são lidos em posições diferentes;
- migration truncou os dados.
Warehouse e compatibilidade entre sources
Esta é uma das áreas mais sensíveis durante migrações.
Duas tabelas podem ter o mesmo nome:
warehouse
mas serem incompatíveis.
Compare:
- tipo da coluna Items;
- tamanho;
- DbVersion;
- campos extras;
- formato utilizado pelo GameServer;
- formato esperado pelo DataServer.
Warehouse e DataServer
Em muitas arquiteturas, operações de carregamento e salvamento do baú passam pelo DataServer.
Se o warehouse não funciona, também confira:
- DataServer conectado;
- database correta;
- stored procedures;
- queries de warehouse;
- compatibilidade entre DataServer e GameServer.
Warehouse e website
Sistemas de web warehouse, webshop ou editor de itens precisam conhecer exatamente o formato binário usado pela source.
Um sistema criado para Season 6 não deve ser presumido compatível com 97D, 99z ou outra versão.
Checklist da tabela warehouse
| Verificação | Resultado esperado |
|---|---|
| warehouse | Tabela existente. |
| AccountID | Conta corretamente vinculada. |
| Items | Tamanho compatível com a source. |
| Money | Tipo numérico compatível. |
| DbVersion | Valor esperado quando utilizado. |
| Conta nova | Baú inicializado corretamente. |
| DataServer | Carrega e salva o baú sem erros. |
| GameServer | Formato de item compatível. |
| Website | Não altera bytes incompatíveis. |
| Backup | Disponível antes de mudanças. |
Perguntas frequentes
O que é warehouse no MU Online?
É a tabela utilizada por muitas databases para armazenar informações relacionadas ao baú das contas.
Onde ficam os itens do baú?
Em muitas structures, eles ficam em uma coluna como
Items, armazenados em formato binário.
Onde fica o Zen do baú?
Normalmente em um campo como Money.
Posso editar os itens diretamente no SQL?
Não é recomendado sem conhecer exatamente o formato binário dos itens da sua source.
Por que uma conta nova aparece com o baú cheio?
Normalmente porque o valor inicial de Items está incorreto ou a estrutura da database não corresponde ao formato esperado pelo GameServer.
Posso colocar Items como NULL para limpar o baú?
Somente se sua source realmente utilizar NULL como representação válida de warehouse vazio. Muitas não utilizam.
Por que aparece String or Binary Data Would Be Truncated?
Uma causa possível é o bloco binário enviado ser maior que o tamanho suportado pela coluna Items.
Posso copiar warehouse de outra database?
Apenas depois de confirmar compatibilidade do formato, tamanho dos itens e estrutura entre as duas sources.
Conclusão
A tabela warehouse é uma das estruturas mais delicadas da database MuOnline porque o conteúdo dos itens normalmente é armazenado em formato binário.
Entender campos como AccountID, Items, Money e DbVersion ajuda a diagnosticar problemas como baú que não abre, itens que desaparecem, contas novas com warehouse cheio e erros de truncamento no SQL Server.
O principal cuidado é nunca assumir que o formato da warehouse é igual entre diferentes sources. O tamanho e a codificação dos itens podem variar entre versões e projetos.
Antes de qualquer edição, faça backup, mantenha a conta offline e compare sempre com uma warehouse válida criada pela própria source.