Skip to content

Troubleshooting

Kit Oliynyk edited this page Nov 2, 2026 · 3 revisions

TL;DR: When the server will not start or dies, read the last lines of the newest log first. Most boot failures are one of a few messages: a broken XML file, a duplicate help id, a Fenia database record without a type, or a port that is taken. This page maps each message to its cause and fix, lists warnings that look scary but let the boot continue (a vnum that no longer exists), and lists the inputs that are known to crash the server. Use when: the server exits during boot, hangs, crashes, or a plugin reload leaves the game half loaded. Source of truth: dreamland_code/src/core/objectfactory.cpp, dreamland_code/src/core/mobilefactory.cpp, dreamland_code/src/core/room.cpp, dreamland_code/src/xml/xmlparser.l++, dreamland_code/src/alloc/class.cpp, dreamland_code/src/core/helpmanager.cpp, dreamland_code/src/io/xmltableloader.cpp, dreamland_code/src/dreamland.cpp, dreamland_code/src/plugin/pluginmanager.cpp, dreamland_code/plug-ins/areas/load_xml.cpp, dreamland_code/plug-ins/loadsave/, dreamland_code/plug-ins/feniaroot/wrappermanager.cpp, dreamland_code/plug-ins/fight_core/weapongenerator.cpp, dreamland_code/configure.ac Verified: 2026-11-02 against dreamland_code 88da8302, dreamland_world 43880467

Paths below are relative to the runtime directory, see Local-Setup. Back up a file before you edit it.

First look

  1. Find the log. Without logPattern the log goes to standard output, with it to the file named by the pattern. See Local-Setup.
  2. Go to the end. The boot prints progress lines, so the last ones before an error tell you where it stopped:
Line Meaning
Loading <table>... A folder of dreamland_world is being read. <table> is the folder name
load [<name>] so A plugin was loaded
unload [<name>] so A plugin was unloaded, normal on reload, a warning sign during boot
Try <path>, <name> A player file is being read
Drops loading and Mobiles loaded Saved items and mobs are being restored
  1. Search the log for the first line that has an error. Later lines are often only fallout.

Boot failures

Log message Cause Fix
open tag != close tag A!=B:: : at line N A broken XML file in the folder named by the last Loading ... line Open that folder, find a file where tag A is closed by B near line N
Attempt to allocate a class with empty name! while loading Fenia A record without a type in the Fenia database Re-seed the database, see below
<name> not found for allocate! XML names a class that is not loaded, a typo or a missing plugin Fix the name, or load the plugin
Duplicate help ID N for <keywords> and <keywords> Two help articles use the same id, the plugin that loads helps throws Change one id
load_xml_area: <error> A zone file could not be read, the boot stops Fix the zone file named in the error
bind::port:N::listen:L::Address already in use Another process owns that port Stop it or change the port file. The server still runs without that port
Plugin reload aborted: <reason> A plugin threw while loading during plugin reload Fix the reason, see Local-Setup for reload rules

Warnings that do not stop the boot

A vnum that no longer exists is logged, then skipped. The server keeps booting, so do not hunt for it when the server dies for another reason. Clean these up when you have time.

Log message What happens Cleanup
load_OBJECT: invalid vnum N for player profile X The boot scan of player files skips that item for the limited-item count. The message names the player X. At login the item becomes a stub object Edit var/db/oldstyle/player/X.player. An item starts with a #O line, has a Vnum N line and ends with an End line. Cut the whole block, and the items nested in a container (they carry a higher Nest number). Keep a backup
get_obj_index: vnum N not found on world startup (also get_mob_index, get_room_index) The lookup returns nothing and the caller skips the record Grep the area files and var/db/saved for the vnum and remove or fix the reference
Load_resets: 'O': bad obj: N (and similar bad room, bad obj lines for M, P, G, E) That zone reset is dropped Fix the reset in the zone file
Fread_obj: bad vnum N in room R. A saved item is replaced by a stub object Not needed, the stub is harmless
load_room_mobiles: NULL room N! The saved-mobile file for a room that no longer exists is skipped Delete the file

The "not found" line is not written when the server option buildplot is on, which the stock template enables. Remove buildplot to see those lines.

