tutorials/new-mod.txt · Last modified: 2014/01/27 03:13 by JRandomNoob

New mod? Read this

New mod? Read this

:!: Parts of this article have been split off to Beginner’s guide to UrT and DSWP features.

This is an expansion of AimMe’s original post on the forum three years ago. Some things have changed, many things have been added, and some things he didn’t talk about. There’s a good chance that most mods and admins regardless of their experience, not to mention lowly level 1 players, would find something useful here. (Just a quick reminder: you’re not expected to understand everything.)

Most of what’s discussed here holds true for the DSWP TDM server; not all of these tools are usable with / have versions for our BOMB, JUMP & TS servers. In case you come here from somewhere else, your home server probably has B3 and Echelon, most likely XLRStats, but the command levels and available commands are different, the ideas about responsibilities, powers and “good” gameplay are different, and most of the software and API environment is not available (doesn’t mean it can’t be made available, we’re friendly people here and pretty much every piece of DSWP code should be open source. You can always ask; the stuff on our GIT definitely is.)

Daily job as a deity

We are gods: whether minor deities or Creators, doesn’t matter, we shape the world for our subjects. The most important part of admining a server is not being a dick.

Ruling over an empty world kinda sucks, you know.

Using B3 commands

:?: If you have questions about what commands to input where, see Chat and Console in the beginner’s guide. If you absolutely have to input a B3 command so that nobody would see it, use /tell <your slot number> <command> (PM to yourself) — it will appear exactly the same as other chat to you (except for the [brackets] around your name), but only yourself and B3 will see this.

All commands start with ! (with no space before the command itself); for commands that give output, you can use the @ prefix which makes the output public (!nextmap tells the nextmap only to yourself, @nextmap to everyone).

To punish or help a player, you’d use <command> <name or number> <duration for some commands> <reason for some commands>, as in !tb unmiezi 1h egregious lack of miezitude, which would ban the player named unmiezi for one hour, logging “egregious lack of miezitude” as the reason (reasons for kicks and bans are also shown to the affected players after they’re forcibly disconnected, and logged in Echelon). Regardless of command, you can use just a part of the player’s name (unm or ezi would do in this case); if two or more players match, B3 will ignore the command and tell you their names and slot numbers.

There are several ways using names can fail.

Say we have a player called .45cal, slot number 7. !k 45 tk B3 considers a slot number, and kicks the player number 45 instead (if such exists) — as long as the part of the name you’re using starts with at least one and at most two digits, it will be misinterpreted as slot number. You’d have to use cal or 7 to get rid of this player.

Additionally, any namepart must be at least two characters, ensuring you’ll have to always use the slot number to get rid of people calling themselves . or z. (This doesn’t cause any real problems, B3 simply gives you an error message.)

