Shrubbot and User Database

From Fearless Assassins Wiki

What Is Shrubbot

Shrubbot is an invention of Ryan Mannion. Shrubbot is an admin system that identifies the admin leveled players from silEnT and PunkBuster GUIDs without the need for passwords. Shrubbot is also very flexible and allows creating many different admin levels with entirely different command sets. 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 directory defined by the g_dbDirectory setting. In case shrubbot command like !ban is used against a player and a 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

!aliases

Prints out player's stored aliases. Aliases are printed in the last seen first order.If there are more stored aliases than fit on one page, optional page parameter can be used to access different pages. The number of stored aliases depends of the g_dbMaxAliases cvar.

Syntax: !alises [NAME|SLOT]

Permission Flag: e

Requires g_tyranny: No

Minimum required version: 0.6.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

!country

Displays the country of the player. This command works only if GeoIP is enabled on server g_countryFlags

Syntax: !country

Permission Flag: i

Requires g_tyranny: No

Minimum required version: 0.8.0


!crazygravity

Enables random g_gravity changes with 30 second interval. If enabled, the crazy gravity is automatically disabled at map end.

Syntax: !crazygravity (ON|OFF)

Permission Flag: C

Requires g_tyranny: No

Minimum required version: 0.6.2

!crazyspeed

Enables random g_speed changes with 30 second interval. If enabled, the crazy speed is automatically disabled at map end.

Syntax: !crazyspeed (ON|OFF)

Permission Flag: C

Requires g_tyranny: No

Minimum required version: 0.6.2

!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

!levinfo

Lists all the details of the specific admin level. The listed information includes The name of the level, the greeting, the greeting sound path and the privilege flags for the level.

Syntax: !levinfo (Admin Level)

Permission Flag: s

Requires g_tyranny: No

Minimum required version: 0.5.2

!levlist

Lists all the admin levels loaded from the shrubbot.cfg.

Syntax: !levlist

Permission Flag: s

Requires g_tyranny: No

Minimum required version: 0.5.2

!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 the game will go to the intermission.

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.
  • 0.5.1 The g_mapVoteFlags flag 16 was removed and the game will always go to the intermission with map voting game type. If old behaviour is needed, admin can create custom command executing "vstr nextmap".

!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

!rmsubnetban

Removes subnet ban. The given subnet ban number can be found using !subnets command.

Syntax: !rmsubnetban [ban number]

Permission Flag: .

Requires g_tyranny: No

Minimum required version: 0.4.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

!subnets

This command displays all the issued subnet bans.

Syntax: !subnets (start at)

Permission Flag: B

Requires g_tyranny: No

Minimum required version: 0.4.0

!subnetban

With this command admin can issue subnet ban. Subnet ban is a ban where the connecting player IP is matched against a larger IP range. The command accepts only subnets between range x.* - x.x.x.*. If the admin attempts to issue subnet ban that would ban himself the command refuses to add the subnet. This can be circumvented using rcon commands. If admin wants to add a subnet that would ban himself he must first whitelist himself with !userwl command. If silEnT can confirm the admin can connect the subnet ban is added. The command accepts full IP as it's parameter in which case the subnet is created to the x.x.x.* address. To remove subnet bans admin can use the !rmsubnetban command. The syntax with this commnd is the same kind with ban and userban commandand reason andtime can be given. The reason should be given so that any player connecting would know the reason for not being able to connect.

Syntax: !subnetban [subnet] (time) (reason)

Permission Flag: .

Require g_tyranny: No

Minimum required version: 0.4.0

Changelog:

0.6.2 - Octets can be cut from inside with 'x'. For example, "!subnetban 12x" will ban all IP addresses matching 12x.xxx.xxx.xxx.

!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

!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

!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

!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 & Commands

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. silEnT GUIDs are used to identify single players.

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 silEnT GUID to identify the player to edit. Internally, the full GUID is used to identify the players. Some commands have equivalent versions using last 8 characters of PunkBuster GUIDs to identify the player. These are needed for players who were stored into the database before the silEnT GUID was added and haven't connected to the server since.

!aliasesdel

Command removes all the aliases from the player identified by the 8 character silEnT ID.

Syntax: !aliasesdel [silEnT ID]

Permission Flag: [

Requires g_tyranny: No

Minimum required version: 0.6.0

!aliassearch

This command searches the whole aliases database for the pattern in the names. Note, this command is the most resource intensive shrubbot command of all commands, and it is not recommended to be used without a reason. How fast it performs in practice depends of the aliases database size.

For each player the following information is shown:

  • identity information (silEnT ID)
  • each used alias that fits the search pattern
  • for each alias when it was first seen
  • for each alias when it was last seen
  • for each alias the total playtime with it

To see all the aliases of the found player, you can use "!userinfo aliases" command. In the case of all the data not fitting in one page, you can give an optional start parameter. The start parameter corresponds to the numbers shown in the first column of the results. So that each player has its own number and under that number, all the matching aliases from that player are printed.

Syntax: !aliassearch [name] [start]

Permission Flag: ]

