Plugins en mods breiden veel games uit, maar gaan graag stuk na een game-update of als er een bestand ontbreekt. De onderstaande secties behandelen typische meldingen uit CS2 met CounterStrikeSharp, Valheim met BepInEx, Conan Exiles, SCP: Secret Laboratory, Project Zomboid en The Forest, en algemene fouten van .NET-plugins. Elke sectie toont een melding, legt die uit en noemt de volgende stappen.

De volledige melding vind je in de Console en in de logbestanden van de game onder Bestanden. Veel fouten bestaan uit meerdere regels. De stacktrace eronder, de lijst met aangeroepen programmaonderdelen, noemt vaak de betrokken plugin; een exception is een programmafout die .NET of Unity meldt. Maak onder Back-ups een back-up voordat je plugins, mods of configuratiebestanden vervangt.

CS2-skinsplugin vindt weapons.json niet

Zo ziet de melding eruit:

System.InvalidOperationException: Missing required weapons definition file: <Plugin-Folder>/weapons.json

Wat erachter zit: Skinsplugins voor CS2 hebben een lijst nodig met alle wapens en hun identificaties. Die staat in het verplichte bestand weapons.json in de gegevensmap van de plugin. Ontbreekt dit bestand, dan kan de plugin niet initialiseren en dus helemaal niet starten: de skinfunctie valt volledig uit. Dat gebeurt bijvoorbeeld als je bij het uploaden alleen het programmabestand van de plugin hebt overgezet en niet het hele pakket.

Zo los je het op:

  1. Lees het pad in de melding. Het laat zien in welke map de plugin het bestand verwacht.
  2. Download de plugin opnieuw in dezelfde versie en installeer hem volledig opnieuw, met alle mappen uit het pakket.
  3. Je kunt ook weapons.json uit het pakket van dezelfde pluginversie kopiëren naar de genoemde map onder Bestanden. Gebruik geen bestand uit een andere versie.
  4. Start de server opnieuw op en controleer in de Console of de plugin zonder fouten laadt.

Goed om te weten: Uitgebreide informatie over CS2-plugins vind je hier: CS2-plugins: MetaMod, CounterStrikeSharp en MatchZy.

WeaponPaints: gamedata.json past niet bij de CS2-update

Zo ziet de melding eruit:

Method CAttributeList_SetOrAddAttributeValueByName not found in gamedata.json

Wat erachter zit: WeaponPaints vindt bepaalde functies in het CS2-programma via signaturen, dus herkenningspunten die in het bestand gamedata.json staan. Na een CS2-update klopt een van deze signaturen niet meer en vindt de plugin de functie niet. Dan kan de plugin niet starten. Dat ligt niet aan jouw instellingen, maar aan het feit dat game en plugin niet meer bij elkaar passen.

Zo los je het op:

  1. Controleer of CS2 onlangs een update heeft gekregen. Dat is de gebruikelijke oorzaak.
  2. Werk CounterStrikeSharp en WeaponPaints samen bij naar de nieuwste versie en neem daarbij de actuele gamedata.json van WeaponPaints over.
  3. Is er nog geen aangepaste versie, haal WeaponPaints dan tijdelijk weg totdat de auteur een update heeft uitgebracht.
  4. Start de server opnieuw op en controleer of de melding is verdwenen.

Goed om te weten: Na grote CS2-updates duurt het soms even voordat pluginauteurs aangepaste versies uitbrengen. Meer over game-updates: CS2-server updaten: build-drift herkennen en veilig herstarten.

Conan Exiles: speler geweigerd wegens afwijkende modlijst

Zo ziet de melding eruit:

[<Date>-<Time>][<No>]LogNet: PreLogin failure: <Mod A> (<Workshop ID>), <Mod B> (<Workshop ID>), <Mod C> (<Workshop ID>).

Wat erachter zit: Een speler wilde meedoen en is geweigerd, omdat zijn actieve mods niet exact overeenkomen met de modlijst van jouw server. Belangrijk: de mods in de regel zijn de gewenste lijst van de server, niet de verkeerde mods van de speler. Welke mods de speler echt actief heeft, staat niet in het log. Conan Exiles eist een exacte overeenkomst: een ontbrekende mod blokkeert net zo goed als een extra mod. De speler ziet geen reden: zijn game blijft hangen bij "Spielbeitritt wird versucht". Dat lijkt op een time-out, maar is een directe weigering.

