<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.minegoboom.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doc+flabby</id>
		<title>ASSS Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.minegoboom.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doc+flabby"/>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php/Special:Contributions/Doc_flabby"/>
		<updated>2026-05-05T17:04:20Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=MERVBot_Tutorial&amp;diff=6049</id>
		<title>MERVBot Tutorial</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=MERVBot_Tutorial&amp;diff=6049"/>
				<updated>2009-08-03T09:38:37Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: fixed tutorial link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is based on the ever-popular MERVBot Tutorial by Underlord. It has since been updated to reflect new changes with MervBot. To see examples of how to use this instruction, see [[MERVBot Example Code]].&lt;br /&gt;
&lt;br /&gt;
This tutorial also assumes that you have a basic knowledge of C++. If you don't, check out cplusplus.com's great [http://www.cplusplus.com/doc documentation].&lt;br /&gt;
&lt;br /&gt;
==Setting up a MERVBot (plugin)==&lt;br /&gt;
&lt;br /&gt;
[http://mervbot.com MERVBot download site]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Obtaining MERVBot===&lt;br /&gt;
&lt;br /&gt;
* Download the [http://mervbot.com/files/MERVBot.rar latest build].&lt;br /&gt;
* Unrar MERVBot.rar into a new folder. (example c:\program files\continuum\mervbot)&lt;br /&gt;
* Unzip src.zip into &amp;amp;quot;src&amp;amp;quot; subfolder of that new folder (example c:\program files\continuum\mervbot\src)&lt;br /&gt;
&lt;br /&gt;
===Preparing to write a plugin===&lt;br /&gt;
&lt;br /&gt;
''Note:'' if you only want to execute someone's premade plugin (.dll), skip to [[MERVBot Tutorial#Run your bot dll|step 4]], otherwise continue to learn how to make your own bot&lt;br /&gt;
&lt;br /&gt;
Download [http://www.mervbot.com/files/Tutorial.rar DLL-plugin Tutorial] and unzip Tutorial.zip (containing spawn.h, spawn.cpp, and command.cpp) into a &amp;amp;quot;tutorial&amp;amp;quot; subfolder of that new folder. (example c:\program files\continuum\mervbot\src\tutorial).&lt;br /&gt;
&lt;br /&gt;
''File descriptions:''&lt;br /&gt;
* spawn.h = declare/initialize globals&lt;br /&gt;
* command.cpp = code for commands coming into bot (ie /!help, /!play, etc)&lt;br /&gt;
* spawn.cpp = code that interacts with bot spawns&lt;br /&gt;
&lt;br /&gt;
===Microsoft Visual c++===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start Visual Studios 6.0.&lt;br /&gt;
&amp;lt;li&amp;gt;Click the Drop Down Menu labeled &amp;amp;quot;File&amp;amp;quot; at the top left of your screen.&lt;br /&gt;
&amp;lt;li&amp;gt;Click &amp;amp;quot;New&amp;amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt;On the next screen that comes up, choose from the Project tab, then Win32 Dynamic-Link Library&lt;br /&gt;
&amp;lt;li&amp;gt;Select the &amp;amp;quot;/src&amp;amp;quot; folder as the base folder (example c:\program files\continuum\mervbot\src)&lt;br /&gt;
&amp;lt;li&amp;gt;Name your project &amp;amp;quot;mybot&amp;amp;quot;. This will make a &amp;amp;quot;mybot&amp;amp;quot; subfolder in your &amp;amp;quot;src&amp;amp;quot; folder. Click OK. (example creates c:\program files\continuum\mervbot\src\mybot)&lt;br /&gt;
&amp;lt;li&amp;gt;Choose to create an &amp;amp;quot;Empty DLL project&amp;amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt;Click &amp;amp;quot;Finish&amp;amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt;Click the Drop Down Menu labbled &amp;amp;quot;Project&amp;amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt;Click &amp;amp;quot;Add To Project Files&amp;amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy only spawn.h, spawn.cpp, and command.cpp from the &amp;amp;quot;tutorial&amp;amp;quot; folder into the this new folder. (example from c:\program files\continuum\mervbot\src\tutorial to c:\program files\continuum\mervbot\src\mybot)&lt;br /&gt;
&amp;lt;li&amp;gt;Click the Drop Down Menu labelled &amp;amp;quot;Build&amp;amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt;Click &amp;amp;quot;Build (dll name)&amp;amp;quot; - where (dll name) is &amp;amp;quot;mybot&amp;amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;Go into your &amp;amp;quot;mybot&amp;amp;quot; folder and look for a folder named &amp;amp;quot;Debug&amp;amp;quot;&lt;br /&gt;
(example c:\program files\continuum\mervbot\src\mybot\debug)&lt;br /&gt;
&amp;lt;li&amp;gt;Your new DLL will be in that folder. (example mybot.dll)&lt;br /&gt;
&amp;lt;li&amp;gt;Copy mybot.dll to your base folder that has mervbot.exe in it (example c:\program files\continuum\mervbot)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run your bot dll===&lt;br /&gt;
&lt;br /&gt;
To run your bot you need your DLL (mybot.dll), Commands.txt, MERVBot.exe, MERVBot.ini, Operators.txt, Spawns.txt, and zlib.dll all in one folder (example c:\program files\continuum\mervbot).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Edit spawns.txt. '''Read every word of spawns.txt to find out what needs to go in there.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Example:''&lt;br /&gt;
&amp;lt;pre&amp;gt;2v2-Bot-League : botpw : 2v2a : 2v2league : staffpw&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note:'' The bot will attempt to create the name if it doesn't exist already.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Edit MERVBot.ini&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;[Login]&lt;br /&gt;
Zone=216.33.98.254:21000	// your zone IP:PORT available from zone.dat in Continuum dir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Edit operators.txt. '''Read every word of operators.txt to find out what needs to go in there.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
''Example:''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4:my_name:&lt;br /&gt;
4:another_sysop:&lt;br /&gt;
3:other_person:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure the bot is on vip.txt or has smod+ access, then run MERVBot.exe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can now edit your plugin code by opening &amp;amp;quot;mybot.dsw&amp;amp;quot; (example c:\program files\continuum\mervbot\src\mybot\mybot.dsw) in Microsoft Visual C++. Edit the spawn.h, spawn.cpp, and command.cpp to create your plugin, then build, copy your updated DLL to your MERVBot.exe folder and then execute the bot. Use the tutorial to get ideas on how to implement certain types of features into the bot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Player Commands - (command.cpp)==&lt;br /&gt;
&lt;br /&gt;
This section describes how to implement player commands into your plugin. Commands are sent to the botInfo::gotCommand function in command.cpp.&lt;br /&gt;
&lt;br /&gt;
Example (makes bot reply to !test with &amp;quot;hi&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void botInfo::gotCommand(Player *p, Command *c) {&lt;br /&gt;
	switch (p-&amp;gt;access)&lt;br /&gt;
	{&lt;br /&gt;
        case OP_Moderator:&lt;br /&gt;
                {&lt;br /&gt;
                     // handle moderator-operator commands here.&lt;br /&gt;
                }&lt;br /&gt;
	case OP_Player: //appropriate staff rank here.&lt;br /&gt;
		{&lt;br /&gt;
			if (c-&amp;gt;check(&amp;quot;test&amp;quot;)) //replace &amp;quot;test&amp;quot; with whatever command you want&lt;br /&gt;
			{&lt;br /&gt;
				//put your command code here&lt;br /&gt;
				sendPrivate(p,&amp;quot;hi&amp;quot;); //example&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to have commands with numerical parameters===&lt;br /&gt;
Example (!test #):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	if (c-&amp;gt;check(&amp;quot;test&amp;quot;)) { // reads in test #, default to 1 if invalid number input&lt;br /&gt;
		int temp = 1;&lt;br /&gt;
&lt;br /&gt;
		if (isNumeric(c-&amp;gt;final))&lt;br /&gt;
			temp = atoi(c-&amp;gt;final);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to have player name as input===&lt;br /&gt;
Example (!rank player):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	if (c-&amp;gt;check(&amp;quot;rank&amp;quot;))&lt;br /&gt;
	{&lt;br /&gt;
		String player_name = c-&amp;gt;final;&lt;br /&gt;
&lt;br /&gt;
		if (player_name.IsEmpty()) // default name to self if invalid name&lt;br /&gt;
			player_name = p-&amp;gt;name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to have multi-parameter input===&lt;br /&gt;
&lt;br /&gt;
Use the CRT function sscanf() to scan the string for the values.&lt;br /&gt;
&lt;br /&gt;
Example (!squads squadA vs squadB ''or'' !squads teamA:squadA:teamB:squadB):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
else if (c-&amp;gt;check(&amp;quot;squads&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
	char squadA[20], squadB[20];&lt;br /&gt;
	int teamA, teamB;&lt;br /&gt;
&lt;br /&gt;
	strncpy(squadA, &amp;quot;&amp;quot;, 20);&lt;br /&gt;
	strncpy(squadB, &amp;quot;&amp;quot;, 20);&lt;br /&gt;
&lt;br /&gt;
	int n_found;&lt;br /&gt;
&lt;br /&gt;
	//Note: %[A-Za-z ] is equivalent to %s, but allows an internal space.&lt;br /&gt;
&lt;br /&gt;
	//scan the string for the two squads separated by &amp;quot; vs &amp;quot;&lt;br /&gt;
	n_found = sscanf(c-&amp;gt;final, &amp;quot;%[A-Za-z ] vs %[A-Za-z ]&amp;quot;, squadA, squadB);&lt;br /&gt;
&lt;br /&gt;
	//if that fails, scan the string for freqA:squadA:freqB:squadB&lt;br /&gt;
	if (n_found &amp;lt; 2)&lt;br /&gt;
		sscanf(c-&amp;gt;final, &amp;quot;%d:%[A-Za-z ]:%d:%[A-Za-z ]&amp;quot;, &amp;amp;teamA, squadA, &amp;amp;teamB, squadB);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Help Menu===&lt;br /&gt;
When a player sends !help to the bot, MERVBot calls botInfo::gotHelp() in each plugin loaded.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void botInfo::gotHelp(Player *p, Command *c)&lt;br /&gt;
{&lt;br /&gt;
	if (!*c-&amp;gt;final)&lt;br /&gt;
	{&lt;br /&gt;
	sendPrivate(p, &amp;quot;4v4 Bot General Commands:&amp;quot;);&lt;br /&gt;
	sendPrivate(p, &amp;quot;------------------------&amp;quot;);&lt;br /&gt;
	sendPrivate(p, &amp;quot;!caps - get captain names&amp;quot;);&lt;br /&gt;
	sendPrivate(p, &amp;quot;!roster &amp;lt;squad&amp;gt; - get roster of a squad&amp;quot;);&lt;br /&gt;
	sendPrivate(p, &amp;quot;!schedule- get current schedule&amp;quot;);&lt;br /&gt;
	sendPrivate(p, &amp;quot;!score - get current score&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Event Calls==&lt;br /&gt;
&lt;br /&gt;
MERVBot is event based, so when making a bot you need to decide what will happen at certain events. Normal plugins need to consider what happens when bot enters arena, player enters arena, player leaves arena, player events like kill, shipchange, teamchange, spec, move then any other relevant events to your bot. Just worry about events that are relevant to the tasks your bot is doing.&lt;br /&gt;
&lt;br /&gt;
MERVBot sends events to botInfo::gotEvent() in spawn.cpp. Each supported event is already present and categorized in gotEvent(), along with the paramters that MERVBot sends with the event. When a plugin wants the bot to do something, it sends tell(event) to the bot.&lt;br /&gt;
&lt;br /&gt;
See dllcore.h for a list of current events and their descriptions. Dllcore.h also contains functions (like makeFollowing) to make events to send back to the bot via tell().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tell(makeFollowing(false));&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The Messaging System==&lt;br /&gt;
&lt;br /&gt;
Private message - void sendPrivate(Player *player, char *msg);&lt;br /&gt;
&lt;br /&gt;
''Examples:''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sendPrivate(p,&amp;quot;hi&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
String s=&amp;quot;test&amp;quot;;&lt;br /&gt;
sendPrivate(p,s);&lt;br /&gt;
&lt;br /&gt;
String s=&amp;quot;test&amp;quot;;&lt;br /&gt;
s += &amp;quot;ing&amp;quot;;&lt;br /&gt;
sendPrivate(p,s);&lt;br /&gt;
&lt;br /&gt;
char captain1[20];&lt;br /&gt;
char captain2[20];&lt;br /&gt;
strncpy(captain1,&amp;quot;&amp;quot;,20);&lt;br /&gt;
strncpy(captain2,&amp;quot;&amp;quot;,20);&lt;br /&gt;
sendPrivate(p,(String) captain1 + &amp;quot; and &amp;quot; + (String) captain2 + &amp;quot; are the captains.&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Team message - void sendTeamPrivate(Uint16 team, char *msg);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Examples: &amp;lt;br /&amp;gt;&lt;br /&gt;
a) sendTeamPrivate(8025,&amp;amp;quot;hi spec freq&amp;amp;quot;);&amp;lt;br /&amp;gt;&lt;br /&gt;
b) Uint16 test=0; sendTeamPrivate(test,&amp;amp;quot;hi freq 0&amp;amp;quot;);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Public message - void sendPublic(char *msg);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example: sendPublic(&amp;amp;quot;*arena &amp;amp;quot; + (String) p-&amp;amp;gt;name + &amp;amp;quot; is now a captain&amp;amp;quot;);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Chat channel message - void sendChannel(char *msg);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example: sendChannel(&amp;amp;quot;hi chat channel&amp;amp;quot;);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Remote private message - void sendRemotePrivate(char *name, char *msg);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example: sendRemotePrivate(&amp;amp;quot;Player01&amp;amp;quot;, &amp;amp;quot;hi&amp;amp;quot;);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: to have bot print several lines of text fast it needs sysop in the&lt;br /&gt;
arena (sysop in arena bot first spawns to also) otherwise it'll print slow to avoid being&lt;br /&gt;
kicked for spam&lt;br /&gt;
&lt;br /&gt;
===Output of data in messages===&lt;br /&gt;
&amp;lt;p&amp;gt;An example of using normal strings to output data/messages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // does *arena X pilots left in game&lt;br /&gt;
 // NOTE: variable temp needs to be defined with some value&lt;br /&gt;
&lt;br /&gt;
 String s = &amp;quot;*arena &amp;quot;;&lt;br /&gt;
       s += temp;&lt;br /&gt;
       s += &amp;quot; pilots left in the game.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 sendPublic(s);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Or,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 //NOTE: this can be considered inefficient.&lt;br /&gt;
&lt;br /&gt;
 sendPublic(&amp;quot;*arena &amp;quot; + (String)temp + &amp;quot; pilots left in the game&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;An example using sprintf to align/space data, where output data will be in this approximate format.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// output data will be in this approximate format (not lined up perfectly because of html)&lt;br /&gt;
// --------------------------------------------------------------------------------------&lt;br /&gt;
// Squad: squadname       PTS     FPTS    K    D  DMG DEALT TAKEN   F  FK    FLT&lt;br /&gt;
// --------------------------------------------------------------------------------------&lt;br /&gt;
// PlayerA              10000      500  116  101       9999 99999  10 150 980:55&lt;br /&gt;
// PlayerB                500      200    7    5       9999 99999   5   3   0:04&lt;br /&gt;
&lt;br /&gt;
char str[255];&lt;br /&gt;
sendPublic(&amp;quot;*arena--------------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sprintf(str, &amp;quot;*arena Squad: %-20s   PTS     FPTS   K   D  DMG DEALT  TAKEN  F  FK  FLT&amp;quot;,&lt;br /&gt;
         freqs[freq].freqname&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
sendPublic(str);&lt;br /&gt;
&lt;br /&gt;
sendPublic(&amp;quot;*arena--------------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            // assuming existing freqs struct with data&lt;br /&gt;
            for (pilot=freqs[freq].playercount-1; pilot&amp;gt;=0; pilot--)&lt;br /&gt;
            {&lt;br /&gt;
                // on freq squad so print stats&lt;br /&gt;
                char outString[255];&lt;br /&gt;
&lt;br /&gt;
                sprintf(outString, &amp;quot;*arena %-20s %12d %8d %3d %3d %10d %6d %2d %3d %3d:%02d&amp;quot;,&lt;br /&gt;
                       freqs[freq].pilots[pilot].name,&lt;br /&gt;
                       freqs[freq].pilots[pilot].points,&lt;br /&gt;
                       freqs[freq].pilots[pilot].flagpoints,&lt;br /&gt;
                       freqs[freq].pilots[pilot].kills,&lt;br /&gt;
                       freqs[freq].pilots[pilot].deaths,&lt;br /&gt;
                       freqs[freq].pilots[pilot].dmgdealt,&lt;br /&gt;
                       freqs[freq].pilots[pilot].dmgtaken,&lt;br /&gt;
                       freqs[freq].pilots[pilot].flags,&lt;br /&gt;
                       freqs[freq].pilots[pilot].flagkills,&lt;br /&gt;
                       freqs[freq].pilots[pilot].flagtime /60,&lt;br /&gt;
                       freqs[freq].pilots[pilot].flagtime %60&lt;br /&gt;
                       );&lt;br /&gt;
                &lt;br /&gt;
                sendPublic(outString);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Notes: sprintf format = sprintf(output char string, spacing, variables)&lt;br /&gt;
            // Notes: s = chars, d = integer, - = left align, right align default&lt;br /&gt;
            // Notes: doing %02d = put 0 in front if not 2 digits, %3d:%02d makes 0:04 format&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Time==&lt;br /&gt;
&lt;br /&gt;
Each time MERVBot sends an EVENT_Tick to a plugin (once a second), the default handler code decrements each value in an array of countdowns. You can modify the number of countdowns and add code to occur at a specific value for one of the countdowns.&lt;br /&gt;
&lt;br /&gt;
Setup number of timers and initialize in spawn.h:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class botInfo&lt;br /&gt;
{&lt;br /&gt;
	#define COUNTDOWNS 10 		// how many countdowns you want&lt;br /&gt;
	int countdown[COUNTDOWNS];	// this gives you 10 timers&lt;br /&gt;
&lt;br /&gt;
// unrelated code&lt;br /&gt;
 &lt;br /&gt;
	public:&lt;br /&gt;
	botInfo(CALL_HANDLE given)&lt;br /&gt;
	{&lt;br /&gt;
	countdown[0] = 0;&lt;br /&gt;
	countdown[1] = 60; // 60 seconds&lt;br /&gt;
	//&lt;br /&gt;
	// initialize values&lt;br /&gt;
	//&lt;br /&gt;
	countdown[9] = 5*60; // 5 minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Using timer functions in spawn.cpp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
case EVENT_Tick:&lt;br /&gt;
{&lt;br /&gt;
	for (int i = 0; i &amp;lt; COUNTDOWNS; ++i) //cycles through each countdown you have&lt;br /&gt;
		--countdown[i]; //note that countdowns will continue decrementing past 0.&lt;br /&gt;
&lt;br /&gt;
	if (countdown[1] == 2) // when timer #1 hits two seconds&lt;br /&gt;
	{&lt;br /&gt;
	// do stuff here when timer #1 hits 2 seconds&lt;br /&gt;
	// example: sendPublic(&amp;quot;two seconds left, setting timer to 1 minute&amp;quot;);&lt;br /&gt;
	// example: countdown[1] = 60; // change timer #1 value&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then have events (such as EVENT_PlayerDeath) change the value of a countdown to make the bot do something a set time after an event occurs.&lt;br /&gt;
&lt;br /&gt;
=== Tracking time not using countdown[n] ===&lt;br /&gt;
&lt;br /&gt;
This is a solution to a common problem of determining the amount of time it takes for something to occur. Using basic math, we record a start-time B, and an end-time E, both in the unit of seconds, we calculate the time elapsed by E-B.&lt;br /&gt;
&lt;br /&gt;
Lucky for us, Windows provides a function called GetTickCount() that is a measurement of time (milliseconds) that we can use for such cases.&lt;br /&gt;
&lt;br /&gt;
So:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	int begin = GetTickCount();&lt;br /&gt;
&lt;br /&gt;
	// do some code here.&lt;br /&gt;
&lt;br /&gt;
	int end = GetTickCount();&lt;br /&gt;
  &lt;br /&gt;
	int delta = (end - begin) / 1000;  // elapsed time converted to seconds from milliseconds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Obtaining the current time ===&lt;br /&gt;
&lt;br /&gt;
''Requirements:'' Include &amp;lt;time.h&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 char u[100];&lt;br /&gt;
 time_t t=time(NULL);&lt;br /&gt;
 tm *tmp = localtime(&amp;amp;t);&lt;br /&gt;
 strftime(u,99,&amp;quot;%c&amp;quot;,tmp);&lt;br /&gt;
 sendPublic(&amp;quot;Current date and time: &amp;quot; + u);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Writing Functions==&lt;br /&gt;
&amp;lt;!-- begin of functions. --&amp;gt;&lt;br /&gt;
For this example, we will take the function called closeto, which determines&lt;br /&gt;
if a player exists in an specific radius around a point. Now to apply this function to a MervBot plugin, you need to write it into the spawn.cpp - at the top of the file in the //////// DLL &amp;amp;quot;import&amp;amp;quot; //////// setion, as below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//////// DLL &amp;quot;import&amp;quot; ////////&lt;br /&gt;
&lt;br /&gt;
bool closeto(Player *p, int x, int y, int tolerance) &lt;br /&gt;
{&lt;br /&gt;
	// Requires the function abs() to be declared elsewhere.&lt;br /&gt;
	// Return if player p is in area of square with center x, y&lt;br /&gt;
	//   and radius = tolerance&lt;br /&gt;
	return (abs((p-&amp;gt;tile.x) - x) - tolerance) &amp;amp;&amp;amp; (abs((p-&amp;gt;tile.y) - y) - tolerance);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want your function to have access to the data from spawn.h botInfo class, you make the function apart of it. To do this, we add the '''botInfo::''' infront of the function name, in spawn.cpp.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//////// DLL &amp;quot;import&amp;quot; ////////&lt;br /&gt;
&lt;br /&gt;
bool botInfo::closeto(Player *p, int x, int y, int tolerance) &lt;br /&gt;
    {&lt;br /&gt;
	 ...&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In '''spawn.h''', add your method's prototype without botInfo::, it will look&lt;br /&gt;
like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
botInfo(CALL_HANDLE given)&lt;br /&gt;
 {&lt;br /&gt;
//  ...&lt;br /&gt;
 } &lt;br /&gt;
  bool closeto(Player *p, int x, int y, int tolerance); // Your function prototype.&lt;br /&gt;
&lt;br /&gt;
  void clear_objects(); //provided by Catid, and already exists.&lt;br /&gt;
  void object_target(Player *p); //provided by Catid, and already exists.&lt;br /&gt;
//  ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you're not familiar with prototypes, notice it is similar to that in your spawn.cpp, but without the botInfo::, and a trailing ;.&lt;br /&gt;
&lt;br /&gt;
===Function notes===&lt;br /&gt;
&lt;br /&gt;
Remember that you can pass variables [http://www.cplusplus.com/doc/tutorial/tut2-3.html by reference]. If variables are passed by reference, any changes a function makes to the variables will remain after the function returns.&lt;br /&gt;
&lt;br /&gt;
From time to time you will need to pass an array to a function. An example illustrating this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	int freqs[5]; // declare our example data.&lt;br /&gt;
&lt;br /&gt;
	// call function - notice freqs and not freqs[5] or freqs[].&lt;br /&gt;
	my_function(freqs); //You're not passing the array itself, just a pointer to the array.&lt;br /&gt;
&lt;br /&gt;
	// function - notice freqs[] and not freqs[5] or freqs&lt;br /&gt;
	void my_function(int freqs[]) {} //You're specifying that the freqs parameter is an array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cycling through players==&lt;br /&gt;
&lt;br /&gt;
MERVBot stores player-related data in a linked list. A linked list is a datatype that stores its data in a series of structures linked to each other, hence the name.&lt;br /&gt;
&lt;br /&gt;
To search through the players in the arena, just start at the first link, then continue through all the following links until you reach the end:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
_listnode &amp;lt;Player&amp;gt; *parse = playerlist-&amp;gt;head;	//set to first link of the player linked list&lt;br /&gt;
&lt;br /&gt;
while (parse)	//parse will be NULL when we reach the last link&lt;br /&gt;
{&lt;br /&gt;
	Player *p = parse-&amp;gt;item;	//item is the actual data stored in the link&lt;br /&gt;
&lt;br /&gt;
	// do functionality here&lt;br /&gt;
	// Example 1: sendPrivate(p,&amp;quot;*watchdamage&amp;quot;); // turns on all pilot's watchdamage&lt;br /&gt;
	// Example 2: if (p-&amp;gt;safety != 0) sendPrivate(p,&amp;quot;*spec&amp;quot;); // spec all pilots in safe zone&lt;br /&gt;
&lt;br /&gt;
	parse = parse-&amp;gt;next;	//set parse to the next link&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, assuming our bot has smod+ privilages, the following code will set all non-spectator players to a specific ship. First begin by adding the following function prototype to the spawn.h in the botInfo class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 void handleCmdSetShip(enum Ship_Types ship);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In spawn.cpp add:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void botInfo::handleCmdSetShip(enum Ship_Types ship)&lt;br /&gt;
{&lt;br /&gt;
	//Note that the parameter ship is of the Ship_Types enum,&lt;br /&gt;
	//so its value is hopefully restricted to the proper types.&lt;br /&gt;
&lt;br /&gt;
	_listnode &amp;lt;Player&amp;gt; *parse = playerlist-&amp;gt;head;&lt;br /&gt;
	while (parse)&lt;br /&gt;
	{&lt;br /&gt;
		Player *p = parse-&amp;gt;item;&lt;br /&gt;
&lt;br /&gt;
		if ( p-&amp;gt;ship != ship &amp;amp;&amp;amp; p-&amp;gt;ship != SHIP_Spectator )&lt;br /&gt;
				sendPrivate(p, &amp;quot;*setship &amp;quot; + (String)ship);&lt;br /&gt;
&lt;br /&gt;
		parse = parse-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use, just call the function with the appropriate Ship_Type from the enum in clientprot.h:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 handleCmdSetShip(SHIP_Warbird);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Random numbers==&lt;br /&gt;
&lt;br /&gt;
===Generating a random number===&lt;br /&gt;
&lt;br /&gt;
To use this method, these two includes must be used:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;time.h&amp;quot;    //provides time() function.&lt;br /&gt;
#include &amp;quot;stdlib.h&amp;quot;  //provides srand() and rand() functions.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    srand(time(NULL)); // seed random number generator.&lt;br /&gt;
&lt;br /&gt;
    rand(); // randomize.&lt;br /&gt;
&lt;br /&gt;
    int temp = (int) (51 * ((float)rand()/RAND_MAX));&lt;br /&gt;
       // the above line returns a random integer between 0 and 51.&lt;br /&gt;
       // Note: RAND_MAX is a global constant defined in stdlib.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Picking a random pilot===&lt;br /&gt;
&lt;br /&gt;
''Note:'' A required user-defined function, getInGame(), must be created for this example to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int temp = GetTickCount() % getInGame();  // getInGame() = how many pilots in arena&lt;br /&gt;
&lt;br /&gt;
Player *rabbit = NULL;&lt;br /&gt;
&lt;br /&gt;
_listnode &amp;lt;Player&amp;gt; *parse = playerlist-&amp;gt;head;&lt;br /&gt;
while (parse)&lt;br /&gt;
{&lt;br /&gt;
	Player *p = parse-&amp;gt;item;&lt;br /&gt;
&lt;br /&gt;
	if (p-&amp;gt;ship != SHIP_Spectator) // if player is not a spectator&lt;br /&gt;
	if ( !(--temp) ) // and if we've hit the randomly-selected pilot&lt;br /&gt;
	{&lt;br /&gt;
		rabbit = p;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	parse = parse-&amp;gt;next;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Storing data for pilots==&lt;br /&gt;
&lt;br /&gt;
There are several ways to store data for pilots (ie tracking flagtime or kills in a period of time). Note that these methods are all purely internal to the bot, and don't effect anything beyond the plugin in any way.&lt;br /&gt;
&lt;br /&gt;
# Built-in get/setTag: Tracks data until player leaves the arena, then automatically deletes data.&lt;br /&gt;
# Modified perm get/setTag: Tracks data until bot leaves arena, then automatically deletes data. (Advantage: easier to sort by player)&lt;br /&gt;
# Custom Structs: Tracks data until plugin deletes it. (Advantage: easier to sort by freqs)&lt;br /&gt;
&lt;br /&gt;
''Note:'' 2 and 3 are similar in effect, mostly the difference is in how you are able to search through data you need to decide which method of storing data is best for each bot depending on what it does.&lt;br /&gt;
&lt;br /&gt;
===Built-in get/setTag method===&lt;br /&gt;
&lt;br /&gt;
Player tags simply tag a player with a number. Define the wanted values in '''spawn.h''' at the top:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define DMG_DEALT        0&lt;br /&gt;
#define DMG_TAKEN        1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In spawn.cpp, initialize the values on ArenaEnter and PlayerEnter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
case EVENT_ArenaEnter:&lt;br /&gt;
{&lt;br /&gt;
	// ...&lt;br /&gt;
&lt;br /&gt;
	// do for all pilots in arena when bot enters&lt;br /&gt;
	_listnode &amp;lt;Player&amp;gt; *parse = playerlist-&amp;gt;head;&lt;br /&gt;
	while (parse)&lt;br /&gt;
	{&lt;br /&gt;
	   Player *p = parse-&amp;gt;item;  // get pilot&lt;br /&gt;
&lt;br /&gt;
	   set_tag(p, DMG_DEALT, 0); // initialize to 0&lt;br /&gt;
	   set_tag(p, DMG_TAKEN, 0);&lt;br /&gt;
	   sendPrivate(p, &amp;quot;*watchdamage&amp;quot;);  // optionally turn on player *watchdamage&lt;br /&gt;
&lt;br /&gt;
	   parse = parse-&amp;gt;next;  // get next pilot&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
case EVENT_PlayerEntering:&lt;br /&gt;
{&lt;br /&gt;
//	...&lt;br /&gt;
	set_tag(p, DMG_DEALT, 0); // initialize to 0&lt;br /&gt;
	set_tag(p, DMG_TAKEN, 0);&lt;br /&gt;
	sendPrivate(p,&amp;quot;*watchdamage&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then somewhere edit the tag values:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
case EVENT_WatchDamage:&lt;br /&gt;
{&lt;br /&gt;
	// sets tag for k (shooter) to be old value plus damage currently dealt&lt;br /&gt;
&lt;br /&gt;
	int old_damage = get_tag(k, DMG_BOMB_DEALT);&lt;br /&gt;
	set_tag(k, DMG_BOMB_DEALT, old_damage + damage);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following demonstrates how to retrieve the tag values as a command in command.cpp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (c-&amp;gt;check(&amp;quot;showstats&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
	int temp = get_tag(p, DMG_TOTAL_DEALT);&lt;br /&gt;
&lt;br /&gt;
	String s = &amp;quot;You've done &amp;quot;;&lt;br /&gt;
	s += temp;&lt;br /&gt;
	s += &amp;quot; damage so far!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	sendPrivate(p,s);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modified permanent get/setTag method===&lt;br /&gt;
&lt;br /&gt;
This method is the same as get/setTag with some modifications to the tag code to retain them after the player leaves. Beware of using this method if bot is in an arena for long periods of time, linkedlist could get huge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// spawn.h, add char name[20]; into struct PlayerTag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct PlayerTag&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	char name[20];&lt;br /&gt;
	int index;&lt;br /&gt;
	int data;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In spawn.cpp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	case EVENT_PlayerLeaving:&lt;br /&gt;
	{&lt;br /&gt;
	    Player *p = (Player*)event.p[0];&lt;br /&gt;
&lt;br /&gt;
	    // killTags(p);  // remove so tag not deleted on arena exit&lt;br /&gt;
&lt;br /&gt;
//	...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Locate in spawn.cpp and modify accordingly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int botInfo::get_tag(Player *p, int index)&lt;br /&gt;
{&lt;br /&gt;
    _listnode &amp;lt;PlayerTag&amp;gt; *parse = taglist.head;&lt;br /&gt;
    PlayerTag *tag;&lt;br /&gt;
&lt;br /&gt;
    while (parse)&lt;br /&gt;
    {&lt;br /&gt;
      tag = parse-&amp;gt;item;&lt;br /&gt;
&lt;br /&gt;
      // if (tag-&amp;gt;p == p)&lt;br /&gt;
      if (strcmp(tag-&amp;gt;name,p-&amp;gt;name)==0)  // now tracking by player name, not pointer&lt;br /&gt;
      if (tag-&amp;gt;index == index)&lt;br /&gt;
        return tag-&amp;gt;data;&lt;br /&gt;
&lt;br /&gt;
      parse = parse-&amp;gt;next;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void botInfo::set_tag(Player *p, int index, int data)&lt;br /&gt;
{&lt;br /&gt;
    _listnode &amp;lt;PlayerTag&amp;gt; *parse = taglist.head;&lt;br /&gt;
    PlayerTag *tag;&lt;br /&gt;
&lt;br /&gt;
    while (parse)&lt;br /&gt;
    {&lt;br /&gt;
      tag = parse-&amp;gt;item;&lt;br /&gt;
&lt;br /&gt;
      //if (tag-&amp;gt;p == p)&lt;br /&gt;
      if (strcmp(tag-&amp;gt;name,p-&amp;gt;name)==0) // now tracking by player name, not pointer&lt;br /&gt;
      if (tag-&amp;gt;index == index)&lt;br /&gt;
      {&lt;br /&gt;
        tag-&amp;gt;data = data;&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      parse = parse-&amp;gt;next;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    tag = new PlayerTag;&lt;br /&gt;
    // tag-&amp;gt;p = p; // not tracking by pointer anymore&lt;br /&gt;
    strncpy(tag-&amp;gt;name, p-&amp;gt;name, 20); // tracking by player name&lt;br /&gt;
    tag-&amp;gt;index = index;&lt;br /&gt;
    tag-&amp;gt;data = data;&lt;br /&gt;
    taglist.append(tag);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using structs===&lt;br /&gt;
&lt;br /&gt;
In '''spawn.h''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class botInfo&lt;br /&gt;
{&lt;br /&gt;
	struct freqdata &lt;br /&gt;
	{&lt;br /&gt;
		int kills, deaths;&lt;br /&gt;
	};&lt;br /&gt;
// ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make use of this structure, implement accordingly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	freqdata freqs[100]; // 100 of those structs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Access the data in spawn.cpp using&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
freqs[56].kills = 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See CPlusPlus.com's [http://www.cplusplus.com/doc/tutorial/tut3-5.html Structures] tutorial for a more comprehensive guide. Note that, as shown on the bottom of the page, you can have structures within structures. Thus, for example, you could have a structure for each freq with a structure for each player nested within them.&lt;br /&gt;
&lt;br /&gt;
==Input/Output to files==&lt;br /&gt;
&lt;br /&gt;
For reading and/or writing to files with C++ you must have the required include statement as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File stream input===&lt;br /&gt;
The following example will show you how to read a file, duel.ini, line by line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;quot;stdlib.h&amp;quot; // for atoi()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ifstream file(&amp;quot;duel.ini&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!file.good()) // if there was an error opening the file&lt;br /&gt;
    sendPublic(&amp;quot;*arena Error opening file for reading&amp;quot;); // or add your own error handler&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    char line[256];&lt;br /&gt;
&lt;br /&gt;
    // read in MaxBoxes=X&lt;br /&gt;
    while (file.getline(line, 256))&lt;br /&gt;
    {&lt;br /&gt;
     &lt;br /&gt;
      if (CMPSTART(&amp;quot;MaxBoxes=&amp;quot;, line)) //Does the line begin with MaxBoxes= ?&lt;br /&gt;
      {&lt;br /&gt;
        MAX_BOXES = atoi(&amp;amp;(line[9]));  //If so, read the value into an integer, using atoi.&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    file.close();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File stream output===&lt;br /&gt;
The following code example will demonstrate how to append to a file, duelleaguestat.inc.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ofstream file(&amp;quot;duelleaguestat.inc&amp;quot;, ios::app);   // app = put all data at end of file&lt;br /&gt;
&lt;br /&gt;
 if (!file.good()) // if there was an error opening the file&lt;br /&gt;
   sendPublic(&amp;quot;*arena Error opening file.&amp;quot;);&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   file &amp;lt;&amp;lt; squad1&amp;lt;&amp;lt; endl;  // squad1 = char[20]&lt;br /&gt;
   file &amp;lt;&amp;lt; &amp;quot; vs &amp;quot;&amp;lt;&amp;lt; endl;&lt;br /&gt;
   file &amp;lt;&amp;lt; squad2&amp;lt;&amp;lt; endl;  // squad2 = char[20]&lt;br /&gt;
   file.close();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, you are able to write an output of a String to a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // key is converting String to (char*) to file write&lt;br /&gt;
 String str = freqs[freq].slotname[slot];&lt;br /&gt;
 str += &amp;quot;, Repels: &amp;quot; + (String)(int) t-&amp;gt;repel;&lt;br /&gt;
 file &amp;lt;&amp;lt; endl;&lt;br /&gt;
 file &amp;lt;&amp;lt; (char*) str;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input with GetPrivateProfileString===&lt;br /&gt;
&lt;br /&gt;
GetPrivateProfileString(), a function provided by Windows for reading INI files, will automatically find an INI key (like &amp;quot;MaxBoxes=&amp;quot;) in a file for you. See the [http://msdn.microsoft.com/library MSDN Library] for help on this function. This next example will show how to read input using GetPrivateProfileString() based on the rampage plugin.&lt;br /&gt;
&lt;br /&gt;
The file format for rampage.ini is like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 7=is on a killing spree! (6:0)&lt;br /&gt;
 10=is opening a can of booya! (9:0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In '''rampageini.cpp''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;rampageini.h&amp;quot;&lt;br /&gt;
#define WIN32_LEAN_AND_MEAN&lt;br /&gt;
#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define NUM_RANKS 10&lt;br /&gt;
#define BUFFER_LEN 256&lt;br /&gt;
&lt;br /&gt;
struct RampageSettings&lt;br /&gt;
{&lt;br /&gt;
	char quotes[NUM_RANKS][BUFFER_LEN];&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
void LoadSettings(RampageSettings &amp;amp;setts);&lt;br /&gt;
&lt;br /&gt;
static char path[BUFFER_LEN];&lt;br /&gt;
&lt;br /&gt;
char *rank_type[NUM_RANKS] = { &amp;quot;7&amp;quot;, &amp;quot;10&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
void LoadSettings(RampageSettings &amp;amp;setts)&lt;br /&gt;
{&lt;br /&gt;
	GetCurrentDirectory(BUFFER_LEN - 64, path);&lt;br /&gt;
	strcat(path, &amp;quot;\rampage.ini&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	for (int i = 0; i &amp;lt; NUM_RANKS; ++i)&lt;br /&gt;
	{&lt;br /&gt;
		GetPrivateProfileString(&amp;quot;Comments&amp;quot;, rank_type[i], &amp;quot;-ERROR-&amp;quot;,&lt;br /&gt;
					setts.quotes[i], BUFFER_LEN, path);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Player data==&lt;br /&gt;
&lt;br /&gt;
As stated earlier in the tutorial, MervBot stores useful player data internally as Player objects, see player.h for implementation details.&lt;br /&gt;
&lt;br /&gt;
* p-&amp;gt;name = player name stored as char[20] (''Note:'' SubSpace protocol allows for usernames to be 19+ in length, do not rely on this for player-name comparisions.)&lt;br /&gt;
* p-&amp;gt;squad = player squad stored as char[20]&lt;br /&gt;
* p-&amp;gt;ship = ship (0-9) enumerated as SHIP_Warbird, SHIP_Spectator, etc..&lt;br /&gt;
* p-&amp;gt;safety = whether ship is in safety zone (boolean)&lt;br /&gt;
* p-&amp;gt;bounty = player bounty&lt;br /&gt;
* p-&amp;gt;energy = player energy (have bot with *energy on to get accurate readings)&lt;br /&gt;
* p-&amp;gt;flagCount = how many flags player is holding&lt;br /&gt;
* p-&amp;gt;team = player frequency&lt;br /&gt;
* p-&amp;gt;(burst, repel, thor, brick, decoy, rocket, portal) = how many items of that type player has&lt;br /&gt;
* p-&amp;gt;(stealth, cloak, xradar, awarp, ufo, flash, safety, shields, supers) = if player has that item on (boolean)&lt;br /&gt;
* p-&amp;gt;score.killPoints = player kill points&lt;br /&gt;
* p-&amp;gt;score.flagPoints = player flag points&lt;br /&gt;
* p-&amp;gt;score.wins = player kills from f2&lt;br /&gt;
* p-&amp;gt;score.losses = player deaths from f2&lt;br /&gt;
&lt;br /&gt;
Just access the respective member of the Player class to check the player's property.&lt;br /&gt;
&lt;br /&gt;
For example, in spawn.cpp, to check whether a player is in a safety zone:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EVENT_PlayerMove:&lt;br /&gt;
{&lt;br /&gt;
   Player *p = (Player*)event.p[0];&lt;br /&gt;
&lt;br /&gt;
   if ( p-&amp;gt;safety ) // player is in safe zone.&lt;br /&gt;
     {&lt;br /&gt;
        // do something.&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
   if ( !p-&amp;gt;safety ) // player NOT in safe zone.&lt;br /&gt;
     {&lt;br /&gt;
        // do something.&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Obtaining a player pointer using name comparison ===&lt;br /&gt;
&lt;br /&gt;
Since Player pointers are internal to MERVBot, it is necessary to find a way of obtaining a Player pointer from the identifying information given by the game. One of the simpler ways is just to compare the names after converting to lowercase.&lt;br /&gt;
&lt;br /&gt;
''Note'': Using pilot names as vital comparisions should be used with caution. See [http://cypherjf.sscentral.com/articles/bots-as-clients/ Bot-Issues] by CypherJF.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// return Player* info (or NULL if not found) from p-&amp;gt;name info&lt;br /&gt;
Player * botInfo::GetPilot(char *name)&lt;br /&gt;
{&lt;br /&gt;
	// get pilot from a name, return as TempPlayer&lt;br /&gt;
	_listnode &amp;lt;Player&amp;gt; *parse = playerlist-&amp;gt;head;&lt;br /&gt;
&lt;br /&gt;
	//convert search name to lowercase&lt;br /&gt;
	char nname[20], pname[20];&lt;br /&gt;
	strncpy(nname, name, 20);&lt;br /&gt;
	tolower(nname);&lt;br /&gt;
&lt;br /&gt;
	while (parse)&lt;br /&gt;
	{&lt;br /&gt;
		Player *p = parse-&amp;gt;item;&lt;br /&gt;
&lt;br /&gt;
		// convert to lowercase to compare&lt;br /&gt;
		strncpy(pname,p-&amp;gt;name,20);&lt;br /&gt;
		tolower(pname);&lt;br /&gt;
		if (strcmp(pname,nname)==0)&lt;br /&gt;
			return p;&lt;br /&gt;
		&lt;br /&gt;
		parse = parse-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return NULL;	//player not found&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bot built in functions==&lt;br /&gt;
&lt;br /&gt;
Here are some useful MervBot commands to control what the bot is doing.&lt;br /&gt;
&lt;br /&gt;
Player.cpp:&lt;br /&gt;
* Player::move(Sint32 x, Sint32 y) moves a player to the coordinates specified by x and y&lt;br /&gt;
* Player::clone(Player *p) clones a player into a player class&lt;br /&gt;
&lt;br /&gt;
Look in Commands.txt , command.cpp (core), or /!help to bot to see all bot external commands (example /!go &amp;amp;lt;arena&amp;amp;gt;).&lt;br /&gt;
&lt;br /&gt;
''LVZ Object toggling commands in plugins are to go here.''&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=6014</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=6014"/>
				<updated>2009-05-06T15:11:23Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: updated software list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a directory server to retrieve a list of active zones. Client's connect to UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
A [[zone]] can register itself with one or more directory servers so players can find the zone. It utilizes the [[Directory Game Server Protocol]] on UDP port 4991.&lt;br /&gt;
&lt;br /&gt;
== Directory Server Software ==&lt;br /&gt;
&lt;br /&gt;
A variety of directory server's are available for you to download.  &lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* Public Directory Server software v0.3 (by [[PriitK]])&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]])&lt;br /&gt;
** http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
* JEDirectoryServer (by Ben Diacuzn)&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]]), ported to Linux by [[User:Doc flabby|Doc Flabby]].&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=74575&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform ===&lt;br /&gt;
* Central by [[User:Doc flabby|Doc Flabby]], written in C#.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=80198&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server by [[Snrrrub]]&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=8236&lt;br /&gt;
&lt;br /&gt;
* SkyDir by [[User:Doc flabby|Doc Flabby]], written in Python with SQLite.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7590&lt;br /&gt;
&lt;br /&gt;
== Public Directory Servers ==&lt;br /&gt;
&lt;br /&gt;
The current available and &amp;quot;reliable&amp;quot; public directory servers are:&lt;br /&gt;
&lt;br /&gt;
* sscentral.sscuservers.net&lt;br /&gt;
** ''Administrated by [[PriitK]]''&lt;br /&gt;
* ssdir.playsubspace.com&lt;br /&gt;
** ''Administrated by [[User:Doc flabby|Doc Flabby]]''&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=6013</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=6013"/>
				<updated>2009-05-06T15:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Directory Server Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a directory server to retrieve a list of active zones. Client's connect to UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
A [[zone]] can register itself with one or more directory servers so players can find the zone. It utilizes the [[Directory Game Server Protocol]] on UDP port 4991.&lt;br /&gt;
&lt;br /&gt;
== Directory Server Software ==&lt;br /&gt;
&lt;br /&gt;
A variety of directory server's are available for you to download.  &lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* Public Directory Server software v0.3 (by [[PriitK]])&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]])&lt;br /&gt;
** http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
* JEDirectoryServer (by Ben Diacuzn)&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]]), ported to Linux by [[User:Doc flabby|Doc Flabby]].&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=74575&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform ===&lt;br /&gt;
* Central by [[User:Doc flabby|Doc Flabby]], written in C#.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=80198&lt;br /&gt;
&lt;br /&gt;
* SkyDir by [[User:Doc flabby|Doc Flabby]], written in Python with SQLite.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7590&lt;br /&gt;
&lt;br /&gt;
== Public Directory Servers ==&lt;br /&gt;
&lt;br /&gt;
The current available and &amp;quot;reliable&amp;quot; public directory servers are:&lt;br /&gt;
&lt;br /&gt;
* sscentral.sscuservers.net&lt;br /&gt;
** ''Administrated by [[PriitK]]''&lt;br /&gt;
* ssdir.playsubspace.com&lt;br /&gt;
** ''Administrated by [[User:Doc flabby|Doc Flabby]]''&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_Client_Protocol&amp;diff=6012</id>
		<title>Directory Client Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_Client_Protocol&amp;diff=6012"/>
				<updated>2009-05-06T15:08:59Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added some detail on description max length&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Core protocol]] is used as usual. Dirserv specific c2s/s2c protocol.&lt;br /&gt;
&lt;br /&gt;
Continuum sends a sync request and SubSpace doesn't.&lt;br /&gt;
The list request is sent as reliable. On the traditional directory servers (not [[catid]]'s), traffic is always encrypted, even if you send a null encryption key.&lt;br /&gt;
&lt;br /&gt;
Directory servers listen on port 4990 for [[client]] connections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
c2s&lt;br /&gt;
&lt;br /&gt;
0x01 list request&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x01&lt;br /&gt;
1      4    minimum players&lt;br /&gt;
&lt;br /&gt;
s2c&lt;br /&gt;
&lt;br /&gt;
0x01 list data&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x01&lt;br /&gt;
1      4    ip&lt;br /&gt;
5      2    port&lt;br /&gt;
7      2    player count&lt;br /&gt;
9      2    billing (on 0x01 0x00)&lt;br /&gt;
11     4    version (0x86 0x00 0x00 0x00)&lt;br /&gt;
15     64   name&lt;br /&gt;
79     ?    description (should not be longer than around 480-490 in length)&lt;br /&gt;
packet repeats from offset 1 until end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
* [[Directory Game Server Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=UDP_Billing_Protocol&amp;diff=5819</id>
		<title>UDP Billing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=UDP_Billing_Protocol&amp;diff=5819"/>
				<updated>2007-10-18T18:34:38Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: addded start of udp billing documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The UDP billing protocol is the original protocol written by [[VIE]] which was implemented in [[Subbill]]. It features more capabilities then the newer [[TCP Billing Protocol]] such as the ability to remotely restart or shutdown a game server, and save scores to a central location. &lt;br /&gt;
&lt;br /&gt;
The protocol has never formally been documented and has been reversed engineered by individuals. However, it does utilize the same [[core protocol]] as the [[UDP Game Protocol]].&lt;br /&gt;
&lt;br /&gt;
An attempt at documenting the protocol has been started below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zone to Billing&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Billing to Zone&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login_Params&lt;br /&gt;
&lt;br /&gt;
0	PRMEANING_ENTER,	// Implemented&lt;br /&gt;
1	PRMEANING_ASK,		// Implemented&lt;br /&gt;
2	PRMEANING_BADPW,	// Implemented&lt;br /&gt;
3	PRMEANING_IPBLOCK,	// Implemented&lt;br /&gt;
4	PRMEANING_NONEW,	// Implemented&lt;br /&gt;
5	PRMEANING_BADNAME,	// Implemented&lt;br /&gt;
6	PRMEANING_REGFORM,	// Implemented&lt;br /&gt;
7	PRMEANING_BUSY,		// Implemented&lt;br /&gt;
8	PRMEANING_DEMO		// Unused&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kick_Reasons&lt;br /&gt;
0	KICK_SYSTEM,		// Other reason&lt;br /&gt;
1	KICK_FLOOD,			// Player command-flooded&lt;br /&gt;
2	KICK_BAN			// Player was banned (Or BanID..)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Player Response 0x01&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x01&lt;br /&gt;
1	1	Login_Params (see top)&lt;br /&gt;
2	4	PlayerId&lt;br /&gt;
6	24	PlayerName&lt;br /&gt;
30	24	Squad Name&lt;br /&gt;
54	96	Banner&lt;br /&gt;
150	4	Total Seconds&lt;br /&gt;
154	2	Year&lt;br /&gt;
156	2	Month&lt;br /&gt;
158	2	Day&lt;br /&gt;
160	2	Hour&lt;br /&gt;
162	2	Minute&lt;br /&gt;
164	2	Secound&lt;br /&gt;
166	4	Extra 1&lt;br /&gt;
170	4	ScoreID&lt;br /&gt;
174	4	Extra 2&lt;br /&gt;
178	2	Wins&lt;br /&gt;
180	2	Losses&lt;br /&gt;
182	2	GoalCount&lt;br /&gt;
184	4	Points&lt;br /&gt;
188	4	Event Points&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Player Private Chat (aka pm) 0x03&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x03&lt;br /&gt;
1	4	Source Server ID&lt;br /&gt;
5	1	0x02&lt;br /&gt;
6	1	Sound&lt;br /&gt;
7	varies	Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zone Recycle 0x04&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x04&lt;br /&gt;
1	1	0x00&lt;br /&gt;
2	4	0x00000001&lt;br /&gt;
6	4	0x00000002&lt;br /&gt;
&lt;br /&gt;
Kick Player 0x08&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x08&lt;br /&gt;
1	4	Connection Id&lt;br /&gt;
5	4	Kick_Reasons (see top)&lt;br /&gt;
&lt;br /&gt;
Command Message 0x09  (?blogin etc)&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x09&lt;br /&gt;
1	4	ConnectionId&lt;br /&gt;
5	varies  Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
Chat Message 0x0A&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x0A&lt;br /&gt;
1	4	ConnectionId&lt;br /&gt;
5	1	Channel&lt;br /&gt;
6	varies	Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
ScoreReset 0x31&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x31&lt;br /&gt;
1	4	ScoreId&lt;br /&gt;
5	4	-ScoreId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is far from complete i've use asss3's src and some of ssbilling2's src.  maybe someone will find is useful one day -doc flabby&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:UDP_Billing_Protocol&amp;diff=5818</id>
		<title>Talk:UDP Billing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:UDP_Billing_Protocol&amp;diff=5818"/>
				<updated>2007-10-18T18:31:37Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: wrong page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:UDP_Billing_Protocol&amp;diff=5817</id>
		<title>Talk:UDP Billing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:UDP_Billing_Protocol&amp;diff=5817"/>
				<updated>2007-10-18T18:31:11Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: started documenting udp billing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zone to Billing&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Billing to Zone&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login_Params&lt;br /&gt;
&lt;br /&gt;
	PRMEANING_ENTER,	// Implemented&lt;br /&gt;
	PRMEANING_ASK,		// Implemented&lt;br /&gt;
	PRMEANING_BADPW,	// Implemented&lt;br /&gt;
	PRMEANING_IPBLOCK,	// Implemented&lt;br /&gt;
	PRMEANING_NONEW,	// Implemented&lt;br /&gt;
	PRMEANING_BADNAME,	// Implemented&lt;br /&gt;
	PRMEANING_REGFORM,	// Implemented&lt;br /&gt;
	PRMEANING_BUSY,		// Implemented&lt;br /&gt;
	PRMEANING_DEMO		// Unused&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kick_Reasons&lt;br /&gt;
	KICK_SYSTEM,		// Other reason&lt;br /&gt;
	KICK_FLOOD,			// Player command-flooded&lt;br /&gt;
	KICK_BAN			// Player was banned (Or BanID..)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Player Response 0x01&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x01&lt;br /&gt;
1	1	Login_Params (see top)&lt;br /&gt;
2	4	PlayerId&lt;br /&gt;
6	24	PlayerName&lt;br /&gt;
30	24	Squad Name&lt;br /&gt;
54	96	Banner&lt;br /&gt;
150	4	Total Seconds&lt;br /&gt;
154	2	Year&lt;br /&gt;
156	2	Month&lt;br /&gt;
158	2	Day&lt;br /&gt;
160	2	Hour&lt;br /&gt;
162	2	Minute&lt;br /&gt;
164	2	Secound&lt;br /&gt;
166	4	Extra 1&lt;br /&gt;
170	4	ScoreID&lt;br /&gt;
174	4	Extra 2&lt;br /&gt;
178	2	Wins&lt;br /&gt;
180	2	Losses&lt;br /&gt;
182	2	GoalCount&lt;br /&gt;
184	4	Points&lt;br /&gt;
188	4	Event Points&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Player Private Chat (aka pm) 0x03&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x03&lt;br /&gt;
1	4	Source Server ID&lt;br /&gt;
5	1	0x02&lt;br /&gt;
6	1	Sound&lt;br /&gt;
7	varies	Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zone Recycle 0x04&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x04&lt;br /&gt;
1	1	0x00&lt;br /&gt;
2	4	0x00000001&lt;br /&gt;
6	4	0x00000002&lt;br /&gt;
&lt;br /&gt;
Kick Player 0x08&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x08&lt;br /&gt;
1	4	Connection Id&lt;br /&gt;
5	4	Kick_Reasons (see top)&lt;br /&gt;
&lt;br /&gt;
Command Message 0x09  (?blogin etc)&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x09&lt;br /&gt;
1	4	ConnectionId&lt;br /&gt;
5	varies  Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
Chat Message 0x0A&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x0A&lt;br /&gt;
1	4	ConnectionId&lt;br /&gt;
5	1	Channel&lt;br /&gt;
6	varies	Message Terminated with \0&lt;br /&gt;
&lt;br /&gt;
ScoreReset 0x31&lt;br /&gt;
offset	size	comment&lt;br /&gt;
0	1	0x31&lt;br /&gt;
1	4	ScoreId&lt;br /&gt;
5	4	-ScoreId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is far from complete i've use asss3's src and some of ssbilling2's src.  maybe someone will find is useful one day&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Billing_Protocol&amp;diff=5813</id>
		<title>Talk:Billing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Billing_Protocol&amp;diff=5813"/>
				<updated>2007-10-17T14:55:17Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: surgested merge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Mine GO BOOM|Mine GO BOOM]] 13:06, Sep 28, 2006 (PDT): Wow, we don't have the billing protocol here? We have the [[TCP Billing Protocol]], but not Subspace's UDP version.&lt;br /&gt;
&lt;br /&gt;
[[User:CypherJF|CypherJF]] 14:03, Sep 28, 2006 (PDT): it's because no one has documented it. I've asked Lord Maucaub some time ago to provide me with the documentation he created for it but he has since long disappeared. I think I also asked 2dragons for it but that was a no go either.&lt;br /&gt;
&lt;br /&gt;
[[User:Mine GO BOOM|Mine GO BOOM]] 14:34, Sep 28, 2006 (PDT): Sounds like a good project. ASSS has source code for it, Catid made his own replacement billing server. Both ends have full open source for it, shouldn't be hard to throw up a quick layout and let people add in the details.&lt;br /&gt;
&lt;br /&gt;
[[User:Doc flabby|Doc flabby]] 07:55, October 17, 2007 (PDT):  &lt;br /&gt;
I suggest merging this with the [[biller]] page?&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5812</id>
		<title>Biller</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5812"/>
				<updated>2007-10-17T14:53:51Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Billing Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The Billing Server is a server that is separate from [[ASSS]] that keeps track of player's passwords and handles chat channels.&lt;br /&gt;
&lt;br /&gt;
One biller can be shared between many game servers. This makes chat channel and inter-zone private messaging a desirable feature of a biller. More importantly billers can contain a ban system that allow one ban to affect all zones (called a ''netban'').&lt;br /&gt;
&lt;br /&gt;
Today, the name Billing Server is confusing as it is just a user database. The publishers ([[VIE]]) of SubSpace probably wanted to charge players a subscription and this server would control it, hence the name biller.&lt;br /&gt;
&lt;br /&gt;
Excerpt from a copy of the [http://beginners.subspace.net/history/vie/subnews.html VIE website]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;We are just concluding deals with various partners the upshot of which is that billing for Subspace will almost certainly not happen till July we are still assuming a $10 a month or $1 a day scheme and a box version that will include several months play built in.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Billing Software ==&lt;br /&gt;
Billers communicate using either the TCP or UDP [[Billing Protocol]]&lt;br /&gt;
=== UDP ===&lt;br /&gt;
The original billing protocol.&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2.00b by [[Confess]]&lt;br /&gt;
**This is Confess' version of SSBiller2 with a bunch of new features. (C++ source)&lt;br /&gt;
**http://www.mervbot.com/files/ssb2confess.rar&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2 Release 11j by [[Catid]]&lt;br /&gt;
**This is SOS' much improved version of my billing server, open-sourced as well. The BAN.DAT and BANFREE.DAT files are not compatible with the original SSBiller2. New: Fixed a large security-related bug. Download and replace your copy of SSBilling2.EXE!&lt;br /&gt;
**Fully Featured&lt;br /&gt;
**http://www.mervbot.com/files/ssb2.zip&lt;br /&gt;
&lt;br /&gt;
*subbill 0.23 by [[Prittk]] &lt;br /&gt;
**Not recommended as it uses 100% CPU&lt;br /&gt;
**Has only basic features.&lt;br /&gt;
**http://www.subspacedownloads.com/index.php?act=file&amp;amp;fid=31&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
*Linux Port of SubSpace Billing Server 2 Release 11j by [[Doc Flabby]]&lt;br /&gt;
** No Encryption&lt;br /&gt;
** Issues with Compilation from source (compiler version specific)&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7782&lt;br /&gt;
&lt;br /&gt;
=== TCP ===&lt;br /&gt;
The new billing protocol.&lt;br /&gt;
See the [[TCP Billing FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5811</id>
		<title>Biller</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5811"/>
				<updated>2007-10-17T14:53:13Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Billing Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The Billing Server is a server that is separate from [[ASSS]] that keeps track of player's passwords and handles chat channels.&lt;br /&gt;
&lt;br /&gt;
One biller can be shared between many game servers. This makes chat channel and inter-zone private messaging a desirable feature of a biller. More importantly billers can contain a ban system that allow one ban to affect all zones (called a ''netban'').&lt;br /&gt;
&lt;br /&gt;
Today, the name Billing Server is confusing as it is just a user database. The publishers ([[VIE]]) of SubSpace probably wanted to charge players a subscription and this server would control it, hence the name biller.&lt;br /&gt;
&lt;br /&gt;
Excerpt from a copy of the [http://beginners.subspace.net/history/vie/subnews.html VIE website]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;We are just concluding deals with various partners the upshot of which is that billing for Subspace will almost certainly not happen till July we are still assuming a $10 a month or $1 a day scheme and a box version that will include several months play built in.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Billing Software ==&lt;br /&gt;
Billers communicate using either the TCP or UDP [Billing Protocol]&lt;br /&gt;
=== UDP ===&lt;br /&gt;
The original billing protocol.&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2.00b by [[Confess]]&lt;br /&gt;
**This is Confess' version of SSBiller2 with a bunch of new features. (C++ source)&lt;br /&gt;
**http://www.mervbot.com/files/ssb2confess.rar&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2 Release 11j by [[Catid]]&lt;br /&gt;
**This is SOS' much improved version of my billing server, open-sourced as well. The BAN.DAT and BANFREE.DAT files are not compatible with the original SSBiller2. New: Fixed a large security-related bug. Download and replace your copy of SSBilling2.EXE!&lt;br /&gt;
**Fully Featured&lt;br /&gt;
**http://www.mervbot.com/files/ssb2.zip&lt;br /&gt;
&lt;br /&gt;
*subbill 0.23 by [[Prittk]] &lt;br /&gt;
**Not recommended as it uses 100% CPU&lt;br /&gt;
**Has only basic features.&lt;br /&gt;
**http://www.subspacedownloads.com/index.php?act=file&amp;amp;fid=31&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
*Linux Port of SubSpace Billing Server 2 Release 11j by [[Doc Flabby]]&lt;br /&gt;
** No Encryption&lt;br /&gt;
** Issues with Compilation from source (compiler version specific)&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7782&lt;br /&gt;
&lt;br /&gt;
=== TCP ===&lt;br /&gt;
The new billing protocol.&lt;br /&gt;
See the [[TCP Billing FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Billing&amp;diff=5810</id>
		<title>Billing</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Billing&amp;diff=5810"/>
				<updated>2007-10-17T14:51:55Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Biller]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5809</id>
		<title>Biller</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Biller&amp;diff=5809"/>
				<updated>2007-10-17T14:48:15Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: started a list of billers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
The Billing Server is a server that is separate from [[ASSS]] that keeps track of player's passwords and handles chat channels.&lt;br /&gt;
&lt;br /&gt;
One biller can be shared between many game servers. This makes chat channel and inter-zone private messaging a desirable feature of a biller. More importantly billers can contain a ban system that allow one ban to affect all zones (called a ''netban'').&lt;br /&gt;
&lt;br /&gt;
Today, the name Billing Server is confusing as it is just a user database. The publishers ([[VIE]]) of SubSpace probably wanted to charge players a subscription and this server would control it, hence the name biller.&lt;br /&gt;
&lt;br /&gt;
Excerpt from a copy of the [http://beginners.subspace.net/history/vie/subnews.html VIE website]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;We are just concluding deals with various partners the upshot of which is that billing for Subspace will almost certainly not happen till July we are still assuming a $10 a month or $1 a day scheme and a box version that will include several months play built in.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Billing Software ==&lt;br /&gt;
&lt;br /&gt;
=== UDP ===&lt;br /&gt;
The original billing protocol.&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2.00b by [[Confess]]&lt;br /&gt;
**This is Confess' version of SSBiller2 with a bunch of new features. (C++ source)&lt;br /&gt;
**http://www.mervbot.com/files/ssb2confess.rar&lt;br /&gt;
&lt;br /&gt;
*SubSpace Billing Server 2 Release 11j by [[Catid]]&lt;br /&gt;
**This is SOS' much improved version of my billing server, open-sourced as well. The BAN.DAT and BANFREE.DAT files are not compatible with the original SSBiller2. New: Fixed a large security-related bug. Download and replace your copy of SSBilling2.EXE!&lt;br /&gt;
**Fully Featured&lt;br /&gt;
**http://www.mervbot.com/files/ssb2.zip&lt;br /&gt;
&lt;br /&gt;
*subbill 0.23 by [[Prittk]] &lt;br /&gt;
**Not recommended as it uses 100% CPU&lt;br /&gt;
**Has only basic features.&lt;br /&gt;
**http://www.subspacedownloads.com/index.php?act=file&amp;amp;fid=31&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
*Linux Port of SubSpace Billing Server 2 Release 11j by [[Doc Flabby]]&lt;br /&gt;
** No Encryption&lt;br /&gt;
** Issues with Compilation from source (compiler version specific)&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7782&lt;br /&gt;
&lt;br /&gt;
=== TCP ===&lt;br /&gt;
The new billing protocol.&lt;br /&gt;
See the [[TCP Billing FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Core_Protocol&amp;diff=5808</id>
		<title>Talk:Core Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Core_Protocol&amp;diff=5808"/>
				<updated>2007-10-14T13:23:47Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: not all packets can be nested&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Note on 0x0a00 packet ==&lt;br /&gt;
I think when asss sends these the total size of each packet is 480 bytes, with the last packet in the stream being the remainder (read: less than 480 bytes).&lt;br /&gt;
&lt;br /&gt;
correct [[User:BaK|BaK]] 06:34, Jan 12, 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== Note on login response == &lt;br /&gt;
sending back the original key without change means no encryption, both to 1.34 and continuum&lt;br /&gt;
&lt;br /&gt;
== Packets can be nested(?) ==&lt;br /&gt;
Revision: http://wiki.minegoboom.com/index.php?title=Core_protocol&amp;amp;oldid=5804&lt;br /&gt;
&lt;br /&gt;
Revision By: Doc Flabby&lt;br /&gt;
&lt;br /&gt;
[[User:Smong|Smong]] 13:11, October 13, 2007 (PDT) says:&lt;br /&gt;
:I'm not sure on this, I think at one point I decided only 00 03 (reliable) and 00 0e (clustered) packets are allowed to contain other core packets. Or put another way, the fragmented packets (small and large streams) cannot contain another core packet. This is important when it comes to implementing a core protocol stack.&lt;br /&gt;
&lt;br /&gt;
:An implementation could use a packet object which contains a 520 byte buffer, you could have these packet objects allocated statically or from a resizable pool. If this method is used it is impossible to pass a packet larger than 520 bytes through the core protocol stack without some ugly special case code.&lt;br /&gt;
&lt;br /&gt;
:Also since you can only have one small and one large stream at a time you do not need to keep a list of streams. You only need 2 static variables, one for each type of stream (most likely a struct containing a pointer to a dynamically allocated buffer).&lt;br /&gt;
&lt;br /&gt;
:Finally ASSS does not expect a core packet to be inside a fragmented packet (it will just ignore it by default).&lt;br /&gt;
&lt;br /&gt;
[[User:Smong|Smong]] 13:18, October 13, 2007 (PDT) says:&lt;br /&gt;
:Additionally I think this phrase already in the page &amp;quot;There is support for reliable ordered packets, large packets and cluster packets&amp;quot; covers the &amp;quot;Packets can be nested (They are usually processed recursively)&amp;quot; phrase. The original intention of the bullet points was for important specifications that would look awkward written as a complete sentence.&lt;br /&gt;
&lt;br /&gt;
--[[User:Doc flabby|Doc flabby]] 06:23, October 14, 2007 (PDT) says&lt;br /&gt;
&lt;br /&gt;
: I wasn't sure which packets could be nested, but I thought it worth meantioning as It was something that is non-obvious and took me quite a time to find out!&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Core_Protocol&amp;diff=5804</id>
		<title>Core Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Core_Protocol&amp;diff=5804"/>
				<updated>2007-10-12T13:52:12Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: packets can be nested&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This protocol is UDP and bi-directional. It can be thought of as another layer within an application's network layer. [[Subgame]], [[ASSS]], [[Continuum]], VIE's [[SubSpace]] client, the [[Directory server]], and some [[Billing Server|Billing Servers]] utilize this protocol.&lt;br /&gt;
&lt;br /&gt;
There is support for reliable ordered packets, large packets and cluster packets.&lt;br /&gt;
&lt;br /&gt;
*The maximum packet size is 520 bytes&lt;br /&gt;
*All integers are little endian&lt;br /&gt;
*All core packets begin with the type byte 0x00&lt;br /&gt;
*Packets can be nested (They are usually processed recursivly)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0x01 login&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x01&lt;br /&gt;
2      4    client key&lt;br /&gt;
6      2    protocol version (vie = 0x01, ctm = 0x11)&lt;br /&gt;
&lt;br /&gt;
0x02 login response&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x02&lt;br /&gt;
2      4    ~client key (negative)&lt;br /&gt;
&lt;br /&gt;
0x03 reliable header&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x03&lt;br /&gt;
2      4    packet id&lt;br /&gt;
6      ?    payload (514 max)&lt;br /&gt;
&lt;br /&gt;
0x04 reliable acknowledge&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x04&lt;br /&gt;
2      4    packet id&lt;br /&gt;
&lt;br /&gt;
0x05 sync&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x05&lt;br /&gt;
2      4    local time&lt;br /&gt;
6      4    packets sent&lt;br /&gt;
10     4    packets received&lt;br /&gt;
&lt;br /&gt;
0x06 sync response&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x06&lt;br /&gt;
2      4    time from last received 0x05 packet&lt;br /&gt;
6      4    server time&lt;br /&gt;
&lt;br /&gt;
0x07 disconnect&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x07&lt;br /&gt;
&lt;br /&gt;
0x08 small chunk&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x08&lt;br /&gt;
2      ?    payload (expect 472 max)&lt;br /&gt;
keep appending payloads until 0x09 chunk tail is received&lt;br /&gt;
&lt;br /&gt;
0x09 chunk tail&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x09&lt;br /&gt;
2      ?    payload (expect 472 or less)&lt;br /&gt;
append this payload then process contents as a non-core packet&lt;br /&gt;
&lt;br /&gt;
0x0A stream&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x0A&lt;br /&gt;
2      4    total length of all segments&lt;br /&gt;
6      ?    payload &lt;br /&gt;
keep appending payloads until total length is reached then process contents as&lt;br /&gt;
a non-core packet.&lt;br /&gt;
&lt;br /&gt;
0x0B cancel stream request&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x0B&lt;br /&gt;
&lt;br /&gt;
0x0C cancel stream acknowledge&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x0C&lt;br /&gt;
&lt;br /&gt;
0x0E cluster&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x0E&lt;br /&gt;
2      1    length&lt;br /&gt;
3      ?    payload with length as above&lt;br /&gt;
packet repeats from offset 2 until end, process contents as arbitrary packet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5803</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5803"/>
				<updated>2007-10-12T13:45:42Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added working directory servers (sorry for edit spammage) - if this was abad idea please remove :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a directory server to retrieve a list of active zones. Client's connect to UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
A [[zone]] can register itself with one or more directory servers so players can find the zone. It utilizes the [[Directory Game Server Protocol]] on UDP port 4991.&lt;br /&gt;
&lt;br /&gt;
== Directory Server Software ==&lt;br /&gt;
&lt;br /&gt;
A variety of directory server's are available for you to download.  &lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* Public Directory Server software v0.3 (by [[PriitK]])&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]])&lt;br /&gt;
** http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
* JEDirectoryServer (by ''unknown'')&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]]), ported to Linux by [[User:Doc flabby|Doc Flabby]].&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=74575&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform ===&lt;br /&gt;
* SkyDir by [[User:Doc flabby|Doc Flabby]], written in Python with SQLite.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7590&lt;br /&gt;
&lt;br /&gt;
== Public Directory Servers ==&lt;br /&gt;
&lt;br /&gt;
The current available and &amp;quot;reliable&amp;quot; public directory servers are:&lt;br /&gt;
&lt;br /&gt;
* sscentral.sscuservers.net&lt;br /&gt;
** ''Administrated by [[PriitK]]''&lt;br /&gt;
* ssdir.playsubspace.com&lt;br /&gt;
** ''Administrated by [[User:Doc flabby|Doc Flabby]]''&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User_talk:Doc_flabby&amp;diff=5802</id>
		<title>User talk:Doc flabby</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User_talk:Doc_flabby&amp;diff=5802"/>
				<updated>2007-10-12T13:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: New page: hello!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hello!&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5801</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5801"/>
				<updated>2007-10-12T13:36:39Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Cross-Platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a directory server to retrieve a list of active zones. Client's connect to UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
A [[zone]] can register itself with one or more directory servers so players can find the zone. It utilizes the [[Directory Game Server Protocol]] on UDP port 4991.&lt;br /&gt;
&lt;br /&gt;
== Directory Server Software ==&lt;br /&gt;
&lt;br /&gt;
A variety of directory server's are available for you to download. &lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* Public Directory Server software v0.3 (by [[PriitK]])&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]])&lt;br /&gt;
** http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
* JEDirectoryServer (by ''unknown'')&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]]), ported to Linux by [[User:Doc flabby|Doc Flabby]].&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=74575&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform ===&lt;br /&gt;
* SkyDir by [[User:Doc flabby|Doc Flabby]], written in Python with SQLite.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7590&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5800</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5800"/>
				<updated>2007-10-12T13:36:27Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: rearranged page a bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a directory server to retrieve a list of active zones. Client's connect to UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
A [[zone]] can register itself with one or more directory servers so players can find the zone. It utilizes the [[Directory Game Server Protocol]] on UDP port 4991.&lt;br /&gt;
&lt;br /&gt;
== Directory Server Software ==&lt;br /&gt;
&lt;br /&gt;
A variety of directory server's are available for you to download. &lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
* Public Directory Server software v0.3 (by [[PriitK]])&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]])&lt;br /&gt;
** http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
* JEDirectoryServer (by ''unknown'')&lt;br /&gt;
** http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
* SubSpace Directory Server 4 (by [[catid]]), ported to Linux by [[User:Doc flabby|Doc Flabby]].&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?p=74575&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform ===&lt;br /&gt;
* SkyDir by [[User:Doc flabby|Doc Flabby]], written in Python with SQLite.&lt;br /&gt;
** http://forums.minegoboom.com/viewtopic.php?t=7590&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5789</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5789"/>
				<updated>2007-10-08T16:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the Directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a Directory server to retrieve a list of active zones. This is done on UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
Zones can register with Directory servers so that players can find the zone. This is done on UDP port 4991 using the [[Directory Game Server Protocol]].&lt;br /&gt;
&lt;br /&gt;
=== Directory Server Software ===&lt;br /&gt;
&lt;br /&gt;
The main Directory Server Software Available&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
JEDirectoryServer (by ??? )&lt;br /&gt;
http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
Public Directory Server software v0.3 (by [[Prittk]])&lt;br /&gt;
http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
SubSpace Directory Server 4 (by [[Catid]])&lt;br /&gt;
http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
SubSpace Directory Server 4 (by [[Catid]])&lt;br /&gt;
has been ported to Linux by [[Doc Flabby]]&lt;br /&gt;
&lt;br /&gt;
http://forums.minegoboom.com/viewtopic.php?p=74575&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5788</id>
		<title>Directory server</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_server&amp;diff=5788"/>
				<updated>2007-10-08T16:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added software links, will tidy later&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''Directory server''' is provides a way for [[client]]s to retreive a list of [[zone]]s that are currently online and running. These servers provide information on any zones that have registered with the Directory server. This information includes the name and description of the zone, the ip and port that should be used to connect to the zone, the server version, whether or not a billing server is connected to the zone, as well as the number of players in the zone.&lt;br /&gt;
&lt;br /&gt;
Both [[SubSpace]] and [[Continuum]] [[client|clients]] are capable of saving this information locally on the PC in the [[zone.dat]] file.&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
&lt;br /&gt;
A [[client]] can connect to a Directory server to retrieve a list of active zones. This is done on UDP port 4990 using the [[Directory Client Protocol]].&lt;br /&gt;
&lt;br /&gt;
Zones can register with Directory servers so that players can find the zone. This is done on UDP port 4991 using the [[Directory Game Server Protocol]].&lt;br /&gt;
&lt;br /&gt;
=== Directory Server Software ===&lt;br /&gt;
&lt;br /&gt;
The main Directory Server Software Available&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
JEDirectoryServer &lt;br /&gt;
Public Directory Server software v0.3 (by [[Prittk]])&lt;br /&gt;
http://www.subspacedownloads.com/index.php?act=list&amp;amp;cat=3&lt;br /&gt;
&lt;br /&gt;
SubSpace Directory Server 4 (by [[Catid]])&lt;br /&gt;
http://www.mervbot.com/files/DDirServ.zip&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
SubSpace Directory Server 4 (by [[Catid]])&lt;br /&gt;
has been ported to Linux by [[Doc Flabby]]&lt;br /&gt;
&lt;br /&gt;
http://forums.minegoboom.com/viewtopic.php?p=74575&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Doc_flabby&amp;diff=5633</id>
		<title>User:Doc flabby</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Doc_flabby&amp;diff=5633"/>
				<updated>2007-05-23T20:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Doc!&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Discretion&amp;diff=5632</id>
		<title>Talk:Discretion</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Discretion&amp;diff=5632"/>
				<updated>2007-05-23T20:12:11Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom Client Side Code&lt;br /&gt;
&lt;br /&gt;
A better idea would be a custom client side scripting system.  Similar to how second life works.&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Server.ini&amp;diff=4169</id>
		<title>Talk:Server.ini</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Server.ini&amp;diff=4169"/>
				<updated>2007-04-06T14:18:45Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: directory servers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Oh yes, and sorry about the weird mistakes in here. RegEx's make me lazy. Also, I'm giving information on all the settings I know about, and all the settings Priit has added with explanations in the changelog, but some I have no clue (like most of Comms and Permission) --[[User:Cyan~Fire|Cyan~Fire]]&lt;br /&gt;
&lt;br /&gt;
==TOC==&lt;br /&gt;
&lt;br /&gt;
gerbils, that TOC looks ''really'' ugly. --[[User:Cyan~Fire|Cyan~Fire]]&lt;br /&gt;
&lt;br /&gt;
[[User:I88gerbils|i88gerbils]]: Put it on the left side though it's refreshing to find a Table of Contents on the right.  Better than having it ontop.&lt;br /&gt;
&lt;br /&gt;
[[User:Mine GO BOOM|Mine GO BOOM]]: I like it better on the right than anywhere else. On top is too long, on the left just pushes the page too far over. If you want to get fancy, put it in a floating div box on either side, so the rest of the page wraps around it. Should look better then (though I still think better on the right).&lt;br /&gt;
&lt;br /&gt;
Floating boxes are so annoying to get right. Can't we just take advantage of the &amp;quot;Hide&amp;quot; feature? --[[User:Cyan~Fire|Cyan~Fire]]&lt;br /&gt;
&lt;br /&gt;
[[User:I88gerbils|i88gerbils]]: I told you it looked purrty! :d&lt;br /&gt;
&lt;br /&gt;
== Directory Servers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Doc Flabby|Doc Flabby]]:  Are the ones in the wiki correct?&lt;br /&gt;
&lt;br /&gt;
    sscentral.subspace.inet.fi,ssdir.playsubspace.com&lt;br /&gt;
&lt;br /&gt;
I thought it was     &lt;br /&gt;
    sscentral.sscuservers.net,ssdir.playsubspace.com&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Subgame&amp;diff=5073</id>
		<title>Subgame</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Subgame&amp;diff=5073"/>
				<updated>2007-02-10T12:38:52Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: Opioions should be left for the discussion page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Based on [[VIE]]'s special Subgame, [[Subgame]] (or Subgame2) is the alternate server to [[ASSS]]. It was originally made by [[VIE]], but was edited by [[PriitK]] to support [[Continuum]]. It is closed source, uses more memory, and lacks many of the features ASSS has.  Subgame works in connection with a [[Billing Server]] to allow users to enter a zone. Old and stable, Subgame is used by most zones today.&lt;br /&gt;
&lt;br /&gt;
== .scr files ==&lt;br /&gt;
Subgame saves private arena scores in .scr files, one for each arena. These files are composed of repeating structures that hold score information for one player as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;struct PlayerScore&lt;br /&gt;
{&lt;br /&gt;
	unsigned long userid;	//given by ?userid command&lt;br /&gt;
	unsigned short kills, deaths;&lt;br /&gt;
	unsigned short victories;	//incremented on a team victory, player must be in a ship, not spec.&lt;br /&gt;
	long killpoints, flagpoints;&lt;br /&gt;
};&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.shanky.com/cgi-bin/ryan/download.cgi?scrfiles.zip Here] are two tools to manipulate .scr files.&lt;br /&gt;
&lt;br /&gt;
== Change Log ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
----------------------------- version 1.34.14bs2 ------------------------------&lt;br /&gt;
Small update to disable &amp;quot;Unknown Integrity Violation&amp;quot; alerts caused by a yet&lt;br /&gt;
unsupported packet.&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.14bs -------------------------------&lt;br /&gt;
Removed handler for 'Process debugger' security warnings, as Cont039pr3 sends&lt;br /&gt;
them (as well as your process list) erroneously.&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.14b --------------------------------&lt;br /&gt;
Added new security checks for Continuum 0.39pr2&lt;br /&gt;
&lt;br /&gt;
Fixed rare crash on certain invalid packet sequence&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:BindIP - local IP address to bind server ports &lt;br /&gt;
to. Useful in multihomed systems only.&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.14a --------------------------------&lt;br /&gt;
New server.ini variable: Misc:BotsIP - clients with that IP are allowed to&lt;br /&gt;
exceed packet flood limits&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.14 ---------------------------------&lt;br /&gt;
New server.ini variable: Misc:AllowPrerelease - default 1, when set, users with&lt;br /&gt;
new prerelease versions are allowed to play&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:SaveSpawnScore - default 0, when set, server will save&lt;br /&gt;
arena score to arenaname.scr file. NB! default setting changes differs from&lt;br /&gt;
older subgame versions, where spawn scores were always saved to .scr file and&lt;br /&gt;
there was no option to disable it. Disabling .scr file save will make server&lt;br /&gt;
run smoother and will prevent server directory filling up with useless files.&lt;br /&gt;
&lt;br /&gt;
Fixed false connection flood alerts&lt;br /&gt;
&lt;br /&gt;
Fixed player not taking damage after macroing ?go arena several times&lt;br /&gt;
													   &lt;br /&gt;
----------------------------- version 1.34.13c --------------------------------&lt;br /&gt;
Added client timer drift percentage to /*einfo&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.13b --------------------------------&lt;br /&gt;
Added support for position packet queueing and smart clustering to save &lt;br /&gt;
bandwidth. To enable it, set in server.ini Routing:QueuePositions:1. Following&lt;br /&gt;
variables can be used to control clustering process: &lt;br /&gt;
Routing:PosSendRadar - how long radar packets are queued, default 100 ms &lt;br /&gt;
Routing:PosSendEdge - how long packets on screen edge are queued, default 30 ms&lt;br /&gt;
Routing:PosSendClose - how long close packets are queue, default 20 ms&lt;br /&gt;
Routing:ClosePosPixels - how near are packets considered close, default 250 &lt;br /&gt;
pixels&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:MaxTimerDrift - percentage how much client timer is &lt;br /&gt;
allowed to differ from server timer [Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
Added support for chat channel multicast to prevent zone&amp;lt;&amp;gt;biller connection&lt;br /&gt;
overload on very popular chats like Hockey zone's ?chat=zilla&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Latency:NegativeClientSlowPacketTime - packets with future&lt;br /&gt;
timestamp farther in future than this variable are considered as slow packets.&lt;br /&gt;
Default value: 0 - feature is disabled. Feature is still experimental.&lt;br /&gt;
[Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Soccer:DisableWallPass - default 0, when set, passing ball&lt;br /&gt;
through walls is diabled. There must be clear line between ball and ship &lt;br /&gt;
center to pick up ball [Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Soccer:DisableBallKilling - default 0, when set, ships with&lt;br /&gt;
0 velocity in safezone don't catch ball [Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.13a --------------------------------&lt;br /&gt;
Fixed extreme lagging bug when subgame was stated when GetTickCount() returned&lt;br /&gt;
negative values (Windows has been running without rebooting 25 days)&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.13 ---------------------------------&lt;br /&gt;
Removed incoming bandwidth limit from localhost connections&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:AntiWarpSettleDelay - time in 1/100th seconds after &lt;br /&gt;
warping/portaling/attaching during which artificial antiwarp is activated&lt;br /&gt;
[Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
New cfg variables: Spawn:Team0-X, Spawn:Team0-Y, Spawn:Team0-Radius - allows&lt;br /&gt;
specify spawn location and radius per team. If only Team0 variables are set, &lt;br /&gt;
all teams use them, if Team0 and Team1 variables are set, even teams use Team0&lt;br /&gt;
ones and odd team Team1 ones. It is possible to set spawn positions upto 4&lt;br /&gt;
teams (Team0-Team3) [Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:DisableScreenshot - disables Continuum's screenshot&lt;br /&gt;
functionality for non-spectators if set to 1 [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Comms:FlushTime - time in millseconds how long server&lt;br /&gt;
will collect position packets before sending them to clients. Recommended&lt;br /&gt;
setting: 10 - 20&lt;br /&gt;
&lt;br /&gt;
Fixed unauthenticated users (name starting with ^) getting moderator powers&lt;br /&gt;
when using billing server proxy and billing server is down&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Comms:BandwithIdleTime - time in seconds when server&lt;br /&gt;
stops sending position packets to idle spectators. Useful to save bandwidth. &lt;br /&gt;
Idle time is also shown in /*einfo now&lt;br /&gt;
&lt;br /&gt;
Fixed server crash when client requested to go to negative frequency&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Comms:SelectTime - time in millseconds how long server&lt;br /&gt;
should wait incoming packet using select() function. This is replacement for &lt;br /&gt;
CPU:SleepTime, which sleeps constant time, regardless if there are incoming&lt;br /&gt;
packets waiting processing or not. Recommended settings: Comms:SelectTime:10,&lt;br /&gt;
CPU:SleepTime:0 and CPU:SleepPerIteration:0&lt;br /&gt;
&lt;br /&gt;
Fixed bug in Continuum's protocol. NB! Continuum 0.38 will require 1.34.13&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12a --------------------------------&lt;br /&gt;
Added proxy detection to /*einfo. Proxy is detected for Continuum 0.37 and&lt;br /&gt;
later clients. You need to set server IP address in server.ini [Misc] ServerIP&lt;br /&gt;
for it to work. &lt;br /&gt;
* Undetermined - SS 1.3x or Continuum 0.36 clients&lt;br /&gt;
* SOCKS5 proxy - User is using Continuum's built in SOCKS5 proxy&lt;br /&gt;
* Using proxy at localhost - player is using proxy ran in same machine as &lt;br /&gt;
Continuum client. There is no other reason to do so than monitoring or &lt;br /&gt;
tampering with packet stream&lt;br /&gt;
* Using custom proxy - player is using custom proxy. Suspect cheating.&lt;br /&gt;
* Using NAT - player is using router or firewall doing NAT translation&lt;br /&gt;
* Not using proxy - no proxy was detected between client and server&lt;br /&gt;
&lt;br /&gt;
Fixed timer desync and slow FPS sysop messages. Before &amp;quot;Unknown interity &lt;br /&gt;
violation&amp;quot; was displayed&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:StartInSpec - if set, players entering arena are always&lt;br /&gt;
put to spectator mode&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:ForceContinuumOnly - if set server will ignore&lt;br /&gt;
ContinuumOnly variable is all cfg files and require Continuum in all arenas&lt;br /&gt;
&lt;br /&gt;
New command: *objset +/-&amp;lt;object id&amp;gt;,+/-&amp;lt;object id&amp;gt;,... - sets state of listed&lt;br /&gt;
map/screen objects. +&amp;lt;object id&amp;gt; shows object and -&amp;lt;object id&amp;gt; hides it. For &lt;br /&gt;
example &amp;quot;*objset +1,-20,+13&amp;quot; shows objects 1 and 13 and hides object 20.&lt;br /&gt;
Command is meant to replace *objon and *objoff commands and it can be sent&lt;br /&gt;
to player privately or to whole arena. Command is meant for humans to use, for&lt;br /&gt;
bots there is special packet for toggling objects states which is much more&lt;br /&gt;
efficient. See BuildLevel documentation for more info about the objects. &lt;br /&gt;
[Continuum 0.38+]&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12 release -------------------------&lt;br /&gt;
Added support for zone staff chats. To use local chats set Misc:StaffChat in&lt;br /&gt;
server.ini to comma separated chat name list. Only players with moderator and&lt;br /&gt;
higher powers can enter these chats and in ?chat these chats are listed as&lt;br /&gt;
(staff) chatname&lt;br /&gt;
&lt;br /&gt;
Disabled non-public chat ? commands (ie /?password or '?squadleave) as there &lt;br /&gt;
has beed a lot of accidents where players trying to help others will do the&lt;br /&gt;
command without intention&lt;br /&gt;
&lt;br /&gt;
Bugfix in Continuum 0.37 user handling&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12pr4 ------------------------------&lt;br /&gt;
Fixed a crash bug introduced in 1.34.12pr3 in user sound checking&lt;br /&gt;
&lt;br /&gt;
New command: /*watchdamage - Toggles player damage reporting on/off for &lt;br /&gt;
selected player. When turned on moderator will see something like that:&lt;br /&gt;
PriitK took 500 damage from l33t L2 bomb having 1400 nrg [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12pr3 ------------------------------&lt;br /&gt;
Added support for team sounds. Regular users can play sounds %150 - %255 in&lt;br /&gt;
team chat, zone sysops can upload these sounds in lvz file&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:MinUsage. Specifies amount of usage in hours for players&lt;br /&gt;
to play in arena.&lt;br /&gt;
&lt;br /&gt;
Adding + in front of level files specified by Misc:LevelFiles will make &lt;br /&gt;
downloading them optional for users&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12pr2 ------------------------------&lt;br /&gt;
Fixed crash when lvz file is specified in cfg, but file is not present&lt;br /&gt;
&lt;br /&gt;
Fixed /*tinfo to display invalid last line&lt;br /&gt;
&lt;br /&gt;
Fixed vip functionality to bypass code checksums&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.12pr1 ------------------------------&lt;br /&gt;
Added collecting of server&amp;lt;-&amp;gt; client clock synchronization info and commad &lt;br /&gt;
/*tinfo to view it. &lt;br /&gt;
&lt;br /&gt;
Removed printing of XXX killed by YYY to server console&lt;br /&gt;
&lt;br /&gt;
Removed updating of LastUsedStamp for spawn cfg files&lt;br /&gt;
&lt;br /&gt;
New cfg variable: &amp;lt;ship&amp;gt;:Radius. It specifies ship radius in pixels. In old&lt;br /&gt;
Subspace all ships have fixed radius 14 pixels. This means that ships will fit&lt;br /&gt;
through 2 tile holes, will take damage from weapons 14 pixels away from ship&lt;br /&gt;
center etc. Changing the radius will make ships smaller or bigger from game&lt;br /&gt;
play aspect, you can also change visual aspect to players by specifying custom&lt;br /&gt;
level graphics and also sounds [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
New command: *objon &amp;lt;object id&amp;gt; - shows objects on map/screen with specified &lt;br /&gt;
id. Can be sent to player privately or to whole arena. See BuildLevel &lt;br /&gt;
documentation for more info. [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
New command: *objoff &amp;lt;object id&amp;gt; - hides objects on map/screen with specified&lt;br /&gt;
id. Can be sent to player privately or to whole arena. [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:LevelFiles. Comma separated list of level files built &lt;br /&gt;
with BuildLevel.exe (lvz files). These files contain screen and map object &lt;br /&gt;
definitions and graphics, custom shipsets, sounds, help texts, etc. See&lt;br /&gt;
BuildLevel documentation for more info. [Continuum 0.37+]&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:AllowVIEClients. When set to 0 Subspace client&lt;br /&gt;
users are not allowed to enter zone. (It was actually added a while ago but&lt;br /&gt;
I forgot to document it)&lt;br /&gt;
&lt;br /&gt;
Added vip.txt. Players listed in vip.txt can enter zone with old Subspace&lt;br /&gt;
client when zone is set to Misc:AllowVIEClients:0 and can play in arenas that&lt;br /&gt;
have Misc:ContinuumOnly set to 1 in config. Also players listed can enter zone&lt;br /&gt;
with Continuum 0.37 pre-release versions. When billing server is down vip.txt&lt;br /&gt;
is ignored, naturally&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.11 ---------------------------------&lt;br /&gt;
New command: /*warpto xcoord ycoord - privately sent to player will warp player &lt;br /&gt;
to given position. Coordinates are given in tiles (1-1023), when there is wall&lt;br /&gt;
at specified location, random position is chosen. [Continuum 0.35+]&lt;br /&gt;
&lt;br /&gt;
Modified /*watchgreen to show negative prizes&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Spectator:HideFlags. When set dropped flags are not shown to&lt;br /&gt;
spectators. [Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Spectator:NoXRadar. When set spectators won't have X-Radar&lt;br /&gt;
[Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Bullet:ExactDamage. When set bullet damage is exact, not&lt;br /&gt;
random [Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:SlowFrameRate. Specifies minimum frame rate for client.&lt;br /&gt;
When frame rate falls below specified rate for 10 seconds, client is &lt;br /&gt;
disconnected. 0 - disable check, maximum is 35 [Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: &amp;lt;ship&amp;gt;:SeeBombLevel. 1=see all bombs on radar, 2=see bombs&lt;br /&gt;
greater than level 1 on radar, 3=see bombs greater than level 2 on radar, &lt;br /&gt;
0 = no bombs are shown on radar [Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
New cfg variable: &amp;lt;ship&amp;gt;:DisableFastShooting. When set firing bullets, bombs&lt;br /&gt;
and thors is disabled when using afterburner [Continuum 0.36+]&lt;br /&gt;
&lt;br /&gt;
Fixed a bug in Continuum communcation protocol that caused connection to get&lt;br /&gt;
stuck infrequently&lt;br /&gt;
&lt;br /&gt;
Added confirmation message to /*warn command&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:NoFlagRewardLimit. If set non-zero reward &lt;br /&gt;
multiplier limit is removed in FlagRewardMode 1. Multiplier is &lt;br /&gt;
(maximumAllowedPerTeam / numberOfTeamMembers), if NoFlagRewardLimit is set 0&lt;br /&gt;
multiplier is limited by 2.&lt;br /&gt;
&lt;br /&gt;
Fixed bug causing infrequent server crashes (Access violation at &lt;br /&gt;
address 41d006)&lt;br /&gt;
&lt;br /&gt;
Fixed another crash bug (Access violation at address 428e20)&lt;br /&gt;
&lt;br /&gt;
Fixed security hole that allows anybody to upload moderate.txt and permit.txt&lt;br /&gt;
&lt;br /&gt;
Fixed 'shadow KOTH' bug. When entering arena other players sometimes see that &lt;br /&gt;
entered player has KOTH, while he doesn't. Happends very seldom, but when it is&lt;br /&gt;
triggered all players entering had KOTH and only server shutdown/start would&lt;br /&gt;
fix that&lt;br /&gt;
&lt;br /&gt;
Fixed problem of public teams becoming uneven when there are private teams in &lt;br /&gt;
arena.&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:ContinuumOnly. When set to 1 non-Continuum players are&lt;br /&gt;
locked to spec and get message to use Continuum to play&lt;br /&gt;
&lt;br /&gt;
New cfg variables: Latency:C2SNoDataAction and Latency:C2SNoDataTime. If &lt;br /&gt;
C2SNoDataAction is set to non-zero and there is no data coming from player for &lt;br /&gt;
C2SNoDataTime (in 1/100th seconds) follwing action is performed:&lt;br /&gt;
C2SNoDataAction=1: Report it using sysop message&lt;br /&gt;
C2SNoDataAction=2: Put player to spec mode&lt;br /&gt;
C2SNoDataAction=4; Kick player.&lt;br /&gt;
C2SNoDataAction can be combination (sum) of above actions.&lt;br /&gt;
&lt;br /&gt;
Added new ArenaMode 5 (Custom:ArenaMode in server.ini). In arena mode 1-4 &lt;br /&gt;
arenaname.cfg is created (copied from server.cfg) every time a user enters a &lt;br /&gt;
spawn. This means that over time cfg files are piling up in server directory&lt;br /&gt;
and changes in server.cfg are not reflected in spawns, makeing maintenance of&lt;br /&gt;
settings pain in the ass. In ArenaMode 5 if arenaname.cfg is not found, server&lt;br /&gt;
will use spawn.cfg.&lt;br /&gt;
&lt;br /&gt;
Fixed bug in server that allowed sending cross-arena private messages so that &lt;br /&gt;
they appear to come from user without name.&lt;br /&gt;
&lt;br /&gt;
New command: *relkills &amp;lt;0 or 1&amp;gt; - toggles sending kills reliably on and off.&lt;br /&gt;
Normally server sends kill messages as non-reliable messages if killed player's&lt;br /&gt;
bounty is less than 200 (teamkills are always non-reliable). Setting &lt;br /&gt;
*relkills 1 will make server send kill messages reliably, &lt;br /&gt;
&lt;br /&gt;
New command: /*bandwidth &amp;lt;bandwidth&amp;gt; - allow to set cutback watermark per &lt;br /&gt;
player, overriding arena's Latency:CutbackWatermark setting&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.10 ---------------------------------&lt;br /&gt;
New command: *warn &amp;lt;text&amp;gt; - privately sent to player will display moderator&lt;br /&gt;
warning using red font to player&lt;br /&gt;
&lt;br /&gt;
Fixed problem with keepalive. After sending large amouts of data, such as&lt;br /&gt;
voice messages, settings, etc players got often kicked with low keepalive &lt;br /&gt;
values.&lt;br /&gt;
&lt;br /&gt;
Added client version display to /*einfo&lt;br /&gt;
&lt;br /&gt;
Fixed 3 buffer length checking/overflow bugs in lowlevel protocol&lt;br /&gt;
&lt;br /&gt;
Added ability to disable *shutdown command as sysops can execute arbitrary &lt;br /&gt;
commands with it and it is potential threat to host security. To disable &lt;br /&gt;
*shutdown create noshutdown directory to server directory. Don't forget to&lt;br /&gt;
set file permissions of that directory if sysops have FTP access&lt;br /&gt;
&lt;br /&gt;
Tons of continuum client releated changes&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.9 ----------------------------------&lt;br /&gt;
Fixed protection against IP spoofed packet floods. Made a simple mistake and &lt;br /&gt;
left it open to smart flooders. Smack me&lt;br /&gt;
&lt;br /&gt;
New command: *flags - displays locations of uncarried flags&lt;br /&gt;
&lt;br /&gt;
New command: /*greeninfo - displays how many particular prizes player has&lt;br /&gt;
picked up and it's difference from normal distribution&lt;br /&gt;
&lt;br /&gt;
Added displaying of client type to /*einfo to distinquish between VIE and&lt;br /&gt;
Continuum clients&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.8 ----------------------------------&lt;br /&gt;
Added protection against IP spoofed packet floods&lt;br /&gt;
&lt;br /&gt;
Fix against another DoS attack (voice sending with incomplete packet)&lt;br /&gt;
&lt;br /&gt;
New sysop command: *lag: shows average lag of all players in zone&lt;br /&gt;
&lt;br /&gt;
?getnews is now available only in spectator mode&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.7 ----------------------------------&lt;br /&gt;
Added fix against Catid's zone flooder. When flood is detected IP address is&lt;br /&gt;
added to blacklist and all traffic from that IP is ignored for time relative&lt;br /&gt;
to amount of flood received. Flooder's IP is reported once using sysop alert&lt;br /&gt;
&lt;br /&gt;
Added fastbombing detection. To enable it set Misc:CheckFastBombing in &lt;br /&gt;
server.ini as combination (sum) of following values:&lt;br /&gt;
 1 - Send sysop alert when fastbombing is detected&lt;br /&gt;
 2 - Filter out fastbombs&lt;br /&gt;
 4 - Kick fastbombing player off&lt;br /&gt;
There is Misc:FastBombingThreshold variable in server.ini to tune detection.&lt;br /&gt;
Default and recommended value for that variable is 30. Bomb/mine is considered&lt;br /&gt;
for fastbombing if delay between 2 bombs/mines is less than &lt;br /&gt;
ship:BombFireDelay - Misc:FastBombingThreshold&lt;br /&gt;
&lt;br /&gt;
Added support for multiple alert commands. Misc:AlertCommand is now comma&lt;br /&gt;
separated list of player alert commands (f.ex. cheater,help,illegal)&lt;br /&gt;
&lt;br /&gt;
Alert commands are now logged to server log&lt;br /&gt;
&lt;br /&gt;
Added support for zone local chats. To use local chats set Misc:LocalChat in&lt;br /&gt;
server.ini to comma separated chat name list&lt;br /&gt;
&lt;br /&gt;
Added ability to force obscene checking on for all clients. To enable it set&lt;br /&gt;
Misc:ForceObsceneCheck in server.ini to 1. Users can toggle obscenity blocking&lt;br /&gt;
by ?obscene command&lt;br /&gt;
&lt;br /&gt;
Added new player command: ?find &amp;lt;player name&amp;gt;. Tells in what arena specified&lt;br /&gt;
player is if not in private arena (starting with #). Moderators can find&lt;br /&gt;
players in private arenas too&lt;br /&gt;
&lt;br /&gt;
Players with name ^Banned are silenced and locked to spec&lt;br /&gt;
&lt;br /&gt;
Added feature to limit player's screen resolution. To enable set in an arena&lt;br /&gt;
cfg file Misc:MaxXRes and Misc:MaxYRes variables. 0 = no limit&lt;br /&gt;
&lt;br /&gt;
Added scorereset support without need to recycle zone (needs same functionality&lt;br /&gt;
to be added to billing server before it can be used)&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.6 ----------------------------------&lt;br /&gt;
Fix against Sage386's DoS attack (At least one that crashed Trench Wars and&lt;br /&gt;
I have crash dump about). It is a simple buffer overflow bug in login code&lt;br /&gt;
&lt;br /&gt;
New sysop command *version. Tells version for the server&lt;br /&gt;
&lt;br /&gt;
Added weapons server to client packetloss to /*lag command&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.5 ----------------------------------&lt;br /&gt;
Added weapons checking. To enable it set in server.ini Misc:CheckWeapons:1&lt;br /&gt;
If enabled follwing checks are preformed:&lt;br /&gt;
* Bullet fired with level &amp;gt; [ship]MaxGuns + [Flag]FlaggerGunUpgrade&lt;br /&gt;
* Boucning bullet fired and [PrizeWeight]BouncingBullets is 0 and [Cost]Bounce&lt;br /&gt;
  is 0&lt;br /&gt;
* Bomb fired with level &amp;gt; [ship]MaxBombs + [Flag]FlaggerBombUpgrade&lt;br /&gt;
* Prox bomb fired and [PrizeWeight]Proximity is 0 and [Cost]Prox is 0&lt;br /&gt;
* Bomb fired with shrap &amp;gt; [ship]ShrapnelMax&lt;br /&gt;
* Bomb fired with bouncing shrap and [PrizeWeight]BouncingBullets is 0 and&lt;br /&gt;
  [Cost]Bounce is 0&lt;br /&gt;
* Mine is fired and [ship]MaxMines is 0&lt;br /&gt;
* A prize is picked up and [PrizeWeight] of that prize is 0&lt;br /&gt;
* Stealth is turned on and [ship]StealthStatus is 0&lt;br /&gt;
* Cloak is turned on and [ship]CloakStatus is 0&lt;br /&gt;
* XRadar is turned on and [ship]XRadarStatus is 0&lt;br /&gt;
* Anti-Warp is turned on and [ship]AntiWarpStatus is 0&lt;br /&gt;
* Player uses ufo&lt;br /&gt;
&lt;br /&gt;
If one of the above conditions is true red sysop alert message is triggered and&lt;br /&gt;
that weapon packet is ignored. If [security]SecurityKickoff is 1 in server.cfg&lt;br /&gt;
file player is kicked out too. Check is deactiveded for smod+&lt;br /&gt;
&lt;br /&gt;
Added functinality to enable mod/smod/sysop commands only in certain arenas. &lt;br /&gt;
Access is controlled via moderate.txt/smod.txt/sysop.txt. To restrict access&lt;br /&gt;
append to moderate.txt/smod.txt/sysop.txt:&lt;br /&gt;
+playername:arenaname&lt;br /&gt;
If arenaname is empty access is granted in main (public) arenas. If arenaname&lt;br /&gt;
is @ access is granted in all private (not main) arenas. Here is an example of&lt;br /&gt;
smod.txt to grant smod access to PriitK in all arenas, to Foobar in public&lt;br /&gt;
arenas only, to Poophead in all private arenas and to Lagger in elim and super&lt;br /&gt;
arena&lt;br /&gt;
------smod.txt------&lt;br /&gt;
PriitK&lt;br /&gt;
Foobar&lt;br /&gt;
Poophead&lt;br /&gt;
Lagger&lt;br /&gt;
+Foobar:&lt;br /&gt;
+Poophead:@&lt;br /&gt;
+Lagger:elim&lt;br /&gt;
+Lagger:super&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:MaxPlayers. Overrides server.ini's Arena:ArenaMaxPlayers&lt;br /&gt;
variable for a spawn&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:ShipTypeSwitchResetPeriod. If set non-zero player&lt;br /&gt;
shipchange counters are reset in given period. It allows to set &lt;br /&gt;
Security:MaxShipTypeSwitchCount low to kick out players that use ship changes&lt;br /&gt;
to get good configuration or spawning spot&lt;br /&gt;
&lt;br /&gt;
New cfg variable: Misc:GreetMessage. It is sent to player when s/he enters&lt;br /&gt;
spawn&lt;br /&gt;
&lt;br /&gt;
New cfg variables: Misc:PeriodicMessage0-PeriodicMessage4. Value must have&lt;br /&gt;
following syntax: &amp;lt;period&amp;gt; &amp;lt;delay&amp;gt; [*]&amp;lt;text&amp;gt;&lt;br /&gt;
If set and players are in spawn &amp;lt;text&amp;gt;s starting with * are sent out as zone&lt;br /&gt;
messages and without * as arena messages. &amp;lt;period&amp;gt; &amp;lt;delay&amp;gt; are in minutes,&lt;br /&gt;
&amp;lt;delay&amp;gt; indicates when first message is sent after arena creation.&lt;br /&gt;
&lt;br /&gt;
New command: /*watchgreen. Toggles player green pickup logging on/off for&lt;br /&gt;
selected player. Then turned on, moderator who did it will receive notification&lt;br /&gt;
message every time when that player picks up green&lt;br /&gt;
&lt;br /&gt;
New command: /*einfo. Displays player billing user id and screen resolution&lt;br /&gt;
&lt;br /&gt;
New command: /*lag. Displays player ping and packetloss&lt;br /&gt;
&lt;br /&gt;
New command: ?lag. Displays ping and packetloss&lt;br /&gt;
&lt;br /&gt;
New commads: *getfile, *putfile and *delfile. Allow sysop to get/put/delete&lt;br /&gt;
files from server directory. exe, com, dll, bat and cmd files are offlimits.&lt;br /&gt;
Following commands were removed: get/putsysoplist, get/putsmodlist, &lt;br /&gt;
get/putnews, get/putobscene&lt;br /&gt;
&lt;br /&gt;
New command: *listban. Lists all active /*kill &amp;lt;minutes&amp;gt; bans with machine id,&lt;br /&gt;
time in seconds since ban was made, ban length in seconds&lt;br /&gt;
&lt;br /&gt;
New command: *removeban &amp;lt;machineid&amp;gt;. Removes a /*kill &amp;lt;minutes&amp;gt; ban&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.4 ----------------------------------&lt;br /&gt;
New command: /*ufo&lt;br /&gt;
&lt;br /&gt;
New command: /*super. If player isn't smod+ server will give data checksum&lt;br /&gt;
warnings&lt;br /&gt;
&lt;br /&gt;
New command: ?scorereset and 2 server.ini settings: Misc:AllowPubScorereset and&lt;br /&gt;
Misc:AllowPvtScorereset&lt;br /&gt;
&lt;br /&gt;
New command: *listmod - lists all mods+ in zone. SMod+ access is required for&lt;br /&gt;
this commad&lt;br /&gt;
&lt;br /&gt;
Fixed flag neuting: New server.ini setting Misc:TimerDropFlagTerritoryRadius&lt;br /&gt;
same as Flag:FlagTerritoryRadius, but will used only if flags are dropped when&lt;br /&gt;
timer expires. So, if you set Flag:FlagTerritoryRadius to 0 and &lt;br /&gt;
Misc:TimerDropFlagTerritoryRadius to 8 flags will be respawned on freq/ship&lt;br /&gt;
change&lt;br /&gt;
&lt;br /&gt;
Removed /*setfreq restrictions&lt;br /&gt;
&lt;br /&gt;
Fixed bug that caused occasional zone crashes&lt;br /&gt;
&lt;br /&gt;
----------------------------- version 1.34.3 ----------------------------------&lt;br /&gt;
? commands flooding protection (?chat macro)&lt;br /&gt;
&lt;br /&gt;
freq change flooding protection (=%freq macro in spec)&lt;br /&gt;
&lt;br /&gt;
New command: *specall - puts all players in arena to spec, but doesn't lock&lt;br /&gt;
them. Usual access restrictions apply: mods and smods cant spec sysops and mods&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:NoAntiInSafe. If set to non-zero antiwarp is &lt;br /&gt;
disabled in safe zones&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:LockFreqs. If set to non-zero freq changing when&lt;br /&gt;
arena is locked is disabled&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:PositionDataAccess. Extra position data is really &lt;br /&gt;
information about the player ship. It is displayed to spectators in the top of&lt;br /&gt;
screen (energy, rockets, walls, portals, etc). Normally only sysops see it, but&lt;br /&gt;
it can be configured in server.cfg via Misc:ExtraPositionData so, that all&lt;br /&gt;
players see it. It is not recommended, because it increases bandwidth players&lt;br /&gt;
use about 50% thus increasing ping/packetloss. This variable controls, who see&lt;br /&gt;
extra data. 0 - only sysops, 1 - smod+, 2 - mod+. It is meaningful only if &lt;br /&gt;
Misc:ExtraPositionData is 0 in server.cfg&lt;br /&gt;
&lt;br /&gt;
New server.ini variable: Misc:AlertCommand. Replacement to BanG ?cheater&lt;br /&gt;
command. Players can type ?&amp;lt;Misc:AlertCommand&amp;gt; &amp;lt;text&amp;gt;, that &amp;lt;text&amp;gt; is sent to&lt;br /&gt;
all mods+ who are in the zone. Command is disabled, if value of this variable&lt;br /&gt;
is empty.&lt;br /&gt;
&lt;br /&gt;
Negative bounty fix. Negative bounty is ignored and will trigger red sysop&lt;br /&gt;
messages&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Subgame]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:TCP_Billing_FAQ&amp;diff=5061</id>
		<title>Talk:TCP Billing FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:TCP_Billing_FAQ&amp;diff=5061"/>
				<updated>2007-02-10T12:33:09Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;just noticed this is the protocol faq, someone (read, pests) can split this into general faq --[[User:Smong|Smong]]&lt;br /&gt;
&lt;br /&gt;
The part about the Biller being unable to restart/shutdown zones is incorrect. Catid's biller is capable of doing so. -L.C.&lt;br /&gt;
&lt;br /&gt;
CatId's biller is a UDP Biller.  This is the TCP Billing page - Doc Flabby&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4110</id>
		<title>Zone.dat</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4110"/>
				<updated>2007-01-10T21:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Zone.dat format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Category Formats]]&lt;br /&gt;
&lt;br /&gt;
== Zone.dat format ==&lt;br /&gt;
&lt;br /&gt;
For each zone an entry like this must exist.&lt;br /&gt;
&lt;br /&gt;
The last field indicates that [[Continuum]] will not warn you are entering a non-[[SSC]] zone.  This is changed to 1 if you tick the box do not warn me again in Continuum.  The unknown field often seems to contain a dns name for some zones such as &amp;quot;server.trenchwars.org&amp;quot; for Trench Wars.&lt;br /&gt;
&amp;lt;Warn non-SSC zone&amp;gt; value is ignored by Continuum if the zone is an SSC zone.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Zone name&amp;gt;,&amp;lt;Zone ip&amp;gt;,&amp;lt;Zone port&amp;gt;,&amp;lt;unknown dns (can be left blank)&amp;gt;,&amp;lt;Warn non-SSC zone&amp;gt;&lt;br /&gt;
#&amp;lt;description&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSCU Trench Wars,66.36.241.110,5400,server.trenchwars.org,0&lt;br /&gt;
#SSCU Trench Wars - Sysops: DoCk&amp;gt; and PriitK - http://www.trenchwars.org ss://server.trenchwars.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4107</id>
		<title>Zone.dat</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4107"/>
				<updated>2007-01-10T21:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: edited example to make it more relivent :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Category Formats]]&lt;br /&gt;
&lt;br /&gt;
== Zone.dat format ==&lt;br /&gt;
&lt;br /&gt;
For each zone an entry like this must exist.&lt;br /&gt;
&lt;br /&gt;
The last field indicates that [[Continuum]] will not warn you are entering a non-[[SSC]] zone.  This is changed to 1 if you tick the box do not warn me again in Continuum.  The unknown field often seems to contain a dns name for some zones such as &amp;quot;server.trenchwars.org&amp;quot; for Trench Wars.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Zone name&amp;gt;,&amp;lt;Zone ip&amp;gt;,&amp;lt;Zone port&amp;gt;,&amp;lt;unknown dns (can be left blank)&amp;gt;,&amp;lt;Warn non-SSC zone&amp;gt;&lt;br /&gt;
#&amp;lt;description&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSCU Trench Wars,66.36.241.110,5400,server.trenchwars.org,0&lt;br /&gt;
#SSCU Trench Wars - Sysops: DoCk&amp;gt; and PriitK - http://www.trenchwars.org ss://server.trenchwars.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4106</id>
		<title>Zone.dat</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Zone.dat&amp;diff=4106"/>
				<updated>2007-01-10T21:26:10Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: Description of zone.dat format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Category Formats]]&lt;br /&gt;
&lt;br /&gt;
== Zone.dat format ==&lt;br /&gt;
&lt;br /&gt;
For each zone an entry like this must exist.&lt;br /&gt;
&lt;br /&gt;
The last field indicates that [[Continuum]] will not warn you are entering a non-[[SSC]] zone.  This is changed to 1 if you tick the box do not warn me again in Continuum.  The unknown field often seems to contain a dns name for some zones such as &amp;quot;server.trenchwars.org&amp;quot; for Trench Wars.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Zone name&amp;gt;,&amp;lt;Zone ip&amp;gt;,&amp;lt;Zone port&amp;gt;,&amp;lt;unknown dns (can be left blank)&amp;gt;,&amp;lt;Warn non-SSC zone&amp;gt;&lt;br /&gt;
#&amp;lt;description&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PSSF Kitty Girls!!!,64.79.194.184,5000,,1&lt;br /&gt;
#Kitty Girls for all!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Grelminar&amp;diff=5284</id>
		<title>User:Grelminar</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Grelminar&amp;diff=5284"/>
				<updated>2007-01-10T21:13:17Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: updated url to correct one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creator and Lead Developer of [[ASSS]] and its associated software (such as [[CCC]]).&lt;br /&gt;
&lt;br /&gt;
Homepage: http://asss.yi.org/&lt;br /&gt;
&lt;br /&gt;
To learn more about Grelminar, read the [[User:Grelminar/Interview.txt|interview]] between him and Fallen Angel done in October 2003.&lt;br /&gt;
&lt;br /&gt;
[[Category: People]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_Game_Server_Protocol&amp;diff=4109</id>
		<title>Directory Game Server Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_Game_Server_Protocol&amp;diff=4109"/>
				<updated>2007-01-10T00:11:32Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: another correction 8+2 isnt 14 as i have found out :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
[[Zone|Game Servers]] such as [[subgame2]] and [[ASSS]] register their prescence on [[Directory server|Directory Servers]]. This page describes the portion of the '''directory server protocol''' that game servers use.&lt;br /&gt;
&lt;br /&gt;
This system uses UDP packets, most commonly over port 4991. Maximum length of the packet is only limited to the directory server software itself, so it varies from each application. The specific lengths of most fields are static, with the zone description field being the only value that varies its length.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
g2d&lt;br /&gt;
&lt;br /&gt;
register game server&lt;br /&gt;
offset size comment&lt;br /&gt;
0      4    ip (leave this set to 0?)&lt;br /&gt;
4      2    port&lt;br /&gt;
6      2    player count&lt;br /&gt;
8      2    saving scores? (boolean)&lt;br /&gt;
10     4    version (set this to 134)&lt;br /&gt;
14     32   zone name (null terminated)&lt;br /&gt;
46     16   password (null terminated)&lt;br /&gt;
62     32   reserved (suggested to set this to 0)&lt;br /&gt;
94     ?    description (must be null terminated)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes on Priit's dirserv ==&lt;br /&gt;
Descriptions are recorded to the stats file with a max length of 490 bytes. The reserved field can be filled with any random data, as the directory server ignores this field completely.&lt;br /&gt;
&lt;br /&gt;
== Notes on Catid's dirserv ==&lt;br /&gt;
&lt;br /&gt;
=== Validating the packet ===&lt;br /&gt;
* The length of the packet must be greater than 95/0Ã—5F bytes. Basically this means the description can be blank but must be null terminated.&lt;br /&gt;
* The first 4 bytes (the IP field) must be zeroed.&lt;br /&gt;
* The reserved field must be zeroed.&lt;br /&gt;
* The name, password and description must be null terminated.&lt;br /&gt;
* The &amp;quot;save scores&amp;quot; field must be either 0 or 1.&lt;br /&gt;
&lt;br /&gt;
=== Validating the zone name ===&lt;br /&gt;
* Name must be at least one character long.&lt;br /&gt;
* First and last characters must cannot be a space.&lt;br /&gt;
* No more than one space in a row.&lt;br /&gt;
* Only ASCII characters between â€˜ â€˜ [0x20] and â€˜~â€™ [0x7E], inclusive.&lt;br /&gt;
&lt;br /&gt;
== Notes on zone.dat ==&lt;br /&gt;
Due to the format of zone.dat used to store your favourite zones, zone names should not begin with '#' [0x23] or contain any ',' [0x2C].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://cypherjf.sscentral.com/articles/game-server-to-directory-server/ CypherJF's original document]&lt;br /&gt;
* [http://web.archive.org/web/*/http://www4.ncsu.edu/~rniyenga/subspace/old/dprotocol.html Hammuravi's page]&lt;br /&gt;
* [http://asss.yi.org/asss/ ASSS Source]: src/directory.c&lt;br /&gt;
* [[Directory Client Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Directory_Game_Server_Protocol&amp;diff=4104</id>
		<title>Directory Game Server Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Directory_Game_Server_Protocol&amp;diff=4104"/>
				<updated>2007-01-10T00:08:43Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: 62 + 32 is 94 and not 92 as i have just found out&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
[[Zone|Game Servers]] such as [[subgame2]] and [[ASSS]] register their prescence on [[Directory server|Directory Servers]]. This page describes the portion of the '''directory server protocol''' that game servers use.&lt;br /&gt;
&lt;br /&gt;
This system uses UDP packets, most commonly over port 4991. Maximum length of the packet is only limited to the directory server software itself, so it varies from each application. The specific lengths of most fields are static, with the zone description field being the only value that varies its length.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
g2d&lt;br /&gt;
&lt;br /&gt;
register game server&lt;br /&gt;
offset size comment&lt;br /&gt;
0      4    ip (leave this set to 0?)&lt;br /&gt;
4      2    port&lt;br /&gt;
6      2    player count&lt;br /&gt;
8      2    saving scores? (boolean)&lt;br /&gt;
12     4    version (set this to 134)&lt;br /&gt;
14     32   zone name (null terminated)&lt;br /&gt;
46     16   password (null terminated)&lt;br /&gt;
62     32   reserved (suggested to set this to 0)&lt;br /&gt;
94     ?    description (must be null terminated)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes on Priit's dirserv ==&lt;br /&gt;
Descriptions are recorded to the stats file with a max length of 490 bytes. The reserved field can be filled with any random data, as the directory server ignores this field completely.&lt;br /&gt;
&lt;br /&gt;
== Notes on Catid's dirserv ==&lt;br /&gt;
&lt;br /&gt;
=== Validating the packet ===&lt;br /&gt;
* The length of the packet must be greater than 95/0Ã—5F bytes. Basically this means the description can be blank but must be null terminated.&lt;br /&gt;
* The first 4 bytes (the IP field) must be zeroed.&lt;br /&gt;
* The reserved field must be zeroed.&lt;br /&gt;
* The name, password and description must be null terminated.&lt;br /&gt;
* The &amp;quot;save scores&amp;quot; field must be either 0 or 1.&lt;br /&gt;
&lt;br /&gt;
=== Validating the zone name ===&lt;br /&gt;
* Name must be at least one character long.&lt;br /&gt;
* First and last characters must cannot be a space.&lt;br /&gt;
* No more than one space in a row.&lt;br /&gt;
* Only ASCII characters between â€˜ â€˜ [0x20] and â€˜~â€™ [0x7E], inclusive.&lt;br /&gt;
&lt;br /&gt;
== Notes on zone.dat ==&lt;br /&gt;
Due to the format of zone.dat used to store your favourite zones, zone names should not begin with '#' [0x23] or contain any ',' [0x2C].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [http://cypherjf.sscentral.com/articles/game-server-to-directory-server/ CypherJF's original document]&lt;br /&gt;
* [http://web.archive.org/web/*/http://www4.ncsu.edu/~rniyenga/subspace/old/dprotocol.html Hammuravi's page]&lt;br /&gt;
* [http://asss.yi.org/asss/ ASSS Source]: src/directory.c&lt;br /&gt;
* [[Directory Client Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Core_Protocol&amp;diff=4108</id>
		<title>Talk:Core Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Core_Protocol&amp;diff=4108"/>
				<updated>2007-01-09T17:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* Note on 0x0a00 packet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Note on 0x0a00 packet ==&lt;br /&gt;
I think when asss sends these the total size of each packet is 480 bytes, with the last packet in the stream being the remainder (read: less than 480 bytes).&lt;br /&gt;
== Note on login response == &lt;br /&gt;
sending back the original key without change means no encryption, both to 1.34 and continuum&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Door_Settings&amp;diff=5203</id>
		<title>Door Settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Door_Settings&amp;diff=5203"/>
				<updated>2006-10-04T18:43:31Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: /* DoorMode */ was missing some info added it from complete settings page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Door] Settings for [[door]]s in an arena.&lt;br /&gt;
&lt;br /&gt;
=== DoorDelay ===&lt;br /&gt;
&lt;br /&gt;
''Datatype:'' Hundredths of seconds.&lt;br /&gt;
 &lt;br /&gt;
How often doors attempt to switch their state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DoorMode === &lt;br /&gt;
&lt;br /&gt;
''Datatype:'' Bitfield.&lt;br /&gt;
&lt;br /&gt;
Each bit of this field determines whether its represented door is open or not. The 8 bits, from left to right, represent the 8 door tiles in the tileset, from left to right.&lt;br /&gt;
&lt;br /&gt;
Special values:&lt;br /&gt;
* -2  =  all doors completely random&lt;br /&gt;
* -1  =  weighted random (some doors open more often than others)&lt;br /&gt;
* 0-255  =  fixed doors (1 bit of byte for each door specifying whether it is open or not)&lt;br /&gt;
&lt;br /&gt;
[[Category: Settings]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=ASSS_Commands_Cheatsheet&amp;diff=4053</id>
		<title>ASSS Commands Cheatsheet</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=ASSS_Commands_Cheatsheet&amp;diff=4053"/>
				<updated>2006-10-04T10:23:16Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ASSS Commands Cheat Sheet==&lt;br /&gt;
* Sep 30 2006 smong: initial version&lt;br /&gt;
&lt;br /&gt;
* This is a rough guide to the new/most used commands in [[ASSS]].&lt;br /&gt;
* If you are already familar with [[Subgame2]] this should help you make the change.&lt;br /&gt;
&lt;br /&gt;
===Just a quick health warning about arenas===&lt;br /&gt;
* when creating arenas try not to put a number on the end. the reason for this is because asss can spawn many arenas of the same type, just like there can be many pubs. for example ?go elim, ?go elim1 and ?go elim2 will all read the same settings and scores from arenas/elim.&lt;br /&gt;
&lt;br /&gt;
=== Why aren't any staff commands working #$%@!? ===&lt;br /&gt;
* You need to be in conf/staff.conf and if you don't have billing setup you also need to use ?passwd.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===The Cheatsheet===&lt;br /&gt;
&lt;br /&gt;
Naming convention's in this document:&lt;br /&gt;
* &amp;lt;blah&amp;gt; - you must replace &amp;lt;blah&amp;gt; with some text.&lt;br /&gt;
* [blah] - blah is an optional.&lt;br /&gt;
* filter - filter text doesn't have to be a whole name, for example you can do ?reloadconf ar to reload all arena.conf's and ?quickfix decoy to see all related decoy settings (MaxDecoy, InitialDecoy, PrizeWeight:Decoy, etc).&lt;br /&gt;
&lt;br /&gt;
====Player Commands====&lt;br /&gt;
&lt;br /&gt;
* ?listmod - show logged in staff.&lt;br /&gt;
* ?passwd &amp;lt;usual ss password&amp;gt; - if the biller goes down asss will use this is used to make sure you are not an imposter.&lt;br /&gt;
* /?sendfile &amp;lt;filename&amp;gt; - pm this to another player to send them a file thats in your continuum directory.&lt;br /&gt;
* ?arena -a -t - print all arenas in the server to the chat.&lt;br /&gt;
&lt;br /&gt;
====Mod Commands====&lt;br /&gt;
&lt;br /&gt;
* ?recyclearena - reloads everything in the arena. use this if you changed the map/lvz or UPLOADED new settings. there is no need to use this if you changed settings ingame.&lt;br /&gt;
* ?resetturrets - removes all &amp;quot;fake players&amp;quot;/server-side bots. you have to do this before you can recycle an arena.&lt;br /&gt;
* ?flagreset - reset the flag game.&lt;br /&gt;
* ?ballcount &amp;lt;balls&amp;gt; - set the ball count for the arena. so if there are no balls and you type ?ballcount 1 a ball will be added.&lt;br /&gt;
* ?flaginfo - show location/owner of each flag.&lt;br /&gt;
* ?timer A:B - where A is minutes and B is seconds, set to 0:0 to stop it.&lt;br /&gt;
* ?setjackpot &amp;lt;pts&amp;gt; - change the jackpot to pts.&lt;br /&gt;
* ?prize &amp;lt;prizes&amp;gt; - grant prizes to everyone, or whoever you pm. note you can say stuff like &amp;quot;?prize 3 bomb 4 shrap prox bounce&amp;quot;&lt;br /&gt;
* ?a &amp;lt;msg&amp;gt; - arena message&lt;br /&gt;
* ?z &amp;lt;msg&amp;gt; - zone message&lt;br /&gt;
&lt;br /&gt;
====Smod Commands====&lt;br /&gt;
&lt;br /&gt;
* ?putmap &amp;lt;mapname&amp;gt; - the map must be in your continuum folder. this will replace the map of the arena you are currently in (it will upload the map and change the general:map= setting).&lt;br /&gt;
* esc + c / ?getsettings - the usual, change an arenas settings.&lt;br /&gt;
* ?quickfix &amp;lt;filter&amp;gt; - change an arenas settings, but this time only show settings that contain &amp;quot;filter&amp;quot;. this is the preferred way of changing settings while logged in since you don't have to scroll around them so much.&lt;br /&gt;
* ?attmod [-d] &amp;lt;name&amp;gt; - attach a module to an arena, use -d flag to detach it.&lt;br /&gt;
&lt;br /&gt;
====Sysop Commands====&lt;br /&gt;
&lt;br /&gt;
* ?lsmod [-a] [&amp;lt;filter&amp;gt;] - show currently loaded modules. use -a flag to see what's attached to the current arena. use filter to only show matching modules.&lt;br /&gt;
* ?insmod [&amp;lt;loader&amp;gt;] &amp;lt;name&amp;gt; - for python modules use &amp;quot;&amp;lt;py&amp;gt;&amp;quot; as the loader, otherwise leave it out.&lt;br /&gt;
* ?rmmod &amp;lt;name&amp;gt; - unloads a module from the server.&lt;br /&gt;
* ?lastlog [&amp;lt;max lines&amp;gt;] [&amp;lt;filter&amp;gt;] - shows the recent server logs.&lt;br /&gt;
* ?shutdown -r - kicks everyone out and restarts the entire zone.&lt;br /&gt;
* ?reloadconf [&amp;lt;filter&amp;gt;] - force reload of open conf files. you can use a partial file name as the filter.&lt;br /&gt;
* ?pwd - show where uploaded files will go.&lt;br /&gt;
* ?cd &amp;lt;dir. name&amp;gt; - change directory of where uploaded files will go. leave dirname blank to go back to the root (only news.txt is stored at the root).&lt;br /&gt;
* ?putfile &amp;lt;file name&amp;gt; - upload a file from your continuum directory to the server (see also ?cd).&lt;br /&gt;
* ?makearena &amp;lt;name&amp;gt; - create a new arena based off the default arena. note: do not use arena names that end in a number.&lt;br /&gt;
&lt;br /&gt;
sample directories to ?cd to:&lt;br /&gt;
 arenas/(public)&lt;br /&gt;
 arenas/(default)&lt;br /&gt;
 arenas/duel&lt;br /&gt;
 conf&lt;br /&gt;
 conf/groupdef.dir&lt;br /&gt;
 maps&lt;br /&gt;
 bin&lt;br /&gt;
 log&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=ASSS_Commands_Cheatsheet&amp;diff=4052</id>
		<title>ASSS Commands Cheatsheet</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=ASSS_Commands_Cheatsheet&amp;diff=4052"/>
				<updated>2006-10-04T10:20:31Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added smongs cheat sheet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ASSS Commands Cheat Sheet==&lt;br /&gt;
* Sep 30 2006 smong: initial version&lt;br /&gt;
&lt;br /&gt;
* This is a rough guide to the new/most used commands in asss.&lt;br /&gt;
&lt;br /&gt;
===Just a quick health warning about arenas===&lt;br /&gt;
* when creating arenas try not to put a number on the end. the reason for this is because asss can spawn many arenas of the same type, just like there can be many pubs. for example ?go elim, ?go elim1 and ?go elim2 will all read the same settings and scores from arenas/elim.&lt;br /&gt;
&lt;br /&gt;
=== Why aren't any staff commands working #$%@!? ===&lt;br /&gt;
* You need to be in conf/staff.conf and if you don't have billing setup you also need to use ?passwd.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===The Cheatsheet===&lt;br /&gt;
&lt;br /&gt;
Naming convention's in this document:&lt;br /&gt;
* &amp;lt;blah&amp;gt; - you must replace &amp;lt;blah&amp;gt; with some text.&lt;br /&gt;
* [blah] - blah is an optional.&lt;br /&gt;
* filter - filter text doesn't have to be a whole name, for example you can do ?reloadconf ar to reload all arena.conf's and ?quickfix decoy to see all related decoy settings (MaxDecoy, InitialDecoy, PrizeWeight:Decoy, etc).&lt;br /&gt;
&lt;br /&gt;
====Player Commands====&lt;br /&gt;
&lt;br /&gt;
* ?listmod - show logged in staff.&lt;br /&gt;
* ?passwd &amp;lt;usual ss password&amp;gt; - if the biller goes down asss will use this is used to make sure you are not an imposter.&lt;br /&gt;
* /?sendfile &amp;lt;filename&amp;gt; - pm this to another player to send them a file thats in your continuum directory.&lt;br /&gt;
* ?arena -a -t - print all arenas in the server to the chat.&lt;br /&gt;
&lt;br /&gt;
====Mod Commands====&lt;br /&gt;
&lt;br /&gt;
* ?recyclearena - reloads everything in the arena. use this if you changed the map/lvz or UPLOADED new settings. there is no need to use this if you changed settings ingame.&lt;br /&gt;
* ?resetturrets - removes all &amp;quot;fake players&amp;quot;/server-side bots. you have to do this before you can recycle an arena.&lt;br /&gt;
* ?flagreset - reset the flag game.&lt;br /&gt;
* ?ballcount &amp;lt;balls&amp;gt; - set the ball count for the arena. so if there are no balls and you type ?ballcount 1 a ball will be added.&lt;br /&gt;
* ?flaginfo - show location/owner of each flag.&lt;br /&gt;
* ?timer A:B - where A is minutes and B is seconds, set to 0:0 to stop it.&lt;br /&gt;
* ?setjackpot &amp;lt;pts&amp;gt; - change the jackpot to pts.&lt;br /&gt;
* ?prize &amp;lt;prizes&amp;gt; - grant prizes to everyone, or whoever you pm. note you can say stuff like &amp;quot;?prize 3 bomb 4 shrap prox bounce&amp;quot;&lt;br /&gt;
* ?a &amp;lt;msg&amp;gt; - arena message&lt;br /&gt;
* ?z &amp;lt;msg&amp;gt; - zone message&lt;br /&gt;
&lt;br /&gt;
====Smod Commands====&lt;br /&gt;
&lt;br /&gt;
* ?putmap &amp;lt;mapname&amp;gt; - the map must be in your continuum folder. this will replace the map of the arena you are currently in (it will upload the map and change the general:map= setting).&lt;br /&gt;
* esc + c / ?getsettings - the usual, change an arenas settings.&lt;br /&gt;
* ?quickfix &amp;lt;filter&amp;gt; - change an arenas settings, but this time only show settings that contain &amp;quot;filter&amp;quot;. this is the preferred way of changing settings while logged in since you don't have to scroll around them so much.&lt;br /&gt;
* ?attmod [-d] &amp;lt;name&amp;gt; - attach a module to an arena, use -d flag to detach it.&lt;br /&gt;
&lt;br /&gt;
====Sysop Commands====&lt;br /&gt;
&lt;br /&gt;
* ?lsmod [-a] [&amp;lt;filter&amp;gt;] - show currently loaded modules. use -a flag to see what's attached to the current arena. use filter to only show matching modules.&lt;br /&gt;
* ?insmod [&amp;lt;loader&amp;gt;] &amp;lt;name&amp;gt; - for python modules use &amp;quot;&amp;lt;py&amp;gt;&amp;quot; as the loader, otherwise leave it out.&lt;br /&gt;
* ?rmmod &amp;lt;name&amp;gt; - unloads a module from the server.&lt;br /&gt;
* ?lastlog [&amp;lt;max lines&amp;gt;] [&amp;lt;filter&amp;gt;] - shows the recent server logs.&lt;br /&gt;
* ?shutdown -r - kicks everyone out and restarts the entire zone.&lt;br /&gt;
* ?reloadconf [&amp;lt;filter&amp;gt;] - force reload of open conf files. you can use a partial file name as the filter.&lt;br /&gt;
* ?pwd - show where uploaded files will go.&lt;br /&gt;
* ?cd &amp;lt;dir. name&amp;gt; - change directory of where uploaded files will go. leave dirname blank to go back to the root (only news.txt is stored at the root).&lt;br /&gt;
* ?putfile &amp;lt;file name&amp;gt; - upload a file from your continuum directory to the server (see also ?cd).&lt;br /&gt;
* ?makearena &amp;lt;name&amp;gt; - create a new arena based off the default arena. note: do not use arena names that end in a number.&lt;br /&gt;
&lt;br /&gt;
sample directories to ?cd to:&lt;br /&gt;
 arenas/(public)&lt;br /&gt;
 arenas/(default)&lt;br /&gt;
 arenas/duel&lt;br /&gt;
 conf&lt;br /&gt;
 conf/groupdef.dir&lt;br /&gt;
 maps&lt;br /&gt;
 bin&lt;br /&gt;
 log&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=4055</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=4055"/>
				<updated>2006-10-04T10:06:43Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: added reference to commands cheat sheet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid #c6c9ff; background-color: #f0f0ff; text-align: center; font-variant: small-caps;&amp;quot;&amp;gt;&lt;br /&gt;
Quicklinks:&lt;br /&gt;
[[:Category:ASSS|ASSS Documents]] | [[:Category:FAQ|Frequently Asked Questions]] | [[:Category:Guides|Guides]] | [[:Category:Definitions|Glossary]] | [[:Category:Utilities|Utilities]] | [[Special:Categories|More...]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellspacing=10&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;What is ASSS?&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[ASSS]] (A Small Subspace Server) was created by [[User:grelminar|grelminar]]. Its an open source server designed to allow [[Continuum]] users to connect with. Its a replacement, not a clone, of [[Subgame]], which was created by [[VIE]] and later upgraded by [[PriitK|Priit Kasesalu]], a freelance [[Subspace]] programmer who also wrote Continuum with the assistance of [[Mr Ekted]]. &lt;br /&gt;
&lt;br /&gt;
ASSS allows many advanced features never before offered by Subgame nor user-made [[Bots]]. Within, you'll find documentions about how to use some of these advanced features, and documentation about how to create your own extensions to the server software.  There is also a [[ASSS Commands Cheatsheet]] to help you get started.&lt;br /&gt;
&lt;br /&gt;
To start finding answers try the quicklinks (above) or check out the [[Special:Categories|Categories]]. If you're having problems with your server, try reading the [[Server Troubleshooting]] guide. If you would like to contribute see [[ASSS_Wiki:Community Portal|Community Portal]]. For further assistance or questions, please visit the [http://forums.minegoboom.com Server Help Forums] where other users will be able to respond to your questions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;External Links&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[http://asss.yi.org/asss/ Official ASSS Site]&lt;br /&gt;
*[http://www.shanky.com/server/ Server Help]&lt;br /&gt;
*[http://forums.minegoboom.com/ Server Help Forums]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 30%; border: 1px solid #c6c9ff; padding: 5px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Current Events&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASSS version 1.4.3 has been released as of June 8, 2006. As of September 9, 2006, the version control server has been updated. ''I've upgraded the monotone server at asss.yi.org to 0.29. The is incompatible with the previous version (0.24) in several ways. You will need to create a new database and fetch everything again, and then create a new working copy.''&lt;br /&gt;
&lt;br /&gt;
'''Download'''&lt;br /&gt;
*[http://asss.yi.org/asss/files/asss-1.4.3.tar.gz Linux]&lt;br /&gt;
*[http://asss.yi.org/asss/files/asss-1.4.3-srconly.tar.gz Source Only]&lt;br /&gt;
*[http://asss.yi.org/asss/files/asss-1.4.3.zip Windows]&lt;br /&gt;
*[http://asss.yi.org/viewmtn/branch.psp?branch=asss.asss.main Change Log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Current events|More Events...]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Configuration_Faq&amp;diff=3953</id>
		<title>Server Configuration Faq</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Configuration_Faq&amp;diff=3953"/>
				<updated>2006-06-25T18:42:40Z</updated>
		
		<summary type="html">&lt;p&gt;Doc flabby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some answers to basic questions that most people unfamiliar with each server usually have. More info can usually be found on the specific [[settings]] pages.&lt;br /&gt;
&lt;br /&gt;
==ASSS==&lt;br /&gt;
&lt;br /&gt;
=== Using the latest version of ASSS but can't connect to a CatId biller using the ssc_billing module ===&lt;br /&gt;
You need to add a ScoreID and ServerID value to the [billing] section of global.conf.  These CANNOT be zero to work with the catid biller.&lt;br /&gt;
&lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[billing]&lt;br /&gt;
ScoreID = 1&lt;br /&gt;
ServerID = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I've added myself to the [(global)] section of staff.conf, but it doesn't set me as staff! ===&lt;br /&gt;
&lt;br /&gt;
There are a number of things that could be happening here. Firstly if you were in the zone at the same time as you were editing staff.conf you should now re-enter. If you are not using a biller you must add a passwd.conf entry for your alias and make sure you have the module auth_file loaded. The easiest way to do this is to log in and type ?passwd &amp;lt;subspace login password&amp;gt;. You can then log out and back in.&lt;br /&gt;
&lt;br /&gt;
=== How do I add LVZ files? ===&lt;br /&gt;
&lt;br /&gt;
Add LVZ files through the same setting as in Server.cfg in your [[arena.conf]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Misc]&lt;br /&gt;
LevelFiles=mylvz.lvz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then add your lvzs to the maps/ directory located in the main ASSS directory.  You can also add HLP files this way.&lt;br /&gt;
&lt;br /&gt;
=== Where is my *arena? ===&lt;br /&gt;
&lt;br /&gt;
With ASSS there is no distinction between ? and * commands. Since ?arena is hardcoded into the client (esc + a) and cannot be changed a compromise had to be made. Subgame style *arena and *zone are now ?a and ?z respectively. Alternatively you can load the sgcompat module which will restore the * style commands.&lt;br /&gt;
&lt;br /&gt;
=== There's something weird about my arena, it ends with a number ===&lt;br /&gt;
&lt;br /&gt;
Arena names cannot end with a number since ASSS supports multiple subarenas of the same type, just like there can be many public arenas sharing the same settings. If your arena is named elim, then elim1, elim2, etc use the same settings.&lt;br /&gt;
&lt;br /&gt;
==Subgame==&lt;br /&gt;
&lt;br /&gt;
=== What does the ss://some.dns mean in zone description? ===&lt;br /&gt;
This allows users who host on a dynamic IP address to have Continuum always find the server, even if it changes its location. A good service to use is [http://www.dyndns.org/ DynDNS], [http://www.no-ip.com No-IP]. From there, you can create an address such as myzonename.game-server.cc or any of their other [http://www.dyndns.org/services/dyndns/domains.html domains]. Then, in your Server.ini file, under the Directory:Description, add ss://myzonename.game-server.cc to the end of your description. Then, whenever you get a new IP address and your DynDNS client updates, users can automatically find your new address and will see it online again, without having to search through the zone list.&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Doc flabby</name></author>	</entry>

	</feed>