Requires g_tyranny: No

Minimum required version: 0.6.0

!confirm

Confirms the player identity with a protected admin level. As a result, the confirmed player and the server will transfer authentication information allowing the player to use admin commands from thereafter. Unconfirmed players are players with admin level that is protected but the server can not ensure the identity. This usually happens when players admin level changes with offlinecommands or the protected levels are extended. This command does not give the player admin levels, it only confirms the identity of a player whos admin level is already set. Also, if the player loses his admin level identification, this command can not be used to reinstate it.

This command is safe to be given even to the lower levels of admins.

Syntax: !confirm [SLOT]

Permission Flag: :

Requires g_tyranny: No

Minimum required version: 0.5.0

!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.
  • 'silEnT ID' ; This is the 8 character silEnT GUID of the player. This is used to identify different players 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.
  • 0.5.0 - New column 'silEnT ID' 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, 8 character PunkBuster GUID, silEnT ID, 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
  • list of stored aliases if the aliases database is enabled on the server

Command can optionally print player's stored aliases if the optional aliases parameter is given and the aliases database is enabled by setting g_dbMaxAliases to a positive integer. If printed aliases don't fit in one page, optional page parameter can be used to access different pages.

Command requires the last 8 characters of the player silEnT GUID. This GUID can be found with !userlist or !usersearch commands. This command works for both online and offline players.

Syntax: !userinfo [silEnT ID] [aliases [page]]

Permission Flag: ]

Requires g_tyranny: No

Minimum required version: 0.2.0

Changelog:

0.4.0 - Information of possible ban and whitelisting is added.
0.5.0 - silEnT ID is added.
0.6.0 - Aliases option is added.

!useredit

Command is used to edit explicit userdata in the database. The command format is:

!useredit [silEnT ID] [add|remove|level|greeting|sound] [new value]

The command parameters in detail:

  • silEnT ID - This is the last 8 characters of the silEnT 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 [silEnT ID] [add|remove|level|greeting|sound] [new value]