The most useful commands are:

  • !help <command> — gives you an usage example for the command. When used without parameters, lists all commands you can use on your current level.
  • @rules — lists all the DSWP rules, useful in order to resolve the occasional arguments about x being “totally permissible, you noob admin” and such.
  • !find <name> — gives you the player’s slot number. Use /follow <number> in the console to spec someone. (:!: The B3 command !follow is a completely different thing and will put the player in the “suspicious people” list.) Alternatively, there’s a bit more stealthy but more cumbersome /playerlist in the console. (In this case, you’ll have to find the player from the list by yourself.)
  • !kiss <name or number> — removes all warnings and TK points from the player. When used without name or number, it affects everyone. You probably know some nice players who never teamkill deliberately and who you’d gladly smooch to keep them from getting kicked.
  • !force <name or number> <team> <optional lock> — forces the player into red, blue or spec. Using lock keeps them from switching back to their previous team1). To release a lock, use free as the team. !force all free releases all locks.
  • !ch <player 1> <player 2> — (aka !change) interchanges two players’s teams (only makes sense if they’re from opposing teams). Omitting the second name results in you being switched against the specified player: good for balancing teams if yours is stronger and you’re skilled enough to make a difference.
  • !! <text> — (aka !say) allows a spectator to say things to players in-game.
  • !veto — cancels the vote in progress. Most cyclemap votes should be vetoed, unless the current map is clearly unsuitable (jumpmap on TDM, Dressingroom with 30 players) or has already been played like thousand times in the last hour. Same goes for nextmap votes for horribly unsuitable maps and further votes after an already passed vote.
  • !id <name or number> — display a PM with the player’s name, GUID and IP along with a timestamp. Do it always when recording a cheater.
  • !alias <name or number> — display the player’s most-used nicknames, if any.
  • !lookup <name> — shows you player’s @ID — useful for getting the necessary info to ban teamkillers who just disconnected etc.
  • !bi <name or number> — (aka !baninfo) display the player’s previous bans, if any.
  • !ff <name or number> — (aka !follow) puts the player in the “under suspicion of cheating” list. Whenever a followed player joins, a PM is displayed to all mods and admins; whenever a mod or admin joins, a PM for any followed player is displayed to them. Use !uf (aka !unfollow) to remove the player from the list. Generally, if you have seen a warning about someone way too many times and they’re still not banned, it’s safe to unfollow them; they’ve just seemed “suspicious” to someone some time ago, which doesn’t amount to much.
  • !mute <name or number> <optional duration> — mutes the player until the next map, until they reconnect, or until the duration is over. B3 still sees and logs everything the muted player says, which means they can get kicked for spamming even though nobody sees it. Muted players can still use radio and call votes.
  • !afk <name or number> — asks the player if he’s AFK, if there’s no answer within a few seconds, the player is moved to spec. Similar but faster is !force <name or number> spec. (On many servers it’s customary to kick AFK and spec people; DSWP TDM has 45+5 slots so that’s unnecessary.)
  • !poke <name or number> — displays a random message urging the player to move.
  • !slap <name or number> <optional amount> — slaps the player. Most useful for moving blockers out of the doorways, freeing people stuck on ladders and getting the attention of campers. The maximum amount is 25, capable of killing player with full health. Displays annoying bigtext to everyone on the server with each slap, so don’t overuse it.
  • !nuke <name or number> — spawns a HK69 grenade directed at the player. Pretty dangerous command, avoid using it if there’s a chance of someone else getting killed (it usually takes a second or two for the nuke to reach the target, so beware of other people running by). Not terribly useful per se; it might force a camper to avoid the spot he got nuked at, or make a point for a spawnkiller, but its limitations (fails in confined spaces, easy to kill the wrong person, from the punishee’s point of view it’s easy to confuse with a grenade from enemy) mean it’s a tool for special occasions.
  • !w <name or number> <optional reason> — (aka !warn) warns the player. Four active warnings result in a two-minute tempban; most warnings (whether given by humans or by B3) persist for an hour. You can only warn the same player once in every 15 seconds.
  • !k <name or number> <reason> — (aka !kick) kicks the player. They’re free to reconnect immediately.
  • !tb <name or number> <duration> <reason> — (aka !tempban) tempban the player. The duration is 1s for 1 second, 1m for 1 minute, 1h for 1 hour, and 1d for 1 day. Maximum duration is 3 days. :!: There’s no space before the letter — if you accidentally type 1 d, it will ban for one minute only, and the d gets added to the reason.
  • !b <name or number> <reason> — (aka !ban) bans the player for 3 days. See the “Banning” section below for more.
  • Pirat has added various commands to the Extraadmin plugin that allow one to vote or set knife-only mode or turn off snipers or nades. The command you need to know is !reset that sets everything back to their defaults.

You can warn without giving a reason (in which case the warning will be “behave yourself”), but other penalties do require one. You want to use these abbreviations (expanded by B3 into full warning) for the most common reasons:

  • tk — stop team killing!
  • ta — do not attack your teammates!
  • sk — do not spawn kill!
  • camp — stop camping or you will be kicked! Use your best judgement; campers in places where they block others’ movement are worse than non-blockers, skilled players affect the balance much more than newbies, etc.
  • lang — Rule #7: No profanity or offensive language (in any language) (Don’t be overzealous; what is not to be tolerated is rudeness towards others, not occasional “fucking hell, no fucking hits whatsoever”.)
  • spam — do not spam, shut-up! (B3 automatically warns for excessive chat and radio spam, but since it’s not intelligent, the tolerances are pretty high, otherwise even normal conversation could end with the participants getting kicked.)
  • name — Rule #5: No offensive or potentially offensive names, annoying names and NO nazi names Again, use your best judgement.
  • adv — Rule #6: No advertising or spamming, it's annoying! (Leave the occasional people doing “/connect” alone, they’re just trying to go and play somewhere else and accidentally typing the command into chat, not necessarily advertising for another server.)

