<?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=Grelminar</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=Grelminar"/>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php/Special:Contributions/Grelminar"/>
		<updated>2026-05-05T17:16:18Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=3499</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Main_Page&amp;diff=3499"/>
				<updated>2005-06-07T07:17:54Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: update link to windows version&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;
[http://www.sscx.net/asss/ ASSS] (A Small Subspace Server) was created by [[User:grelminar|grelminar]]. Its an open source server designed to allow [[Continuum]] users to connect with. Its a replacement, not a clone, of [[Subgame]], which was created by [[VIE]] and later upgraded by [[PriitK|Priit Kasesalu]], a freelance [[Subspace]] programmer who also wrote Continuum with the assistance of [[Mr Ekted]]. &lt;br /&gt;
&lt;br /&gt;
ASSS allows many advanced features never before offered by Subgame nor user-made [[Bots]]. Within, you'll find documentions about how to use some of these advanced features, and documentation about how to create your own extensions to the server software. &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://www.sscx.net/asss/ ASSS]&lt;br /&gt;
*[http://www.shanky.com/server/ Server Help]&lt;br /&gt;
*[http://forums.minegoboom.com/ Server Help Forums]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width: 30%; border: 1px solid #c6c9ff; padding: 5px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Current Events&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASSS version 1.4.0 has been released as of May 14, 2005. From the site: ''There isn't really any new big features here, but it's been a while, and there was some significant reorganization of the source code directory structure and build process, so I figured it deserved a jump in version numbers.'' See the site for a list of the changes.&lt;br /&gt;
&lt;br /&gt;
'''Download'''&lt;br /&gt;
*[http://www.sscx.net/asss/asss-1.4.0.tar.gz Full]&lt;br /&gt;
*[http://www.sscx.net/asss/asss-1.4.0-srconly.tar.gz Source Only]&lt;br /&gt;
*[http://www.sscx.net/asss/asss-1.4.0p1.zip Windows Full]&lt;br /&gt;
*[http://www.sscx.net/asss/changelog.txt Change Log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Current events|More Events...]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_In_Python&amp;diff=1168</id>
		<title>Writing Modules In Python</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_In_Python&amp;diff=1168"/>
				<updated>2005-02-09T07:42:40Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: few cleanups for persistent example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basic python module ==&lt;br /&gt;
I have tried to comment what is going on in the source. This module demonstrates callbacks, commands and using interfaces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# demo asss python module&lt;br /&gt;
# dec 28 2004 smong&lt;br /&gt;
&lt;br /&gt;
# nearly always use this&lt;br /&gt;
from asss import *&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# get some interfaces&lt;br /&gt;
# see chat.h for where I_CHAT comes from, see other .h files for more (fx:&lt;br /&gt;
#  game.h)&lt;br /&gt;
chat = get_interface(I_CHAT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# a callback&lt;br /&gt;
# this function is called when a player enters/leaves, see core.h for PA_???&lt;br /&gt;
#  constants&lt;br /&gt;
def paction(p, action, arena):&lt;br /&gt;
    # start indenting&lt;br /&gt;
    if action == PA_ENTERARENA:&lt;br /&gt;
        # see chat.h for the names of more functions like SendMessage&lt;br /&gt;
        chat.SendMessage(p, &amp;quot;hello &amp;quot; + p.name)&lt;br /&gt;
&lt;br /&gt;
# tell asss to call 'paction' when CB_PLAYERACTION is signalled&lt;br /&gt;
# see .h files for CB_??? names&lt;br /&gt;
cb1 = reg_callback(CB_PLAYERACTION, paction)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# a command&lt;br /&gt;
# see cmdman.h for what each parameter does&lt;br /&gt;
def c_moo(cmd, params, p, targ):&lt;br /&gt;
# help text (?help moo)&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
Module: &amp;lt;py&amp;gt; demo&lt;br /&gt;
Targets: none&lt;br /&gt;
a sample command.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    chat.SendMessage(p, &amp;quot;moo cows&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# tell asss to call 'c_moo' when a player types ?moo&lt;br /&gt;
# note: add cmd_moo to conf/groupdef.dir/default so players have permission to&lt;br /&gt;
#  use this command.&lt;br /&gt;
cmd1 = add_command(&amp;quot;moo&amp;quot;, c_moo)&lt;br /&gt;
&lt;br /&gt;
# setting chat (or other interfaces), cb* or cmd* to None is equivalent to&lt;br /&gt;
#  unregistering that item.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save this in bin/demo.py. Then ingame make sure pymod is loaded by using ?lsmod and ?insmod. Then add this module with the following command: ?insmod &amp;lt;py&amp;gt; demo. Re-entering the arena and typing ?moo should do some stuff.&lt;br /&gt;
&lt;br /&gt;
== Code snippets ==&lt;br /&gt;
The bread and butter of most custom modules.&lt;br /&gt;
=== Callbacks ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from asss import *&lt;br /&gt;
&lt;br /&gt;
chat = get_interface(I_CHAT)&lt;br /&gt;
&lt;br /&gt;
def goal(arena, p, bid, x, y):&lt;br /&gt;
    chat.SendArenaMessage(arena, &amp;quot;goal.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cb1 = reg_callback(CB_GOAL, goal) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
Useful for controlling events, fx: ?elim start. In this case the command is ?t1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from asss import *&lt;br /&gt;
&lt;br /&gt;
chat = get_interface(I_CHAT)&lt;br /&gt;
&lt;br /&gt;
def c_mycmd(cmd, params, p, targ):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
some help text&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    chat.SendMessage(p, &amp;quot;moo.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cmd1 = add_command(&amp;quot;t1&amp;quot;, c_mycmd)&lt;br /&gt;
#where the &amp;quot;t1&amp;quot; is located would be the name of the command, ex: ?t1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can parse integers from the params using the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
    val = int(params)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    # here the conversion of params from a string to an int failed.&lt;br /&gt;
    # change the next line to 'pass' to silently ignore the conversion error,&lt;br /&gt;
    # 'return' to exit the function, or 'val = 0' to set a default value to val.&lt;br /&gt;
    chat.SendMessage(p, &amp;quot;Integer parameter required.&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Per-player/arena data ===&lt;br /&gt;
Use this to store game state, player score, etc.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def shipchange(p, newship, newfreq):&lt;br /&gt;
    # prefix mymod_ an abbreviation of your module name to the variable&lt;br /&gt;
    #  so that it doesn't clash with other modules. per arena data works&lt;br /&gt;
    #  in exactly the same way.&lt;br /&gt;
    p.mymod_lastship = p.ship&lt;br /&gt;
&lt;br /&gt;
cb1 = reg_callback(CB_SHIPCHANGE, shipchange)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Persistent per-player data ===&lt;br /&gt;
ASSS has built in mechanisms for saving data per player and per arena data across sessions (users logging off or server restarting).&lt;br /&gt;
&lt;br /&gt;
You need to provide three functions that will be called by ASSS to save, restore and clear the data. The example below is a complete module.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# each player can save a note that only they can see&lt;br /&gt;
# initial version feb 7 2005 by smong for asss wiki&lt;br /&gt;
&lt;br /&gt;
from asss import *&lt;br /&gt;
&lt;br /&gt;
chat = get_interface(I_CHAT)&lt;br /&gt;
&lt;br /&gt;
# show and store a note&lt;br /&gt;
def c_note(cmd, params, p, targ):&lt;br /&gt;
    if params:&lt;br /&gt;
        p.note = params&lt;br /&gt;
    if p.note:&lt;br /&gt;
        chat.SendMessage(p, &amp;quot;note: %s&amp;quot; % p.note)&lt;br /&gt;
    else:&lt;br /&gt;
        chat.SendMessage(p, &amp;quot;no note set&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cmd1 = add_command(&amp;quot;note&amp;quot;, c_note)&lt;br /&gt;
&lt;br /&gt;
# return the data to save for player p&lt;br /&gt;
# returning None means &amp;quot;don't store a record in the database,&lt;br /&gt;
# and delete any record that's there already&amp;quot;.&lt;br /&gt;
def getpd(p):&lt;br /&gt;
    return p.note&lt;br /&gt;
&lt;br /&gt;
# restore the data for player p&lt;br /&gt;
def setpd(p, d):&lt;br /&gt;
    p.note = d&lt;br /&gt;
&lt;br /&gt;
# reset/clear the data for player p&lt;br /&gt;
def clearpd(p):&lt;br /&gt;
    p.note = None&lt;br /&gt;
&lt;br /&gt;
mypd = reg_player_persistent(&lt;br /&gt;
	7890, INTERVAL_FOREVER, PERSIST_GLOBAL,&lt;br /&gt;
	getpd, setpd, clearpd)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ideally you should load the module when the server starts. Alternatively if you load it dynamically you can even kick everyone (not desirable) or alter the code to catch AttributeError when it attempts to read from the per player data ''.note''.&lt;br /&gt;
&lt;br /&gt;
Taking a look at ''reg_player_persistent'' the number ''7890'' is arbitrary, but must be unique for every module using persistent data. Low numbers are reserved for the core modules. ''INTERVAL_FOREVER'' is how long this data will be kept for. Interestingly the INTERVAL_* constants are defined in statcodes.h, not persist.h. ''PERSIST_GLOBAL'' is defined in persist.h. Here are the respective code extracts (as of Feb 7 2005).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* these are the possible intervals */&lt;br /&gt;
enum interval_t&lt;br /&gt;
{&lt;br /&gt;
	/* pyconst: enum, &amp;quot;INTERVAL_*&amp;quot; */&lt;br /&gt;
&lt;br /&gt;
	/* these are shared between arenas with the same arenagrp */&lt;br /&gt;
	INTERVAL_FOREVER = 0,&lt;br /&gt;
	INTERVAL_RESET,&lt;br /&gt;
	INTERVAL_MAPROTATION,&lt;br /&gt;
	/* these are not shared between arenas */&lt;br /&gt;
	INTERVAL_GAME = 5,&lt;br /&gt;
	INTERVAL_FOREVER_NONSHARED&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef enum persist_scope_t&lt;br /&gt;
{&lt;br /&gt;
	/* pyconst: enum, &amp;quot;PERSIST_*&amp;quot; */&lt;br /&gt;
&lt;br /&gt;
	PERSIST_ALLARENAS,&lt;br /&gt;
	/* using this for scope means per-player data in every arena */&lt;br /&gt;
	/* using this for scope means per-arena data will be stored&lt;br /&gt;
	 * per-arena */&lt;br /&gt;
&lt;br /&gt;
	PERSIST_GLOBAL&lt;br /&gt;
	/* using this for scope means per-player data shared among all arenas */&lt;br /&gt;
	/* using this for scope means per-arena data will be shared among&lt;br /&gt;
	 * all arenas (so it will effectively be global data). */&lt;br /&gt;
} persist_scope_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note: ASSS must be compiled with the berkeleydb option for persistent data to be available.&lt;br /&gt;
&lt;br /&gt;
=== Attach/Detach ===&lt;br /&gt;
Attaching and detaching is similar to load/unload in a C module except it is arena specific. So you can use it to initialise per-arena data.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def mm_attach(arena):&lt;br /&gt;
    # do stuff with arena&lt;br /&gt;
def mm_detach(arena):&lt;br /&gt;
    # undo stuff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Looping over all players ===&lt;br /&gt;
This example counts the number of players in an arena.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def count_players(arena):&lt;br /&gt;
    # a list must be used as all other variables are immutable to&lt;br /&gt;
    #  nested functions.&lt;br /&gt;
    players = [0]&lt;br /&gt;
    def cb_count(p):&lt;br /&gt;
        if p.arena == arena:&lt;br /&gt;
            players[0] = players[0] + 1&lt;br /&gt;
    for_each_player(cb_count)&lt;br /&gt;
    return players[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timers ===&lt;br /&gt;
Good for checking if a game is over yet. '''A reference to the timer is returned and must be retained''' (you can use per-arena data to store it). Losing the reference will cancel the timer.&lt;br /&gt;
&lt;br /&gt;
''initial'' is the time in 1/100th's of a second before the nested function timer() will be called, you can cancel the timer before it is called. ''interval'' is the time gap, again in 1/100th's of a second between all future calls of timer(). So make_hello_timer(100, 200, arena) will make it send the arena message &amp;quot;hello&amp;quot; every 2 seconds starting from 1 second after make_hello_timer() was called.&lt;br /&gt;
&lt;br /&gt;
The parameter ''arena'' is needed in this case because SendArenaMessage() requires an arena parameter.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def make_hello_timer(initial, interval, arena):&lt;br /&gt;
    def timer():&lt;br /&gt;
        # announce&lt;br /&gt;
        chat.SendArenaMessage(arena, &amp;quot;hello&amp;quot;)&lt;br /&gt;
        # non-repeating timer. return 1 for it to be called after the next interval&lt;br /&gt;
        return 0&lt;br /&gt;
    return set_timer(timer, initial, interval)&lt;br /&gt;
&lt;br /&gt;
def somefunc(arena):&lt;br /&gt;
    # create a hello timer that will execute after 1 second, and then every&lt;br /&gt;
    #  2 seconds until cancelled. timers can cancel themselves, see above.&lt;br /&gt;
    myref = make_hello_timer(100, 200, arena)&lt;br /&gt;
&lt;br /&gt;
    # cancel the timer by losing the reference to it&lt;br /&gt;
    myref = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regions ===&lt;br /&gt;
This is untested but it should go something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mapdata = get_interface(I_MAPDATA)&lt;br /&gt;
&lt;br /&gt;
# regionname is a string, x and y are map tile coords.&lt;br /&gt;
def region_contains(arena, regionname, x, y):&lt;br /&gt;
    success = 0&lt;br /&gt;
&lt;br /&gt;
    rgn = mapdata.FindRegionByName(arena, regionname)&lt;br /&gt;
&lt;br /&gt;
    if rgn != None and mapdata.Contains(rgn, x, y):&lt;br /&gt;
        success = 1&lt;br /&gt;
&lt;br /&gt;
    return success&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is a good idea to cache ''rgn'' within [[#Per-player.2Farena_data|per-arena data]] so you don't add unecessary load to the server looking it up everytime.&lt;br /&gt;
&lt;br /&gt;
== Trouble shooting ==&lt;br /&gt;
Look at the asss console for execution errors (at the time of writing not all errors are relayed to logged in staff), and if that doesn't help, add some chat.SendArenaMessage(ALLARENAS, &amp;quot;i'm at line ...&amp;quot;) type messages to locate the buggy piece of code.&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User_talk:BaK&amp;diff=3942</id>
		<title>User talk:BaK</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User_talk:BaK&amp;diff=3942"/>
				<updated>2005-02-02T08:48:26Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check out [[SheepMessage]] for a template for the Settings.  I think that looks better? --[[i88gerbils]]&lt;br /&gt;
&lt;br /&gt;
[[User:Smong|Smong]]: Bak: I don't know if you have forgotten, but the game is still called Subspace. Why do you only mention Continuum in all your pages?&lt;br /&gt;
&lt;br /&gt;
[[User:Smong|Smong]]: When you only mention Continuum, you are making it seem like what you are talking about is in Continuum only. This is acceptable for things like *watchdamage and *warpto. Features like cloak, although old, are fundamental to the game and have been around since Subspace.&lt;br /&gt;
&lt;br /&gt;
Dude, leave my name alone. I'll make changes if I want them. --grel&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Ship_Settings&amp;diff=1163</id>
		<title>Talk:Ship Settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Ship_Settings&amp;diff=1163"/>
				<updated>2005-01-19T07:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: settings talk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Isn't this kinda a pointless page? I mean, all this information is in [[Complete Settings]] and is dispersed in greater detail in each section's page. --[[User:Cyan~Fire|Cyan~Fire]]&lt;br /&gt;
&lt;br /&gt;
[[User:Pests|Pests]]: This and Complete Settings are two different things. Theres a section in the template.sss named &amp;quot;All&amp;quot; and Complete Settings has EVERY section, including this &amp;quot;All&amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
That's pretty confusing, especially considering the section name &amp;quot;All&amp;quot; never appears in an actual config file. It's just a shorthand that means there are eight sections these settings can go in, one for each ship type. Futhermore, it would be good to differentiate between settings that apply to subgame, settings that apply to asss, and settings that apply to both, before just mindlessly dumping the contents of template.sss on here. --[[Grelminar]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:Creating_New_Subarenas&amp;diff=1069</id>
		<title>Talk:Creating New Subarenas</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:Creating_New_Subarenas&amp;diff=1069"/>
				<updated>2005-01-16T23:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: question about includes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Who wrote this bit:&lt;br /&gt;
&amp;quot;If you use ?makearena and arenas/(default)/arena.conf #include's local files such as flags.conf then the server will generate errors as it will not be able to find these in the new arena's directory.&amp;quot;&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
Because that's not supposed to happen: if you put #include flags.conf in arenas/foo/arena.conf, and arenas/foo/flags.conf doesn't exist, it's supposed to use arenas/(default)/flags.conf. Is that not working?&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Module_General_Faq&amp;diff=5020</id>
		<title>Module General Faq</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Module_General_Faq&amp;diff=5020"/>
				<updated>2005-01-16T23:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: make text clearer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== I want to put in more modules, how do I do this? ==&lt;br /&gt;
&lt;br /&gt;
'''For C modules:'''&lt;br /&gt;
&lt;br /&gt;
To add modules to a zone, to be loaded on startup, edit your &amp;lt;tt&amp;gt;conf/modules.conf&amp;lt;/tt&amp;gt; file, and add a new line containing &amp;lt;tt&amp;gt;filename:modulename&amp;lt;/tt&amp;gt;. The &amp;lt;tt&amp;gt;filename&amp;lt;/tt&amp;gt; part must be the name of an &amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file in the zone's &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Or you can dynamically load the module in-game by using &amp;lt;tt&amp;gt;?insmod filename:modulename&amp;lt;/tt&amp;gt;. You can use ?help insmod for more info.&lt;br /&gt;
&lt;br /&gt;
'''For Python modules:'''&lt;br /&gt;
&lt;br /&gt;
Mostly the same thing, except you must use &amp;lt;tt&amp;gt;?insmod &amp;lt;py&amp;gt; modulename&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;&amp;lt;py&amp;gt; modulename&amp;lt;/tt&amp;gt; in modules.conf. The &amp;lt;tt&amp;gt;modulename&amp;lt;/tt&amp;gt; should be the name of a &amp;lt;tt&amp;gt;.py&amp;lt;/tt&amp;gt; file in your zone's &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== I added a custom module, why aren't the commands working? ==&lt;br /&gt;
You can add new commands to the group files found in conf/groupdef.dir. Prefix cmd_ to the command to allow users to send the command publicly and privcmd_ for team and private targets.&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_New_Modules&amp;diff=3796</id>
		<title>Installing New Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_New_Modules&amp;diff=3796"/>
				<updated>2005-01-16T23:16:06Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: fixups to previous edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firstly I want to say this is how I do it (Smong). Others may do it differently and can edit this page.&lt;br /&gt;
&lt;br /&gt;
When you want to add more functionality to your server you can install new custom modules. Differences in server version often mean something will break in a module, so I like to distribute with source code.&lt;br /&gt;
&lt;br /&gt;
== C modules ==&lt;br /&gt;
&lt;br /&gt;
=== Using the ASSS Makefile ===&lt;br /&gt;
The Makefile distributed with ASSS is designed to allow adding new code to it easily. This is probably the easiest way to get a new module compiling, because all the correct compiler flags are supplied for you.&lt;br /&gt;
&lt;br /&gt;
Create a directory for your module as a subdirectory of &amp;lt;tt&amp;gt;src&amp;lt;/tt&amp;gt;, the directory containing all the ASSS code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd asss-1.3.5/src&lt;br /&gt;
$ mkdir mymod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;tt&amp;gt;mymod.mk&amp;lt;/tt&amp;gt; file within that directory that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mymod/mymod.$(SO): mymod/mymod.o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;tt&amp;gt;*.mk&amp;lt;/tt&amp;gt; files (let's call them &amp;quot;Makefile fragments&amp;quot;) in any subdirectories will be included by the big Makefile automatically. Two fragments come in the contrib directory in the ASSS package, which you might want to look at as examples.&lt;br /&gt;
&lt;br /&gt;
Note that we use a Makefile variable, &amp;lt;tt&amp;gt;$(SO)&amp;lt;/tt&amp;gt;, instead of typing &amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt; directly. That's so that the same Makefile works on windows, where modules have to be named &amp;lt;tt&amp;gt;mymod.dll&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;mymod.so&amp;lt;/tt&amp;gt;. Also note that all the filenames have to be prefixed with the directory they're in. That's because make considers all files relative to the directory it runs in.&lt;br /&gt;
&lt;br /&gt;
Now compile your module and copy it into your bin directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ make mymod/mymod.so&lt;br /&gt;
... compiler output ...&lt;br /&gt;
$ install mymod/mymod.so ../bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you have to specify the target name manually; it won't get built or copy by default if you just type &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;. If you do want your custom module to get built and copied automatically, along with the rest of ASSS, when you type just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;, add this line at the top of the Makefile fragment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALL_STUFF += mymod/mymod.$(SO)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note that you can list more than one &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt; file on the line. All will be compiled into the same shared library.&lt;br /&gt;
&lt;br /&gt;
The module specifier for this new module will be &amp;lt;tt&amp;gt;mymod:mymod&amp;lt;/tt&amp;gt;, for use in modules.conf or with ?insmod.&lt;br /&gt;
&lt;br /&gt;
=== Using a custom Makefile ===&lt;br /&gt;
Sometimes you might want to create your own Makefile, if you need to use custom compilation options, or a different source file layout. Here is a very basic one (they can get very long).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# simple makefile&lt;br /&gt;
# jan 11 smong&lt;br /&gt;
&lt;br /&gt;
OUTFILE = somefile.so&lt;br /&gt;
MODULES = autoturret.o&lt;br /&gt;
&lt;br /&gt;
CC = gcc -std=gnu99 -pipe&lt;br /&gt;
CFLAGS = -s -O2 -Wall&lt;br /&gt;
&lt;br /&gt;
all: ${OUTFILE}&lt;br /&gt;
&lt;br /&gt;
${OUTFILE}: ${MODULES}&lt;br /&gt;
	${CC} -fPIC -shared -o ${OUTFILE} ${MODULES}&lt;br /&gt;
&lt;br /&gt;
install: ${OUTFILE}&lt;br /&gt;
	install ${OUTFILE} ../bin/${OUTFILE}&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f ${OUTFILE} ${MODULES}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can change the name of the resulting file with ''OUTFILE'' and add more modules on the ''MODULES'' line. Note: the indentation must be a tab and not a bunch of spaces.&lt;br /&gt;
&lt;br /&gt;
To use a makefile one would type something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ make -f some.mk&lt;br /&gt;
$ make -f some.mk install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The ''-f'' switch tells make to use ''some.mk'' instead of the default which is 'Makefile'. Also two commands are used so you can spot any errors during compilation.&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
You may need to execute the commands to compile from source, and then move the resulting .so file to the bin directory using install.&lt;br /&gt;
&lt;br /&gt;
== Python modules ==&lt;br /&gt;
No compiling is necessary. Move the .py file to the bin directory. There may be 'softcoded' settings within the .py file, so examine any comments near the top of the file for instructions.&lt;br /&gt;
&lt;br /&gt;
== Configuring ==&lt;br /&gt;
It is a good idea to examine any documents that came with the module. There may be comments at the top of the source code and if you are unsure you can do a search on the file for 'cfg-&amp;gt;Get', which will return all customisable settings this module reads.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ grep 'cfg-&amp;gt;Get' src/module.c&lt;br /&gt;
$ grep 'cfg.Get' bin/module.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I suggest putting module settings in their own .conf file and include this from your arena.conf.&lt;br /&gt;
&lt;br /&gt;
There may also be commands that you must set the permissions for. You can add new commands to the group files found in conf/groupdef.dir. Prefix cmd_ to the command to allow users to send the command publicly and privcmd_ for team and private targets.&lt;br /&gt;
&lt;br /&gt;
Finally you must load the module. Either add an entry to conf/modules.conf or use ?insmod. Some modules are arena specific, in which case you must also add it to your arena.conf Modules:AttahModules setting or use ?attmod.&lt;br /&gt;
&lt;br /&gt;
If you have any questions left chances are they have already been answered at the [[Module General Faq|Module FAQ]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Installing_New_Modules&amp;diff=3795</id>
		<title>Installing New Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Installing_New_Modules&amp;diff=3795"/>
				<updated>2005-01-16T23:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: added instructions for compiling using the asss makefile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firstly I want to say this is how I do it (Smong). Others may do it differently and can edit this page.&lt;br /&gt;
&lt;br /&gt;
When you want to add more functionality to your server you can install new custom modules. Differences in server version often mean something will break in a module, so I like to distribute with source code.&lt;br /&gt;
&lt;br /&gt;
== C modules ==&lt;br /&gt;
&lt;br /&gt;
=== Using the ASSS Makefile ===&lt;br /&gt;
The Makefile distributed with ASSS is designed to allow adding new code to it easily. This is probably the easiest way to get a new module compiling.&lt;br /&gt;
&lt;br /&gt;
Create a directory for your module as a subdirectory of &amp;lt;tt&amp;gt;src&amp;lt;/tt&amp;gt;, the directory containing all the ASSS code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd asss-1.3.5/src&lt;br /&gt;
$ mkdir mymod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;tt&amp;gt;mymod.mk&amp;lt;/tt&amp;gt; file within that directory that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mymod/mymod.$(SO): mymod/mymod.o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;tt&amp;gt;*.mk&amp;lt;/tt&amp;gt; files (let's call them &amp;quot;Makefile fragments&amp;quot;) in any subdirectories will be included by the big Makefile automatically. Two fragments come in the contrib directory in the ASSS package, which you might want to look at as examples.&lt;br /&gt;
&lt;br /&gt;
Note that we use a Makefile variable, &amp;lt;tt&amp;gt;$(SO)&amp;lt;/tt&amp;gt;, instead of typing &amp;lt;tt&amp;gt;.so&amp;lt;/tt&amp;gt; directly. That's so that the same Makefile works on windows, where modules have to be named &amp;lt;tt&amp;gt;mymod.dll&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;mymod.so&amp;lt;/tt&amp;gt;. Also note that all the filenames have to be prefixed with the directory they're in. That's because make considers all files relative to the directory it runs in.&lt;br /&gt;
&lt;br /&gt;
Now compile your module and copy it into your bin directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ make mymod/mymod.so&lt;br /&gt;
... compiler output ...&lt;br /&gt;
$ install mymod/mymod.so ../bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you have to specify the target name manually; it won't get built or copy by default if you just type &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;. If you do want your custom module to get built and copied automatically, along with the rest of ASSS, when you type just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;, add this line at the top of the Makefile fragment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALL_STUFF += mymod/mymod.$(SO)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note that you can list more than one &amp;lt;tt&amp;gt;.o&amp;lt;/tt&amp;gt; file on the line. All will be compiled into the same shared library.&lt;br /&gt;
&lt;br /&gt;
The module specifier for this new module will be &amp;lt;tt&amp;gt;mymod:mymod&amp;lt;/tt&amp;gt;, for use in modules.conf or with ?insmod.&lt;br /&gt;
&lt;br /&gt;
=== Using a custom Makefile ===&lt;br /&gt;
Sometimes you might want to create your own Makefile, if you need to use custom compilation options, or a different source file layout. Here is a very basic one (they can get very long).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# simple makefile&lt;br /&gt;
# jan 11 smong&lt;br /&gt;
&lt;br /&gt;
OUTFILE = somefile.so&lt;br /&gt;
MODULES = autoturret.o&lt;br /&gt;
&lt;br /&gt;
CC = gcc -std=gnu99 -pipe&lt;br /&gt;
CFLAGS = -s -O2 -Wall&lt;br /&gt;
&lt;br /&gt;
all: ${OUTFILE}&lt;br /&gt;
&lt;br /&gt;
${OUTFILE}: ${MODULES}&lt;br /&gt;
	${CC} -fPIC -shared -o ${OUTFILE} ${MODULES}&lt;br /&gt;
&lt;br /&gt;
install: ${OUTFILE}&lt;br /&gt;
	install ${OUTFILE} ../bin/${OUTFILE}&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f ${OUTFILE} ${MODULES}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can change the name of the resulting file with ''OUTFILE'' and add more modules on the ''MODULES'' line. Note: the indentation must be a tab and not a bunch of spaces.&lt;br /&gt;
&lt;br /&gt;
To use a makefile one would type something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ make -f some.mk&lt;br /&gt;
$ make -f some.mk install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The ''-f'' switch tells make to use ''some.mk'' instead of the default which is 'Makefile'. Also two commands are used so you can spot any errors during compilation.&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
You may need to execute the commands to compile from source, and then move the resulting .so file to the bin directory using install.&lt;br /&gt;
&lt;br /&gt;
== Python modules ==&lt;br /&gt;
No compiling is necessary. Move the .py file to the bin directory. There may be 'softcoded' settings within the .py file, so examine any comments near the top of the file for instructions.&lt;br /&gt;
&lt;br /&gt;
== Configuring ==&lt;br /&gt;
It is a good idea to examine any documents that came with the module. There may be comments at the top of the source code and if you are unsure you can do a search on the file for 'cfg-&amp;gt;Get', which will return all customisable settings this module reads.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ grep 'cfg-&amp;gt;Get' src/module.c&lt;br /&gt;
$ grep 'cfg.Get' bin/module.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I suggest putting module settings in their own .conf file and include this from your arena.conf.&lt;br /&gt;
&lt;br /&gt;
There may also be commands that you must set the permissions for. You can add new commands to the group files found in conf/groupdef.dir. Prefix cmd_ to the command to allow users to send the command publicly and privcmd_ for team and private targets.&lt;br /&gt;
&lt;br /&gt;
Finally you must load the module. Either add an entry to conf/modules.conf or use ?insmod. Some modules are arena specific, in which case you must also add it to your arena.conf Modules:AttahModules setting or use ?attmod.&lt;br /&gt;
&lt;br /&gt;
If you have any questions left chances are they have already been answered at the [[Module General Faq|Module FAQ]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=File_Commands&amp;diff=1072</id>
		<title>File Commands</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=File_Commands&amp;diff=1072"/>
				<updated>2005-01-16T22:54:45Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: stuff about ?renfile and replacing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are file commands for use on [[ASSS]].&lt;br /&gt;
== Uploading and downloading files within the game ==&lt;br /&gt;
=== ?getfile &amp;lt;path&amp;gt; ===&lt;br /&gt;
This will retrieve a file from the server and download it into your client directory. Useful paths to know are maps and arenas where maps and arenas are located respectively.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?getfile arenas/(default)/arena.conf&lt;br /&gt;
File received: arena.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?putfile &amp;lt;local path&amp;gt;[:&amp;lt;destination path&amp;gt;] ===&lt;br /&gt;
Don't be put off by the complexity of this command. It can be used like a normal *putfile:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile news.txt&lt;br /&gt;
Sending file: news.txt&lt;br /&gt;
File received: ./news.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can supply an optional ''destination path'' by using a colon:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile local.lvl:maps/local.lvl&lt;br /&gt;
Sending file: local.lvl&lt;br /&gt;
File received: ./maps/local.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The path is relative to the base directory where asss has been installed. You can also change the filename using the colon method.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile arena.conf.bak:arenas/(public)/arena.conf&lt;br /&gt;
Sending file: arena.conf.bak&lt;br /&gt;
File received: ./arenas/(public)/arena.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?putzip &amp;lt;somefile.zip&amp;gt;[:&amp;lt;destination path&amp;gt;] ===&lt;br /&gt;
This is similar to ?putfile. The optional part after colon is used to specify a target directory rather than a file. The zip file will be uncompressed into this directory or the current working directory (see ?pwd). Any directory tree structure in the zip file is ignored and files from the .zip will overwrite any duplicate files. Note: This command is not available when running ASSS on Windows.&lt;br /&gt;
&lt;br /&gt;
=== ?putmap &amp;lt;somemap.lvl&amp;gt; ===&lt;br /&gt;
This will upload ''somemap.lvl'' to maps/uploads/arenaname.lvl where arenaname is the arena you are currently in. It appends a setting to arena.conf to use this map. You will need to reload the arena for the changes to take effect, you can use the ?recyclearena command to do this.&lt;br /&gt;
&lt;br /&gt;
=== ?sendfile &amp;lt;somefile.ext&amp;gt; ===&lt;br /&gt;
If you private message this command to another player, it will transfer ''somefile.ext'' to them. Both players must be in spectator mode first. ''somefile.ext'' must be in the same directory as your game client, for example C:\Program Files\Continuum.&lt;br /&gt;
&lt;br /&gt;
== Helper commands ==&lt;br /&gt;
There are two helper commands that can be used with these three, ?cd and ?pwd.&lt;br /&gt;
&lt;br /&gt;
=== ?cd &amp;lt;path&amp;gt; ===&lt;br /&gt;
With this command you can change the current directory. By default it will start off as ., the base directory for the asss install.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?cd arenas/(public)&lt;br /&gt;
Changed working directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You shouldn't use .. or end the path with /. This command is different from the cd command that you would find in a shell in that the parameter is always taken to be relative to the asss base directory.&lt;br /&gt;
&lt;br /&gt;
=== ?pwd ===&lt;br /&gt;
The print working directory command shows where you are currently located.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?pwd&lt;br /&gt;
Current working directory: .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?renfile &amp;lt;filename&amp;gt;:&amp;lt;new filename&amp;gt; ===&lt;br /&gt;
This command will rename a file. The path is relative to the current directory. If the destiation file already exists, it will be replaced (due to a bug, replacing won't work on Windows in versions &amp;lt;= 1.3.5). This command can be used to move files between directories.&lt;br /&gt;
&lt;br /&gt;
=== ?delfile &amp;lt;filename&amp;gt; ===&lt;br /&gt;
This will delete a file, so use caution with this. Again the path is relative to the current working directory.&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=File_Commands&amp;diff=1065</id>
		<title>File Commands</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=File_Commands&amp;diff=1065"/>
				<updated>2005-01-16T22:48:26Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: fixed confusing statement about ?putzip and windows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are file commands for use on [[ASSS]].&lt;br /&gt;
== Uploading and downloading files within the game ==&lt;br /&gt;
=== ?getfile &amp;lt;path&amp;gt; ===&lt;br /&gt;
This will retrieve a file from the server and download it into your client directory. Useful paths to know are maps and arenas where maps and arenas are located respectively.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?getfile arenas/(default)/arena.conf&lt;br /&gt;
File received: arena.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?putfile &amp;lt;local path&amp;gt;[:&amp;lt;destination path&amp;gt;] ===&lt;br /&gt;
Don't be put off by the complexity of this command. It can be used like a normal *putfile:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile news.txt&lt;br /&gt;
Sending file: news.txt&lt;br /&gt;
File received: ./news.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can supply an optional ''destination path'' by using a colon:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile local.lvl:maps/local.lvl&lt;br /&gt;
Sending file: local.lvl&lt;br /&gt;
File received: ./maps/local.lvl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The path is relative to the base directory where asss has been installed. You can also change the filename using the colon method.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?putfile arena.conf.bak:arenas/(public)/arena.conf&lt;br /&gt;
Sending file: arena.conf.bak&lt;br /&gt;
File received: ./arenas/(public)/arena.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?putzip &amp;lt;somefile.zip&amp;gt;[:&amp;lt;destination path&amp;gt;] ===&lt;br /&gt;
This is similar to ?putfile. The optional part after colon is used to specify a target directory rather than a file. The zip file will be uncompressed into this directory or the current working directory (see ?pwd). Any directory tree structure in the zip file is ignored and files from the .zip will overwrite any duplicate files. Note: This command is not available when running ASSS on Windows.&lt;br /&gt;
&lt;br /&gt;
=== ?putmap &amp;lt;somemap.lvl&amp;gt; ===&lt;br /&gt;
This will upload ''somemap.lvl'' to maps/uploads/arenaname.lvl where arenaname is the arena you are currently in. It appends a setting to arena.conf to use this map. You will need to reload the arena for the changes to take effect, you can use the ?recyclearena command to do this.&lt;br /&gt;
&lt;br /&gt;
=== ?sendfile &amp;lt;somefile.ext&amp;gt; ===&lt;br /&gt;
If you private message this command to another player, it will transfer ''somefile.ext'' to them. Both players must be in spectator mode first. ''somefile.ext'' must be in the same directory as your game client, for example C:\Program Files\Continuum.&lt;br /&gt;
&lt;br /&gt;
== Helper commands ==&lt;br /&gt;
There are two helper commands that can be used with these three, ?cd and ?pwd.&lt;br /&gt;
&lt;br /&gt;
=== ?cd &amp;lt;path&amp;gt; ===&lt;br /&gt;
With this command you can change the current directory. By default it will start off as ., the base directory for the asss install.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?cd arenas/(public)&lt;br /&gt;
Changed working directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You shouldn't use .. or end the path with /. This command is different from the cd command that you would find in a shell in that the parameter is always taken to be relative to the asss base directory.&lt;br /&gt;
&lt;br /&gt;
=== ?pwd ===&lt;br /&gt;
The print working directory command shows where you are currently located.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
?pwd&lt;br /&gt;
Current working directory: .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ?renfile &amp;lt;filename&amp;gt;:&amp;lt;new filename&amp;gt; ===&lt;br /&gt;
This command will rename a file. The path is relative to the current directory. '''someone confirm if this overwrites ''new filename'' if it already exists'''&lt;br /&gt;
&lt;br /&gt;
=== ?delfile &amp;lt;filename&amp;gt; ===&lt;br /&gt;
This will delete a file, so use caution with this. Again the path is relative to the current working directory.&lt;br /&gt;
&lt;br /&gt;
[[Category: ASSS]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=CCC&amp;diff=676</id>
		<title>CCC</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=CCC&amp;diff=676"/>
				<updated>2005-01-13T09:29:00Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: more features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CCC is a chat client using the [[ChatNet Protocol|TCP chat protocol]]. It's written by Grelminar, and it's written in Python. You can get it in the ASSS distribution, or from http://sscx.net/asss/ccc.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
* runs in a console windows, so it's easy to use over ssh&lt;br /&gt;
* auto-reconnecting after disconnection&lt;br /&gt;
* complete logging of everything to a file&lt;br /&gt;
* double-colon support&lt;br /&gt;
* separate windows for different chat channels, mod chat, and private messages&lt;br /&gt;
* multiple profile support&lt;br /&gt;
* auto-enter commands&lt;br /&gt;
&lt;br /&gt;
[[Category: ChatNet Clients]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=CCC&amp;diff=675</id>
		<title>CCC</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=CCC&amp;diff=675"/>
				<updated>2005-01-13T06:51:22Z</updated>
		
		<summary type="html">&lt;p&gt;Grelminar: add info about ccc features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CCC is a chat client using the [[ChatNet Protocol|TCP chat protocol]]. It's written by Grelminar, and it's written in Python. You can get it in the ASSS distribution, or from http://sscx.net/asss/ccc.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
* runs in a console windows, so it's easy to use over ssh&lt;br /&gt;
* auto-reconnecting after disconnection&lt;br /&gt;
* complete logging of everything to a file&lt;br /&gt;
* double-colon support&lt;br /&gt;
* separate windows for different chat channels, mod chat, and private messages&lt;br /&gt;
&lt;br /&gt;
[[Category: ChatNet Clients]]&lt;/div&gt;</summary>
		<author><name>Grelminar</name></author>	</entry>

	</feed>