MapServerInfo.xml

Tells each GameServer which maps it is authoritative for in a deployment where multiple GameServer processes split the world. Used by global-broadcast and cross-server transfer code paths.

File Location#

Data/MapServerInfo.xml

Loaded once at GameServer startup. Changes require a restart.

Schema#

<MapServerInfo>
    <Server Code="..." Group="..." Init="..." Ip="..." Port="..." />
    <ServerMapping ServerCode="..." NotMoveOption="..."
                   NextMap="..." NextServerCode="..." />
</MapServerInfo>

<Server> entries register each GameServer instance. <ServerMapping> entries are optional per-map overrides that adjust routing for a specific map on a specific server. Most installations only need <Server> rows.

Server Attributes#

AttributeTypeRangeDefaultEffect
Codeint0-N(required)GameServer ServerCode (matches Common.dat ServerCode and ConnectServer ServerList.xml <Server Code>)
Groupint0 to 19(required)Map-server group this instance belongs to. Servers in the same group are treated as siblings for cross-server routing and global broadcasts. Up to 20 groups, up to 20 entries per group
Init-1, 0, or 1(required)Initial ownership mode for every map on this server before any <ServerMapping> override: 1 = this server owns all maps (standard single-GS setup), 0 = all maps default to "random sibling" routing, -1 = all maps default to "destination only" (no map is owned here unless explicitly mapped in). Any other value aborts load
IpstringIPv4(required)IP of that GameServer. The loader strips a single leading S if present (S127.0.0.1 resolves to 127.0.0.1); bare IPv4 works too
Portint1-65535(required)TCP port of that GameServer

ServerMapping Attributes#

Use <ServerMapping> rows when you need one server in a group to hand off specific maps to another server in the same group (for example, instanced events hosted on a dedicated process).

AttributeTypeEffect
ServerCodeintThe <Server> row whose map routing this entry modifies. Must already be registered above
NotMoveOption0 or 10 = route the listed map to NextServerCode, 1 = claim the listed map as locally owned on ServerCode (regardless of Init)
NextMapintMap index (must be a valid in-range map number)
NextServerCodeintDestination GameServer Code. Ignored when NotMoveOption="1". Use -1 to let the server pick a random sibling that owns the map; -2 to use the first sibling found

Single vs Multi Server#

On a single-GameServer installation, ship one <Server> entry with Init="1". That server owns every map. Most installations run this way.

On a multi-GameServer installation, add one <Server> row per process. Group IDs let you cluster servers that should share cross-server routing and global notices. All servers still share the same DataServer and JoinServer regardless of grouping.

Relationship to ConnectServer#

ConnectServer's ServerList.xml controls what the client sees on the server selection screen. MapServerInfo.xml controls how GameServer instances find each other for global operations. They are independent:

  • A GameServer can be listed here and hidden in ServerList.xml (rare; used for internal-only maps)
  • A GameServer listed in ServerList.xml must also appear here if it participates in global broadcasts

Examples#

MapServerInfo.xml
<?xml version="1.0"?>
<MapServerInfo>
    <Server Code="0" Group="0" Init="1" Ip="S127.0.0.1" Port="55901" />
</MapServerInfo>

One GameServer, one group, runs everything.

Cross-File Dependencies#

AttributeRelated in
CodeMust match Common.dat ServerCode on that GameServer, and the <Server Code> in ConnectServer's ServerList.xml
Ip + PortMust be reachable from every other GameServer in the same group for cross-server messaging. Client-facing routing is independent and lives in ServerList.xml and ConnectServer.ini
GroupUsed by global notice + post commands (see Command.dat)
NextMap / per-map overridesThe map indices listed here must exist in MapManager.xml

Common Issues#

  • Global notice from /gmpost reaches only one server - the other server is in a different Group, or is missing from this file
  • "No Space to Save SvrInfo" error at startup - more than 20 <Server> entries in a single group. Split across groups (up to 20 groups allowed)
  • Startup fails with "No IpAddress" - the Ip attribute is empty
  • Startup fails with "iInitSetting Value" - Init must be -1, 0, or 1. Any other value rejects the file
  • Startup fails with "This GameServerCode doesn't Exist" - no <Server> row matches this process's own ServerCode
  • Servers do not see each other despite correct IPs - firewall blocking the inter-server port, or Ip contains a leading character other than S (the loader strips only S)

Last updated April 21, 2026