Where the saved files live:

  • Saved items: var/db/saved/objects/<0-15>/<room vnum>. A file for a missing room is skipped, and the boot logs get_room_index: vnum N not found on world startup unless buildplot is on. The folder number is the room vnum modulo 16.
  • Saved mobiles: var/db/saved/mobiles/<0-15>/<room vnum>.

Broken XML

The message gives the tag names and a line, not the file name. The file is in the folder from the last Loading <table>... line. For example, Loading professions... followed by the error means a file in share/DL/professions. Open the files in that folder at the given line, or compare with a fresh checkout of dreamland_world:

git -C share/DL status
git -C share/DL diff

Fenia database with a typeless record

Symptom: the boot dies a few seconds in, while loading the Fenia plugin, with Attempt to allocate a class with empty name!. One object record in var/db/fenia has no type. A known cause is a persistent Fenia field that holds a value which cannot be saved. The object that ._() returns is one: its save routine reports failure, the record is written without a type (observed), and nothing complains until the next load. Do not keep the result of ._() in a field.

A local server can simply start over with a fresh database. This throws away every script you posted, all .tmp data and everything Fenia stored on characters and items. Stop the server, then, from the runtime directory, with SRC pointing to the dreamland_code checkout (adapted from configure.ac, not run for this page, db_load comes from the db-util package):

mv var/db/fenia var/db/fenia.broken
mkdir var/db/fenia
cat $SRC/admin/fenia/fenia.dump | (cd var/db/fenia && db_load fenia)
tar xvf $SRC/admin/fenia/nanny-mobs.tar

Then post your scripts again. See Fenia-Scripts.

Duplicate help id

Help ids must be unique across every help article in dreamland_world and in zone files, including the ones embedded in command, skill and zone files. The loader raises Duplicate help ID and the whole plugin fails. A coder can ask the game for a free id:

abc maxhelp

It prints the highest id in use and the next free one. Check it right before you commit, because another change may have taken the number.

Crash and hang vectors

These inputs are known to bring the server down or corrupt it. Avoid them.

Input What happens Status
Negative vnum passed to get_obj_index or get_mob_index Out-of-range read in the hash table, segfault Both functions return nothing for a negative vnum in current code. Older builds crash. In Fenia, reject a vnum that is null or not positive before the lookup
Self-closing <behavior type="X"/> on a mob in zone XML The empty node clears the behavior pointer, segfault on boot and on every reset Current code logs mob N: no behavior, using basic and carries on. Still, do not write an empty node, drop it
A class in fight/weapon_classes.json with no list in fight/weapon_names.json The weapon generator logs Weapon generator: no names defined for type X., then reads fields of an empty name config and throws. Every area reset that makes a random weapon of that class crashes Keep both files in step. When you edit one, compare the key sets
Two saved items or mobs with the same id Two live objects share one Fenia wrapper, a dangling pointer follows The loader gives the later copy a new id and logs fenia: duplicate object id N [vnum], given new id M. The file on disk keeps the old id until the next save
A Fenia loop without an exit The server stops answering, memory grows Give every loop an exit. Prefer a periodic trigger over a manual loop. Fenia has no while, see Fenia-Language
Reload after a core change The new plugins do not match the running core Restart instead. See Local-Setup

Reading a crash

A crash leaves a core file in the directory the server was started from, if the shell allows it. Allow it before you start the server, then read the stack:

ulimit -c unlimited
./bin/dreamland etc/dreamland.xml
gdb bin/dreamland core
bt

The build is a debug build by default (-g -Og), so the trace has function names and lines. Look at the first frames inside the dreamland code. A trace that ends in WeaponGenerator::setShortDescr and Json::Value::asCString is the weapon config mismatch above.

Slow pulses

The log line pulse overflow N msec means a pulse took N milliseconds longer than its 250 ms budget (at the stock four pulses per second). An occasional line during a big save or a plugin reload is normal. A steady stream means something is too slow, and game time then runs slower than the clock. See Engine-Time-and-Pulses.

Cannot log in

  • Wrong codepage. on a backdoor port: the first word must be a number from 1 to 7. See Local-Setup.
  • Wrong name. or Wrong password.: the character file is missing or the password differs. The two default characters are described on the same page.
  • Front door is closed, please use backdoor. on port 9000: the character-creation script from the Fenia database did not answer. The database may be empty or the script failed to load. Use a backdoor port, or re-seed the database.
  • Another character on your account is already online. Quit it first.: a second character of the same account is in the game.

See also

Clone this wiki locally