Zo los je het op:

  1. Vergelijk de lijst uit het log met de mods die de speler in de Conan-launcher heeft geactiveerd. De samenstelling moet gelijk zijn, zonder extra's.
  2. Als de speler elke mod die niet in de lijst staat uitschakelt en de ontbrekende activeert, kan hij weer verbinding maken.
  3. Moet een extra mod zijn toegestaan, installeer die dan op de server onder Mods en start de server opnieuw op.
  4. Na elke wijziging aan de servermods moeten alle spelers hun modlijst aanpassen.

CounterStrikeSharp: fout in een pluginevent ("Error invoking callback")

Zo ziet de melding eruit:

<Time> [EROR] (cssharp:…) Error invoking callback

Wat erachter zit: CounterStrikeSharp is een pluginplatform voor CS2. Plugins haken daar in op gebeurtenissen zoals "speler verbindt" of "ronde begint"; de functie die dan wordt aangeroepen heet callback. In zo'n callback heeft een plugin een fout veroorzaakt, een zogenoemde exception. De server draait gewoon door, maar de betreffende pluginfunctie is mislukt. Welke plugin het was en waarom, staat in de stacktrace eronder, de lijst van aangeroepen programmaonderdelen.

Zo los je het op:

  1. Lees de volledige stacktrace onder de melding. De naam van de plugin staat daar meestal als onderdeel van de klassenamen of als bestandsnaam.
  2. Werk deze plugin en CounterStrikeSharp bij naar versies die bij elkaar passen. De pluginpagina vermeldt de ondersteunde CounterStrikeSharp-versie.
  3. Start de server volledig opnieuw op, niet alleen de plugin.
  4. Treedt de fout daarna nog steeds op, verwijder de plugin dan en meld de fout bij de auteur.

CS2-SimpleAdmin: database past niet bij de pluginversie

Zo ziet de melding eruit:

A parameterless default constructor or one matching signature (…) is required for CS2_SimpleAdmin.<Class> materialization

Wat erachter zit: CS2-SimpleAdmin slaat bans, mutes en de IP-geschiedenis op in een MySQL-database. De melding betekent dat de tabelkolommen niet passen bij de versie die de plugin verwacht. Dat komt typisch voor na een pluginupdate waarvan de databasemigratie (de automatische aanpassing van de tabellen) niet is uitgevoerd, of wanneer een database uit een oudere installatie wordt hergebruikt. De beheerfuncties van de plugin werken dan niet betrouwbaar, de CS2-server zelf draait gewoon door.

Zo los je het op:

  1. Maak een back-up van de inhoud van de database voordat je iets wijzigt, bijvoorbeeld via een export.
  2. Werk CS2-SimpleAdmin bij naar de nieuwste versie en start de server één keer opnieuw op, zodat de migratie wordt uitgevoerd.
  3. Blijft de melding, vergelijk dan de tabellen van je database met het schema, dus de tabelopbouw, van de geïnstalleerde pluginversie.
  4. Kun je de oude bangegevens missen, maak dan onder Databases een nieuwe database aan, voer de toegangsgegevens ervan in de configuratie van de plugin in en start opnieuw op.

WeaponPaints start niet ("TypeInitializationException")

Zo ziet de melding eruit:

TypeInitializationException: The type initializer for 'WeaponPaints.WeaponPaints' threw an exception.
 ---> <inner exception>: <Cause>

Wat erachter zit: Bij de eerste toegang voert WeaponPaints een statische startroutine uit (type initializer). Die is mislukt, daarom start de plugin niet. De melding zelf is slechts de buitenkant: de eigenlijke oorzaak noemt de innerlijke exception direct daarna, bijvoorbeeld een foutieve configuratie, een ontbrekend gegevensbestand of een afhankelijkheid die niet past.

Zo los je het op:

  1. Lees de eerste innerlijke exception onder deze melding, meestal ingeleid met --->.
  2. Werk WeaponPaints en CounterStrikeSharp samen bij naar versies die bij elkaar passen.
  3. Corrigeer daarna alleen wat de innerlijke exception concreet noemt: het configuratiebestand, een ontbrekend gegevensbestand zoals weapons.json of de verbinding met de database. De toegangsgegevens van je database vind je onder Databases.
  4. Start de server opnieuw op en controleer de Console.