Permission Flag: [

Requires g_tyranny: No

Minimum required version: 0.2.0

Changelog:

  • 0.5.0 - The command now uses the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !usereditpb.

!givexp

Command gives the online or offline player identified by PBGUID a defined amount of XP points to the selected skill. The possible skills are:

sold Soldier or Heavy Weapons

med Medics or First Aid

eng Engineering or Explosives and Construction

fops Field Ops or Signals

cov Covert Ops or Military Intelligence and Scoped Weapons

light Light Weapons

battle Battle Sense

Syntax: !givexp [silEnT ID] [sold|med|eng|fops|cov|light|battle] [amount to add]

Permission Flag: [

Requires g_tyranny: No

Minimum required version: 0.2.0

Changelog:

  • 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !givexppb.

!userban

Command bans user indentified by the 8 character silEnT 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 [silEnT ID] [time] [reason]

Permission Flag: ]

Requires g_tyranny: No

Minimum required version: 0.2.0

Changelog:

  • 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !userbanpb.

!userwl

With this command admin can whitelist or remove whitelisting from any player. Whitelisting means that the player IP is not checked against any IP bans. Including subnet bans and individual bans.

Syntax: !userwl [silEnT GUID] [add|remove]

Permission Flag: .

Requires g_tyranny: No

Minimum required version: 0.4.0

!userdelete

Command removes the user identified by the 8 character silEnT 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 [silEnT ID]

Permission Flag: [

Requires g_tyranny: No

Minimum required version: 0.2.0

Changelog:

  • 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !userdeletepb.

!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

!updatepbguid

Updates the PB GUID that is stored in the database to the one which the player is currently using. With the exception that empty, invalid or dublicated PB GUIDs are not saved to the database.

Syntax: !updatepbguid [Name|Slot]

Permission Flag: ,

Requires g_tyranny: No

Minimum required version: 0.5.2

!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)
sguid = full 32 character silEnT GUID (this field is used to identify players in the database)
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

Change Log:

  • Starting from silEnT 0.5.0, the field sguid was added to the admin blocks. This allows adding admins using the silEnT GUIDs to identify them.

Example::


[admin]
name = ETPlayer
sguid = 12345678912345678912345678912345
guid = 98765432198765432198765432198765
level = 5
flags =
greeting =
greeting_sound =

[admin]
name =
sguid = 98765432198765432198765432198765
guid = 12345678912345678912345678912345
level = 3
flags = AbC
greeting =
greeting_sound =

!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 [silEnT ID]

Permission Flag: (

Requires g_tyranny: No

Minimum required version: 0.3.0

Changelog:

  • 0.5.0 - the command was changed to use silEnT ID instead of the last 8 characters of the PB GUID. There is no backward compatible command for PB GUIDs.

List of Permission Flags

Flags to privileges

1 - Cannot be vote kicked, vote muted, or complained against.
2 - Cannot be censored.
3 - Can run shrubbot commands silently by adding '/' character in front of the command.
4 - Can see Axis/Allies team chats as a spectator.
5 - Can switch teams any time, regardless of balance.
6 - Does not need to specify a reason for !mute, !kick or !ban.
7 - Can call a vote at any time (regardless of disabled voting or voting limitations).
8 - Does not need to specify a duration for a ban (defaults to PERMANENT).
9 - Can do shrubbot commands via team and fireteam chats.
0 - Is immune to g_inactivity and g_spectatorInactivity settings.
! - Is immune to all shrubbot commands (useful for server admins). Note, this flag must be specified explicitly the * flag does not grant it.
@ - "incognito" flag shows the admin as level 0 with no a.k.a info in the output of !listplayers. Note, this flag must be specified explicitly the * flag does not grant it.
$ - Can do !admintest on other players.
~ - Can read and write the adminchat with the /ma command. All referees and all other players with the ~ flag will be able to read this chat.
& - Can rename himself regardless of g_maxNameChanges limit.
? - Can see all private messages while being in spectators. g_tyranny must be set for this flag to take effect.
/ - Cannot send private messages. Otherwise normal privileges.
# - Cannot call votes.
: - Can confirm admin identity.

Flags to commands

A - !slap
a - !admintest
B - !showbans, !subnets
b - !ban, !unban
C - !crazygravity, !crazyspeed
c - !cancelvote
d - !disorient, !orient
E - !spree, !spreerecord, !tspree
e - !baninfo, !finger, !aliases
F - !freeze, !unfreeze
G - !readconfig
g - !gib
I - !howfair, !listteams
i - !list
K - !lock, !unlock
k - !kick
L - !flinga, !launcha, !throwa
l - !fling, !launch, !throw
M - !resetmyxp
m - !mute, !unmute
N - !rename
n - !nextmap
P - !spec999
p - !putteam
R - !warn, !dewarn
r - !reset, !restart
S - !shuffle
s - !setlevel, !levlist, !levinfo
t - !stats
U - !burn
u - !uptime
Q - !giba
q - !panzerwar, !riflewar, !sniperwar
V - !passvote
W - !news
w - !swap
X - !resetxp
x - !lol
Z - !pause, !unpause
z - !pip, !pop
] - !userlist, !userinfo, !userban, !usersearch, !aliassearch
[ - !useredit, !givexp, !userdelete, !aliasesdel
) - !readadmins
( - !resetpls
. - !userwl, !rmsubnetban, !subnetban
, - !updatepbguid

Shrubbot Files

To use shrubbot the g_dbDirectory must be set. All the shrubbot files are placed into that directory.

shrubbot.cfg

Shrubbot.cfg is the file that holds all the level definitions, custom commands, bans, warns and subnetbans for the server shrubbot. These configuration settings are hand editable. If the shrubbot.cfg file does not exists when !ban or!setlevel is used, a new one with default settings is created. The settings in the shrubbot.cfg are divided into following data blocks.


[level]

level = The level number.

name = The nameof the level used in e.g. !list command.

flags = The permission flags for the level.

greeting = The greetingtext that is displayed to every player joining the server with this level.

greeting_sound = The greeting sound played for every playerjoining the server with this level.


[command]

command = The name of the command.

exec = The executed command. These must be commands available to /rcon and these will be executed with rcon privileges.

desc = The help description of the cmmand.

syntax = List of parameters if the command uses them. This is used with !help and it is optional.

levels = Space separated list of levels this command is allowed.


  • The exec field in the command block can use all the shortcuts that silEnT support. The shortcut is substituted as the command would have been a say from the player who issued the command. In addition to normal shortcuts, it is possible to use [i] which is replaced with the client number of the player who did the command.
  • The exec field in the command block can additionally use parameter placeholders. These are [1] - [9] where the number is the n:th parameter given to the custom command. When these are used, the server will substitute the placeholder with the n:th parameter given to the command.
  • Starting from silEnT 0.2.1, it is possible to add '?' to the parameter placeholders. This will make the server substitute the given string to a player name if only one player matches the string. For example:


   [command]
   command  = crybaby
   exec     = playsound path/to/sound.wav; chat ^7[1?]^7 is crying like a little baby!
   desc     = Make someone cry like a baby
   syntax   = [name]
   levels   = 0 1 2 3 4 5


[ban]

name = The name of the banned player.

guid = The PunkBuster GUID of the banned player.

sguid = The silEnT GUID if the banned player.

ip = The IP address of the banned player.

reason = The reason for the ban.

made = The time and date when the ban was issued.

expires = When the ban will expire.

banner = The name of the admin who banned the player.

ident = The silEnT ident if available.


[subnetban]

subnet = The subnet of the ban.

reason = The reason for the ban.

made = The time and date when the subnet ban was created.

expires = When the ban will expire.

banner = The name of the admin who created the ban.


[warning]

name = The name of the warned player.

guid = The silEnT GUID of the warned player.

ip = The IP addressof the warned player.

warning = The reason of the warning.

made = The time when the warning was made.

warner = The name of the player who warned.


[customvote]

name = The of the vote shown with the /callvote command. Maximum length 15 characters.

exec = Command string to execute if the vote passes. Maximum length 1023 characters.

description = Description of the vote shown with the /callvote command. Maximum length 1023 characters.

votetext = The text that is show for voters. Maximum length 255 characters.

passtext = Optionally, a text that is shown to players if the vote passes.

levels = Optionally, admins can define the vote to be available to only specific levels. Same format that is used with the custom commands.

userdb.db

This is a file where the silEnT stores information of the players. This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.

If silEnT finds this file to be corrupted or unusable, it will not overwrite it. It will only refuse to initialize the shrubbot and therefore you must look at the logs if you encounter any problems with shrubbot. The error messages in the log are usually very descriptive.

userxdb.db

This is a file where silEnT stores less often needed information about the players. Such as personalized greetings. This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.

If silEnT finds this file to be corrupted or unusable, it will not overwrite it. It will only refuse to initialize the shrubbot and therefore you must look at the logs if you encounter any problems with shrubbot. The error messages in the log are usually very descriptive.

useradb.db

Starting from silEnT 0.6.0, this file holds the optional aliases database. To enable the database, g_dbMaxAliases cvar must be set to a positive integer. The aliases database can be disabled by setting g_dbMaxAliases to 0 at any time and then re-enabled by setting the value back to a positive integer without any effect to the file. However, if the g_dbMaxAliases cvar is set to a smaller value than it was before, the aliases that exceed the threshold will be lost and cannot be recovered.

This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.

If silEnT finds this file to be corrupted or unusable, it will not overwrite it. The error messages in the log are usually very descriptive about the errors.

Shrubbot Limitations

Maximum number of levels: 31

Maximum length of shrubbot level name: 35 (includes color codes)

Maximum number of players in the database: Unlimited

Maximum number of player bans: 1023

Maximum number of subnet bans: 128 (512 since 0.9.0)

Maximum length of ban reason: 1023

Maximum number of admin-defined commands: 63

Maximum admin-defined command name length: 63 characters

Maximum admin-defined command length (executable part): 1023 characters

Maximum admin-defined command length (help string): 1023 characters

Maximum number of warnings: 1023

Shortcuts

Server supports the replacement of the following keys in say messages

[a] last player who gave you ammo

[d] last player who killed you

[g] the last 8 characters of your GUID

[h] last player who gave you health

[k] last player you killed

[l] your location (letter,number)

[n] your name

[r] last player who revived you

[p] last player you looked at

[s] health remaining

[w] name of current weapon

[t] ammo for current weapon

Sample shrubbot config


// silEnT mod - Sample Shrubbot.cfg file

[level]
level	 = 0
name	 = Prole
flags	 = iBaPzI
greeting = 
greeting_sound = 

[level]
level	 = 1
name	 = Level 1
flags	 = iBaPzIW1
greeting = Level 1 [n] ^7just connected
greeting_sound = 

[level]
level	 = 2
name	 = Level2
flags	 = iBaPzIW1mx
greeting = Level 2 [n] ^7just connected
greeting_sound = 

[level]
level	 = 3
name	 = Level 3
flags	 = iBaPzIW1mxpZSAURKrwlLdX259
greeting = Level 3 [n] ^7just connected
greeting_sound = 

[level]
level	 = 4
name	 = Level 4
flags	 = iBaPzIW1mxpZSAURKrwlLdX259kbcVNn34678
greeting = Level 4 [n] ^7just connected
greeting_sound = 

[level]
level	 = 5
name	 = Level 5
flags	 = *
greeting = Level 5 [n] ^7just connected
greeting_sound =