There’s an automatically updated B3 command listing for each server that includes short usage explanation and minimum level required. Note that occasionally things change and command levels on different servers go out of sync; this is unintended and reports are welcome.

Remember not to over-police; if there's nothing disrupting the gameplay, just enjoy yourself, it gives better results than attempting to make everything perfect.


If in doubt, don’t. Don’t kick either. Take a demo and post it; others can have a look and reach a decision. Banning is not a race, it’s possible to do it later, whether the cheater is in-game or not.

After the semi-recent change the previously admin-only (level 60 and above) !b command is now accessible to mods (level 40), but instead of a month, it only bans for three days. !tb allows you to specify any duration up to 7 days.

Thanks to the Autotopic plugin for B3, every ban equal to or longer than 3 days creates a thread in the Lamas corner; this thread is posted under your name and behaves exactly the same as if you posted it, which among other things means you can simply delete the occasional double posts. You have to attach the demo of the cheater to this thread so that admins could watch it and decide whether to extend the ban. The poll at the top of each such thread was initially supposed to auto-extend bans if enough people voted yes, but extending has not been working from the very beginning and will probably remain so.

Note that although Autotopic inserts links to cheater’s XLRStats and Echelon pages, you still should do !id while recording the demo; it helps to unambiguously identify the cheater (occasionally there can be some doubt whether the demo shows the right player / whether the banned player is the same you recorded), and, well, sometimes Autotopic just falls flat on its face and has to be restarted. In which case you have to post everything manually, like in ye olden times.

In case the cheater/teamkiller happens to disconnect or get kicked, you can still ban them using their B3 ID — you did !id them, right? (Even if you didn’t, you can still use !lookup or find their B3 ID on their Echelon page.) The relevant part is the usually six-figure number starting with @ — you just do !b @123456 and that’s it. (Other commands work too, within reasonable limits, of course — slapping someone not connected wouldn’t make a whole lot of sense, but doing !follow for a suspicious player is a useful trick.) Be careful and always double-check the @ID: mods cannot undo bans and have to ask admins to do so.

Balancing teams

“Winning” or “losing” has no real meaning on this (fun-oriented) server; we talk about “balanced” and “unbalanced” teams instead. Balanced teams ideally mean that most of the action occurs in the middle part of the map, with minimal spawnkilling possible, and the team scores are approximately equal (say, 150:120 is still pretty balanced). Balancing is kind of an art, depending on the map (on campy maps, balance is less of an issue since most people stay on their side), skill of the players, aggressiveness of the players, etc. Generally speaking, if the scores aren’t too far apart, if you’re not running into teammates near the opposing spawn or being constantly under attack in/at your own spawn, balance is best left alone. In case you’re skilled enough, just changing to the opposing team can do wonders.2)

After adding team balancer to the Poweradminurt plugin, the tolerance for the count-based balancing command !teams was relaxed (you now need more than three-people difference for this to have any effect), and the new magic word is !bal that balances the teams based on the players’ current XLRStats skill. Beware: this command can be highly annoying, in some cases changing more than half the players at once (including mods and admins who are immune to !teams). Use !bal only when teams are badly unbalanced, otherwise rely on !force and !change.

Hints or tips

Commonly called “Pirat hints” after the inventor and most active user of these, they are useful tips bound to keys and utilizing the !! (aka !say) command, allowing you to use colors and help people even while you sit in spec. Example:

bind x "say !!^2HINT^7: Press '^2Q^7' or '^2A^7' to ^2bandage yourself^7 or ^2heal others^7."