.NET-plugin: afhankelijkheid ontbreekt („Could not load file or assembly“)

Zo ziet de melding eruit:

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.

Wat er speelt: Veel games laden plugins via .NET, bijvoorbeeld CS2 met CounterStrikeSharp, Valheim met BepInEx of SCP: Secret Laboratory. Een assembly is een .NET-programmabestand, meestal een .dll. De melding betekent: een plugin heeft een bepaalde assembly nodig die niet is geïnstalleerd, of de versies van zijn afhankelijkheden passen niet bij elkaar. De betreffende plugin start dan niet of maar gedeeltelijk.

Zo los je het op:

  1. Lees de naam en de versie tussen de aanhalingstekens. Dat is de ontbrekende afhankelijkheid.
  2. Controleer op de pluginpagina welke afhankelijkheden in welke versie nodig zijn. Vaak zitten ze als extra .dll-bestanden in het downloadpakket.
  3. Installeer de afhankelijkheid in de vereiste versie onder Bestanden in de map die de pluginpagina aangeeft.
  4. Start de server opnieuw op en controleer of de melding is verdwenen.

.NET-component faalt bij het initialiseren

Zo ziet de melding eruit:

System.TypeInitializationException: The type initializer for '<Class>' threw an exception
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

Wat er speelt: Een .NET-component, dus een plugin, een mod of een onderdeel van de loader, is mislukt in zijn startroutine of in een callback. Een callback is een functie die bij een bepaalde gebeurtenis wordt aangeroepen. Deze meldingen zijn slechts omhulsels rond de eigenlijke fout: de direct daaropvolgende innerlijke exception bevat de oorzaak. De betreffende component werkt daarna niet of maar beperkt.

Zo los je het op:

  1. Stel vast welke component het betreft. De naam tussen de aanhalingstekens of de regels in de stacktrace noemen hem.
  2. Werk deze component en de gebruikte mod- of pluginloader bij, bijvoorbeeld BepInEx of CounterStrikeSharp.
  3. Start de server opnieuw op en lees in het log de eerste innerlijke exception, meestal ingeleid met --->. Bij Unity-games staat de oorspronkelijke exception vaak direct boven een regel met Rethrow as.
  4. Los op wat deze innerlijke exception noemt, bijvoorbeeld een ontbrekend bestand of een onjuiste instelling.

.NET-plugin kan zijn klassen niet laden

Zo ziet de melding eruit:

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.
System.Exception: Unable to find plugin in assembly

Wat er speelt: De pluginloader heeft het pluginbestand geopend, maar kon de klassen ervan niet laden of het startpunt niet vinden, dus de plek waar hij de plugin start. Ofwel het pluginbestand past niet bij de geïnstalleerde loader- of spelversie, ofwel er staat een verkeerd bestand in de pluginmap, bijvoorbeeld een kale hulpbibliotheek in plaats van de plugin zelf. De plugin blijft dan inactief.

Zo los je het op:

  1. Werk plugin en loader samen bij, zodat beide bij de actuele spelversie passen.
  2. Controleer onder Bestanden of het juiste pluginbestand in de map staat die de pluginpagina aangeeft.
  3. Verwijder oudere kopieën van dezelfde plugin, zodat er maar één versie wordt geladen.
  4. Start de server opnieuw op en controleer de Console.

Valheim: mod past niet bij de spelversie en blijft zonder effect

Zo ziet de melding eruit:

Rethrow as TypeInitializationException: The type initializer for '<Mod-Class>' threw an exception.

Wat er speelt: BepInEx, de modloader voor Valheim, heeft de mod geladen, maar die is bij het initialiseren meteen gecrasht. De mod benadert iets in de game dat in de draaiende Valheim-versie niet of niet meer bestaat. De server start toch normaal op en is volledig speelbaar. De mod blijft als geïnstalleerd verschijnen, maar doet niets, en in de game verschijnt hierover geen foutmelding. De vaakst voorkomende oorzaak is een Valheim-update: de server werkt zichzelf bij elke start bij, terwijl de mod op zijn oude stand blijft. De naam van de mod staat in de regel erboven.

