Os plugins e os mods ampliam muitos jogos, mas costumam deixar de funcionar após uma atualização do jogo ou quando falta um ficheiro. As secções abaixo tratam mensagens típicas de CS2 com CounterStrikeSharp, Valheim com BepInEx, Conan Exiles, SCP: Secret Laboratory, Project Zomboid e The Forest, bem como erros gerais de plugins .NET. Cada secção mostra uma mensagem, explica-a e indica os passos seguintes.
Encontras a mensagem completa na Consola e nos ficheiros de registo do jogo em Ficheiros. Muitos erros são compostos por várias linhas. O stacktrace por baixo, a lista das partes do programa chamadas, indica muitas vezes o plugin afetado; uma exception é um erro de programa comunicado pelo .NET ou pelo Unity. Antes de substituíres plugins, mods ou ficheiros de configuração, cria uma cópia de segurança em Cópias de segurança.
O plugin de skins do CS2 não encontra o weapons.json
Este é o aspeto da mensagem:
System.InvalidOperationException: Missing required weapons definition file: <Plugin-Folder>/weapons.json
O que está por trás: os plugins de skins para CS2 precisam de uma lista de todas as armas e dos respetivos identificadores. Esta lista está no ficheiro obrigatório weapons.json, na pasta de dados do plugin. Se este ficheiro faltar, o plugin não consegue inicializar, ou seja, nem sequer arranca: a função de skins deixa de funcionar por completo. Isto acontece, por exemplo, quando no carregamento só foi transferido o ficheiro do programa do plugin e não o pacote completo.
Como resolver:
- Lê o caminho indicado na mensagem. Mostra em que pasta o plugin espera o ficheiro.
- Descarrega novamente o plugin na mesma versão e instala-o de novo por completo, com todas as pastas do pacote.
- Em alternativa, copia o
weapons.jsondo pacote da mesma versão do plugin para a pasta indicada, em Ficheiros. Não uses um ficheiro de outra versão. - Reinicia o servidor e verifica na Consola se o plugin carrega sem erros.
Bom saber: para mais detalhes sobre plugins de CS2: Plugins de CS2: MetaMod, CounterStrikeSharp e MatchZy.
WeaponPaints: o gamedata.json não é compatível com a atualização do CS2
Este é o aspeto da mensagem:
Method CAttributeList_SetOrAddAttributeValueByName not found in gamedata.json
O que está por trás: o WeaponPaints encontra determinadas funções no programa do CS2 através de assinaturas, ou seja, elementos de identificação que constam no ficheiro gamedata.json. Após uma atualização do CS2, uma destas assinaturas deixa de corresponder e o plugin não encontra a função. Nesse caso, não consegue arrancar. Isto não se deve às tuas definições, mas ao facto de o jogo e o plugin já não serem compatíveis.
Como resolver:
- Verifica se o CS2 recebeu uma atualização recentemente. É o motivo mais comum.
- Atualiza o CounterStrikeSharp e o WeaponPaints em conjunto para a versão mais recente e usa o
gamedata.jsonatual do WeaponPaints. - Se ainda não existir uma versão adaptada, remove temporariamente o WeaponPaints até o autor o atualizar.
- Reinicia o servidor e verifica se a mensagem desapareceu.
Bom saber: após grandes atualizações do CS2, por vezes demora algum tempo até os autores dos plugins publicarem versões adaptadas. Mais sobre atualizações do jogo: Atualizar o servidor de CS2: detetar build drift e reiniciar em segurança.
Conan Exiles: jogador rejeitado por lista de mods diferente
Este é o aspeto da mensagem:
[<Date>-<Time>][<No>]LogNet: PreLogin failure: <Mod A> (<Workshop ID>), <Mod B> (<Workshop ID>), <Mod C> (<Workshop ID>).
O que está por trás: um jogador tentou entrar e foi rejeitado porque os mods que tem ativos não correspondem exatamente à lista de mods do teu servidor. Importante: os mods indicados na linha são a lista pretendida do servidor, não os mods errados do jogador. Os mods que o jogador realmente tem ativos não constam no log. O Conan Exiles exige correspondência exata: um mod em falta bloqueia tanto como um mod a mais. O jogador não vê qualquer motivo: o jogo fica parado em «A tentar entrar no jogo». Parece um limite de tempo excedido, mas é uma rejeição imediata.
Como resolver:
- Compara a lista do log com os mods que o jogador ativou no launcher do Conan. A composição tem de ser igual, sem extras.
- Se o jogador desativar todos os mods que não constam na lista e ativar os que faltam, consegue voltar a ligar-se.
- Se quiseres permitir um mod adicional, instala-o no servidor em Mods e reinicia o servidor.
- Após cada alteração aos mods do servidor, todos os jogadores têm de acertar a sua lista de mods.
CounterStrikeSharp: erro num evento de plugin («Error invoking callback»)
Este é o aspeto da mensagem:
<Time> [EROR] (cssharp:…) Error invoking callback
O que está por trás: o CounterStrikeSharp é uma plataforma de plugins para CS2. Os plugins associam-se aí a eventos como «jogador liga-se» ou «ronda começa»; a função que é então chamada denomina-se callback. Num desses callbacks, um plugin provocou um erro, uma chamada exception. O servidor continua a funcionar, mas a função do plugin afetada falhou. Qual foi o plugin e porquê, consta no stacktrace abaixo, a lista das partes do programa que foram chamadas.
Como resolver:
- Lê o stacktrace completo por baixo da mensagem. O nome do plugin costuma aparecer aí como parte dos nomes das classes ou como nome de ficheiro.
- Atualiza esse plugin e o CounterStrikeSharp para versões compatíveis entre si. A página do plugin indica a versão do CounterStrikeSharp suportada.
- Reinicia o servidor por completo, não apenas o plugin.
- Se o erro continuar a ocorrer, remove o plugin e comunica o erro ao respetivo autor.
CS2-SimpleAdmin: a base de dados não é compatível com a versão do plugin
Este é o aspeto da mensagem:
A parameterless default constructor or one matching signature (…) is required for CS2_SimpleAdmin.<Class> materialization
O que está por trás: o CS2-SimpleAdmin guarda banimentos, silenciamentos e o histórico de IP numa base de dados MySQL. A mensagem indica que as colunas das tabelas não correspondem à versão que o plugin espera. É típico após uma atualização do plugin cuja migração da base de dados (a adaptação automática das tabelas) não foi executada, ou quando se continua a usar uma base de dados de uma instalação mais antiga. As funções de administração do plugin deixam então de funcionar de forma fiável, mas o servidor de CS2 em si continua a funcionar.
Como resolver:
- Faz uma cópia de segurança do conteúdo da base de dados antes de alterares algo, por exemplo através de uma exportação.
- Atualiza o CS2-SimpleAdmin para a versão mais recente e reinicia o servidor uma vez, para a migração ser executada.
- Se a mensagem persistir, compara as tabelas da tua base de dados com o esquema, ou seja, a estrutura das tabelas, da versão instalada do plugin.
- Se puderes dispensar os dados antigos de banimentos, cria uma base de dados nova em Bases de dados, introduz as respetivas credenciais na configuração do plugin e reinicia.
O WeaponPaints não arranca («TypeInitializationException»)
Este é o aspeto da mensagem:
TypeInitializationException: The type initializer for 'WeaponPaints.WeaponPaints' threw an exception.
---> <inner exception>: <Cause>
O que está por trás: no primeiro acesso, o WeaponPaints executa uma rotina de arranque estática (Type Initializer). Esta falhou, por isso o plugin não arranca. A mensagem em si é apenas o invólucro: a causa real é indicada pela exception interna logo a seguir, por exemplo uma configuração incorreta, um ficheiro de dados em falta ou uma dependência incompatível.
Como resolver:
- Lê a primeira exception interna abaixo desta mensagem, normalmente iniciada por
--->. - Atualiza o WeaponPaints e o CounterStrikeSharp em conjunto para versões compatíveis entre si.
- Depois, corrige apenas o que a exception interna indicar concretamente: o ficheiro de configuração, um ficheiro de dados em falta como o
weapons.jsonou a ligação à base de dados. As credenciais da tua base de dados encontras em Bases de dados. - Reinicia o servidor e verifica a Consola.
Plugin .NET: falta uma dependência („Could not load file or assembly“)
Este é o aspeto da mensagem:
System.IO.FileNotFoundException: Could not load file or assembly '<Name>, Version=<Version>, Culture=neutral, PublicKeyToken=<…>' or one of its dependencies. The system cannot find the file specified.
O que está por trás disto: Muitos jogos carregam plugins através de .NET, por exemplo o CS2 com CounterStrikeSharp, o Valheim com BepInEx ou o SCP: Secret Laboratory. Uma assembly é um ficheiro de programa .NET, normalmente uma .dll. A mensagem significa: um plugin precisa de uma determinada assembly que não está instalada, ou as versões das suas dependências não são compatíveis entre si. O plugin afetado não arranca ou arranca apenas parcialmente.
Como resolver:
- Lê o nome e a versão entre aspas. Essa é a dependência em falta.
- Verifica na página do plugin quais as dependências necessárias e em que versão. Muitas vezes vêm como ficheiros
.dlladicionais no pacote de transferência. - Instala a dependência na versão pedida em Ficheiros, na pasta indicada pela página do plugin.
- Reinicia o servidor e verifica se a mensagem desapareceu.
Componente .NET falha ao inicializar
Este é o aspeto da mensagem:
System.TypeInitializationException: The type initializer for '<Class>' threw an exception
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
O que está por trás disto: Um componente .NET, ou seja, um plugin, um mod ou uma parte do loader, falhou na sua rotina de arranque ou num callback. Um callback é uma função que é chamada quando ocorre um determinado evento. Estas mensagens são apenas um invólucro à volta do erro real: a exceção interna que vem imediatamente a seguir contém a causa. O componente afetado deixa de funcionar ou funciona de forma limitada.
Como resolver:
- Identifica qual é o componente afetado. O nome entre aspas ou as linhas do stacktrace indicam-no.
- Atualiza esse componente e o loader de mods ou plugins utilizado, por exemplo o BepInEx ou o CounterStrikeSharp.
- Reinicia o servidor e lê no registo a primeira exceção interna, normalmente iniciada por
--->. Nos jogos Unity, a exceção original aparece muitas vezes mesmo acima de uma linha comRethrow as. - Corrige o que essa exceção interna indica, por exemplo um ficheiro em falta ou uma definição incorreta.
O plugin .NET não consegue carregar as suas classes
Este é o aspeto da mensagem:
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.
System.Exception: Unable to find plugin in assembly
O que está por trás disto: O loader de plugins abriu o ficheiro do plugin, mas não conseguiu carregar as suas classes ou encontrar o seu ponto de entrada, isto é, o local onde inicia o plugin. Ou o ficheiro do plugin não é compatível com a versão instalada do loader ou do jogo, ou está o ficheiro errado na pasta de plugins, por exemplo uma simples biblioteca auxiliar em vez do próprio plugin. O plugin fica então inativo.
Como resolver:
- Atualiza o plugin e o loader em conjunto, para que ambos correspondam à versão atual do jogo.
- Verifica em Ficheiros se o ficheiro de plugin correto está na pasta indicada pela página do plugin.
- Apaga cópias mais antigas do mesmo plugin, para que seja carregada apenas uma versão.
- Reinicia o servidor e verifica a Consola.
Valheim: o mod não é compatível com a versão do jogo e fica sem efeito
Este é o aspeto da mensagem:
Rethrow as TypeInitializationException: The type initializer for '<Mod-Class>' threw an exception.
O que está por trás disto: O BepInEx, o loader de mods do Valheim, carregou o mod, mas este falhou logo ao inicializar. Tenta aceder a algo no jogo que não existe, ou já não existe, na versão do Valheim em execução. O servidor arranca na mesma normalmente e é totalmente jogável. O mod continua a aparecer como instalado, mas não faz nada, e no jogo não surge qualquer mensagem de erro a esse respeito. A causa mais frequente é uma atualização do Valheim: o servidor atualiza-se sozinho a cada arranque, mas o mod mantém-se na sua versão. O nome do mod aparece na linha acima.
Como resolver:
- Anota o nome do mod que aparece na linha acima da mensagem.
- Verifica em Mods se existe uma versão mais recente compatível com a versão atual do Valheim. Se sim, instala-a e reinicia o servidor.
- Se não existir uma versão compatível, desinstala o mod por agora. Caso contrário, ocupa apenas espaço e dá a impressão de estar ativo.
- Os mods que são importantes para o teu servidor só os voltas a ativar quando o respetivo autor os tiver atualizado para a nova versão do jogo.
Pormenores: Valheim 1.0: verificar com segurança a atualização do servidor, o mundo antigo e os mods
O mod do Valheim procura o campo removido „ZRoutedRpc.Everybody“
Este é o aspeto da mensagem:
MissingFieldException: Field not found: .ZRoutedRpc.Everybody
O que está por trás disto: ZRoutedRpc é a parte do Valheim através da qual o servidor e os jogadores trocam mensagens. Um mod BepInEx foi criado para outra versão do Valheim e espera aí o campo Everybody, que não existe na versão instalada. O mod não consegue executar a sua função neste ponto e não funciona, ou funciona apenas parcialmente.
Como resolver:
- Procura no stacktrace, a lista das partes do programa chamadas abaixo da mensagem, o primeiro mod. É esse o afetado.
- Atualiza-o em Mods para uma versão para a build atual do Valheim, ou seja, a versão do jogo em execução.
- Se ainda não existir nenhuma, desinstala o mod por agora e reinicia o servidor.
- Se o mod também for usado pelos teus colegas de jogo, todos devem utilizar a mesma versão.
Pormenores: Valheim 1.0: verificar com segurança a atualização do servidor, o mundo antigo e os mods
SCP: Secret Laboratory: não é possível carregar o plugin
Este é o aspeto da mensagem:
[LabApi] System.BadImageFormatException: <Plugin file details>
O que está por trás disto: O LabApi é a interface de plugins do SCP: Secret Laboratory. Não conseguiu carregar um ficheiro de plugin porque o seu formato não é compatível com a versão do servidor. É típico depois de uma atualização do jogo, quando um plugin ainda foi criado para a versão anterior, ou quando o ficheiro foi danificado durante o carregamento. O plugin afetado fica inativo e o servidor arranca sem ele.
Como resolver:
- Verifica se a mensagem indica o nome do ficheiro do plugin.
- Carrega novamente o plugin numa versão para a tua versão atual do SCP:SL e reinicia o servidor. A página do plugin indica as versões suportadas.
- Se não souberes qual é o plugin, remove em Ficheiros o último ficheiro adicionado à pasta de plugins e reinicia.
- Depois do carregamento, compara o tamanho do ficheiro com o original. Se for diferente, a transferência ficou incompleta.
Bom saber: encontras os fundamentos sobre o servidor em Configurar um servidor de SCP Secret Laboratory.
Project Zomboid: o mapa ou o mod usa uma propriedade de tile desconhecida
Este é o aspeto da mensagem:
IsoPropertyTypeNotFoundException: Property Name not found: <Property>
O que está por trás disto: Os mapas do Project Zomboid são compostos por tiles (mosaicos). Cada tile tem propriedades que definem, por exemplo, se algo é um contentor, uma porta ou um obstáculo. Um mapa ou mod está a usar aqui uma propriedade que a tua versão do Project Zomboid não conhece. Os objetos afetados podem faltar ou funcionar mal, mas o servidor normalmente continua a funcionar. Muitas vezes, o mapa ou o mod foi criado para outra versão do jogo, por exemplo depois da mudança para a Build 42.
Como resolver:
- Descobre qual é o mapa ou o mod afetado. Se a mensagem é nova, o último instalado ou atualizado é o primeiro suspeito.
- Atualiza o mapa ou o mod para uma versão compatível com a versão do Project Zomboid que tens instalada.
- Se o problema começou depois de uma atualização de um mod, repõe a versão compatível anterior desse mod.
- Se quiseres remover totalmente um mod de mapa, cria antes uma cópia de segurança em Cópias de segurança. Se faltar um mapa que o teu jogo guardado já utiliza, isso pode alterar o mundo.
Bom saber: Para a mudança para a Build 42, consulta Project Zomboid Build 42 no teu próprio servidor.
The Forest: "Bolt is already running" após um reinício
Este é o aspeto da mensagem:
BoltException: Bolt is already running, you must call BoltLauncher.Shutdown() before starting a new instance of Bolt.
at BoltCore.BeginStart (…)
O que está por trás disto: O The Forest usa a biblioteca de rede Bolt para o modo multijogador. A mensagem significa: o servidor quis iniciar uma segunda instância do Bolt, embora a primeira ainda esteja em execução. Isto pode acontecer após um soft restart com falhas, ou seja, um reinício dentro do programa em execução em vez de um verdadeiro reinício do processo. Assim, a nova sessão não consegue arrancar corretamente.
Como resolver:
- Pára o servidor no painel e espera até ficar completamente desligado.
- Depois, volta a iniciá-lo. Um processo novo inicia o Bolt apenas uma vez.
- Para reiniciar, não uses nenhuma função dentro do jogo nem recarregamentos com o servidor em execução, usa sempre o reinício através do painel.
- Para reinícios regulares, configura um reinício agendado em Tarefas.
Bom saber: Como fazê-lo está explicado em Agendar reinícios automáticos para o teu servidor.
The Forest não consegue ler os adaptadores de rede
Este é o aspeto da mensagem:
NetworkInformationException: File not found.
at CoopDedicatedServerStarter.getMachineIp ()
O que está por trás disto: Ao arrancar, o servidor dedicado do The Forest tenta determinar os seus adaptadores de rede e, com isso, o seu próprio endereço IP. A interface do sistema operativo que ele consulta para isso não está disponível no ambiente do servidor. Se o servidor estiver acessível mesmo assim, a mensagem não tem mais nenhum efeito.
Como resolver:
- Verifica se o servidor está acessível: aparece na lista de servidores e os jogadores conseguem entrar?
- Se sim, podes ignorar a mensagem.
- Se não, atualiza o servidor para a build atual, ou seja, a versão de servidor mais recente do jogo, e reinicia-o.
- Se continuar inacessível, abre um ticket e indica a hora da mensagem. O ambiente de arranque do servidor não o podes alterar tu próprio.
Bom saber: Encontras os conceitos básicos sobre o servidor em Configurar um servidor The Forest.
A mod comunica «CS0246: tipo ou espaço de nomes não encontrado»
Assim se apresenta a mensagem:
<File>.cs(<Line>,<Column>): error CS0246: The type or namespace name '<Type>' could not be found
O que está por trás: O compilador, que traduz o código-fonte C# em partes executáveis do programa, não encontra um tipo utilizado. O nome não pode ser resolvido nem no código-fonte existente nem através das bibliotecas incluídas. Por isso, não é possível carregar a mod afetada. No caso de ficheiros de mods fornecidos ou personalizados, o código-fonte e as bibliotecas têm de corresponder à versão do jogo.
Como resolver:
- Lê a mensagem de erro completa na Consola. Ela indica o ficheiro, a linha e o tipo em falta.
- Guarda as tuas alterações próprias em Ficheiros antes de substituíres ficheiros de mods.
- Instala uma versão da mod afetada que corresponda à versão do jogo, juntamente com as dependências necessárias. No caso de código-fonte próprio, verifica a grafia, o espaço de nomes e as referências às bibliotecas.
- Reinicia o servidor e verifica se o compilador comunica mais erros.
A tua mensagem não está aqui?
Lê a mensagem completa na Consola ou no ficheiro de registo do jogo, incluindo as linhas anteriores. Nos jogos .NET e Unity, a verdadeira causa está muitas vezes na exception interna. Os nomes das pastas e dos ficheiros no stacktrace revelam que plugin ou mod está envolvido. Antes de cada substituição, cria uma cópia de segurança em Cópias de segurança. Falhas e atualizações que não funcionam são tratadas em O servidor de jogo falha ou a atualização do Steam não funciona. Se não conseguires avançar, abre um ticket e indica a hora da mensagem.