(It’s “Q or A” due to AZERTY-using players who are rather common here. 3) Note that say in this example is not a B3 command but an UrT command, forcing the following string being interpreted as chat, not a command string. (Yeah, kinda confusing.) Since the strings must be surrounded by double quotes ("), you have to use single quotes (') in the tips. If typed directly into chat, double quotes show up as spaces; use duplicated single quotes ('') to fake double quotes.

Numbers prefixed with caret are Quake color codes, useful for highlighting important parts of the string (see the beginner’s guide for details.

Tips used by Pirat:

"say !!^2HINT^7: Press '^2Q^7' or '^2A^7' to ^2bandage yourself^7 or ^2heal others^7."
"say !!^2HINT^7: ^2Change weapons^7 with keys '^21^7' (^1KNIFE^7) to '^25^7' (or '6' in bomb mode) or ^2mouse wheel^7."
"say !!^2HINT^7: Press key '^2N^7' to ^2change weapon mode^7."
"say !!^2HINT^7: Press '^2CTRL^7' to ^2open/close doors^7 and defuse bomb."
"say !!^2HINT^7: Cheating? Take demo (F12), say '!admin <name> is cheating', then visit dswp.de/postdemo"
"say !!^2HINT^7: ^1When we think camping is killing the fun, we stop it.^7" // explaining why campers are warned and kicked, rather than relying on might and right alone
"say !!^2HINT^7: Say '^2!fa^7' to ^2forgive all^7 who attacked you, or they might get kicked."
"say !!^2HINT^7: Say '^2!fp^7' to ^2forgive someone^7 who just attacked you, or they might be kicked."
"say !!^2HINT^7: Press '^2E^7' to ^2SPRINT^7 (i.e. run faster)."
"say !!^2HINT^7: Press ^2F5^7 to ^2call a medic^7, so your team can locate you."
"say !!^2HINT^7: To ^2kill yourself^7, hit ^2Shift-ESC^7, then type: ^2/kill^7" // when someone complains that he’s stuck and asks others to kill him
"say !!^2HINT^7: ^1Spam votes will be vetoed, and the spammer will be kicked!^7"
"say !!^2HINT^7: For ^2hats, shades etc.^7, ^1google^7 for: ^2urbanterror funstuff^7"
"say !!HINT: We usually !veto a '/callvote cyclemap', because it often leads to cyclemap spam."
"say !!HINT: Please kill each other politely, thanks. :-)"
"say !bigtext ^3***^5 No spawnkilling, please! ^3***"
"say !bigtext ^3***^5 No camping (on this map), please! ^3***"

The most useful and commonly-used tips deal with bandaging (press Q) and forgiving (!fp or !fa). Another useful tip to keep ready is one explaining that smoke grenades and HK69 are forbidden here (when you see someone repeatedly joining the game and immediately going back to spec, they’re obviously not seeing or understanding the PM by B3). Mix and match as you see fit.

You can use more tips than you have free keys for binding them: simply define the tips as variables

set tipq "say !!^2HINT^7: Press '^2Q^7' or '^2A^7' to ^2bandage yourself^7 or ^2heal others^7."

and activate them with via the console: vstr tipq. For example, you could have English tips bound to keys, and additionally define the same tips for different languages (tipqde, tipqfr).

Note that depending on the length of your current nick, long lines get chopped into shorter lines in different places and this may mess up the colors (nothing terrible, just some of the highlighted words can lose their color) or introduce unwanted hyphens (especially bad in URLs).

What’s behind the scenes


Big Brother Bot is not actually part of Urban Terror; it’s a multi-platform bot usable on most Quake 3–derived games (including the bane of UrT suggestions forum, Call of Duty series). B3 is first and foremost an rcon mediator, giving selected people access to selected server commands. This means that even the highest-level B3 admins are still equal to the lowliest of peons in the eyes of the game server itself (notably, even though B3 won’t warn or kick you for teamkilling, if you exceed the TK limit set in server config file, the server will kick you nonetheless). B3 is constantly reading the games.log of the server and reacting appropriately whenever it sees an event (warning for a teamkill, immediate kick whenever a banned GUID tries to connect, etc). B3 is also maintaining two databases: GUID-based penalty database (UrT itself only allows IP-based bans, logs no kicks and issues no warnings), also accessible via the web interface called Echelon; and XLRStats database for players’ kills, deaths and other assorted stuff.


XLRStats is the statistics plugin for B3, working in real time; usually the servers that have bot also have stats enabled. Most of the names you see on the main DSWP site are links to stats pages (JRandomNoob’s page hereby offered as an example). While its main function is displaying one’s e-penis in all its glory, XLRStats also provides quick assessment of a player’s nature: suspiciously high ratio? lots of teamkills? horribly noobish? has a tendency to join every hour or so and get kicked within minutes? Additionally, the main page for XLRStats (http://www.dswp.de/old/xlr_stats.php without any parameters) lists top 50s by various parameters, and most importantly, allows you to search players by name. It’s better than Echelon name search, allowing you to search only last-used names (default) or also include aliases (previously-used names).


Although there are red Echelon links in the main menu (you did notice them, being a new mod and all, right?), you’ll mostly use Echelon via players’ XLRStats pages. On top of each such page is a link saying “echelon page of this player” — this link both logs you into Echelon and directs you at the relevant stats. Note that your Echelon password, included in the link’s address, is not the same as your forum password. It’s advised to middle-click this link (or right-click and choose “Open in new tab”) — otherwise the Echelon page opens in a new window with inactive address bar.

Players’ GUID and IP are links, clicking on them searches for other occurrences of them. GUID search is useless for our purposes — there’s exactly one match, the same player whose page you are on. IP search is much more interesting: if the player has changed their GUID (whether accidentally or deliberately), their IP might be same or similar, allowing you to find a cheater’s previous identities and possible bans. Here’s where the address bar comes handy — by deleting the last one or several octets (digit groups separated by dots) you can widen the search range and catch all those people with dynamic IPs.

Useful pages on DSWP


(Usable without being logged in; works in Firefox, Safari, Opera, Chrome and pretty much everything other than Internet Explorer) This is a Javascript-using web page, also accessible via the DSWP bar under the Game monitor button, that shows real-time status of the server (players in their teams, their scores, map being played and time remaining). Player names are links that display a popup with basic data about them; Playerstats at the bottom of the popup gives you their XLRStats page.

Recent bans

(Link also displayed in the main menu) Choose admin bans, B3 bans (mostly TK kicks), or both. Names are links that give you the delinquent0r’s (or, if you’re interested, the execut0r’s) XLRStats page.


(Usable without being logged in) The Echelon chatlog shows you the last 500 lines generated by the players (from newer to older; radio messages, B3 warnings, spams & bigtexts are not shown). In its basic form, it makes for a useful tool for keeping an eye on the server (chat being somewhat more expressive than the scores of players…).

In case you want to read chat from a specific date, you can add parameters to the URLtimestamp takes a value expressed as Unix epoch (a converter is available online), and rows allows you to display more lines than the default (the whole chat generated in a day is most commonly between 2000 and 3000 lines — note that excessive amount of lines may take a long-ish time to load). You can use timestamp without rows (in which case 50 lines are displayed), but not vice versa. The chatlog displays timestamps in CET (Central European Time, DSWP native time, and also the timezone most of the players visiting the server live in), which is UTC/GMT +1 hour — remember this when using the converter. The Unix timestamp used in the URLs matches the topmost (newest) line of the chatlog.

Example URL from the moment of writing this:


Such links are also attached to each penalty registered in Echelon for easy reference (the date is a link). If aimlessbot is on #dswp, it can convert dates into chatlog links with the !chatlog command.

More as a toy we also have chatlog search; this doesn’t allow you to see any real chat though, just counts the occurrences of a given string (you can use % as a wildcard: !slap % 25 shows you who’s slapped people to death the most). Who’s the “cunt” leader? (Knew it.)

Why it’s not working?

!trans in CuntBot/aimlessbot and !translast in B3 (also the autotranslation in Mitsubishi’s UrT build) stopped working when Google killed off their free translation API in December 2011. Currently there’s no replacement; use their web page for translating.

!teams tolerance was relaxed; use !bal instead.

1) No, you can’t lock people into spec, you evil bastard:-P
2) Anecdotal example from DSWP TDM of score not being an absolute indicator of balance: Uptown, teams with equal amount of players, the blue rooftop being under constant attack although red had only half the score of blue. In this case, the teams were unbalanced playstyle wise: mostly aggressive rushers in red, mostly campers in blue.
3) PS : Sur Windows, Urban Terror associe pour les binds les touches du clavier anglo-saxon (qwerty). Donc par exemple lorsque vous voulez associer la touche A à un bind, vous devez écrire bind q "ut_radio 5 5", Q étant à la place de A dans le clavier qwerty. (Des binds radio évolués)