Zo los je het op:

  1. Onthoud de modnaam uit de regel boven de melding.
  2. Controleer onder Mods of er een nieuwere versie is die bij de actuele Valheim-versie past. Zo ja, installeer die en start de server opnieuw op.
  3. Is er geen passende versie, verwijder de mod dan voorlopig. Anders neemt hij alleen ruimte in en wekt hij de indruk actief te zijn.
  4. Mods die belangrijk zijn voor je server activeer je pas weer als de auteur ze heeft aangepast aan de nieuwe spelversie.

Uitgebreid: Valheim 1.0: serverupdate, oude wereld en mods veilig controleren

Valheim-mod zoekt het verwijderde veld „ZRoutedRpc.Everybody“

Zo ziet de melding eruit:

MissingFieldException: Field not found: .ZRoutedRpc.Everybody

Wat er speelt: ZRoutedRpc is het deel van Valheim waarmee server en spelers berichten uitwisselen. Een BepInEx-mod is gebouwd voor een andere Valheim-versie en verwacht daar het veld Everybody, dat in de geïnstalleerde versie niet bestaat. De mod kan zijn functie op die plek niet uitvoeren en werkt niet of maar gedeeltelijk.

Zo los je het op:

  1. Zoek in de stacktrace, de lijst met aangeroepen programmaonderdelen onder de melding, de eerste mod. Die is het probleem.
  2. Werk hem onder Mods bij naar een versie voor de actuele Valheim-build, dus de draaiende spelversie.
  3. Bestaat die nog niet, verwijder de mod dan voorlopig en start de server opnieuw op.
  4. Gebruiken je medespelers de mod ook, dan moeten ze allemaal dezelfde versie gebruiken.

Uitgebreid: Valheim 1.0: serverupdate, oude wereld en mods veilig controleren

SCP: Secret Laboratory: plugin kan niet worden geladen

Zo ziet de melding eruit:

[LabApi] System.BadImageFormatException: <Plugin file details>

Wat erachter zit: LabApi is de pluginkoppeling van SCP: Secret Laboratory. Het kon een pluginbestand niet laden, omdat het formaat niet past bij de serverversie. Dat gebeurt meestal na een game-update, als een plugin nog voor de vorige versie is gebouwd, of als het bestand tijdens het uploaden is beschadigd. De betreffende plugin blijft inactief, de server start zonder die plugin.

Zo los je het op:

  1. Controleer of de melding de naam van het pluginbestand noemt.
  2. Upload de plugin opnieuw in een versie voor je huidige SCP:SL-versie en start de server opnieuw op. De pluginpagina vermeldt de ondersteunde versies.
  3. Weet je niet welke plugin het is, verwijder dan onder Bestanden het laatst toegevoegde bestand uit de pluginmap en start opnieuw op.
  4. Vergelijk na het uploaden de bestandsgrootte met het origineel. Wijkt die af, dan was de overdracht onvolledig.

Goed om te weten: Basisinformatie over de server vind je onder SCP Secret Laboratory-server instellen.

Project Zomboid: map of mod gebruikt een onbekende tile-eigenschap

Zo ziet de melding eruit:

IsoPropertyTypeNotFoundException: Property Name not found: <Property>

Wat erachter zit: Kaarten in Project Zomboid bestaan uit tegels (tiles). Elke tegel heeft eigenschappen die bijvoorbeeld bepalen of iets een container, een deur of een obstakel is. Een map of mod gebruikt hier een eigenschap die jouw Project Zomboid-versie niet kent. Betreffende objecten kunnen ontbreken of verkeerd werken, de server blijft meestal gewoon draaien. Vaak is de map of mod gemaakt voor een andere spelversie, bijvoorbeeld na de overstap naar Build 42.

Zo los je het op:

  1. Zoek uit welke map of mod het betreft. Is de melding nieuw, dan is de laatst geïnstalleerde of bijgewerkte het eerste vermoeden.
  2. Werk de map of mod bij naar een versie die past bij jouw geïnstalleerde Project Zomboid-versie.
  3. Begon het na een modupdate, zet dan de vorige compatibele versie van de mod terug.
  4. Wil je een map-mod helemaal verwijderen, maak dan eerst onder Back-ups een back-up aan. Ontbreekt een kaart die jouw wereld al gebruikt, dan kan dat de wereld veranderen.

