Silent Shrubbot
<yambe:breadcrumb>SilentMod|SilentMod</yambe:breadcrumb>
What Is Shrubbot
Shrubbot is an invention of Ryan Mannion. Shrubbot is an admin system that identifies the admin leveled players from PunkBuster GUIDs without the need for passwords. Shrubbot is also very flexible and allows creating many different admin levels with entirely different command sets. ETPub tries to clone shrubbot as accurately as possible, both in user interface and in the shrubbot configuration file called "shrubbot.cfg". silEnT shrubbot is based on the work of the ETPub team. silEnT extends the functionality of the shrubbot where ever it is needed. Including user database that holds all the players that have visited the server. To access this database, new commands have been added to the original shrubbot command set. Some commands have been renamed to ease their use and so that they resemble commands from other ET mods that have advanced admin systems.
If you want to use shrubbot, the cvar g_dbDirectory must be set. If it is not set, the shrubbot will not be in use. If you want to edit the default levels, you must create or copy existing shrubbot.cfg file to the folder defined by g_dbDirectory setting. In case shrubbot command like !ban is used against a player and shrubbot.cfg file does not already exist, a new shrubbot.cfg file is created to store the needed data.
The created file will also have the default level settings written to it. This file can be freely edited by hand and then after !readconfig command has been issued, the changes take effect on the server.
Shrubbot Commands
!admintest
Prints out player's current shrubbot admin level in global chat. When the NAME or SLOT are added and the user has the right shrubbot permission, the level of another player will be shown. However, if the target has incognito shrubbot flag, then 0 level is displayed regardless who does !admintest on him/her.
Syntax: !admintest [NAME|SLOT]
Permission Flag: a
Requires g_tyranny: No
Minimum required version: 0.2.0
!ban
Kicks the player in slot number SLOT or with name containing NAME off the server and will not let them connect again for SECONDS seconds, or, if a modifier (m, h, d, or w) is used, a given amount of time. For example:
90 = 90 seconds
15m = 15 minutes
3h = 3 hours
5d = 5 days
1w = 1 week
Syntax: !ban (NAME|SLOT) (SECONDS|TIME_WITH_MODIFIER) REASON
Permission Flag: b
Requires g_tyranny: No
Minimum required version: 0.2.0
!baninfo
Shows detailed information of a ban in the ban list. Find the ban number with !showbans command.
Syntax: !baninfo (BAN NUMBER)
Permission Flag: e
Requires g_tyranny: No
Minimum required version: 0.3.0
!burn
Sets the player in slot number SLOT or with name containing NAME on fire. REASON will be center-printed to the victim.
Syntax: !burn (NAME|SLOT) [REASON]
Permission Flag: U
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!cancelvote
Makes a vote in progress fail.
Syntax: !cancelvote
Permission Flag: c
Requires g_tyranny: No
Minimum required version: 0.2.0
!dewarn
Shows all the warnings of a user. When warning number is used, the warning with that number will be removed.
Syntax: !dewarn (NAME|SLOT) [WARNING#]
Permission Flag: R
Requires g_tyranny: No
Minimum required version: 0.2.0
!disorient
Turns the view upside down for the client in slot number SLOT or with name containing NAME. If REASON is specified it is printed to the client.
Syntax: !disorient (NAME|SLOT) [REASON]
Permission Flag: d
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!finger
Display the slot, partial guid, ip and clientversion of a player.
NOTE: This command should be available only to the highest server admins!
Syntax: !finger (NAME|SLOT)
Permission Flag: e
Requires g_tyranny: No
Minimum required version: 0.2.0
!freeze
Freezes the client in slot number SLOT or with name containing NAME. If no parameter is provided it freezes all players. Frozen player(s) cannot receive damage during this time. If REASON is specified it is printed to the client.
Syntax: !freeze [NAME|SLOT] [REASON]
Permission Flag: F
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!gib
Kills and gibs the player in slot number SLOT or with name containing NAME. If name is -1 or all or if no name is entered, everybody will be gibbed.
Syntax: !gib (NAME|SLOT|-1|all)
Permission Flag: g
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!giba
Kills and gibs all players.
Syntax: !giba
Permission Flag: Q
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!help
Lists all the available shrubbot commands. If COMMAND is given, then prints the help of that specific command. !help is always available to all clients.
Syntax: !help [COMMAND]
Permission Flag: None
Requires g_tyranny: No
Minimum required version: 0.2.0
!howfair
Prints a simple summary to everyone on the chat of team fairness based on player kill rating.
Syntax: !howfair
Permission Flag: I
Requires g_tyranny: No
Minimum required version: 0.2.0
!kick
Kicks the player in slot number SLOT or with name containing NAME off of the server. REASON is given to the client as the drop message. The client will be banned for 2 minutes.
Syntax: !kick (NAME|SLOT) REASON
Permission Flag: k
Requires g_tyranny: No
Minimum required version: 0.2.0
!list
Prints out a list of information about the connected players. The columns are:
- slot number
- team R=axis B=allies S=spectator C=connecting
- first letter of fireteam name
- admin level (and level name)
- last 8 digits of guid
- M if muted
- W if warned
- name
Syntax: !list
Permission Flag: i
Requires g_tyranny: No
Minimum required version: 0.2.0
!listteams
Prints out a list of statistical information about each team. This lists ends with ratings information based on how likely each team is to win the current map. The team with more points is LESS likely to win, therefore a good way to balance the teams is to join the team with more points, or move people to that team, until the points are about even.
Syntax: !listteams
Permission Flag: I
Requires g_tyranny: No
Minimum required version: 0.2.0
!lock
Locks the specified team. Recognized values are r=AXIS b=ALLIES s=SPECTATORS all=ALL.
Syntax: !lock (r|b|s|all)
Permission Flag: K
Requires g_tyranny: No
Minimum required version: 0.2.0
!lol
Makes all players drop grenades. If NAME or SLOT is provided only that player will drop grenades. GRENADES is the number of grenades to be dropped (default is 1, maximum is 16).
Syntax: !lol [NAME|SLOT] [GRENADES]
Permission Flag: x
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!mute
Mutes a player in a slot number SLOT or with a name containing NAME. TIME and REASON are optional. See !ban for more information on modifiers
Syntax: !mute (NAME|SLOT) [SECONDS|TIME_WITH_MODIFIER] REASON
Permission Flag: m
Requires g_tyranny: No
Minimum required version: 0.2.0
!news
Plays the map specific news audio to all players if it is available.
Syntax: !news
Permission Flag: W
Requires g_tyranny: No
Minimum required version: 0.2.0
!nextmap
Moves to the next map in campaign or in the objective cycle end game intermission is skipped. With mapvoting gametype it is possible to go to the intermission if g_mapVoteFlags flag 16 is set.
Syntax: !nextmap
Permission Flag: n
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog
- 0.4.0 The !nextmap will go to the intermission map voting when the gametype is set to 7 and the g_mapVoteFlags bitmask has flag 16 set.
!orient
Reverses the action of !disorient for the client in slot number SLOT or with name containing NAME.
Syntax: !orient (NAME|SLOT)
Permission Flag: d
Requires g_tryanny: Yes
Minimum required version: 0.2.0
!panzerwar
Enables panzerwar game mode. All the players will have their main weapon changed to panzerfaust.
Syntax: !panzerwar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!passvote
Makes a vote in progress pass.
Syntax: !passvote
Permission Flag: V
Requires g_tyranny: No
Minimum required version: 0.2.0
!pause
Pauses the match.
Syntax: !pause
Permission Flag: Z
Requires g_tyranny: No
Minimum required version: 0.2.0
!pip
Draws sparks (pixie dust) around the player in slot number SLOT or with name containing NAME. Does it to all players if NAME/SLOT is not providied.
Syntax: !pip [NAME|SLOT]
Permission Flag: z
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!pop
Pops the helmet off from a player in a slot number SLOT or with a name containing NAME. If no parameter is provided, it pops the helmets off from all the players.
Syntax: !pop [NAME|SLOT]
Permission Flag: z
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!putteam
Moves a player in a slot number SLOT or with a name containing NAME to the indicated team.
- r - Allies
- b - Axis
- s - Spectators
Syntax: !putteam (NAME|SLOT) (r|b|s)
Permission Flag: p
Requires g_tryanny: No
Minimum required version: 0.2.0
!readconfig
Reads shrubbot.cfg file from the directory set by g_dbDirectory cvar.
Syntax: !readconfig
Permission Flag: G
Requires g_tyranny: No
Minimum required version: 0.2.0
!rename
Sets the player in slot number SLOT or with name containing NAME to NEWNAME. The name change will not be persistent. The user database will store the renamed name for the player.
Syntax: !rename (NAME|SLOT) NEWNAME
Permission Flag: N
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!reset
Resets the match.
Syntax: !reset
Permission Flag: r
Requires g_tyranny: No
Minimum required version: 0.2.0
!resetmyxp
Clears all XP and skillpoints for the player who runs this command.
Syntax: !resetmyxp
Permission Flag: M
Requires g_tyranny: No
Minimum required version: 0.2.0
!resetxp
Clears all XP and skillpoints for the player in the slot number SLOT or with the name containing NAME. If reason is provided it is printed to the client.
Syntax: !resetxp (NAME|SLOT) [REASON]
Permission Flag: X
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!restart
Restarts the match.
Syntax: !restart
Permission Flag: r
Requires g_tyranny: No
Minimum required version: 0.2.0
!riflewar
Enables riflewar game mode. All the players will have their main weapon changed to either K43 or Garand.
Syntax: !riflewar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!setlevel
Sets the connected player in the slot number SLOT or with name containing NAME to the level indicated by LEVEL. A player cannot !setlevel another player to a lever higher than him/herself.
Syntax: !setlevel (NAME|SLOT) LEVEL
Permission Flag: s
Requires g_tyranny: No
Minimum required version: 0.2.0
!showbans
Lists up to 30 shrubbot bans currently in effect. The columns are:
- ban number
- banned player's name
- date of the ban
- name of the banning admin
- when the ban will expire
- reason for the ban
If SKIP is provided, that number of bans are skipped before printing starts. SKIP can also be negative (e.g. '!showbans -10' would display the last 10 bans.
Syntax: !showbans [SKIP]
Permission Flag: B
Requires g_tyranny: No
Minimum required version: 0.2.0
!shuffle
Shuffles teams, but does NOT restart (see !restart).
Syntax: !shuffle
Permission Flag: S
Requires g_tyranny: No
Minimum required version: 0.2.0
!slap
Does DAMAGE (default 20) damage to player in slot SLOT or with name containing NAME. If REASON is specified it's center-printed to the victim.
Syntax: !slap (NAME|SLOT) [DAMAGE] [REASON]
Permission Flag: A
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!sniperwar
Enables sniperwar game mode. All the players will have their main weapon changed to sniper rifles.
Syntax: !sniperwar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!spec999
Moves all the players with a ping of 999 to the spectators team.
Syntax: !spec999
Permission Flag: P
Requires g_tyranny: No
Minimum required version: 0.2.0
!spree
Show the players current killing spree count.
Syntax: !spree
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!spreerecord
Displays the map and the overall spreerecord.
Syntax: !spreerecord
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!stats
Displays the Thompson, MP40 and PPSh total kills and deaths, kills and deaths during the map and accuracy, headshotratio and headshot distance during the map. Lists all connected players.
Syntax: !stats
Permission Flag: t
Requires g_tyranny: No
Minimum required version: 0.2.0
!swap
Swaps the players to the opposite team.
Syntax: !swap
Permission Flag: w
Requires g_tyranny: No
Minimum required version: 0.2.0
!time
Prints out localtime of the client in the chat. No other client can see this time message. The command doesn't have a flag but it is available to all clients always.
Syntax: !time
Permission Flag: No permission required
Requires g_tyranny: No
Minimum required version: 0.2.0
!tspree
Show the top n current killing spree (default top 5).
Syntax: !tspree [amount]
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!unban
Removes the ban that !showbans lists as BAN_NUMBER.
Syntax: !unban BAN_NUMBER
Permission Flag: b
Requires g_tyranny: No
Minimum required version: 0.2.0
!unfreeze
Unfreezes the client in slot number SLOT or with name containing NAME. If no parameter is provided it unfreezes all players.
Syntax: !unfreeze [NAME|SLOT]
Permission Flag: F
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!unpause
Unpauses the match.
Syntax: !unpause
Permission Flag: Z
Requires g_tyranny: No
Minimum required version: 0.2.0
!unmute
Unmutes the player in slot number SLOT or with name containing NAME.
Syntax: !unmute (NAME|SLOT)
Permission Flag: m
Requires g_tyranny: No
Minimum required version: 0.2.0
!unlock
Unlocks the team specified. Recognized values are r=AXIS b=ALLIES s=SPECTATORS all=ALL.
Syntax: !unlock (r|b|s|all)
Permission Flag: K
Requires g_tyranny: No
Minimum required version: 0.2.0
!uptime
Show how long the server has been up and running.
Syntax: !uptime
Permission Flag: u
Requires g_tyranny: No
Minimum required version: 0.2.0
!throw
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !throw (NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!fling
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !fling (NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!launch
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !launch(NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!throwa
Sends all players flying.
Syntax: !throwa
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!flinga
Sends all players flying.
Syntax: !flinga
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!launcha
Sends all players flying.
Syntax: !launcha
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!warn
Plays the whistle sound and center-prints WARNING to the player in slot number SLOT or with name containing NAME.
Syntax: !warn (NAME|SLOT) [WARNING]
Permission Flag: R
Requires g_tyranny: No
Minimum required version: 0.2.0
User Database
User database is intended to store information of all the players that connect to the server. To enable user database g_dbDirectory must be set. The database stores information to identify different players and also XP data, rating data, overall stats data and shrubbot admin data. PunkBuster GUIDs are used to identify single players. If a player joining the server doesn't have a PB GUID, data about that player can not be saved. However, the user database can still be used to store data of those players who have enabled punkbuster on the client side.
Shrubbot includes functionality for server admins to handle database userdata. All commands that handle users in the database will take the last 8 characters of the player PunkBuster GUID to identify the player to edit. This is not an unique identification but because EvenBalance has seen this to have enough uniqueness, it is good for the use of the database commands. Internally, the full GUID is used to identify the players.
User Database Commands
!userlist
Lists all users in the database. If PAGE is given, the list starts from that page. If PAGE is not given the first page of the database is printed. The command prints all users, including clients that have connected during the level time and are not yet in the database. The connected clients are always printed first and then the rest of the userbase.
The printed rows have the following columns:
- '#' ; This is the serial number of the user in the printout. The number doesn't correspond to anything in the database.
- 'PBGUID' ; This is the 8 character PB GUID of the user. This is used to identify different users in the database.
- 'Last Seen' ; This tells how long time ago the user was last seen on the server. For connected clients, this will print "connected".
- 'IP' ; This tells the last IP address user has had on the server.
- 'Ban' ; This is the ban number if the player is banned from the server. If the player is whitelisted from IP bans, this column reads white capital W.
- 'Name' ; This tells the last name with user has been saved on the server.
With userlist command an admin can list all the users saved in the database and those that are connected page by page. Optional page number can be given to the command to tell which page is to be displayed about the users. One page can have up to 20 players printed.
Syntax: !userlist [PAGE]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.4.0 - New column 'Ban' is added to the output.
!userinfo
Displays all information that is stored about the user in the database.
This information includes:
- identity information (name, IP, PunkBuster GUID, Client Identification)
- admin level
- personal greeting
- personal greeting sound
- personal shrubbot flags
- saved XP per skill
- rating values
- total kills and deaths with SMG weapons
- the ban number of the player or whitelisting
Command requires the last 8 characters of the player PB GUID. This GUID can be found with !userlist or !usersearch commands. This command works for both online and offline players.
Syntax: !userinfo [PBGUID]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.4.0 - Information of possible ban and whitelisting is added.
!useredit
Command is used to edit explicit userdata in the database. The command format is:
!useredit [PBGUID] [add|remove|level|greeting|sound] [new value]
The command parameters in detail:
- PBGUID - This is the 8 character PunkBuster GUID of the player. This is needed to identify the player to edit.
- add - If the command is given this parameter, the value(s) in the [new value] field will be added to the player's personal flags.
- remove - If the command is given this parameter, the value(s) in the [new value] field will be removed from the player's personal flags.
- level - If the command is given this parameter, the value in the [new value] field will be set as the players new level. The level may not be higher then the level of the player executing the command.
- greeting - If the command is given this parameter, the value in the [new value] field will be the players new personal greeting. If the [new value] field is empty, the personal greeting is cleared.
- sound - If the command is given this parameter, the value in the [new value] field will be the file path to the players new personal greeting sound. If the [new value] field is empty, the personal greeting sound is cleared.
- new value - This field is used to give values to the command.
If the optional new value field is not set with greeting or sound parameter, the value will be set to empty and level values will be used again with these players.
This command works with online and offline players.
Syntax: !useredit [PBGUID] [add|remove|level|greeting|sound] [new value]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
!givexp
Command gives the online or offline player identified by PBGUID a defined amount of XP points to the selected skill.
Syntax: !givexp [PBGUID] [sold|med|eng|fops|cov|light|battle] [amount to add]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
!userban
Command bans user indentified by the 8 character PB GUID from the server. The data required for ban is taken from the database and the banned user does not need to be online when the command is given. Bot's cannot be banned with this command. Note that the bans are written in the human readable config file and you can still write the bans by hand if desired. Also, removing of the bans can be done by hand if desired.
Syntax: !userban [PBGUID] [time] [reason]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
!userdelete
Command removes the user identified by the 8 character PB GUID from the database. The actual actions are taken at the level end if needed. However, once the !userdelete command has been issued to the user, the information of the user is no longer available and after the shutdown game, it is permanently lost.
If the removed player is connected to the server while removing, a new entry is written to that player.
Syntax: !userdelete [PBGUID]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
!usersearch
With this command an admin can search the database for players with specific parameters. Arguments to the command can be pattern in the name, user admin system level and the beginning of the IP address. Additional page number can be given when the amount of found results exceed what can be shown in one page. All the arguments can be given in one command in any order. Any one of the arguments can be omitted, but each time when command is given at least one argument on top of the optional page number must be given. This command searches stored information only from the database. Connected players are not included unless they are already stored into the database.
This command can be performance intensive and it is not recommended to use it only for maintenance operations. The command will internally always try to optimise itself. If the command is given repeatedly with same arguments but only changing the page number, new searches are not performed but only different pages of the already found results are displayed. The optimisations include that the silEnT will try to use the already found results as the basis for the new search (e.g. "!usersearch name gao" followed by "!usersearch name gaoe" will first search the whole db to find all users with the pattern gao in their names and the follow up search will refine the already found results for gaoe). The maximum amount of results one search can return is 256 users. Users are displayed in the console in pages with 20 users on each page.
Syntax: !usersearch [name (name)]|&[level (level)]|&[IP (IP)] [page]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
!readadmins
With this command an admin can read admin definitions from a specific admins.cfg file. The file must be placed in the directory pointed by g_dbDirectory server cvar. The file may have only admin definition blocks. Admin definitions use always the following syntax. The syntax is exactly the same used by the ETPub.
[admin]
name = name of the admin (can be left empty)
guid = full 32 character PB GUID (this field is used to identify players in the database)
level = level number
flags = personal admin flags (can be left empty)
greeting = personal greeting (can be left empty)
greeting_sound = path to personal greeting sound (can be left empty)
If the database doesn't yet have the player, it will be added there. Those players will have the last seen field reading NEVER with !userlist and !usersearch command outputs. If the player already exists in the database, the admin values will be overwritten with the ones in read from the admins.cfg file.
Syntax: !readadmins
Permission Flag: )
Requires g_tyranny: No
Minimum required version: 0.3.0
!resetpls
With this command an admin can reset all stored statistics from an online or an offline player. The stored statistics include total SMG kills and deaths, the player K/D rating and PRW rating.
Syntax: !resetpls [PBGUID]
Permission Flag: (
Requires g_tyranny: No
Minimum required version: 0.3.0