<?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=Cheese</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=Cheese"/>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php/Special:Contributions/Cheese"/>
		<updated>2026-04-23T20:36:37Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6238</id>
		<title>Writing Advanced Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6238"/>
				<updated>2015-07-06T00:07:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: wrote callback tutorial and interface tutorial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains how to write advanced modules in C. &lt;br /&gt;
It is assumed you know how to code and are familiar with how the ASSS code works.&lt;br /&gt;
&lt;br /&gt;
This tutorial is a continuation of [[Writing Modules In C]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful references:&lt;br /&gt;
&lt;br /&gt;
http://qnxcs.unomaha.edu/help/product/neutrino/lib_ref/summary.html&lt;br /&gt;
&lt;br /&gt;
http://www.cplusplus.com/reference/&lt;br /&gt;
&lt;br /&gt;
http://www.cprogramming.com/tutorial.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Data To Timers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct ThisIsData&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	int number;&lt;br /&gt;
} ThisIsData;&lt;br /&gt;
&lt;br /&gt;
local int timerfunc(void *vp) //vp is void pointer, just an address that can point anywhere&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=(ThisIsData*)vp; //we know it points to our data&lt;br /&gt;
	&lt;br /&gt;
	if(tid-&amp;gt;number == 10)&lt;br /&gt;
	{&lt;br /&gt;
		//if it worked anything in here will work too&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int returnValue=0; //return 1 if you want timer to run again, or 0 if you want it to be removed&lt;br /&gt;
	if(!returnValue) afree(tid); //if zero, free the data we have previously allocated&lt;br /&gt;
	return returnValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
anotherfunction()&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=amalloc(sizeof(ThisIsData)); //we must allocate memory because anything in this function is destroyed when it ends&lt;br /&gt;
&lt;br /&gt;
	tid-&amp;gt;number=10&lt;br /&gt;
&lt;br /&gt;
	//now set timer to activate in 1000 centiseconds, then repeat every 100.&lt;br /&gt;
	//we are also sending the address of the memory we just allocated.&lt;br /&gt;
	ml-&amp;gt;SetTimer(timerfunc,1000,100,tid,0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Multiple Arguments To Commands ==&lt;br /&gt;
&lt;br /&gt;
Since the words are read one by one against the whole list, they can be in any order!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// define macros for comparing strings that work on linux&lt;br /&gt;
#ifndef WIN32&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define stricmp(x,y) (strcasecmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define strnicmp(x,y,n) (strncasecmp(x,y,n) == 0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
local void examplecommand(const char *command, const char *params, Player *p, const Target *t)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;Sentence: %s&amp;quot;,params);&lt;br /&gt;
	&lt;br /&gt;
	char buf[255];&lt;br /&gt;
	char *word=NULL;&lt;br /&gt;
	const char *tmp=NULL;&lt;br /&gt;
	while(strsplit(params,&amp;quot; ,:&amp;quot;,buf,sizeof(buf),&amp;amp;tmp))&lt;br /&gt;
	{&lt;br /&gt;
		word=buf; //move start of word to beginning&lt;br /&gt;
		chat-&amp;gt;SendMessage(p,&amp;quot;Word: %s&amp;quot;,word); //the word currently being reviewed&lt;br /&gt;
&lt;br /&gt;
		if(strnicmp(word,&amp;quot;a=&amp;quot;,2)) //remember, the N means it is checking only first 2 letters&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 2 letters of word are 'a' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=2; //like move start of word 2 letters forward&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(strnicmp(word,&amp;quot;bc=&amp;quot;,3)) //3 this time&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 3 letters of word are 'b' then 'c' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=3; //make sure you move it 3 letters and not 2&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(stricmp(word,&amp;quot;-de&amp;quot;)) //no N, it just checks the whole thing&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if word is &amp;quot;-de&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Callbacks ==&lt;br /&gt;
&lt;br /&gt;
In a header somewhere public, you will want to declare your callback constant so people writing modules that use it can compile properly.&lt;br /&gt;
An acceptable solution to this is distributing a whatever.h file with your module if your module is closed source.&lt;br /&gt;
At a minimum, you should have a comment describing your callback, the callback constant definition, and a function prototype the caller will need to match.&lt;br /&gt;
You can pass variables to the calling functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//in whatever.h&lt;br /&gt;
&lt;br /&gt;
//when u load my module&lt;br /&gt;
#define CB_MY_MODULE_JUST_ATTACHED &amp;quot;mymodulejustattached-1&amp;quot;&lt;br /&gt;
typedef void (*MyModuleJustAttachedFunc)(Arena *a, int num);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will then need to use the DO_CBS macro in your code to call the callback functions other people have written.&lt;br /&gt;
You can find the definition of this macro at the end of module.h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//in whatever.c&lt;br /&gt;
&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
&lt;br /&gt;
int bestnumber=42;&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_cbstest(int action, Imodman *mm2, Arena *a)&lt;br /&gt;
{&lt;br /&gt;
	if(action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm=mm2;&lt;br /&gt;
		lm=mm-&amp;gt;GetInterface(I_LOGMAN,ALLARENAS);&lt;br /&gt;
		if(!lm) return MM_FAIL;&lt;br /&gt;
		&lt;br /&gt;
		lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;cbstest&amp;gt; Callback Test Module has loaded.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_ATTACH)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogA(L_ERROR,&amp;quot;cbstest&amp;quot;,a,&amp;quot;Callback Test Module has attached to the arena.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		//this triggers registered callback functions to all arenas with a pointer to the arena you just attached to and a number&lt;br /&gt;
		DO_CBS(CB_MY_MODULE_JUST_ATTACHED, ALLARENAS, MyModuleJustAttachedFunc, (a, bestnumber));&lt;br /&gt;
      &lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_DETACH)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogA(L_ERROR,&amp;quot;cbstest&amp;quot;,a,&amp;quot;Callback Test Module has detached from the arena.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;cbstest&amp;gt; Callback Test Module has unloaded.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Interfaces ==&lt;br /&gt;
&lt;br /&gt;
The alternative to creating callbacks for other modules to use is creating an interface.&amp;lt;br&amp;gt;&lt;br /&gt;
In callbacks, you run their code. In interfaces, they run your code.&amp;lt;br&amp;gt;&lt;br /&gt;
Just like in callback writing, you will need to have a public header to compile code against.&amp;lt;br&amp;gt;&lt;br /&gt;
In this header you will need an interface constant defined and a prototype struct of function prototypes.&amp;lt;br&amp;gt;&lt;br /&gt;
It is good practice to have easy to read, clear function names and a comment describing what each function does.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//in whatever.h&lt;br /&gt;
&lt;br /&gt;
#define I_BANANAS &amp;quot;bananas-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//the bananas interface struct&lt;br /&gt;
typedef struct Ibananas&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	//say bananas in chat&lt;br /&gt;
	void (*SayBananas)(void);&lt;br /&gt;
&lt;br /&gt;
	//count bananas&lt;br /&gt;
	int (*CountBananas)(int howmany);&lt;br /&gt;
&lt;br /&gt;
	//say player is bananas&lt;br /&gt;
	int (*PlayerIsBananas)(Player *p);&lt;br /&gt;
} Ibananas;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will then need to create the functions that the interface will call.&lt;br /&gt;
After that, you will need to create the actual interface struct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//in whatever.c&lt;br /&gt;
&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
&lt;br /&gt;
local void SayBananas(void)&lt;br /&gt;
{&lt;br /&gt;
	lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;inttest&amp;gt; bananas!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void CountBananas(int howmany)&lt;br /&gt;
{&lt;br /&gt;
	lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;inttest&amp;gt; %u bananas!&amp;quot;,howmany);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void PlayerIsBananas(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;inttest&amp;gt; %s is bananas!&amp;quot;,p-&amp;gt;name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ibananas bananasint=&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_BANANAS,&amp;quot;bananas&amp;quot;)&lt;br /&gt;
	SayBananas, CountBananas, PlayerIsBananas&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_inttest(int action, Imodman *mm2, Arena *a)&lt;br /&gt;
{&lt;br /&gt;
	if(action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm=mm2;&lt;br /&gt;
		lm=mm-&amp;gt;GetInterface(I_LOGMAN,ALLARENAS);&lt;br /&gt;
		if(!lm) return MM_FAIL;&lt;br /&gt;
		&lt;br /&gt;
		lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;inttest&amp;gt; Interface Test Module has loaded.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_ATTACH)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogA(L_ERROR,&amp;quot;inttest&amp;quot;,a,&amp;quot;Interface Test Module has attached to the arena.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_DETACH)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogA(L_ERROR,&amp;quot;inttest&amp;quot;,a,&amp;quot;Interface Test Module has detached from the arena.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if(action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;Log(L_ERROR,&amp;quot;&amp;lt;inttest&amp;gt; Interface Test Module has unloaded.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Packets To Players ==&lt;br /&gt;
&lt;br /&gt;
Cover position packets, weapon packets, clientset stuff, etc.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Peer_Protocol&amp;diff=6235</id>
		<title>Peer Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Peer_Protocol&amp;diff=6235"/>
				<updated>2015-02-16T19:57:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This protocol is UDP and bi-directional. It is used by [[Subgame]] and the VIE servers.&amp;lt;br&amp;gt;&lt;br /&gt;
SubSpace game servers can communicate with each other via the SubSpace Peer protocol.&amp;lt;br&amp;gt;&lt;br /&gt;
Unlike most other protocols in SubSpace, the peer protocol does not make use of the SubSpace Control Protocol.&amp;lt;br&amp;gt;&lt;br /&gt;
Rather, it uses lightweight datagrams and accepts packets based on a whitelist of the datagram source's (IP, port) pair.&amp;lt;br&amp;gt;&lt;br /&gt;
Player lists/player count packets are sent at approximately 250ms intervals.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SendTo Command===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sendto command example usage:&lt;br /&gt;
/*sendto zone ip, zone port&lt;br /&gt;
full subgame syntax is:&lt;br /&gt;
*sendto IP,port,arenaname&lt;br /&gt;
does not work for staff members being sent with staff password appended to their password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Settings===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Go request (GR) definition:&lt;br /&gt;
Any time a client asks to go to a new arena. In Cont, when a zone is first entered, it asks to go to a NULL arena (i.e. no arena name is given). This is the same as typing &amp;quot;?go&amp;quot; in subgame (no arena name). Other clients (bots, chatnet clients, etc.) can and do sometimes ask to go to specific arenas on zone entry.&lt;br /&gt;
&lt;br /&gt;
server.ini sections:&lt;br /&gt;
[Peers]&lt;br /&gt;
//must include port and be valid hostname or entire entry is ignored.&lt;br /&gt;
MyArenas=&amp;lt;ARENA SPEC&amp;gt;&lt;br /&gt;
// see below for ARENA SPEC&lt;br /&gt;
&lt;br /&gt;
// maximum number of peers is 8 and # starts at 0: Peer0, Peer1, ... Peer7&lt;br /&gt;
[Peer&amp;lt;#&amp;gt;]&lt;br /&gt;
//location of peer&lt;br /&gt;
Address=&amp;lt;IP&amp;gt;:&amp;lt;PORT&amp;gt;&lt;br /&gt;
// passwords explained below&lt;br /&gt;
Password=testpw&lt;br /&gt;
//arenas to route, players will be sent upon ?go&lt;br /&gt;
Arenas=&amp;lt;ARENA SPEC&amp;gt;&lt;br /&gt;
//see below&lt;br /&gt;
SendOnly=0&lt;br /&gt;
//if least one player is in the zone, send player list packet&lt;br /&gt;
SendPlayerList=1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ARENA SPEC&amp;gt;: A comma-separated list of arena names to match. It may not be longer than 511 characters. No more than 32 different arenas may be given. No whitespace is allowed, unless it's meant as part of the arena name. 2 special arena names are recognized, &amp;quot;$pub&amp;quot; and &amp;quot;$pvt&amp;quot;. $pub matches any time no arena name is given in a GR. $pvt is the converse of $pub; it _always_ matches unless no arena name is given.&lt;br /&gt;
&lt;br /&gt;
SendOnly: SendOnly could have something to do with *zone and ?alert messages. Both of these are sent in the peering protocol. SendOnly could be a boolean saying you don't want your instance of subgame to broadcast *zone and ?alert if they come from other peers, or an enum for various combinations. This should be easily testable. It could also have something to do with the sending of private (#-prefixed) arena names. edit: it could also be an &amp;lt;ARENASPEC&amp;gt;, to send player lists for only matched arenas.&lt;br /&gt;
&lt;br /&gt;
GR Matching:&lt;br /&gt;
When a GR is issued in a zone (or more accurately, subgame instance), it first consults the list Peer:MyArenas, if it exists. If a match is found, the GR is processed normally (as if there were no peers). The purpose appears to be for use with $pvt. If you have a $pvt rule in a [Peer&amp;lt;#&amp;gt;] section to send people to another zone whenever they go to a named arena, this acts as a mask, a list of the arenas you explicitly want this subgame instance to manage.&lt;br /&gt;
&lt;br /&gt;
If no match is found in Peer:MyArenas, each Peer&amp;lt;#&amp;gt;:Arenas list is consulted in order (by number, not the order they appear in the file). On the first match found, the player is transparently redirected to the address for that peer. Note that the arena name will be part of the initial GR issued when the client enters that zone. If after consulting all available peers no match is found, the request is handled normally.&lt;br /&gt;
&lt;br /&gt;
Passwords:&lt;br /&gt;
If you decide to have 2 subgame instances peer, they must agree on a password. The password must agree in each INI [Peer&amp;lt;#&amp;gt;] entry which refers to the other zone.&lt;br /&gt;
&lt;br /&gt;
Example: 2 zones running on localhost, subgame-A on port 5000 and subgame-B on port 7777&lt;br /&gt;
&lt;br /&gt;
in subgame-A's ini:&lt;br /&gt;
[Misc]&lt;br /&gt;
Port=5000&lt;br /&gt;
&lt;br /&gt;
[Peer3]&lt;br /&gt;
Address=127.0.0.1:7777&lt;br /&gt;
Password=hackme&lt;br /&gt;
&lt;br /&gt;
and in subgame-B's ini:&lt;br /&gt;
[Misc]&lt;br /&gt;
Port=7777&lt;br /&gt;
&lt;br /&gt;
[Peer1]&lt;br /&gt;
Address=127.0.0.1:5000&lt;br /&gt;
Password=hackme&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Packets===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
All packets have the following form:&lt;br /&gt;
00 01 &amp;lt;passwordHash (4)&amp;gt; FF &amp;lt;type (1)&amp;gt; &amp;lt;timestamp (4)&amp;gt; &amp;lt;payload&amp;gt;&lt;br /&gt;
The passwordHash is a CRC32 of the peer password in server.ini. &lt;br /&gt;
The payload depends on the type field and their formats are described below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x01: Player List&lt;br /&gt;
&lt;br /&gt;
This packet is sent if SendPlayerList=1 and at least one player is in the zone.&lt;br /&gt;
It lists all arenas in the zone with a list of all players in each arena.&lt;br /&gt;
The list of players for a given arena is null terminated as indicated by the 00 field below.&lt;br /&gt;
The arenaID field is a random 32-bit integer that is associated with each arena at the time of its creation.&lt;br /&gt;
An arena maintains its arenaID until the arena gets re-created or manually recycled.&lt;br /&gt;
{&lt;br /&gt;
  &amp;lt;arenaID (4)&amp;gt;&lt;br /&gt;
  &amp;lt;arenaName (asciiZ)&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    &amp;lt;playerName (asciiZ)&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  00&lt;br /&gt;
} (repeated until end of packet)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x02: Chat Message&lt;br /&gt;
&lt;br /&gt;
When a peer receives this packet, it broadcasts it as if it were a zone-wide message (*zone).&lt;br /&gt;
&amp;lt;type:0 (1)&amp;gt;        //currently ignored by subgame, can be anything&lt;br /&gt;
&amp;lt;message (asciiZ)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x03: ?alert messages&lt;br /&gt;
&lt;br /&gt;
Technically exactly the same as the 0x02 packet, but as this is the result of ?help, ?cheater, etc it should be restricted to the appropriate staff members.&lt;br /&gt;
&amp;lt;type:0 (1)&amp;gt;        //currently ignored by subgame, can be anything&lt;br /&gt;
&amp;lt;message (asciiZ)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x04: Player Count&lt;br /&gt;
&lt;br /&gt;
This packet is sent if SendPlayerList=0 or there are no players in the zone. The player count is the total number of players in the zone.&lt;br /&gt;
&amp;lt;playerCount (2)&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Subgame internal data structs===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct s2c_sendto&lt;br /&gt;
{&lt;br /&gt;
   BYTE   type;           // 0x3B&lt;br /&gt;
   DWORD  ip_addr;        // IP Address (little endian)&lt;br /&gt;
   WORD   port_num;       // Port number (little endian)&lt;br /&gt;
   WORD   join_type;      // Same as the arena login packet&lt;br /&gt;
   char   arena_name[16]; // Arena Name&lt;br /&gt;
   DWORD  loginid;&lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Core_Protocol&amp;diff=6231</id>
		<title>Core Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Core_Protocol&amp;diff=6231"/>
				<updated>2015-02-16T17:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Core protocol to Core Protocol over redirect&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 recursively)&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 (see reliable packet addendum below)&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 (ie: ACK_ID)&lt;br /&gt;
6      ?    payload (514 bytes max)&lt;br /&gt;
&lt;br /&gt;
0x04 reliable acknowledge (see reliable packet addendum below)&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 (ie: ACK_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;
&lt;br /&gt;
0x10 Continuum alternate encryption response (s2c)?&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x10&lt;br /&gt;
2      10   ??&lt;br /&gt;
&lt;br /&gt;
0x11 Continuum alternate encryption response response (c2s)?&lt;br /&gt;
offset size comment&lt;br /&gt;
0      1    type 0x00&lt;br /&gt;
1      1    type 0x11&lt;br /&gt;
2      6   ??&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Reliable Packet Handling Addendum'''&lt;br /&gt;
&lt;br /&gt;
Here are some tips when implementing a reliable packet handler stack.&lt;br /&gt;
&lt;br /&gt;
For outgoing traffic:&lt;br /&gt;
      1. All outgoing traffic must be put into a send list until an ACKnowledgement (0x04) is received with&lt;br /&gt;
              the same ACK_ID as the traffic.&lt;br /&gt;
      2. Sometimes double-sending reliable messages is warranted, given high-bandwidth and high-packetloss.&lt;br /&gt;
      3. ACK's (0x04) should cause disconnection if you have not sent a message with that ACK_ID yet.&lt;br /&gt;
      4. ACK_ID starts at 0 for both client and server, ACK_ID is incremented by one every time.&lt;br /&gt;
&lt;br /&gt;
For incoming traffic:&lt;br /&gt;
      1. ACK (0x04) all incoming Reliable traffic no matter what.  ACK the traffic twice if it makes you feel happy.&lt;br /&gt;
      2. All incoming traffic must be processed in the order of the ACK_ID's.&lt;br /&gt;
      3. If a packet is lost, all traffic stamped with an ACK_ID higher than the next expected ACK_ID&lt;br /&gt;
              must be placed on a backlog list of packets until the packet in sequence is finally received.&lt;br /&gt;
      4. If an incoming reliable message's ACK_ID has already been processed, ignore the packet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;External Links&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [http://mervbot.com/files/addendum.txt Catid's Subspace Addendum]&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Core_Protocol&amp;diff=6233</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=6233"/>
				<updated>2015-02-16T17:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Talk:Core protocol to Talk:Core Protocol&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>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Core_protocol&amp;diff=6232</id>
		<title>Core protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Core_protocol&amp;diff=6232"/>
				<updated>2015-02-16T17:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Core protocol to Core Protocol over redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Core Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Core_protocol&amp;diff=6234</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=6234"/>
				<updated>2015-02-16T17:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Talk:Core protocol to Talk:Core Protocol&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Talk:Core Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Peering_Protocol&amp;diff=6230</id>
		<title>Peering Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Peering_Protocol&amp;diff=6230"/>
				<updated>2015-02-16T17:56:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Redirected page to Peer Protocol&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Peer Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Peer_Protocol&amp;diff=6229</id>
		<title>Peer Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Peer_Protocol&amp;diff=6229"/>
				<updated>2015-02-16T17:56:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Created page with &amp;quot;This protocol is UDP and bi-directional. It is used by Subgame and the VIE servers.&amp;lt;br&amp;gt; SubSpace game servers can communicate with each other via the SubSpace Peer protocol.&amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This protocol is UDP and bi-directional. It is used by [[Subgame]] and the VIE servers.&amp;lt;br&amp;gt;&lt;br /&gt;
SubSpace game servers can communicate with each other via the SubSpace Peer protocol.&amp;lt;br&amp;gt;&lt;br /&gt;
Unlike most other protocols in SubSpace, the peer protocol does not make use of the SubSpace Control Protocol.&amp;lt;br&amp;gt;&lt;br /&gt;
Rather, it uses lightweight datagrams and accepts packets based on a whitelist of the datagram source's (IP, port) pair.&amp;lt;br&amp;gt;&lt;br /&gt;
Player lists/player count packets are sent at approximately 250ms intervals.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SendTo Command===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sendto command example usage:&lt;br /&gt;
/*sendto zone ip, zone port&lt;br /&gt;
full syntax is:&lt;br /&gt;
*sendto IP,port,arenaname&lt;br /&gt;
does not work for staff members being sent with staff password appended to their password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Settings===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Go request (GR) definition:&lt;br /&gt;
Any time a client asks to go to a new arena. In Cont, when a zone is first entered, it asks to go to a NULL arena (i.e. no arena name is given). This is the same as typing &amp;quot;?go&amp;quot; in subgame (no arena name). Other clients (bots, chatnet clients, etc.) can and do sometimes ask to go to specific arenas on zone entry.&lt;br /&gt;
&lt;br /&gt;
server.ini sections:&lt;br /&gt;
[Peers]&lt;br /&gt;
//must include port and be valid hostname or entire entry is ignored.&lt;br /&gt;
MyArenas=&amp;lt;ARENA SPEC&amp;gt;&lt;br /&gt;
// see below for ARENA SPEC&lt;br /&gt;
&lt;br /&gt;
// maximum number of peers is 8 and # starts at 0: Peer0, Peer1, ... Peer7&lt;br /&gt;
[Peer&amp;lt;#&amp;gt;]&lt;br /&gt;
//location of peer&lt;br /&gt;
Address=&amp;lt;IP&amp;gt;:&amp;lt;PORT&amp;gt;&lt;br /&gt;
// passwords explained below&lt;br /&gt;
Password=testpw&lt;br /&gt;
//arenas to route, players will be sent upon ?go&lt;br /&gt;
Arenas=&amp;lt;ARENA SPEC&amp;gt;&lt;br /&gt;
//see below&lt;br /&gt;
SendOnly=0&lt;br /&gt;
//if least one player is in the zone, send player list packet&lt;br /&gt;
SendPlayerList=1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ARENA SPEC&amp;gt;: A comma-separated list of arena names to match. It may not be longer than 511 characters. No more than 32 different arenas may be given. No whitespace is allowed, unless it's meant as part of the arena name. 2 special arena names are recognized, &amp;quot;$pub&amp;quot; and &amp;quot;$pvt&amp;quot;. $pub matches any time no arena name is given in a GR. $pvt is the converse of $pub; it _always_ matches unless no arena name is given.&lt;br /&gt;
&lt;br /&gt;
SendOnly: SendOnly could have something to do with *zone and ?alert messages. Both of these are sent in the peering protocol. SendOnly could be a boolean saying you don't want your instance of subgame to broadcast *zone and ?alert if they come from other peers, or an enum for various combinations. This should be easily testable. It could also have something to do with the sending of private (#-prefixed) arena names. edit: it could also be an &amp;lt;ARENASPEC&amp;gt;, to send player lists for only matched arenas.&lt;br /&gt;
&lt;br /&gt;
GR Matching:&lt;br /&gt;
When a GR is issued in a zone (or more accurately, subgame instance), it first consults the list Peer:MyArenas, if it exists. If a match is found, the GR is processed normally (as if there were no peers). The purpose appears to be for use with $pvt. If you have a $pvt rule in a [Peer&amp;lt;#&amp;gt;] section to send people to another zone whenever they go to a named arena, this acts as a mask, a list of the arenas you explicitly want this subgame instance to manage.&lt;br /&gt;
&lt;br /&gt;
If no match is found in Peer:MyArenas, each Peer&amp;lt;#&amp;gt;:Arenas list is consulted in order (by number, not the order they appear in the file). On the first match found, the player is transparently redirected to the address for that peer. Note that the arena name will be part of the initial GR issued when the client enters that zone. If after consulting all available peers no match is found, the request is handled normally.&lt;br /&gt;
&lt;br /&gt;
Passwords:&lt;br /&gt;
If you decide to have 2 subgame instances peer, they must agree on a password. The password must agree in each INI [Peer&amp;lt;#&amp;gt;] entry which refers to the other zone.&lt;br /&gt;
&lt;br /&gt;
Example: 2 zones running on localhost, subgame-A on port 5000 and subgame-B on port 7777&lt;br /&gt;
&lt;br /&gt;
in subgame-A's ini:&lt;br /&gt;
[Misc]&lt;br /&gt;
Port=5000&lt;br /&gt;
&lt;br /&gt;
[Peer3]&lt;br /&gt;
Address=127.0.0.1:7777&lt;br /&gt;
Password=hackme&lt;br /&gt;
&lt;br /&gt;
and in subgame-B's ini:&lt;br /&gt;
[Misc]&lt;br /&gt;
Port=7777&lt;br /&gt;
&lt;br /&gt;
[Peer1]&lt;br /&gt;
Address=127.0.0.1:5000&lt;br /&gt;
Password=hackme&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Packets===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
All packets have the following form:&lt;br /&gt;
00 01 &amp;lt;passwordHash (4)&amp;gt; FF &amp;lt;type (1)&amp;gt; &amp;lt;timestamp (4)&amp;gt; &amp;lt;payload&amp;gt;&lt;br /&gt;
The passwordHash is a CRC32 of the peer password in server.ini. &lt;br /&gt;
The payload depends on the type field and their formats are described below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x01: Player List&lt;br /&gt;
&lt;br /&gt;
This packet is sent if SendPlayerList=1 and at least one player is in the zone.&lt;br /&gt;
It lists all arenas in the zone with a list of all players in each arena.&lt;br /&gt;
The list of players for a given arena is null terminated as indicated by the 00 field below.&lt;br /&gt;
The arenaID field is a random 32-bit integer that is associated with each arena at the time of its creation.&lt;br /&gt;
An arena maintains its arenaID until the arena gets re-created or manually recycled.&lt;br /&gt;
{&lt;br /&gt;
  &amp;lt;arenaID (4)&amp;gt;&lt;br /&gt;
  &amp;lt;arenaName (asciiZ)&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    &amp;lt;playerName (asciiZ)&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  00&lt;br /&gt;
} (repeated until end of packet)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x02: Chat Message&lt;br /&gt;
&lt;br /&gt;
When a peer receives this packet, it broadcasts it as if it were a zone-wide message (*zone).&lt;br /&gt;
&amp;lt;type:0 (1)&amp;gt;                    - currently ignored by subgame, can be anything&lt;br /&gt;
&amp;lt;message (asciiZ)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x03: ?alert messages&lt;br /&gt;
&lt;br /&gt;
The format of this packet is unknown. Perhaps the action associated with this packet is disabled in the current release of subgame.&lt;br /&gt;
player&lt;br /&gt;
arena&lt;br /&gt;
msg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x04: Player Count&lt;br /&gt;
&lt;br /&gt;
This packet is sent if SendPlayerList=0 or there are no players in the zone. The player count is the total number of players in the zone.&lt;br /&gt;
&amp;lt;playerCount (2)&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Subgame internal data structs===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct s2c_sendto&lt;br /&gt;
{&lt;br /&gt;
   BYTE   type;           // 0x3B&lt;br /&gt;
   DWORD  ip_addr;        // IP Address (little endian)&lt;br /&gt;
   WORD   port_num;       // Port number (little endian)&lt;br /&gt;
   WORD   join_type;      // Same as the arena login packet&lt;br /&gt;
   char   arena_name[16]; // Arena Name&lt;br /&gt;
   DWORD  loginid;&lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Protocol]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=6227</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=6227"/>
				<updated>2014-04-10T22:33:18Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: added fast access links&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) is an open source server, created by [[User:grelminar|grelminar]], that facilitates games among [[Continuum]] users. It's a replacement, not a clone, of [[Subgame]], which was the old server 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 this wiki, you'll find documents about how to use some of these advanced features, and documentation on how to create your own extensions to the server software.  There is also an [[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;Fast Access Links&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[:Category:Guides]]&lt;br /&gt;
*[[:Category:Module]]&lt;br /&gt;
*[[:Category:Settings]]&lt;br /&gt;
*[[:Category:Protocol]]&lt;br /&gt;
*[[Graphics files]]&lt;br /&gt;
*[[Special:MostLinkedCategories]]&lt;br /&gt;
&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.minegoboom.com/ 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;
*[https://bitbucket.org/grelminar/asss/wiki/Development_Reference/ Bitbucket Wiki]&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;
&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.4 has been released as of September 7, 2007. This version addresses several bug fixes, and now requires Continuum 0.40.&lt;br /&gt;
&lt;br /&gt;
'''Download'''&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4.tar.gz Linux]&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4-srconly.tar.gz Source Only]&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4.zip Windows]&lt;br /&gt;
*[http://bitbucket.org/grelminar/asss/overview/ 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;br /&gt;
&lt;br /&gt;
[[Category: Wiki]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6217</id>
		<title>Troubleshooting ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6217"/>
				<updated>2011-05-31T11:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page deals with the troubleshooting of the ASSS installation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with writing a module, you should read [[Troubleshooting Modules]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with configuring your server, you should read [[Server Setup]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with arena settings, you should read [[Complete Settings]].&lt;br /&gt;
&lt;br /&gt;
==Potential issues==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'capman' from 'internal'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/mod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/smod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/default.txt'&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'mapnewsdl' from 'internal' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
W &amp;lt;mapdata&amp;gt; {0} error finding or reading level file&lt;br /&gt;
W &amp;lt;mapnewsdl&amp;gt; {0} can't load level file, falling back to tinymap.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
W &amp;lt;mapnewsdl&amp;gt; news file 'news.txt' not found in current directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that the files do not exist.&lt;br /&gt;
However, it is also possible that you have a file permissions error, in which you can check with ls -l.&lt;br /&gt;
If it is a permissions error, you can fix it using chmod.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'persist' from 'scoring'&lt;br /&gt;
db_env_create: Permission denied&lt;br /&gt;
E &amp;lt;cmod&amp;gt; error loading module 'persist'&lt;br /&gt;
Unrecoverable error (5): Error in loading module 'scoring:persist'&lt;br /&gt;
*** ASSS exited: Error loading modules &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that you have accidentally copied over your win32 database files into your linux setup, or that the files have become corrupted.&lt;br /&gt;
This can be fixed by simply deleting all the files in the /data folder.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6216</id>
		<title>Troubleshooting ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6216"/>
				<updated>2011-05-31T11:59:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page deals with the troubleshooting of the ASSS installation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with writing a module, you should read [[Troubleshooting Modules]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with configuring your server, you should read [[Server Setup]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with arena settings, you should read [[Complete Settings]].&lt;br /&gt;
&lt;br /&gt;
==Potential issues==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'capman' from 'internal'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/mod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/smod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/default.txt'&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'mapnewsdl' from 'internal' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
W &amp;lt;mapdata&amp;gt; {0} error finding or reading level file&lt;br /&gt;
W &amp;lt;mapnewsdl&amp;gt; {0} can't load level file, falling back to tinymap.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
OR&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
W &amp;lt;mapnewsdl&amp;gt; news file 'news.txt' not found in current directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that the files do not exist.&lt;br /&gt;
However, it is also possible that you have a file permissions error, in which you can check with ls -l.&lt;br /&gt;
If it is a permissions error, you can fix it using chmod.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'persist' from 'scoring'&lt;br /&gt;
db_env_create: Permission denied&lt;br /&gt;
E &amp;lt;cmod&amp;gt; error loading module 'persist'&lt;br /&gt;
Unrecoverable error (5): Error in loading module 'scoring:persist'&lt;br /&gt;
*** ASSS exited: Error loading modules &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that you have accidentally copied over your win32 database files into your linux setup, or that the files have become corrupted.&lt;br /&gt;
This can be fixed by simply deleting all the files in the /data folder.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6215</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6215"/>
				<updated>2011-05-30T13:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you have MySQL, Python, or BerkleyDB installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*DB_HOME = /usr&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you do NOT have MySQL, Python, or BerkleyDB installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*all scoring:* are already commented out &lt;br /&gt;
*hope you don't like points&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
*vim run-asss&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*mv run-asss ../run [optional, update ASSSHOME]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6214</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6214"/>
				<updated>2011-05-30T04:58:51Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*all scoring:* are already commented out &lt;br /&gt;
*hope you don't like points&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
*vim run-asss&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*mv run-asss ../run [optional, update ASSSHOME]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6213</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6213"/>
				<updated>2011-05-30T04:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*all scoring:* are already commented out &lt;br /&gt;
*hope you don't like points&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
*vim run-asss&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*mv run-asss ../run [optional]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6212</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6212"/>
				<updated>2011-05-29T15:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*all scoring:* are already commented out &lt;br /&gt;
*hope you don't like points&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*vim run-asss&lt;br /&gt;
*mv run-asss ../run [optional]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6211</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6211"/>
				<updated>2011-05-29T15:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*uncomment out all scoring:*&lt;br /&gt;
*hope you don't like points&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*vim run-asss&lt;br /&gt;
*mv run-asss ../run [optional]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6210</id>
		<title>Troubleshooting ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6210"/>
				<updated>2011-05-29T15:14:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page deals with the troubleshooting of the ASSS installation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with writing a module, you should read [[Troubleshooting Modules]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with configuring your server, you should read [[Server Setup]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need help with arena settings, you should read [[Complete Settings]].&lt;br /&gt;
&lt;br /&gt;
==Potential issues==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'capman' from 'internal'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/mod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/smod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/default.txt'&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'mapnewsdl' from 'internal' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that the files do not exist.&lt;br /&gt;
However, it is also possible that you have a file permissions error, in which you can check with ls -l.&lt;br /&gt;
If it is a permissions error, you can fix it using chmod.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'persist' from 'scoring'&lt;br /&gt;
db_env_create: Permission denied&lt;br /&gt;
E &amp;lt;cmod&amp;gt; error loading module 'persist'&lt;br /&gt;
Unrecoverable error (5): Error in loading module 'scoring:persist'&lt;br /&gt;
*** ASSS exited: Error loading modules &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that you have accidentally copied over your win32 database files into your linux setup, or that the files have become corrupted.&lt;br /&gt;
This can be fixed by simply deleting all the files in the /data folder.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6209</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6209"/>
				<updated>2011-05-29T15:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
----&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
----&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
----&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
----&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
----&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
----&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
----&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
----&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*uncomment out all scoring:*&lt;br /&gt;
*hope you don't like points&lt;br /&gt;
----&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
*cd scripts&lt;br /&gt;
Update ASSSHOME with the path to your ASSS root directory.&lt;br /&gt;
*vim run-asss&lt;br /&gt;
*mv run-asss ../run [optional]&lt;br /&gt;
----&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
----&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6208</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6208"/>
				<updated>2011-05-29T15:06:30Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
----&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
----&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
----&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
----&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
----&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
----&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
----&lt;br /&gt;
Since the security module does not exist yet, you will have to go into modules.conf&lt;br /&gt;
*comment out security:security&lt;br /&gt;
*comment out security:enc_cont&lt;br /&gt;
*uncomment enc_null&lt;br /&gt;
----&lt;br /&gt;
Since the scoring module apparently does not exist yet, you will have to copy scoring.so from a preexisting server into your bin directory.&lt;br /&gt;
*new server owners are screwed&lt;br /&gt;
*uncomment out all scoring:*&lt;br /&gt;
*hope you dont like points&lt;br /&gt;
----&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
----&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
----&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6207</id>
		<title>Troubleshooting ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6207"/>
				<updated>2011-05-29T08:39:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page deals with the troubleshooting of the ASSS installation.&lt;br /&gt;
If you need help with writing a module, you should read [[Troubleshooting Modules]].&lt;br /&gt;
If you need help with configuring your server, you should read [[Server Setup]].&lt;br /&gt;
If you need help with arena settings, you should read [[Complete Settings]].&lt;br /&gt;
&lt;br /&gt;
==Potential issues==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'capman' from 'internal'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/mod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/smod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/default.txt'&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'mapnewsdl' from 'internal' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that the files do not exist.&lt;br /&gt;
However, it is also possible that you have a file permissions error, in which you can check with ls -l.&lt;br /&gt;
If it is a permissions error, you can fix it using chmod.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'persist' from 'scoring'&lt;br /&gt;
db_env_create: Permission denied&lt;br /&gt;
E &amp;lt;cmod&amp;gt; error loading module 'persist'&lt;br /&gt;
Unrecoverable error (5): Error in loading module 'scoring:persist'&lt;br /&gt;
*** ASSS exited: Error loading modules &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that you have accidentally copied over your win32 database files into your linux setup, or that the files have become corrupted.&lt;br /&gt;
This can be fixed by simply deleting all the files in the /data folder.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6206</id>
		<title>Troubleshooting ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_ASSS&amp;diff=6206"/>
				<updated>2011-05-29T08:37:28Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Created page with &amp;quot;This page deals with the troubleshooting of the ASSS installation. If you need help with writing a module, you should read Troubleshooting Modules. If you need help with conf...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page deals with the troubleshooting of the ASSS installation.&lt;br /&gt;
If you need help with writing a module, you should read [[Troubleshooting Modules]].&lt;br /&gt;
If you need help with configuring your server, you should read [[Server Setup]].&lt;br /&gt;
If you need help with arena settings, you should read [[Complete Settings]].&lt;br /&gt;
&lt;br /&gt;
==Potential issues==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'capman' from 'internal'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/mod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/smod.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/sysop.txt'&lt;br /&gt;
W &amp;lt;config&amp;gt; Can't find file for arena '(null)', name 'groupdef/default.txt'&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'mapnewsdl' from 'internal' &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that the files do not exist.&lt;br /&gt;
However, it is also possible that you have a file permissions error, in which you can check with ls -l.&lt;br /&gt;
If it is a permissions error, you can fix it using chmod.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'persist' from 'scoring'&lt;br /&gt;
db_env_create: Permission denied&lt;br /&gt;
E &amp;lt;cmod&amp;gt; error loading module 'persist'&lt;br /&gt;
Unrecoverable error (5): Error in loading module 'scoring:persist'&lt;br /&gt;
*** ASSS exited: Error loading modules &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
If you are seeing the above, it is possible that you have accidentally copied over your win32 database files into your linux setup, or that the files have become corrupted.&lt;br /&gt;
This can be fixed by simply deleting all the files in the /data folder.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_General_Faq&amp;diff=6205</id>
		<title>Server General Faq</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_General_Faq&amp;diff=6205"/>
				<updated>2011-05-29T08:26:28Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is ASSS and why is it better than subgame?  ==&lt;br /&gt;
A Small Subspace Server (ASSS) is a replacement, and not simply a clone of [[subgame]].  It allows a Server Administrator to customize the server by adding and removing [[Modules]], changing the moderator heirarchy, and much, much more.  Additionally, ASSS is developed to be open source making it easier for additional developers to fix [[Bugs]], add features, and add custom [[Modules]].&lt;br /&gt;
&lt;br /&gt;
I expect it uses less system resources to run as well (unlike cpu hogging subgame).&lt;br /&gt;
&lt;br /&gt;
== Does it run on Windows? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Grelminar maintains a Windows build in addition to his Linux build.&lt;br /&gt;
&lt;br /&gt;
== Does it run on Linux? ==&lt;br /&gt;
&lt;br /&gt;
Yes. ASSS was designed primarily for Linux and therefore works wonderfully on it.&lt;br /&gt;
&lt;br /&gt;
== How hard is it to install? ==&lt;br /&gt;
Dead simple if you know what you are doing. But it can be like moving a mountain if you don't know how to double click.&lt;br /&gt;
&lt;br /&gt;
== Why not just use a bot? ==&lt;br /&gt;
&lt;br /&gt;
ASSS can simply do more than bots can.&lt;br /&gt;
&lt;br /&gt;
*Because modules are a direct part of the server, things like stats and points can be easily manipulated using ASSS.&lt;br /&gt;
*New game types can be added so that they mesh seamlessly with everything else.&lt;br /&gt;
*Spawning new bots for every new subarena is not only a pain, it is sometime impractical. ASSS modules are there as soon as the new subarena is created.&lt;br /&gt;
*You can use server side commands. You won't ever have to cycle through your recent private message list to PM a bot again.&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Delete_this&amp;diff=6203</id>
		<title>Delete this</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Delete_this&amp;diff=6203"/>
				<updated>2011-05-29T08:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Module-settings to Delete this: useless page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;delete this&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Module-settings&amp;diff=6204</id>
		<title>Module-settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Module-settings&amp;diff=6204"/>
				<updated>2011-05-29T08:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: moved Module-settings to Delete this: useless page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Delete this]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Delete_this&amp;diff=6202</id>
		<title>Delete this</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Delete_this&amp;diff=6202"/>
				<updated>2011-05-29T08:24:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;delete this&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6201</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6201"/>
				<updated>2011-05-29T08:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
----&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
----&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
----&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and change them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
----&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
----&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
----&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
----&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
----&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
----&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6200</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6200"/>
				<updated>2011-05-29T08:18:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
----&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
----&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
----&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and cnange them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
----&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
----&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
----&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
----&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
----&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
----&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6199</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6199"/>
				<updated>2011-05-29T08:16:59Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and cnange them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
*PYTHON_HOME = /usr&lt;br /&gt;
&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
If you do '''not''' see &amp;quot;Error&amp;quot; or any problems with the build, continue reading this guide.&lt;br /&gt;
&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6198</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6198"/>
				<updated>2011-05-29T08:16:19Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and cnange them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
PYTHON_HOME = /usr&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
If you do '''not''' see &amp;quot;Error&amp;quot; or any problems with the build, continue reading this guide.&lt;br /&gt;
&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
*cd dist&lt;br /&gt;
*mv arenas ../arenas&lt;br /&gt;
*mv clients ../clients&lt;br /&gt;
*mv conf ../conf&lt;br /&gt;
*mv maps ../maps&lt;br /&gt;
*mv news.txt ../news.txt&lt;br /&gt;
*mv scrty ../scrty&lt;br /&gt;
*mv scrty1 ../scrty1&lt;br /&gt;
*cd ..&lt;br /&gt;
&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS&amp;diff=6197</id>
		<title>Installing ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS&amp;diff=6197"/>
				<updated>2011-05-29T07:59:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installation of an ASSS server will differ on the type of server you are running.&lt;br /&gt;
&lt;br /&gt;
Before beginning, you should probably read the '''userguide''' located in /doc. It's probably most important to read the &amp;quot;File Layout&amp;quot; section, which explains where the important files reside when you extract the ASSS package.&lt;br /&gt;
&lt;br /&gt;
If you are having issues installing ASSS, you may want to read [[Troubleshooting ASSS]].&lt;br /&gt;
&lt;br /&gt;
==Platform==&lt;br /&gt;
* [[Installing ASSS on Windows]]&lt;br /&gt;
* [[Installing ASSS on Linux]]&lt;br /&gt;
* [[Installing ASSS on Apple]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6196</id>
		<title>Server Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6196"/>
				<updated>2011-05-29T07:56:56Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will guide you through the process of configuring an [[ASSS]] server. This page is a continuance of [[Installing ASSS|the installation instructions]].&lt;br /&gt;
&lt;br /&gt;
== Configuring ASSS ==&lt;br /&gt;
&lt;br /&gt;
You will probably want to take a look at the [[modules.conf]] file before running ASSS for the first time to check for dependency issues.&lt;br /&gt;
&lt;br /&gt;
Note:  A ';' precedes a comment and all following characters before a newline are ignored.&lt;br /&gt;
&lt;br /&gt;
=== Changing Zone Name and Description ===&lt;br /&gt;
The zone name and description are both defined in the /conf/[[global.conf]] file. Edit this file to set your zone's name and description. Set both Billing:ServerName and Directory:Name to your desired zone name, and set Directory:Description to the description you want listed on the [[directory server]]. You'll also want to set the current directory servers in Server1, Server2, etc. At this time the following directory servers work: ''sscentral.sscuservers.net'' and ''sscentral.subspacehq.com''.&lt;br /&gt;
&lt;br /&gt;
To have ASSS send its info to the directory servers, uncomment (remove the semicolon preceding) the ''directory'' module in [[modules.conf]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
directory&lt;br /&gt;
;billing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run ASSS you should see the following output on module load:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'directory' from 'internal'&lt;br /&gt;
I &amp;lt;directory&amp;gt; server on port 5000 using name 'YOUR ZONE NAME HERE'&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.sscuservers.net' at 62.65.37.101 as a directory server&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.subspacehq.com' at 199.232.158.5 as a directory server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and the following during normal ASSS operation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
D &amp;lt;directory&amp;gt; sending information to directory servers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuring Staff ===&lt;br /&gt;
Your staff is defined in /conf/[[staff.conf]].&lt;br /&gt;
&lt;br /&gt;
In order to give yourself sysop you would change it to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
_YOURNAME_ = Sysop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to log in once using ?passwd &amp;lt;subspace login password&amp;gt; and rejoining the zone before commands work. This is to validate that only someone using your password is allowed to use sysop commands, in case the [[Biller|Billing server]] goes down or you don't use a biller.&lt;br /&gt;
&lt;br /&gt;
Notice that you have given yourself access to group Sysop in (global). This means that you will have Sysop privileges in all arenas. To limit a player to have only access in a single arena, put the player in the section pertaining to that arena. For example, to only have sysop powers in arena basketball you would do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:_YOURNAME_ = Sysop&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note that Sysop is an arbitrary group that can have any number or privileges. You can make up your own groups, too, and limit their special abilities and commands. Say we wanted to add a group called SettingChanger, who could change the settings in a single arena (let's say basketball), but not use arena messages or spec other players. First we'll add the players (in this case, Priitk) to the appropriate group in staff.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:Priitk = SettingChanger&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in groupdef.conf we'll add the group and it's privileges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now the Priitk should be able to change the settings by using ?getsettings or ?quickfix, but only in arena basketball. Editing groupdef.conf directly is not recommended, so it's much cleaner to do something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
#include groupdef.dir/setchanger&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then create a file in groupdef.dir called setchanger which contains the privileges and commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You've probably noticed that lines prefixed with cmd_ enable a player to use that command. Also, a line prefixed with privcmd_ allows a player to use a private command (one that can be messaged to a player). There are other capabilities, such as changesettings above, that a player needs in order to perform some actions, such as change the settings. Here's a complete list of the non-command capabilities (from [[grelminar]]'s [http://asss.yi.org/asss/files/userguide.html User Guide]):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivarena&amp;lt;/tt&amp;gt; controls whether private arena names are sent to a player for the ?arena command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivfreq&amp;lt;/tt&amp;gt; determines if a player sees private freqs in the freq listing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;findinprivs&amp;lt;/tt&amp;gt; is needed by a player running ?find for the server to report the names of private arenas. (Not implemented yet.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeepd&amp;lt;/tt&amp;gt; allows players to see other ship's energy and specials from spectator mode. (''epd'' stands for extra position data.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogall&amp;lt;/tt&amp;gt; allows a player to see all important log messages in the zone.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogarena&amp;lt;/tt&amp;gt; only allows a player to see only important log messages having to do with the arena he is currently in.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seemodchat&amp;lt;/tt&amp;gt; allows players to see the moderator chat.&lt;br /&gt;
* &amp;lt;tt&amp;gt;sendmodchat&amp;lt;/tt&amp;gt; controls who can send moderator chat messages. Usually, these two capabilities would be given to the same people.&lt;br /&gt;
* &amp;lt;tt&amp;gt;uploadfile&amp;lt;/tt&amp;gt; allows a player to upload files. Note that the player must also have the cmd_putfile to upload a file using that command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasslock&amp;lt;/tt&amp;gt; allows players to switch ships even though the arena or themselves have been locked into a ship or into spectator mode by a staff member.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasssecurity&amp;lt;/tt&amp;gt; lets players use unauthorized clients, or prevents kicking off for security checksum failures.&lt;br /&gt;
* &amp;lt;tt&amp;gt;invisiblespectator&amp;lt;/tt&amp;gt; makes players not show up on the list given when the person they are spectating uses the ?spec command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;unlimitedchat&amp;lt;/tt&amp;gt; allows a player (e.g., a bot) to bypass chat flooding checks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;changesettings&amp;lt;/tt&amp;gt; lets clients use the settings change packet (required for ?quickfix/?getsettings).&lt;br /&gt;
* &amp;lt;tt&amp;gt;isstaff makes&amp;lt;/tt&amp;gt; players show up in ?listmod output.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeallstaff&amp;lt;/tt&amp;gt; allows a player to see all non-default-group players, even if they lack isstaff.&lt;br /&gt;
&lt;br /&gt;
Also see: http://sscx.net/asss/userguide.html#%_sec_4&lt;br /&gt;
&lt;br /&gt;
=== Adding My Map ===&lt;br /&gt;
To change the map you need to first put the map (.lvl file) you want to use into the /maps/ directory. Then you edit the settings in the [[arena]] you want your map to be in. Change General:Map to be the name of the .lvl file you want it to use.&lt;br /&gt;
&lt;br /&gt;
=== Editing Arena Settings ===&lt;br /&gt;
&lt;br /&gt;
To change the settings the default arena (called public in [[Subgame]]) is using, edit /arenas/(default)/[[arena.conf]]. Note that this file may use data from other files using #include statements. To override certain settings without editing them from the original files, you can define them at the end of a file. For example, if you wanted svs settings, but the map to be &amp;quot;mymap.lvl&amp;quot; you could set your arena.conf to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; drop in all of svs settings here&lt;br /&gt;
#include conf/svs/svs.conf&lt;br /&gt;
&lt;br /&gt;
[General]&lt;br /&gt;
Map = mymap.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Changing Modules ===&lt;br /&gt;
You can change which modules your server uses. First make sure the compiled .dll file with your plugin is in the /dist/bin/ directory. Let's say our .dll file was called MyModules.dll and the module we were trying to use was called FreqWatcher. Now edit /conf/modules.conf and at the very end add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyModules:FreqWatcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The order of the modules.conf file is important, as files that depend on other files must be listed after them (unless they take advantage of MM_POSTLOAD in their main module function). Usually when the server aborts while loading, the problem can be traced back to the modules.conf file (a module is missing, or in the wrong place).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running ASSS ==&lt;br /&gt;
&lt;br /&gt;
To run the windows version of ASSS, locate ASSS.bat and double click it. That's it! You now have your own zone up and running.&lt;br /&gt;
&lt;br /&gt;
In Linux, just run ./scripts/run-asss, which handles ?shutdown -r. ''IMPORTANT:'' You will need to edit the ASSSHOME variable defined inside the script to point to the directory you extracted ASSS.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6195</id>
		<title>Server Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6195"/>
				<updated>2011-05-29T07:55:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will guide you through the process of configuring an [[ASSS]] server. This page is a continuance of [[Installing ASSS|The installation instructions]].&lt;br /&gt;
&lt;br /&gt;
== Configuring ASSS ==&lt;br /&gt;
&lt;br /&gt;
You will probably want to take a look at the [[modules.conf]] file before running ASSS for the first time to check for dependency issues.&lt;br /&gt;
&lt;br /&gt;
Note:  A ';' precedes a comment and all following characters before a newline are ignored.&lt;br /&gt;
&lt;br /&gt;
=== Changing Zone Name and Description ===&lt;br /&gt;
The zone name and description are both defined in the /conf/[[global.conf]] file. Edit this file to set your zone's name and description. Set both Billing:ServerName and Directory:Name to your desired zone name, and set Directory:Description to the description you want listed on the [[directory server]]. You'll also want to set the current directory servers in Server1, Server2, etc. At this time the following directory servers work: ''sscentral.sscuservers.net'' and ''sscentral.subspacehq.com''.&lt;br /&gt;
&lt;br /&gt;
To have ASSS send its info to the directory servers, uncomment (remove the semicolon preceding) the ''directory'' module in [[modules.conf]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
directory&lt;br /&gt;
;billing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run ASSS you should see the following output on module load:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'directory' from 'internal'&lt;br /&gt;
I &amp;lt;directory&amp;gt; server on port 5000 using name 'YOUR ZONE NAME HERE'&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.sscuservers.net' at 62.65.37.101 as a directory server&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.subspacehq.com' at 199.232.158.5 as a directory server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and the following during normal ASSS operation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
D &amp;lt;directory&amp;gt; sending information to directory servers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuring Staff ===&lt;br /&gt;
Your staff is defined in /conf/[[staff.conf]].&lt;br /&gt;
&lt;br /&gt;
In order to give yourself sysop you would change it to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
_YOURNAME_ = Sysop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to log in once using ?passwd &amp;lt;subspace login password&amp;gt; and rejoining the zone before commands work. This is to validate that only someone using your password is allowed to use sysop commands, in case the [[Biller|Billing server]] goes down or you don't use a biller.&lt;br /&gt;
&lt;br /&gt;
Notice that you have given yourself access to group Sysop in (global). This means that you will have Sysop privileges in all arenas. To limit a player to have only access in a single arena, put the player in the section pertaining to that arena. For example, to only have sysop powers in arena basketball you would do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:_YOURNAME_ = Sysop&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note that Sysop is an arbitrary group that can have any number or privileges. You can make up your own groups, too, and limit their special abilities and commands. Say we wanted to add a group called SettingChanger, who could change the settings in a single arena (let's say basketball), but not use arena messages or spec other players. First we'll add the players (in this case, Priitk) to the appropriate group in staff.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:Priitk = SettingChanger&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in groupdef.conf we'll add the group and it's privileges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now the Priitk should be able to change the settings by using ?getsettings or ?quickfix, but only in arena basketball. Editing groupdef.conf directly is not recommended, so it's much cleaner to do something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
#include groupdef.dir/setchanger&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then create a file in groupdef.dir called setchanger which contains the privileges and commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You've probably noticed that lines prefixed with cmd_ enable a player to use that command. Also, a line prefixed with privcmd_ allows a player to use a private command (one that can be messaged to a player). There are other capabilities, such as changesettings above, that a player needs in order to perform some actions, such as change the settings. Here's a complete list of the non-command capabilities (from [[grelminar]]'s [http://asss.yi.org/asss/files/userguide.html User Guide]):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivarena&amp;lt;/tt&amp;gt; controls whether private arena names are sent to a player for the ?arena command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivfreq&amp;lt;/tt&amp;gt; determines if a player sees private freqs in the freq listing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;findinprivs&amp;lt;/tt&amp;gt; is needed by a player running ?find for the server to report the names of private arenas. (Not implemented yet.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeepd&amp;lt;/tt&amp;gt; allows players to see other ship's energy and specials from spectator mode. (''epd'' stands for extra position data.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogall&amp;lt;/tt&amp;gt; allows a player to see all important log messages in the zone.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogarena&amp;lt;/tt&amp;gt; only allows a player to see only important log messages having to do with the arena he is currently in.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seemodchat&amp;lt;/tt&amp;gt; allows players to see the moderator chat.&lt;br /&gt;
* &amp;lt;tt&amp;gt;sendmodchat&amp;lt;/tt&amp;gt; controls who can send moderator chat messages. Usually, these two capabilities would be given to the same people.&lt;br /&gt;
* &amp;lt;tt&amp;gt;uploadfile&amp;lt;/tt&amp;gt; allows a player to upload files. Note that the player must also have the cmd_putfile to upload a file using that command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasslock&amp;lt;/tt&amp;gt; allows players to switch ships even though the arena or themselves have been locked into a ship or into spectator mode by a staff member.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasssecurity&amp;lt;/tt&amp;gt; lets players use unauthorized clients, or prevents kicking off for security checksum failures.&lt;br /&gt;
* &amp;lt;tt&amp;gt;invisiblespectator&amp;lt;/tt&amp;gt; makes players not show up on the list given when the person they are spectating uses the ?spec command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;unlimitedchat&amp;lt;/tt&amp;gt; allows a player (e.g., a bot) to bypass chat flooding checks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;changesettings&amp;lt;/tt&amp;gt; lets clients use the settings change packet (required for ?quickfix/?getsettings).&lt;br /&gt;
* &amp;lt;tt&amp;gt;isstaff makes&amp;lt;/tt&amp;gt; players show up in ?listmod output.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeallstaff&amp;lt;/tt&amp;gt; allows a player to see all non-default-group players, even if they lack isstaff.&lt;br /&gt;
&lt;br /&gt;
Also see: http://sscx.net/asss/userguide.html#%_sec_4&lt;br /&gt;
&lt;br /&gt;
=== Adding My Map ===&lt;br /&gt;
To change the map you need to first put the map (.lvl file) you want to use into the /maps/ directory. Then you edit the settings in the [[arena]] you want your map to be in. Change General:Map to be the name of the .lvl file you want it to use.&lt;br /&gt;
&lt;br /&gt;
=== Editing Arena Settings ===&lt;br /&gt;
&lt;br /&gt;
To change the settings the default arena (called public in [[Subgame]]) is using, edit /arenas/(default)/[[arena.conf]]. Note that this file may use data from other files using #include statements. To override certain settings without editing them from the original files, you can define them at the end of a file. For example, if you wanted svs settings, but the map to be &amp;quot;mymap.lvl&amp;quot; you could set your arena.conf to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; drop in all of svs settings here&lt;br /&gt;
#include conf/svs/svs.conf&lt;br /&gt;
&lt;br /&gt;
[General]&lt;br /&gt;
Map = mymap.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Changing Modules ===&lt;br /&gt;
You can change which modules your server uses. First make sure the compiled .dll file with your plugin is in the /dist/bin/ directory. Let's say our .dll file was called MyModules.dll and the module we were trying to use was called FreqWatcher. Now edit /conf/modules.conf and at the very end add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyModules:FreqWatcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The order of the modules.conf file is important, as files that depend on other files must be listed after them (unless they take advantage of MM_POSTLOAD in their main module function). Usually when the server aborts while loading, the problem can be traced back to the modules.conf file (a module is missing, or in the wrong place).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running ASSS ==&lt;br /&gt;
&lt;br /&gt;
To run the windows version of ASSS, locate ASSS.bat and double click it. That's it! You now have your own zone up and running.&lt;br /&gt;
&lt;br /&gt;
In Linux, just run ./scripts/run-asss, which handles ?shutdown -r. ''IMPORTANT:'' You will need to edit the ASSSHOME variable defined inside the script to point to the directory you extracted ASSS.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6194</id>
		<title>Server Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=6194"/>
				<updated>2011-05-29T07:54:36Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will guide you through the process of configuring an [[ASSS]] server. This page is a continuance of [[Installing ASSS|The installation instructions]].&lt;br /&gt;
&lt;br /&gt;
Before beginning, you should probably read the '''userguide''' located in /docs ]. It's probably most important to read the &amp;quot;File Layout&amp;quot; section, which explains where the important files reside when you extract the ASSS package.&lt;br /&gt;
&lt;br /&gt;
You also want to make sure that if you are not going to use MySQL or Python that you disable the appropriate modules.  Or conversely, make sure that all the System Requirements are installed before proceeding any further.&lt;br /&gt;
&lt;br /&gt;
== Configuring ASSS ==&lt;br /&gt;
&lt;br /&gt;
You will probably want to take a look at the [[modules.conf]] file before running ASSS for the first time to check for dependency issues.&lt;br /&gt;
&lt;br /&gt;
Note:  A ';' precedes a comment and all following characters before a newline are ignored.&lt;br /&gt;
&lt;br /&gt;
=== Changing Zone Name and Description ===&lt;br /&gt;
The zone name and description are both defined in the /conf/[[global.conf]] file. Edit this file to set your zone's name and description. Set both Billing:ServerName and Directory:Name to your desired zone name, and set Directory:Description to the description you want listed on the [[directory server]]. You'll also want to set the current directory servers in Server1, Server2, etc. At this time the following directory servers work: ''sscentral.sscuservers.net'' and ''sscentral.subspacehq.com''.&lt;br /&gt;
&lt;br /&gt;
To have ASSS send its info to the directory servers, uncomment (remove the semicolon preceding) the ''directory'' module in [[modules.conf]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
directory&lt;br /&gt;
;billing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you run ASSS you should see the following output on module load:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I &amp;lt;cmod&amp;gt; loading C module 'directory' from 'internal'&lt;br /&gt;
I &amp;lt;directory&amp;gt; server on port 5000 using name 'YOUR ZONE NAME HERE'&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.sscuservers.net' at 62.65.37.101 as a directory server&lt;br /&gt;
I &amp;lt;directory&amp;gt; using 'sscentral.subspacehq.com' at 199.232.158.5 as a directory server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and the following during normal ASSS operation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
D &amp;lt;directory&amp;gt; sending information to directory servers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuring Staff ===&lt;br /&gt;
Your staff is defined in /conf/[[staff.conf]].&lt;br /&gt;
&lt;br /&gt;
In order to give yourself sysop you would change it to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
_YOURNAME_ = Sysop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to log in once using ?passwd &amp;lt;subspace login password&amp;gt; and rejoining the zone before commands work. This is to validate that only someone using your password is allowed to use sysop commands, in case the [[Biller|Billing server]] goes down or you don't use a biller.&lt;br /&gt;
&lt;br /&gt;
Notice that you have given yourself access to group Sysop in (global). This means that you will have Sysop privileges in all arenas. To limit a player to have only access in a single arena, put the player in the section pertaining to that arena. For example, to only have sysop powers in arena basketball you would do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:_YOURNAME_ = Sysop&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note that Sysop is an arbitrary group that can have any number or privileges. You can make up your own groups, too, and limit their special abilities and commands. Say we wanted to add a group called SettingChanger, who could change the settings in a single arena (let's say basketball), but not use arena messages or spec other players. First we'll add the players (in this case, Priitk) to the appropriate group in staff.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[GroupPasswords]&lt;br /&gt;
; this section is just &amp;quot;group-name = password&amp;quot;&lt;br /&gt;
; groups that aren't listed can't be logged into by password.&lt;br /&gt;
&lt;br /&gt;
; the rest of the sections in this file are named after arena groups&lt;br /&gt;
&lt;br /&gt;
basketball:Priitk = SettingChanger&lt;br /&gt;
&lt;br /&gt;
[(global)]&lt;br /&gt;
; these are &amp;quot;playername = group&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in groupdef.conf we'll add the group and it's privileges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now the Priitk should be able to change the settings by using ?getsettings or ?quickfix, but only in arena basketball. Editing groupdef.conf directly is not recommended, so it's much cleaner to do something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; conf/groupdef.conf&lt;br /&gt;
; don't edit this file, edit the ones in groupdef.dir&lt;br /&gt;
&lt;br /&gt;
[SettingChanger]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
#include groupdef.dir/setchanger&lt;br /&gt;
&lt;br /&gt;
[default]&lt;br /&gt;
#include groupdef.dir/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then create a file in groupdef.dir called setchanger which contains the privileges and commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd_quickfix&lt;br /&gt;
cmd_getsettings&lt;br /&gt;
&lt;br /&gt;
changesettings&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You've probably noticed that lines prefixed with cmd_ enable a player to use that command. Also, a line prefixed with privcmd_ allows a player to use a private command (one that can be messaged to a player). There are other capabilities, such as changesettings above, that a player needs in order to perform some actions, such as change the settings. Here's a complete list of the non-command capabilities (from [[grelminar]]'s [http://asss.yi.org/asss/files/userguide.html User Guide]):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivarena&amp;lt;/tt&amp;gt; controls whether private arena names are sent to a player for the ?arena command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeprivfreq&amp;lt;/tt&amp;gt; determines if a player sees private freqs in the freq listing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;findinprivs&amp;lt;/tt&amp;gt; is needed by a player running ?find for the server to report the names of private arenas. (Not implemented yet.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeepd&amp;lt;/tt&amp;gt; allows players to see other ship's energy and specials from spectator mode. (''epd'' stands for extra position data.)&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogall&amp;lt;/tt&amp;gt; allows a player to see all important log messages in the zone.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seesysoplogarena&amp;lt;/tt&amp;gt; only allows a player to see only important log messages having to do with the arena he is currently in.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seemodchat&amp;lt;/tt&amp;gt; allows players to see the moderator chat.&lt;br /&gt;
* &amp;lt;tt&amp;gt;sendmodchat&amp;lt;/tt&amp;gt; controls who can send moderator chat messages. Usually, these two capabilities would be given to the same people.&lt;br /&gt;
* &amp;lt;tt&amp;gt;uploadfile&amp;lt;/tt&amp;gt; allows a player to upload files. Note that the player must also have the cmd_putfile to upload a file using that command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasslock&amp;lt;/tt&amp;gt; allows players to switch ships even though the arena or themselves have been locked into a ship or into spectator mode by a staff member.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bypasssecurity&amp;lt;/tt&amp;gt; lets players use unauthorized clients, or prevents kicking off for security checksum failures.&lt;br /&gt;
* &amp;lt;tt&amp;gt;invisiblespectator&amp;lt;/tt&amp;gt; makes players not show up on the list given when the person they are spectating uses the ?spec command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;unlimitedchat&amp;lt;/tt&amp;gt; allows a player (e.g., a bot) to bypass chat flooding checks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;changesettings&amp;lt;/tt&amp;gt; lets clients use the settings change packet (required for ?quickfix/?getsettings).&lt;br /&gt;
* &amp;lt;tt&amp;gt;isstaff makes&amp;lt;/tt&amp;gt; players show up in ?listmod output.&lt;br /&gt;
* &amp;lt;tt&amp;gt;seeallstaff&amp;lt;/tt&amp;gt; allows a player to see all non-default-group players, even if they lack isstaff.&lt;br /&gt;
&lt;br /&gt;
Also see: http://sscx.net/asss/userguide.html#%_sec_4&lt;br /&gt;
&lt;br /&gt;
=== Adding My Map ===&lt;br /&gt;
To change the map you need to first put the map (.lvl file) you want to use into the /maps/ directory. Then you edit the settings in the [[arena]] you want your map to be in. Change General:Map to be the name of the .lvl file you want it to use.&lt;br /&gt;
&lt;br /&gt;
=== Editing Arena Settings ===&lt;br /&gt;
&lt;br /&gt;
To change the settings the default arena (called public in [[Subgame]]) is using, edit /arenas/(default)/[[arena.conf]]. Note that this file may use data from other files using #include statements. To override certain settings without editing them from the original files, you can define them at the end of a file. For example, if you wanted svs settings, but the map to be &amp;quot;mymap.lvl&amp;quot; you could set your arena.conf to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; drop in all of svs settings here&lt;br /&gt;
#include conf/svs/svs.conf&lt;br /&gt;
&lt;br /&gt;
[General]&lt;br /&gt;
Map = mymap.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Changing Modules ===&lt;br /&gt;
You can change which modules your server uses. First make sure the compiled .dll file with your plugin is in the /dist/bin/ directory. Let's say our .dll file was called MyModules.dll and the module we were trying to use was called FreqWatcher. Now edit /conf/modules.conf and at the very end add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MyModules:FreqWatcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The order of the modules.conf file is important, as files that depend on other files must be listed after them (unless they take advantage of MM_POSTLOAD in their main module function). Usually when the server aborts while loading, the problem can be traced back to the modules.conf file (a module is missing, or in the wrong place).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running ASSS ==&lt;br /&gt;
&lt;br /&gt;
To run the windows version of ASSS, locate ASSS.bat and double click it. That's it! You now have your own zone up and running.&lt;br /&gt;
&lt;br /&gt;
In Linux, just run ./scripts/run-asss, which handles ?shutdown -r. ''IMPORTANT:'' You will need to edit the ASSSHOME variable defined inside the script to point to the directory you extracted ASSS.&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6193</id>
		<title>Installing ASSS on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS_on_Linux&amp;diff=6193"/>
				<updated>2011-05-29T07:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Created page with &amp;quot;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.  First, you need to clone the files from the ASSS repository. *hg clon...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If installed, you should find the locations of your Python, MySQL, and other dependencies before you begin.&lt;br /&gt;
&lt;br /&gt;
First, you need to clone the files from the ASSS repository.&lt;br /&gt;
*hg clone https://bitbucket.org/grelminar/asss ../asss&lt;br /&gt;
&lt;br /&gt;
Then, after the files have transferred, you will need to build the program files from source code.&lt;br /&gt;
*cd src&lt;br /&gt;
*mv system.mk.dist system.mk&lt;br /&gt;
&lt;br /&gt;
If you have Python or MySQL installed, you must point the compiler at them.&lt;br /&gt;
*vim system.mk&lt;br /&gt;
Find the following lines and cnange them to their respective locations&lt;br /&gt;
*MYSQL_HOME = /opt/mysql&lt;br /&gt;
PYTHON_HOME = /usr&lt;br /&gt;
If you do NOT have Python or MySQL installed, you must comment out the following lines, by adding a # in front of them:&lt;br /&gt;
*have_bdb := yes&lt;br /&gt;
*have_mysql := yes&lt;br /&gt;
*have_python := yes&lt;br /&gt;
&lt;br /&gt;
Then build the files.&lt;br /&gt;
*make&lt;br /&gt;
You will then get to watch a nice wall of spam.&lt;br /&gt;
If you do '''not''' see &amp;quot;Error&amp;quot; or any problems with the build, continue reading this guide.&lt;br /&gt;
&lt;br /&gt;
Because the developers wanted to be able to update everything on a server already running ASSS, you must now copy all the files into their proper locations.&lt;br /&gt;
&lt;br /&gt;
For ease of access, you may want to move the run-asss script to the root directory.&lt;br /&gt;
[optional]&lt;br /&gt;
*cd scripts&lt;br /&gt;
*mv run-asss run&lt;br /&gt;
&lt;br /&gt;
After you have completed the installation, you must now configure your server.&lt;br /&gt;
[[Server Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_ASSS&amp;diff=6192</id>
		<title>Installing ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_ASSS&amp;diff=6192"/>
				<updated>2011-05-29T07:28:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Created page with &amp;quot;Installation of an ASSS server will differ on the type of server you are running.  ==Platform== * Installing ASSS on Windows * Installing ASSS on Linux * [[Installing ASS...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installation of an ASSS server will differ on the type of server you are running.&lt;br /&gt;
&lt;br /&gt;
==Platform==&lt;br /&gt;
* [[Installing ASSS on Windows]]&lt;br /&gt;
* [[Installing ASSS on Linux]]&lt;br /&gt;
* [[Installing ASSS on Apple]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ASSS]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Category:Guides&amp;diff=6191</id>
		<title>Category:Guides</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Category:Guides&amp;diff=6191"/>
				<updated>2011-05-29T07:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These tutorials should guide you in whatever Subspace/Continuum related task you are having problems with.&lt;br /&gt;
&lt;br /&gt;
You can request tutorials either using the [[Category_talk:Tutorial|discussions]] page or at [http://forums.minegoboom.com/ Server Help forums].&lt;br /&gt;
&lt;br /&gt;
The online version of the ASSS user guide can be found [http://www.sscx.net/asss/userguide.html here]:&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=ASSS&amp;diff=6190</id>
		<title>ASSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=ASSS&amp;diff=6190"/>
				<updated>2011-05-29T07:20:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Small Subspace Server (ASSS) is a replacement, and not simply a clone of [[subgame]] written by [[grelminar]]. It allows a Server Administrator to customize the server by adding and removing [[module]]s, changing the moderator heirarchy, and much, much more.  Additionally, ASSS is developed to be open source making it easier for additional developers to fix bugs, add features, and add custom [[module]]s. It runs on both Linux and Windows, but runs better on Linux as grelminar originally designed it solely for Linux.&lt;br /&gt;
&lt;br /&gt;
It uses less system resources to run as well (unlike cpu-hogging [[Subgame]]).&lt;br /&gt;
&lt;br /&gt;
For instructions on how to install the ASSS server, go to [[Installing ASSS]].&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[http://pineapple.vg/download/Pages/ASSS_Userguide.pdf ASSS Userguide / Command Reference]&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;br /&gt;
[[Category: Servers]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Graphics_files&amp;diff=6189</id>
		<title>Graphics files</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Graphics_files&amp;diff=6189"/>
				<updated>2011-02-02T03:27:10Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: added pic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following are all files in Continuum's \Graphics directory which control most of the graphics used by Continuum in-game.&lt;br /&gt;
&lt;br /&gt;
[[Image:Colors.png]] [[:Image:Colors.png|colors.bm2]] - Controls the colors of the interface, including background color and borders, as well as all color details of the radar.&lt;br /&gt;
&lt;br /&gt;
[[Image:gradient.jpg]] [[:Image:gradient.jpg|gradient.bm2]] - Controls color gradients for the energy bar and bullet trails.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bombs.png]] [[:Image:Bombs.png|bombs.bm2]] - Controls animation for bombs and thor's hammers.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bullets.png]] [[:Image:Bullets.png|bullets.bm2]] - Controls animation for guns and bursts.&lt;br /&gt;
&lt;br /&gt;
== Graphic file names and short description ==&lt;br /&gt;
&lt;br /&gt;
*bg01.bm2 - this is a random planet in the background&lt;br /&gt;
*bg02.bm2 - this is a random planet in the background&lt;br /&gt;
*bg03.bm2 - this is a random planet in the background&lt;br /&gt;
*bg04.bm2 - this is a random planet in the background&lt;br /&gt;
*bg05.bm2 - this is a random planet in the background&lt;br /&gt;
*bg06.bm2 - this is a random planet in the background&lt;br /&gt;
*bg07.bm2 - this is a random planet in the background&lt;br /&gt;
*bg08.bm2 - this is a random planet in the background&lt;br /&gt;
*bg09.bm2 - this is a random planet in the background&lt;br /&gt;
*bg10.bm2 - this is a random planet in the background&lt;br /&gt;
*bg11.bm2 - this is a random planet in the background&lt;br /&gt;
*bg12.bm2 - this is a random planet in the background&lt;br /&gt;
*bg13.bm2 - this is a random planet in the background&lt;br /&gt;
*bg14.bm2 - this is a random planet in the background&lt;br /&gt;
*bombflsh.bm2 - This is the flash that  comes out of the front of your ship when you fire a bomb&lt;br /&gt;
*[[:Image:Bombs.png|bombs.bm2]] - These are the bombs themselves, they animate from the left to the right&lt;br /&gt;
*bullets.bm2 - These are the bullets themselves, they go through the frames left to right&lt;br /&gt;
*[[:Image:Colors.png|colors.bm2]] - These are an assortment of lines and each color means a different color of a certain object in '''continuum'''.&lt;br /&gt;
*damage.bm2 - This is the graphic for when a ship has been hit and shows damage&lt;br /&gt;
*disp.bm2 - This is the background to the display in the upper right&lt;br /&gt;
*dropflag.bm2 - This is the animation that will show in the upper right when you have a flag and how much time is left until it drops&lt;br /&gt;
*empburst.bm2 -  This is the explosion that a EMP bomb will make&lt;br /&gt;
*engyfont.bm2 - This is the amount of energy your ship has, it will show on the upper right display&lt;br /&gt;
*exhaust.bm2 -  This is what your ship propels itself with, this graphic will appear behind your ship depending on which way you are flying&lt;br /&gt;
*explode0.bm2 - This is the image that will appear after your bullets hit something&lt;br /&gt;
*explode1.bm2 - This is the image that will appear when a ship has been destroyed&lt;br /&gt;
*explode2.bm2 - This is the image that will appear when a bomb or thor hits something&lt;br /&gt;
*[[:Image:Flag.png|flag.bm2]] - This is the animated graphic of both owned and unowned flags&lt;br /&gt;
*[[:Image:Goal.png|goal.bm2]] -  This is the graphic that appears as a goal&lt;br /&gt;
*[[:Image:gradient.jpg|gradient.bm2]] - This image controls the colors of bullet trails and the energy bar&lt;br /&gt;
*hlthbar.bm2 - This is the image that will appear over your health bar on the top of the screen&lt;br /&gt;
*hugefont.bm2 - This is the font displayed when Extra Large is selected on the Font Size menu ('''continuum 0.??+''')&lt;br /&gt;
*hugefontf.bm2 - This is the foreign font displayed when Extra Large is selected on the Font Size menu ('''continuum 0.??+''')&lt;br /&gt;
*icondoor.bm2 - This is the image that will appear to show how many of a certain item you have (bursts, etc)&lt;br /&gt;
*icons.bm2 - These are what will show up for your items (lvl 1 bullets, etc)&lt;br /&gt;
*junkjv.bm2 -  This is the image that will fly off of the Javelin after it has been killed&lt;br /&gt;
*junklv.bm2 -  This is the image that will fly off of the Leviathan after it has been killed&lt;br /&gt;
*junknw.bm2 -  This is the image that will fly off of the Lancaster after it has been killed&lt;br /&gt;
*junksh.bm2 -  This is the image that will fly off of the Shark after it has been killed&lt;br /&gt;
*junksp.bm2 - This is the image that will fly off of the Spider after it has been killed&lt;br /&gt;
*junkte.bm2 - This is the image that will fly off of the Terrier after it has been killed&lt;br /&gt;
*junkwb.bm2 - This is the image that will fly off of the Warbird after it has been killed&lt;br /&gt;
*junkwe.bm2 -  This is the image that will fly off of the Weasel after it has been killed&lt;br /&gt;
*king.bm2 - This is the image that will appear when you are still a player in the king of the hill game&lt;br /&gt;
*kingex.bm2 - This is the image that appears with the time left in the king of the hill&lt;br /&gt;
*largefont.bm2 - This is the font displayed when Large is selected on the Font Size menu ('''continuum 0.??+''')&lt;br /&gt;
*largefontf.bm2 - This is the foreign font displayed when Large is selected on the Font Size menu ('''continuum 0.??+''')&lt;br /&gt;
*led.bm2 - This is the font for the digits that appear in the top right display&lt;br /&gt;
*menutext.bm2 - This is the font that is used on the main menu only (never in-game)&lt;br /&gt;
*mines.bm2 - These are the mines that appear after a ship lays them&lt;br /&gt;
*over1.bm2 - This is the image that will show up for one of the two kinds of small rocks that spin&lt;br /&gt;
*over2.bm2 - This is the image that will show up for the big rocks that spin&lt;br /&gt;
*over3.bm2 - This is the image that will show up for the second small rock&lt;br /&gt;
*over4.bm2 - This will show for the 'space station' image that spins&lt;br /&gt;
*over5.bm2 - This image is the graphic for the wormhole spinning&lt;br /&gt;
*[[:Image:Powerb.png|powerb.bm2]] - This is the animation that will appear as the powerball which you can shoot into goals to score points&lt;br /&gt;
*prizes.bm2 - These are the green things that are dropped from a ship after it is killed&lt;br /&gt;
*radarh.bm2 - This is the horizontal line under the radar (not used in continuum '''0.??'''+)&lt;br /&gt;
*radarv.bm2 - This is the vertical line to the right of the radar (not used in continuum '''0.??'''+)&lt;br /&gt;
*[[:Image:Repel.png|repel.bm2]] - This is the image that will be shown when a player releases a repel&lt;br /&gt;
*rocket.bm2 - This is the image that will be shown when a player uses a rocket&lt;br /&gt;
*shield.bm2 - This is the image that will appear when you have a shield, and what percent your shields strength is at&lt;br /&gt;
*shrapnel.bm2 - This is the little piece of bombs that fly off your bomb explosion&lt;br /&gt;
*shrtfont.bm2 - This is the font displayed when Small is selected on the Font Size menu&lt;br /&gt;
*shrtfontf.bm2 - This is the foreign font displayed when Small is selected on the Font Size menu&lt;br /&gt;
*spark.bm2 - This image will appear when you are EMP'd (your energy is not refilling)&lt;br /&gt;
*ssshield.bm2 - This is the spinning subspace logo that appears next to a name of the player with the most points in the arena&lt;br /&gt;
*star01.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star02.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star03.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star04.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star05.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star06.bm2 - This is one of the random stars in the background&lt;br /&gt;
*star07.bm2 - This is one of the random stars in the background&lt;br /&gt;
*super.bm2 - This stores frames for the animation that appears on the right when you have super&lt;br /&gt;
*tallfont.bm2 - This is the font displayed when Medium is selected on the Font Size menu&lt;br /&gt;
*tallfontf.bm2 - This is the foreign font displayed when Medium is selected on the Font Size menu&lt;br /&gt;
*trail.bm2 - These are the trails for the bombs fired by a ship&lt;br /&gt;
*turret.bm2 - This is what you look like when you are a turret&lt;br /&gt;
*turret2.bm2 - This is what everyone else looks like when they are a turret&lt;br /&gt;
*wall.bm2 - This is the image that will appear when a player lays a brick&lt;br /&gt;
*warp.bm2 - This is the animation that will appear when a player warps&lt;br /&gt;
*warppnt.bm2 - This is the image that will appear where your portal is after you lay one&lt;br /&gt;
*ships.bm2 - These are the ships, you can also have them in seperate files as ship1.bm2, ship2.bm2, etc&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Intricacies]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Cfg_file&amp;diff=6188</id>
		<title>Cfg file</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Cfg_file&amp;diff=6188"/>
				<updated>2011-02-02T03:22:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: knocked it up a notch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Subgame]] stores all the settings for an arena in a .cfg file, with the filename matching the arena name.&lt;br /&gt;
It stores the following settings:&lt;br /&gt;
*[[Bomb Settings]]&lt;br /&gt;
*[[Brick Settings]]&lt;br /&gt;
*[[Bullet Settings]]&lt;br /&gt;
*[[Burst Settings]]&lt;br /&gt;
*[[Cost Settings]]&lt;br /&gt;
*[[Custom Settings]]&lt;br /&gt;
*[[Door Settings]]&lt;br /&gt;
*[[Flag Settings]]&lt;br /&gt;
*[[Kill Settings]]&lt;br /&gt;
*[[King Settings]]&lt;br /&gt;
*[[Latency Settings]]&lt;br /&gt;
*[[Message Settings]]&lt;br /&gt;
*[[Mine Settings]]&lt;br /&gt;
*[[Misc Settings]]&lt;br /&gt;
*[[Owner Settings]]&lt;br /&gt;
*[[Packetloss Settings]]&lt;br /&gt;
*[[Periodic Settings]]&lt;br /&gt;
*[[Prize Settings]]&lt;br /&gt;
*[[Prizeweight Settings]]&lt;br /&gt;
*[[Radar Settings]]&lt;br /&gt;
*[[Repel Settings]]&lt;br /&gt;
*[[Rocket Settings]]&lt;br /&gt;
*[[Routing Settings]]&lt;br /&gt;
*[[Security Settings]]&lt;br /&gt;
*[[Shrapnel Settings]]&lt;br /&gt;
*[[Spawn Settings]]&lt;br /&gt;
*[[Soccer Settings]]&lt;br /&gt;
*[[Team Settings]]&lt;br /&gt;
*[[Territory Settings]]&lt;br /&gt;
*[[Toggle Settings]]&lt;br /&gt;
*[[Wormhole Settings]]&lt;br /&gt;
*[[Ship Settings]]&lt;br /&gt;
&lt;br /&gt;
These settings can be modified by editing the .cfg file itself (directly, using FTP, putfile, etc.), using the ?set [[commands|command]], or using the ?setsettings command. [[Subgame]] uses the template.sss file to format settings for in-game modification using ?setsettings. It also stores the settings for public (default) arenas in server.cfg.&lt;br /&gt;
&lt;br /&gt;
[[Category:Subgame Settings]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6187</id>
		<title>Troubleshooting Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6187"/>
				<updated>2011-01-23T08:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: /* My module crashes whenever I try to use an interface! */  fix'd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some general solutions to help you solve a problem with a module that you just wrote.&lt;br /&gt;
Keep in mind that these are suggestions, and may not always be correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module works when I put it in modules.conf, but the zone crashes when I use ?insmod, why? ==&lt;br /&gt;
&lt;br /&gt;
Chances are, you are doing something in the CB_ARENAACTION callback, and are doing something in the AA_PRECREATE or AA_CREATE states.&lt;br /&gt;
Simply do this when the module loads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arena *a;&lt;br /&gt;
Link *link;&lt;br /&gt;
aman-&amp;gt;Lock();&lt;br /&gt;
FOR_EACH_ARENA(a)&lt;br /&gt;
{&lt;br /&gt;
	ArenaAction(a,AA_PRECREATE);&lt;br /&gt;
	ArenaAction(a,AA_CREATE);&lt;br /&gt;
}&lt;br /&gt;
aman-&amp;gt;Unlock();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When my module is in modules.conf, players can not enter the zone, or when I use ?insmod, players can not switch arenas and I get errors about player states! ==&lt;br /&gt;
&lt;br /&gt;
You may be using arena data improperly.&lt;br /&gt;
Be sure you have gotten the I_ARENAMAN interface and have used AllocateArenaData() properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module keeps failing to load! ==&lt;br /&gt;
&lt;br /&gt;
Be sure you have all the necessary modules needed for your module to run.&lt;br /&gt;
Make sure your module loads after the modules it is dependant on are already loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module crashes whenever I try to use an interface! ==&lt;br /&gt;
&lt;br /&gt;
Make sure you have gotten the interface by using &amp;lt;tt&amp;gt;GetInterface()&amp;lt;/tt&amp;gt; properly, that the assigned interface variable is unique, and that you verify whether or not the interface is valid by checking to see if it is not defined.  The latter is typically done in the entry point, as shown [[Writing Modules In C#Using Interfaces|here]], by adding an if-statement and returning &amp;lt;tt&amp;gt;MM_FAIL&amp;lt;/tt&amp;gt; on failure.  If the interface is being called at some other point in the code, make sure to verify if it is defined and to handle cases throughout your code where it may not be valid.&lt;br /&gt;
&lt;br /&gt;
Also note that if a parent interface does not check to see if it is still being used by other modules before unloading, it may cause instability in your zone and eventually result in a crash when a module calls that interface again.&lt;br /&gt;
&lt;br /&gt;
== My module will not compile! Why can't my compiler find certain things? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, #include asss.h is not enough.&lt;br /&gt;
Only the core header files are in asss.h, and you will need to manually include any others.&lt;br /&gt;
This may also be true if you are using a custom interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why does my module keep crashing when a player leaves the zone? ==&lt;br /&gt;
&lt;br /&gt;
You may be saving the player pointer somewhere, and then are trying to access it after the player leaves.&lt;br /&gt;
This does not work because the pointer becomes invalid when the player leaves.&lt;br /&gt;
Your module is informed when this happens by the CB_NEWPLAYER callback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6186</id>
		<title>Troubleshooting Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6186"/>
				<updated>2011-01-22T23:23:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: Undo revision 6185 by Hakaku (Talk) yet in english&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some general solutions to help you solve a problem with a module that you just wrote.&lt;br /&gt;
Keep in mind that these are suggestions, and may not always be correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module works when I put it in modules.conf, but the zone crashes when I use ?insmod, why? ==&lt;br /&gt;
&lt;br /&gt;
Chances are, you are doing something in the CB_ARENAACTION callback, and are doing something in the AA_PRECREATE or AA_CREATE states.&lt;br /&gt;
Simply do this when the module loads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arena *a;&lt;br /&gt;
Link *link;&lt;br /&gt;
aman-&amp;gt;Lock();&lt;br /&gt;
FOR_EACH_ARENA(a)&lt;br /&gt;
{&lt;br /&gt;
	ArenaAction(a,AA_PRECREATE);&lt;br /&gt;
	ArenaAction(a,AA_CREATE);&lt;br /&gt;
}&lt;br /&gt;
aman-&amp;gt;Unlock();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When my module is in modules.conf, players can not enter the zone, or when I use ?insmod, players can not switch arenas and I get errors about player states! ==&lt;br /&gt;
&lt;br /&gt;
You may be using arena data improperly.&lt;br /&gt;
Be sure you have gotten the I_ARENAMAN interface and have used AllocateArenaData() properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module keeps failing to load! ==&lt;br /&gt;
&lt;br /&gt;
Be sure you have all the necessary modules needed for your module to run.&lt;br /&gt;
Make sure your module loads after the modules it is dependant on are already loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module crashes whenever I try to use an interface! ==&lt;br /&gt;
&lt;br /&gt;
Make sure you have gotten the interface by using &amp;lt;tt&amp;gt;GetInterface()&amp;lt;/tt&amp;gt; properly, that the assigned interface variable is unique, and that you verify whether or not the interface is valid by checking to see if it is not defined.  The latter is typically done in the entry point, as shown [[Writing Modules In C#Using Interfaces|here]], by adding an if-statement and returning &amp;lt;tt&amp;gt;MM_FAIL&amp;lt;/tt&amp;gt; on failure.  If the interface is being called at some other point in the code, make sure to verify if it is defined and to handle cases throughout your code where it may not be valid.&lt;br /&gt;
&lt;br /&gt;
Note that also that if a parent interface does not check to see if it is still being used by other modules before unloading, it may cause instability in your zone and eventually result in a crash when a module calls that interface again.&lt;br /&gt;
&lt;br /&gt;
== My module will not compile! Why can't my compiler find certain things? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, #include asss.h is not enough.&lt;br /&gt;
Only the core header files are in asss.h, and you will need to manually include any others.&lt;br /&gt;
This may also be true if you are using a custom interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why does my module keep crashing when a player leaves the zone? ==&lt;br /&gt;
&lt;br /&gt;
You may be saving the player pointer somewhere, and then are trying to access it after the player leaves.&lt;br /&gt;
This does not work because the pointer becomes invalid when the player leaves.&lt;br /&gt;
Your module is informed when this happens by the CB_NEWPLAYER callback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=List_of_Custom_Modules&amp;diff=6184</id>
		<title>List of Custom Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=List_of_Custom_Modules&amp;diff=6184"/>
				<updated>2011-01-21T00:20:09Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: spiced things up a bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Provided below is a list of custom modules and projects for ASSS which have been released for public use. Although several of them were designed for previous versions of ASSS, most of them still work when recompiled against the most recent release of ASSS, often with with little to no modifications necessary.&lt;br /&gt;
&lt;br /&gt;
For help on how to compile C modules, see [[Installing New Modules]] for more details.&lt;br /&gt;
&lt;br /&gt;
= Open Source =&lt;br /&gt;
== ASSS 1.5.0 ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8425 ASSS Command List Module] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8673 ASSS Files/Quickfix Module Combo Pack] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8429 ASSS Multipub Module] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8773 LVZHUD] - Samapico&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8690 Small module to help testing other modules] - D1st0rt&lt;br /&gt;
&lt;br /&gt;
* '''Projects'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8629 ACE -- ASSS C Enricher (beta)] - Arnk Kilo Dylie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ASSS 1.4.4 ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8676 ASSS Flags Module] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8470 ball_motion] - Goldeye&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8384 Colors] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8425 Command List] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8714 Deanti] - Hakaku&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8716 ?doors] - Hakaku&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8715 Flag Statistics] - Hakaku&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7469 fm_shiplimits] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8095 Fuschia] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?p=78585#78585 Goal Callback example]&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8092 hs_util] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?p=79093#79093 Jackpot Music Lock] - Hakaku&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7560 King of the Hill] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8530 Multinews] - JoWie&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8640 Setting banners (example)] - Hakaku&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8431 Sql Query] - Cheese&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7757 Staff Message of the Day] - JoWie&lt;br /&gt;
&lt;br /&gt;
* '''Python'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8171 Automated Team Picking] - D1st0rt&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3975 Bounty Rabbit] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8402 Optparser] - D1st0rt&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?p=82108#82108 Region-activated LVZ popup (example)] - JoWie&lt;br /&gt;
&lt;br /&gt;
* '''Projects'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=8382 Hosted Game Core] - D1st0rt&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?p=80108#80108 Paintball Modules] - Bak&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ASSS 1.4.2 - 1.4.3 ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Autobrick] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6567 Chatmenu] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4882 Controllable doors] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3758 CTF flag game] - Smong&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Digithud] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6187 hs_ufo] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7059 Initial] - Bak&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7614 Jpcounter2] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7609 Per ship lvz] - JoWie&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6984 radarzoom - per ship MapZoomFactor] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7399 Region Triggers] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7563 Spree] - Smong, JoWie&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7507 Swappable game interface] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7608 Thor Level] - JoWie&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7055 Vehicles] - Bak&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7462 Zombie] - Animate Dreams&lt;br /&gt;
&lt;br /&gt;
* '''Python'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3564 Autoprize] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7506 Craters] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6117 Dodgeball] - xsp0rtsfanx, Chambahs&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7614 fg_wz_spawns] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7454 Goal Spree] - BDwinsAlt&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7361 Kill lvz] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7391 Noise upon entering] - BDwinsAlt&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7724 ShipFX] - Jonus&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Soundenter2] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7718 Staff Application] - Jonus&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7732 SubSpace Casino] - Jonus&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Suggest] - Smong&lt;br /&gt;
&lt;br /&gt;
* '''Projects'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=5629 CNC Generals] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6035 Direct ASSS Web Stats] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=7409 Hyperspace Core Modules] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=5629 Unreal Tournament] - Chambahs, Smong, others &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ASSS 1.3.6 - 1.4.0 ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4776 Cmdalias] - Bak&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4817 Drone] - Bak&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Nomysql] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4159 Poll] - Bak&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4279 Prize Management System] - 50% Packetloss&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4777 Togglespec] - Bak&lt;br /&gt;
&lt;br /&gt;
* '''Python'''&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Autowarp3] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4865 Elim] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=4262 Guessing game] - Chambahs, Smong&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Note] - Smong&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html To do] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=5426 Turretwar] - D1st0rt&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Wipeout] - Smong&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ASSS 1.2.x - 1.3.5 ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3690 Afk] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3306 hs_antiwarp] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3305 hs_listnewb] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3229 %macro expander] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3004 Moveto] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3228 Race] - Smong, i88gerbils&lt;br /&gt;
&lt;br /&gt;
* '''Python'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3974 Blackjack] - Chambahs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ASSS 0.9.x - 1.1.x ==&lt;br /&gt;
* '''C'''&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html autowarp2] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3162 Flag neuter] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=1888 No anti in center] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=2467 Putmap] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=3163 Simple region tools] - Dr Brain&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=801 Teamkill] - Smong&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=801 Triggers] - Smong&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Warper] - Smong&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Closed Source =&lt;br /&gt;
* '''Projects'''&lt;br /&gt;
** [http://forums.minegoboom.com/viewtopic.php?t=6757 Bot with Damage] - Smong&lt;br /&gt;
** [http://toktok.sscentral.com/ss-asss.html Cheat Detection] - Smong&lt;br /&gt;
&lt;br /&gt;
[[Category:Custom Modules]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6183</id>
		<title>Troubleshooting Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6183"/>
				<updated>2011-01-21T00:08:40Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: /* My module crashes whenever I try to use an interface! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some general solutions to help you solve a problem with a module that you just wrote.&lt;br /&gt;
Keep in mind that these are suggestions, and may not always be correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module works when I put it in modules.conf, but the zone crashes when I use ?insmod, why? ==&lt;br /&gt;
&lt;br /&gt;
Chances are, you are doing something in the CB_ARENAACTION callback, and are doing something in the AA_PRECREATE or AA_CREATE states.&lt;br /&gt;
Simply do this when the module loads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arena *a;&lt;br /&gt;
Link *link;&lt;br /&gt;
aman-&amp;gt;Lock();&lt;br /&gt;
FOR_EACH_ARENA(a)&lt;br /&gt;
{&lt;br /&gt;
	ArenaAction(a,AA_PRECREATE);&lt;br /&gt;
	ArenaAction(a,AA_CREATE);&lt;br /&gt;
}&lt;br /&gt;
aman-&amp;gt;Unlock();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When my module is in modules.conf, players can not enter the zone, or when I use ?insmod, players can not switch arenas and I get errors about player states! ==&lt;br /&gt;
&lt;br /&gt;
You may be using arena data improperly.&lt;br /&gt;
Be sure you have gotten the I_ARENAMAN interface and have used AllocateArenaData() properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module keeps failing to load! ==&lt;br /&gt;
&lt;br /&gt;
Be sure you have all the necessary modules needed for your module to run.&lt;br /&gt;
Make sure your module loads after the modules it is dependant on are already loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module crashes whenever I try to use an interface! ==&lt;br /&gt;
&lt;br /&gt;
Make sure you have gotten the interface by using &amp;lt;tt&amp;gt;GetInterface()&amp;lt;/tt&amp;gt; properly, that the assigned interface variable is unique, and that you verify whether or not the interface is valid by checking to see if it is not defined.  The latter is typically done in the entry point, as shown [[Writing Modules In C#Using Interfaces|here]], by adding an if-statement and returning &amp;lt;tt&amp;gt;MM_FAIL&amp;lt;/tt&amp;gt; on failure.  If the interface is being called at some other point in the code, make sure to verify if it is defined and to handle cases throughout your code where it may not be valid.&lt;br /&gt;
&lt;br /&gt;
Note that also that if a parent interface does not check to see if it is still being used by other modules before unloading, it may cause instability in your zone and eventually result in a crash when a module calls that interface again.&lt;br /&gt;
&lt;br /&gt;
== My module will not compile! Why can't my compiler find certain things? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, #include asss.h is not enough.&lt;br /&gt;
Only the core header files are in asss.h, and you will need to manually include any others.&lt;br /&gt;
This may also be true if you are using a custom interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why does my module keep crashing when a player leaves the zone? ==&lt;br /&gt;
&lt;br /&gt;
You may be saving the player pointer somewhere, and then are trying to access it after the player leaves.&lt;br /&gt;
This does not work because the pointer becomes invalid when the player leaves.&lt;br /&gt;
Your module is informed when this happens by the CB_NEWPLAYER callback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6172</id>
		<title>Writing Advanced Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6172"/>
				<updated>2011-01-19T04:10:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: /* Passing Multiple Arguments To Commands */  cleaned up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains how to write advanced modules in C. It is assumed you know how to code and are familiar with how the ASSS code works.&lt;br /&gt;
&lt;br /&gt;
This tutorial is a continuation of [[Writing Modules In C]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful references:&lt;br /&gt;
&lt;br /&gt;
http://qnxcs.unomaha.edu/help/product/neutrino/lib_ref/summary.html&lt;br /&gt;
&lt;br /&gt;
http://www.cplusplus.com/reference/&lt;br /&gt;
&lt;br /&gt;
http://www.cprogramming.com/tutorial.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Data To Timers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct ThisIsData&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	int number;&lt;br /&gt;
} ThisIsData;&lt;br /&gt;
&lt;br /&gt;
local int timerfunc(void *vp) //vp is void pointer, just an address that can point anywhere&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=(ThisIsData*)vp; //we know it points to our data&lt;br /&gt;
	&lt;br /&gt;
	if(tid-&amp;gt;number == 10)&lt;br /&gt;
	{&lt;br /&gt;
		//if it worked anything in here will work too&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int returnValue=0; //return 1 if you want timer to run again, or 0 if you want it to be removed&lt;br /&gt;
	if(!returnValue) afree(tid); //if zero, free the data we have previously allocated&lt;br /&gt;
	return returnValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
anotherfunction()&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=amalloc(sizeof(ThisIsData)); //we must allocate memory because anything in this function is destroyed when it ends&lt;br /&gt;
&lt;br /&gt;
	tid-&amp;gt;number=10&lt;br /&gt;
&lt;br /&gt;
	//now set timer to activate in 1000 centiseconds, then repeat every 100.&lt;br /&gt;
	//we are also sending the address of the memory we just allocated.&lt;br /&gt;
	ml-&amp;gt;SetTimer(timerfunc,1000,100,tid,0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passing Multiple Arguments To Commands ==&lt;br /&gt;
&lt;br /&gt;
Since the words are read one by one against the whole list, they can be in any order!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// define macros for comparing strings that work on linux&lt;br /&gt;
#ifndef WIN32&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define stricmp(x,y) (strcasecmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define strnicmp(x,y,n) (strncasecmp(x,y,n) == 0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
local void examplecommand(const char *command, const char *params, Player *p, const Target *t)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;Sentence: %s&amp;quot;,params);&lt;br /&gt;
	&lt;br /&gt;
	char buf[255];&lt;br /&gt;
	char *word=NULL;&lt;br /&gt;
	const char *tmp=NULL;&lt;br /&gt;
	while(strsplit(params,&amp;quot; ,:&amp;quot;,buf,sizeof(buf),&amp;amp;tmp))&lt;br /&gt;
	{&lt;br /&gt;
		word=buf; //move start of word to beginning&lt;br /&gt;
		chat-&amp;gt;SendMessage(p,&amp;quot;Word: %s&amp;quot;,word); //the word currently being reviewed&lt;br /&gt;
&lt;br /&gt;
		if(strnicmp(word,&amp;quot;a=&amp;quot;,2)) //remember, the N means it is checking only first 2 letters&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 2 letters of word are 'a' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=2; //like move start of word 2 letters forward&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(strnicmp(word,&amp;quot;bc=&amp;quot;,3)) //3 this time&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 3 letters of word are 'b' then 'c' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=3; //make sure you move it 3 letters and not 2&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(stricmp(word,&amp;quot;-de&amp;quot;)) //no N, it just checks the whole thing&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if word is &amp;quot;-de&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Callbacks ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Cover overwriting existing interfaces to replace old modules.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Packets To Players ==&lt;br /&gt;
&lt;br /&gt;
Cover position packets, weapon packets, clientset stuff, etc.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6171</id>
		<title>Writing Advanced Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6171"/>
				<updated>2011-01-09T20:25:31Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: added link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains how to write advanced modules in C. It is assumed you know how to code and are familiar with how the ASSS code works.&lt;br /&gt;
&lt;br /&gt;
This tutorial is a continuation of [[Writing Modules In C]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful references:&lt;br /&gt;
&lt;br /&gt;
http://qnxcs.unomaha.edu/help/product/neutrino/lib_ref/summary.html&lt;br /&gt;
&lt;br /&gt;
http://www.cplusplus.com/reference/&lt;br /&gt;
&lt;br /&gt;
http://www.cprogramming.com/tutorial.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Data To Timers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct ThisIsData&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	int number;&lt;br /&gt;
} ThisIsData;&lt;br /&gt;
&lt;br /&gt;
local int timerfunc(void *vp) //vp is void pointer, just an address that can point anywhere&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=(ThisIsData*)vp; //we know it points to our data&lt;br /&gt;
	&lt;br /&gt;
	if(tid-&amp;gt;number == 10)&lt;br /&gt;
	{&lt;br /&gt;
		//if it worked anything in here will work too&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int returnValue=0; //return 1 if you want timer to run again, or 0 if you want it to be removed&lt;br /&gt;
	if(!returnValue) afree(tid); //if zero, free the data we have previously allocated&lt;br /&gt;
	return returnValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
anotherfunction()&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=amalloc(sizeof(ThisIsData)); //we must allocate memory because anything in this function is destroyed when it ends&lt;br /&gt;
&lt;br /&gt;
	tid-&amp;gt;number=10&lt;br /&gt;
&lt;br /&gt;
	//now set timer to activate in 1000 centiseconds, then repeat every 100.&lt;br /&gt;
	//we are also sending the address of the memory we just allocated.&lt;br /&gt;
	ml-&amp;gt;SetTimer(timerfunc,1000,100,tid,0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passing Multiple Arguments To Commands ==&lt;br /&gt;
&lt;br /&gt;
Since the words are read one by one, then checked against the whole list, they can be in any order!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// define macros for comparing strings that work for both linux and windows&lt;br /&gt;
#ifdef WIN32&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (stricmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strnicmp(x,y,n) == 0)&lt;br /&gt;
#else&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (strcasecmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strncasecmp(x,y,n) == 0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
local void examplecommand(const char *command, const char *params, Player *p, const Target *t)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;Sentence: %s&amp;quot;,params);&lt;br /&gt;
	&lt;br /&gt;
	char buf[255];&lt;br /&gt;
	char *word=NULL;&lt;br /&gt;
	const char *tmp=NULL;&lt;br /&gt;
	while(strsplit(params,&amp;quot; ,:&amp;quot;,buf,sizeof(buf),&amp;amp;tmp))&lt;br /&gt;
	{&lt;br /&gt;
		word=buf; //move start of word to beginning&lt;br /&gt;
		chat-&amp;gt;SendMessage(p,&amp;quot;Word: %s&amp;quot;,word); //the word currently being reviewed&lt;br /&gt;
&lt;br /&gt;
		if(istrcmpn(word,&amp;quot;a=&amp;quot;,2)) //remember, the N means it is checking only first 2 letters&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 2 letters of word are 'a' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=2; //like move start of word 2 letters forward&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmpn(word,&amp;quot;bc=&amp;quot;,3)) //3 this time&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 3 letters of word are 'b' then 'c' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=3; //make sure you move it 3 letters and not 2&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmp(word,&amp;quot;-de&amp;quot;)) //no N, it just checks the whole thing&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if word is &amp;quot;-de&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Callbacks ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Cover overwriting existing interfaces to replace old modules.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Packets To Players ==&lt;br /&gt;
&lt;br /&gt;
Cover position packets, weapon packets, clientset stuff, etc.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=6170</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=6170"/>
				<updated>2011-01-08T21:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: added link&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) is an open source server, created by [[User:grelminar|grelminar]], that facilitates games among [[Continuum]] users. It's a replacement, not a clone, of [[Subgame]], which was the old server 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 this wiki, you'll find documents about how to use some of these advanced features, and documentation on how to create your own extensions to the server software.  There is also an [[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.minegoboom.com/ 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;
*[https://bitbucket.org/grelminar/asss/wiki/Development_Reference/ Bitbucket Wiki]&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;
&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.4 has been released as of September 7, 2007. This version addresses several bug fixes, and now requires Continuum 0.40.&lt;br /&gt;
&lt;br /&gt;
'''Download'''&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4.tar.gz Linux]&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4-srconly.tar.gz Source Only]&lt;br /&gt;
*[http://asss.yi.org/files/asss-1.4.4.zip Windows]&lt;br /&gt;
*[http://bitbucket.org/grelminar/asss/overview/ 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;br /&gt;
&lt;br /&gt;
[[Category: Wiki]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6169</id>
		<title>Writing Advanced Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6169"/>
				<updated>2011-01-08T01:22:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: minor details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains how to write advanced modules in C. It is assumed you know how to code and are familiar with how the ASSS code works.&lt;br /&gt;
&lt;br /&gt;
This tutorial is a continuation of [[Writing Modules In C]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful references:&lt;br /&gt;
&lt;br /&gt;
http://qnxcs.unomaha.edu/help/product/neutrino/lib_ref/summary.html&lt;br /&gt;
&lt;br /&gt;
http://www.cplusplus.com/reference/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Data To Timers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct ThisIsData&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	int number;&lt;br /&gt;
} ThisIsData;&lt;br /&gt;
&lt;br /&gt;
local int timerfunc(void *vp) //vp is void pointer, just an address that can point anywhere&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=(ThisIsData*)vp; //we know it points to our data&lt;br /&gt;
	&lt;br /&gt;
	if(tid-&amp;gt;number == 10)&lt;br /&gt;
	{&lt;br /&gt;
		//if it worked anything in here will work too&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int returnValue=0; //return 1 if you want timer to run again, or 0 if you want it to be removed&lt;br /&gt;
	if(!returnValue) afree(tid); //if zero, free the data we have previously allocated&lt;br /&gt;
	return returnValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
anotherfunction()&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=amalloc(sizeof(ThisIsData)); //we must allocate memory because anything in this function is destroyed when it ends&lt;br /&gt;
&lt;br /&gt;
	tid-&amp;gt;number=10&lt;br /&gt;
&lt;br /&gt;
	//now set timer to activate in 1000 centiseconds, then repeat every 100.&lt;br /&gt;
	//we are also sending the address of the memory we just allocated.&lt;br /&gt;
	ml-&amp;gt;SetTimer(timerfunc,1000,100,tid,0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passing Multiple Arguments To Commands ==&lt;br /&gt;
&lt;br /&gt;
Since the words are read one by one, then checked against the whole list, they can be in any order!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// define macros for comparing strings that work for both linux and windows&lt;br /&gt;
#ifdef WIN32&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (stricmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strnicmp(x,y,n) == 0)&lt;br /&gt;
#else&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (strcasecmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strncasecmp(x,y,n) == 0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
local void examplecommand(const char *command, const char *params, Player *p, const Target *t)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;Sentence: %s&amp;quot;,params);&lt;br /&gt;
	&lt;br /&gt;
	char buf[255];&lt;br /&gt;
	char *word=NULL;&lt;br /&gt;
	const char *tmp=NULL;&lt;br /&gt;
	while(strsplit(params,&amp;quot; ,:&amp;quot;,buf,sizeof(buf),&amp;amp;tmp))&lt;br /&gt;
	{&lt;br /&gt;
		word=buf; //move start of word to beginning&lt;br /&gt;
		chat-&amp;gt;SendMessage(p,&amp;quot;Word: %s&amp;quot;,word); //the word currently being reviewed&lt;br /&gt;
&lt;br /&gt;
		if(istrcmpn(word,&amp;quot;a=&amp;quot;,2)) //remember, the N means it is checking only first 2 letters&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 2 letters of word are 'a' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=2; //like move start of word 2 letters forward&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmpn(word,&amp;quot;bc=&amp;quot;,3)) //3 this time&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 3 letters of word are 'b' then 'c' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=3; //make sure you move it 3 letters and not 2&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmp(word,&amp;quot;-de&amp;quot;)) //no N, it just checks the whole thing&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if word is &amp;quot;-de&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Callbacks ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Cover overwriting existing interfaces to replace old modules.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Packets To Players ==&lt;br /&gt;
&lt;br /&gt;
Cover position packets, weapon packets, clientset stuff, etc.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6168</id>
		<title>Writing Advanced Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Advanced_Modules_In_C&amp;diff=6168"/>
				<updated>2011-01-08T00:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: now its easier for the newbies :D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains how to write advanced modules in C. It is assumed you know how to code and are familiar with how the ASSS code works.&lt;br /&gt;
&lt;br /&gt;
This tutorial is a continuation of [[Writing Modules In C]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful references:&lt;br /&gt;
&lt;br /&gt;
http://qnxcs.unomaha.edu/help/product/neutrino/lib_ref/summary.html&lt;br /&gt;
&lt;br /&gt;
http://www.cplusplus.com/reference/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Passing Data To Timers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct ThisIsData&lt;br /&gt;
{&lt;br /&gt;
	Player *p;&lt;br /&gt;
	int number;&lt;br /&gt;
} ThisIsData;&lt;br /&gt;
&lt;br /&gt;
local int timerfunc(void *vp) //vp is void pointer, just an address that can point anywhere&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=(ThisIsData*)vp; //we know it points to our data&lt;br /&gt;
	&lt;br /&gt;
	if(tid-&amp;gt;number == 10)&lt;br /&gt;
	{&lt;br /&gt;
		//if it worked anything in here will work too&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int returnValue=0; //return 1 if you want timer to run again, or 0 if you want it to be removed&lt;br /&gt;
	if(!returnValue) afree(tid); //if zero, free the data we have previously allocated&lt;br /&gt;
	return returnValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
anotherfunction()&lt;br /&gt;
{&lt;br /&gt;
	ThisIsData *tid=amalloc(sizeof(ThisIsData)); //we must allocate memory because anything in this function is destroyed when it ends&lt;br /&gt;
&lt;br /&gt;
	tid-&amp;gt;number=10&lt;br /&gt;
&lt;br /&gt;
	//now set timer to activate in 1000 centiseconds, then repeat every 100.&lt;br /&gt;
	//we are also sending the address of the memory we just allocated.&lt;br /&gt;
	ml-&amp;gt;SetTimer(timerfunc,1000,100,tid,0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passing Multiple Arguments To Commands ==&lt;br /&gt;
&lt;br /&gt;
Since the words are read one by one, then checked against the whole list, they can be in any order!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// define macros for comparing strings that work for both linux and windows&lt;br /&gt;
#ifdef WIN32&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (stricmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strnicmp(x,y,n) == 0)&lt;br /&gt;
#else&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same&lt;br /&gt;
#define istrcmp(x,y) (strcasecmp(x,y) == 0)&lt;br /&gt;
//a case insensitive comparison that returns 0 if both are the same for the first N letters&lt;br /&gt;
#define istrcmpn(x,y,n) (strncasecmp(x,y,n) == 0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
local void examplecommand(const char *command, const char *params, Player *p, const Target *t)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;Sentence: %s&amp;quot;,params);&lt;br /&gt;
	&lt;br /&gt;
	char word[255]; //where strsplit will store each word&lt;br /&gt;
	const char *tmp=NULL; //pointer that strsplit needs to work&lt;br /&gt;
	while(strsplit(params,&amp;quot; ,:&amp;quot;,word,sizeof(word),&amp;amp;tmp)) //for each word, seperated by ' ' or ',' or ':'&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p,&amp;quot;Word: %s&amp;quot;,word); //the word currently being reviewed&lt;br /&gt;
&lt;br /&gt;
		if(istrcmpn(word,&amp;quot;a=&amp;quot;,2)) //remember, the N means it is checking only first 2 letters&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 2 letters of word are 'a' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=2; //like move start of word 2 letters forward&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmpn(word,&amp;quot;bc=&amp;quot;,3)) //3 this time&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if first 3 letters of word are 'b' then 'c' then '='&lt;br /&gt;
&lt;br /&gt;
			word+=3; //make sure you move it 3 letters and not 2&lt;br /&gt;
			int check=atoi(word); //then read a number&lt;br /&gt;
		}&lt;br /&gt;
		else if(istrcmp(word,&amp;quot;-de&amp;quot;)) //no N, it just checks the whole thing&lt;br /&gt;
		{&lt;br /&gt;
			//do stuff if word is &amp;quot;-de&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Callbacks ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Cover overwriting existing interfaces to replace old modules.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Packets To Players ==&lt;br /&gt;
&lt;br /&gt;
Cover position packets, weapon packets, clientset stuff, etc.&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Advisors ==&lt;br /&gt;
&lt;br /&gt;
Write me!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//example code goes here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6163</id>
		<title>Troubleshooting Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6163"/>
				<updated>2011-01-06T23:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some general solutions to help you solve a problem with a module that you just wrote.&lt;br /&gt;
Keep in mind that these are suggestions, and may not always be correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module works when I put it in modules.conf, but the zone crashes when I use ?insmod, why? ==&lt;br /&gt;
&lt;br /&gt;
Chances are, you are doing something in the CB_ARENAACTION callback, and are doing something in the AA_PRECREATE or AA_CREATE states.&lt;br /&gt;
Simply do this when the module loads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arena *a;&lt;br /&gt;
Link *link;&lt;br /&gt;
aman-&amp;gt;Lock();&lt;br /&gt;
FOR_EACH_ARENA(a)&lt;br /&gt;
{&lt;br /&gt;
	ArenaAction(a,AA_PRECREATE);&lt;br /&gt;
	ArenaAction(a,AA_CREATE);&lt;br /&gt;
}&lt;br /&gt;
aman-&amp;gt;Unlock();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When my module is in modules.conf, players can not enter the zone, or when I use ?insmod, players can not switch arenas and I get errors about player states! ==&lt;br /&gt;
&lt;br /&gt;
You may be using arena data improperly.&lt;br /&gt;
Be sure you have gotten the I_ARENAMAN interface and have used AllocateArenaData() properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module keeps failing to load! ==&lt;br /&gt;
&lt;br /&gt;
Be sure you have all the necessary modules needed for your module to run.&lt;br /&gt;
Make sure your module loads after the modules it is dependant on are already loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module crashes whenever I try to use an interface! ==&lt;br /&gt;
&lt;br /&gt;
Make sure you have gotten the interface by using GetInterface().&lt;br /&gt;
You may have forgotten to check if your interface is valid. (''like if(!iface) return MM_FAIL;'')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module will not compile! Why can't my compiler find certain things? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, #include asss.h is not enough.&lt;br /&gt;
Only the core header files are in asss.h, and you will need to manually include any others.&lt;br /&gt;
This may also be true if you are using a custom interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why does my module keep crashing when a player leaves the zone? ==&lt;br /&gt;
&lt;br /&gt;
You may be saving the player pointer somewhere, and then are trying to access it after the player leaves.&lt;br /&gt;
This does not work because the pointer becomes invalid when the player leaves.&lt;br /&gt;
Your module is informed when this happens by the CB_NEWPLAYER callback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6157</id>
		<title>Troubleshooting Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Troubleshooting_Modules&amp;diff=6157"/>
				<updated>2010-12-30T08:41:21Z</updated>
		
		<summary type="html">&lt;p&gt;Cheese: added knowledge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some general solutions to help you solve a problem with a module that you just wrote.&lt;br /&gt;
Keep in mind that these are suggestions, and may not always be correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module works when I put it in modules.conf, but the zone crashes when I use ?insmod, why? ==&lt;br /&gt;
&lt;br /&gt;
Chances are, you are doing something in the CB_ARENAACTION callback, and are doing something in the AA_PRECREATE or AA_CREATE states.&lt;br /&gt;
Simply do this when the module loads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Arena *a;&lt;br /&gt;
Link *link;&lt;br /&gt;
aman-&amp;gt;Lock();&lt;br /&gt;
FOR_EACH_ARENA(a)&lt;br /&gt;
{&lt;br /&gt;
	ArenaAction(a,AA_PRECREATE);&lt;br /&gt;
	ArenaAction(a,AA_CREATE);&lt;br /&gt;
}&lt;br /&gt;
aman-&amp;gt;Unlock();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== When my module is in modules.conf, players can not enter the zone, or when I use ?insmod, players can not switch arenas and I get errors about player states! ==&lt;br /&gt;
&lt;br /&gt;
You may be using arena data improperly.&lt;br /&gt;
Be sure you have gotten the I_ARENAMAN interface and have used AllocateArenaData() properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module keeps failing to load! ==&lt;br /&gt;
&lt;br /&gt;
Be sure you have all the necessary modules needed for your module to run.&lt;br /&gt;
Make sure your module loads after the modules it is dependant on are already loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module crashes whenever I try to use an interface! ==&lt;br /&gt;
&lt;br /&gt;
Make sure you have gotten the interface by using GetInterface().&lt;br /&gt;
You may have forgotten to check if your interface is valid. (''like if(!iface) return MM_FAIL;'')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My module will not compile! Why can't my compiler find certain things? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, #include asss.h is not enough.&lt;br /&gt;
Only the core header files are in asss.h, and you will need to manually include any others.&lt;br /&gt;
This may also be true if you are using a custom interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Module]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Cheese</name></author>	</entry>

	</feed>