Goed om te weten: Voor de overstap naar Build 42 is er Project Zomboid Build 42 op je eigen server.

The Forest: "Bolt is already running" na een herstart

Zo ziet de melding eruit:

BoltException: Bolt is already running, you must call BoltLauncher.Shutdown() before starting a new instance of Bolt.
  at BoltCore.BeginStart (…)

Wat erachter zit: The Forest gebruikt voor multiplayer de netwerkbibliotheek Bolt. De melding betekent: de server wilde een tweede Bolt-instantie starten terwijl de eerste nog draait. Dat kan gebeuren na een mislukte soft restart, dus een herstart binnen het draaiende programma in plaats van een echte herstart van het proces. De nieuwe sessie kan zo niet netjes starten.

Zo los je het op:

  1. Stop de server in het paneel en wacht tot hij volledig uit is.
  2. Start hem daarna weer. Een vers proces start Bolt maar één keer.
  3. Gebruik om te herstarten geen functie in het spel en geen herladen tijdens het draaien, maar altijd de herstart via het paneel.
  4. Voor regelmatige herstarts stel je onder Taken een geplande herstart in.

Goed om te weten: Hoe dat werkt, lees je in Automatische herstarts voor je server plannen.

The Forest kan de netwerkadapters niet uitlezen

Zo ziet de melding eruit:

NetworkInformationException: File not found.
  at CoopDedicatedServerStarter.getMachineIp ()

Wat erachter zit: Bij het opstarten probeert de dedicated server van The Forest zijn netwerkadapters en daarmee zijn eigen IP-adres te achterhalen. De interface van het besturingssysteem die hij daarvoor raadpleegt, is in de serveromgeving niet beschikbaar. Is de server toch bereikbaar, dan heeft de melding verder geen effect.

Zo los je het op:

  1. Controleer of de server bereikbaar is: verschijnt hij in de serverlijst en kunnen spelers meedoen?
  2. Zo ja, dan kun je de melding negeren.
  3. Zo nee, breng de server dan naar de actuele build, dus de nieuwste serverversie van het spel, en start hem opnieuw.
  4. Blijft hij onbereikbaar, open dan een ticket en vermeld het tijdstip van de melding. De opstartomgeving van de server kun je zelf niet wijzigen.

Goed om te weten: Basisinformatie over de server vind je in Een The Forest-server instellen.

Mod meldt „CS0246: Type of namespace niet gevonden“

Zo ziet de melding eruit:

<File>.cs(<Line>,<Column>): error CS0246: The type or namespace name '<Type>' could not be found

Wat erachter zit: De compiler, die C#-broncode vertaalt naar uitvoerbare programmaonderdelen, kan een gebruikt type niet vinden. De naam kan noch in de aanwezige broncode noch via de ingebonden bibliotheken worden herleid. Daardoor kan de betreffende mod niet worden geladen. Bij meegeleverde of aangepaste modbestanden moeten broncode en bibliotheken bij de spelversie passen.

Zo los je het op:

  1. Lees de volledige foutmelding in de Console. Hierin staan het bestand, de regel en het ontbrekende type.
  2. Maak een back-up van je eigen wijzigingen onder Bestanden voordat je modbestanden vervangt.
  3. Installeer een versie van de betreffende mod die bij de spelversie past, inclusief de benodigde afhankelijkheden. Controleer bij eigen broncode de schrijfwijze, de namespace en de bibliotheekverwijzingen.
  4. Start de server opnieuw op en controleer of de compiler nog andere fouten meldt.

Staat je melding er niet bij?

Lees de hele melding in de Console of in het logbestand van de game, ook de regels ervoor. Bij .NET- en Unity-games zit de eigenlijke oorzaak vaak in de innerlijke exception. Welke plugin of mod erbij betrokken is, zie je aan de map- en bestandsnamen in de stacktrace. Maak vóór elke vervanging onder Back-ups een back-up. Crashes en mislukte updates behandelt Gameserver crasht of Steam-update mislukt. Kom je er niet uit, open dan een ticket en vermeld het tijdstip van de melding.