New Extension! Click below to enforce BF4 loadouts on-spawn!
Admin Toolset with a plethora of features, ~100 available in-game commands, and many customization options. AdKats focuses on making in-game admins more efficient and accurate at their jobs, with flexibility for almost any setup. Includes a cross-server ban enforcer with advanced enforcement features, metabans support, global admin management, cross-server player messaging, and the BFAdminCP 2.0+ for web-based control has been released. Designed for groups with high-traffic servers and many admins, but will function just as well for small servers.
AdKats was inspired by the gaming community A Different Kind (=ADK=)
Visit ADKGamers.com to say thanks!
Development by Daniel J. Gradinjan (ColColonCleaner)
If you find any bugs, please submit them HERE and they will be fixed ASAP.
A MySQL database accessible from your Procon layer is required. AdKats checks the database for needed tables on
connect.
Getting a Database:
This plugin requires a MySQL database, and XpKiller's Stat logger plugin to operate. If you do not have an existing
database and/or a Procon layer we suggest using Branzone's hosting services. Our group has been with them across
BF3, BF4, and Hardline with no issues.
Web/Database Hosting:
Branzone MySQL Databases
Procon Layer Hosting:
Branzone Procon Layers
AdKats will only run if one of this plugin is (1) using the same database AdKats uses, and (2) running on every battlefield Server you plan to install AdKats on. Running it along-side AdKats on each Procon layer is advised, and will ensure these conditions are met.
The latest universal version of XpKiller's Stat Logger can be downloaded from here: Procon Chat, GUID, Stats and Mapstats Logger
The BF3 only version of stat logger CAN be used with AdKats if you don't want to lose your old data, but is not advised.
AdKats uses web statistics and requests to manage players types, hack detection, user lists, and updates. The list of domains/sub-domains AdKats must be able to access for proper function are documented below in the "Web Requests" section. Whitelist these domains in your layer firewall if they cannot be accessed.
If you have any problems installing AdKats please let me know on the MyRCON forums or on Github as an issue and I'll respond promptly.
AdKats hands out powers based on roles you configure, these are completely separate from the setup you've done for Procon and are not affected by that system in any way. These users are distributed to all AdKats instances you run through your database. On first run of the plugin you will need to add a user before you can access a majority of the in-game commands. You can have as many users as you want. When a user is added you need to assign them a role. The default role is "Default Guest" and the allowed commands for that role are shown to you in the role section. The default guest role cannot be deleted but can be edited to allow any non-admin commands. You can add more roles by typing a new role name in the "add role" field. Any newly added roles default to allow all commands so you will need to edit the allowed commands for new roles. When you change a user's role and they are currently in-game they will be told that their role has changed, and what it was changed to.
Once a user is added you need to assign their soldiers. If you add a user with the same name as their soldier(s) their soldier(s) will be added automatically if they are already in the database. Users can have multiple soldiers so if your admins have multiple accounts you can assign all of those soldiers under their user. Soldiers need to be in your database before they can be added to a user, so make sure they have been in the server with AdKats/Stat Logger running before you try to add them to a user. This system tracks user's soldiers so if they change their soldier names they will still have powers without needing to contact admins about the name change. Type a soldier's name in the "new soldier" field to add that soldier to a user. It will error out if it cannot find the soldier in the database. To add soldiers to the database quickly after installing stat logger for the first time, have them join any server you are running this version of AdKats on and their information will be immediately added.
The user list is sorted by role power level and then by user name. Power level is a metric for how much a role has access to. For any setting item that says "Delete?" you need to type the word delete in the line and press enter, this avoids accidental deletion of users/roles.
All commands, their usage, who used them, who they were targeted on, why, when they were used, and where from, are logged in the database. All plugin actions are additionally stored in Procon's event log for review without connecting to the database. Player name/IP changes are logged and the records connected to their player ID, so tracking players is easier.
Infraction Tracking commands take the load off admins remembering which players have broken server rules and how many times. These commands have been dubbed "punish" and "forgive". Each time a player is punished a log is made in the database; The more punishes they get, the more severe the action gets. Available punishments include: kill, kick, temp-ban 60 minutes, temp-ban 2 hours, temp-ban 1 day, temp-ban 2 days, temp-ban 3 days, temp temp-ban 1 week, temp-ban 2 weeks, temp-ban 1 month, and permaban. The order and severity of punishments can be configured to your needs.
Detailed Stuff: After a player is punished, their total infraction points are calculated using this very basic formula: (Punishment Points - Forgiveness Points) = Total Points Then an action is decided using Total Points from the punishment hierarchy. Punishments should get harsher as the player gets more points. A player cannot be punished more than once every 20 seconds; this prevents multiple admins from accidentally punishing a player multiple times for the same infraction.
The punish and forgive commands in AdKats are admin use only. If you would like to integrate a teamkill punish/forgive system with the AdKats punish system, use the Team Kill Tracker Plugin and enable the AdKats integration settings.
When a player is punished and has already been punished in the past 10 minutes the new punish counts for 2 infraction points instead of 1 since the player is immediately breaking server rules again. A punish worth 2 points is called an "IRO" punish by the plugin, standing for Immediate Repeat Offence. "[IRO]" will be appended to the punish reason when this type of punish is activated.
The punishment hierarchy is configurable to suit your needs, but the default is below.
Total Points | Punishment Outcome | Hierarchy String |
1 | Warn | warn |
2 | Kill | kill |
3 | Kick | kick |
4 | Temp-Ban 1 hour | tban60 |
5 | Temp-Ban 2 hours | tban120 |
6 | Temp-Ban 1 Day | tbanday |
7 | Temp-Ban 2 Days | tbanday |
8 | Temp-Ban 3 Days | tbanday |
9 | Temp-Ban 1 Week | tbanweek |
10 | Temp-Ban 2 Weeks | tban2weeks |
11 | Temp-Ban 1 Month | tbanmonth |
12 | Perma-Ban | ban |
Greater Than 12 | Perma-Ban | ban |
Players may also be 'forgiven', which will reduce their infraction points by 1 each time, this is useful if you have a website where players can apologize for their actions in-game. Players cannot be forgiven into negative infraction point values.
Since you can run multiple servers with this plugin on the same database, if you want punishments to increase on the current server when infractions are committed on others (or vice-versa) enable "Combine Server Punishments". Punishments from another server won't cause increase in infractions on the current server if "Combine Server Punishments" is disabled. This is available since many groups run different rule sets on each server they own, so players breaking rules on one may not know rules on another, so they get a clean slate.
Players can optionally be automatically forgiven infraction points after a specified duration of clean play and positive reputation. Settings are available to specify the minimum day count since last forgiven and last punished before an auto-forgive will be issued. The reputation command can be used by players to find out when their next auto-forgive will happen if the auto-forgive system is enabled. Minimum of 7 days for each auto-forgive duration, with suggested/default values of 14 and 30 days for forgive and punish durations respectively.
Suggestions: When deciding to use the infraction system, 'punish' should be the only command used for player rule-breaking. Other commands like kill, or kick are not counted toward infractions since sometimes players ask to be killed, admins kill/kick themselves, or players get kicked for AFKing. Kill and kick should only be used for server management. Direct temp-ban and ban are of course still available for hacking/glitching situations, but that is the ONLY time they should be used.
Reputation is a numeric for how helpful a player is to the server. The more they help admins by reporting rule breakers, moreso from spectator, assisting the weak team, or populating the server, the more their reputation increases. Committing infractions, breaking server rules, getting banned, etc, reduces their server reputation.
Reputation starts at zero and moves toward -1000 or 1000 so it's easy to get/lose rep early on but harder near the top/bottom. Players will never reach -1000 or 1000 reputation, but can get close with a lot of effort. Each command a player issues and every command issued against them has a reputation amount; Some good, some bad. Every time a player's reputation changes you are notified of the change in chat.
The following are ways reputation can be gained:
If a player has infractions on their record that causes a reputation reduction, but the reduction infraction points cause reduces over time. So if they have infractions on their record, simply not committing them for a while reduces the rep loss caused. It does not reduce completely however, they will need to report some rule breakers to get it positive again.
AdKats can enforce bans across all of your servers. The Ban Enforcer will import and consolidate bans from every Procon instance you run. Bans can be made by name, GUID, IP, any combination, or all at once. The default ban is by EA GUID only; this default can be edited but doing so is not recommended. Banned players are told how long their ban will last, and when a banned player attempts to re-join they are told the remaining time on their ban. Using ban enforcer also gives access to the unban and future-permaban commands.
The Enforcer works with existing auto-admins and any bans added manually through Procon will be automatically imported. A mini ban management section is added to the plugin settings when you enable this, however, for full fledged ban management it helps to run the BFAdminCP by Prophet731. Ban enforcer's options are simply too much for the plugin setting interface to house properly. Use of the ban enforcer is optional because of this slight dependency, and is disabled by default.
Ban Enforcer can be enabled with the "Use Ban Enforcer" setting. On enable it will import all bans from your ban list, then clear it. Once you enable the enforcer you will be unable to manage any bans from Procon's banlist tab. Disabling ban enforcer will repopulate Procon's banlist with the imported bans, but you will lose any additional information ban enforcer gathered about the banned players.
Reasoning behind creation, for those interested: We had tried many other ban management systems and they all appeared to have some significant downfalls. Developing this allowed for some nice features not previously available.
When a player puts in a proper @report or @admin all in-game admins are notified. Reports are logged in the database with full player names for reporter/target and the full reason for reporting. Uses of @report and @admin with this plugin require players to enter a reason, and will tell them if they haven't entered one. It will not send the report to admins unless reports are complete, cleaning up what admins end up seeing for reports.
Reports and calls are issued a random three digit ID which expires either at the end of each round, or when it is used. These ID's can be used in any other action command, simply use that ID instead of a player-name and reason (e.g. waffleman73 baserapes, another player reports them and gets report ID 582, admins just use @punish 582 instead of @punish waffleman73 baserape). Confirmation of command with @yes is required before a report ID is acted on. Players are thanked for reporting when an admin uses their report ID. Other online admins are informed when an admin acts on a report by ID, either with action, deny, or accept.
When email usage is enabled, all admins with emails defined will get an email containing the report information.
Automatic Punkbuster screenshots are triggered on reported players.
We utilized this system on our no explosives server with great success, mainly catching things autoadmin cannot. Basically this system automatically tracks who the trusted players in your servers are, and who are reliable sources of reports.
The system makes use of the report IDs assigned to each round report. When a player sends a report, and an admin uses the report by ID, the report is logged as confirmed. Once you enable Admin Assistants, AA status is given once the player has X confirmed reports in the past month or 75+ total confirmed reports. A player with AA status is informed of their status on first spawn in the server after joining. If you enable the admin assistant perk, players with AA status are given access to the teamswap and online-admins commands for the duration they maintain AA status. These command perks are basically incentives to report rule-breakers. Whether a player has AA status is calculated when they join the server, and that status will remain for the duration they are in the server. When an admin assistant sends a report, to the admins their name is prefixed with [AA] to note it as a (most likely) reliable report. Likewise if an admin assistant is the target of a report, their name is prefixed with a clan-tag-like code. (e.g. Report [512]: [AA]ColColonCleaner reported [AA]SomeOtherAA for using explosives).
The advanced functionality of this system is now released to the public as testing is complete.
This subsection uses your AAs as a collective human autoadmin.
Players with AA status can conditionally have their reports acted on by the internal autoadmin.
A list of trigger words or phrases of any length can be defined in AdKats settings.
If an AA report reason contains any of those trigger words or phrases then autoadmin will act on their report with a
punish on the target player, using the reason they entered.
This was originally intended for cases when admins are offline and unable to answer reports, but has now been added
for all cases.
If admins are offline, and the report matches criteria, autoadmin will punish the target player after 5 seconds.
If admins are online, a 45 second window is given for the admin to act on the report before automatic handling
fires.
Admins can use any action command just like normal (e.g. @kill ID, @punish ID, etc...), but can also use the new
@accept, @ignore, and @deny commands.
@accept will confirm the report but take no action against the target player.
@ignore is used for bad or invalid reports, the report is removed from the list and no action is taken.
@deny is for malicious reports and abuse of the report system, this command will destroy a reporter's reputation and
hurt their AA status.
Exceptions and Security Measures:
Automatic handling will not be taken if the target of a report is an admin or another AA, a real admin must act on
the report.
Automatic action will also not be taken if the target player has already been acted on in some way in the past 60
seconds.
Basic round statistics can be found through stat logger in the tbl_mapstats table, but these stats only give basic information at round end. AdKats adds a table tbl_extendedroundstats, which shows how matches progress while the round is still going, not just at the end. Every 30 seconds, the current round ID, round duration, team counts, ticket counts, ticket difference rates, team total scores, score rates, and a timestamp are logged in the table. A display of this information (in part) can be seen in the BFAdminCP server stats page. Logging starts at the beginning of each round, it will not start immediately for the current round when AdKats enables.
Players can be muted using the mute command. Muting lasts until the end of the round. Players who talk in chat after being muted will be killed each time they talk (up through X chat messages). On the (X+1)th chat message they are kicked from the server. A player coming back during the same round is kicked again on their first chat message. No action other than kill or kick is used by this system. There will be no way to un-mute players, there was a reason they were muted, and they can talk again next round. Admins cannot mute other admins.
Players can be joined using the join command. Joining either works off of player name or report ID. Issuing the command will place you in the targeted player's squad if there is room available. The command is available to all players, but for the general public will only operate for the same team. If user has TeamSwap or higher access, this will work across teams. If user has admin access, the target squad will be unlocked for their entry. NOTE: For cross-team joining, TeamSwap queues are not used, so if there is no room on the target team you will need to retry the command once room is available.
A list of editable pre-defined messages can be added in settings, then admins can use the message ID instead of typing the whole message in. Example: "@say 2" will send the second pre-defined message.
Use @whatis [preMessageID] to find out what a particular ID links to before using it in commands.
Anywhere a reason or message is needed, a preMessage ID can be used instead.
Example: 4th preMessage is "Baserape. Do not shoot uncap."
"@punish muffinman 4" will punish them for the above reason.
Even more useful is using report IDs with this, for example someone reports muffinman for "baseraping asshat" and
gets report ID 283.
You don't want "baseraping asshat" to be the actual reason entered, so you can just do "@punish 283 4", and he will
get the proper punish message.
TeamSwap is NOT an autobalancer (look up other plugins for that functionality), it is for manual player moving only.
TeamSwap is a server-smart player moving system which offers two major benefits over the default system. Normally when trying to move a player to a full team the command just fails at the server level, now the player is dropped on a queue until a slot opens on that side. They can keep playing on their side until that slot opens, since when it does they are immediately slain and moved over to fill it. Secondly it allows whitelisted (non-admin) players the ability to move themselves between teams as often as they want (within a ticket count window). This is currently not an available option in default battlefield aside from Procon commands since the game limits players to one switch per gaming session. Whitelisted players can type '@moveme' and TeamSwap will queue them. This is meant to be available to players outside the admin list, usually by paid usage to your community or to clan members only. Admins can also use '@moveme', and in their case it bypasses the ticket window restriction. When players are moved by admins, use the moveme command, or use assist, they are locked to that team for the current round. When a player is moved by admin, multibalancer unswitcher is disabled for a few seconds to remove the chance of autobalancer fighting admin moves.
Any ommand which might lead to actions against players are required to have a reason entered, and will cancel if no reason is given. Players (even the most atrocious in some cases) should know what they were acted on for, and it's also a good way to hold admins accountable for their actions. The minimum number of characters for reasons is editable in plugin settings. The editable setting only applies to admin commands, and the default value is 5 characters. Reports and Admin calls are hardcoded to 1 character minimum reason lengths.
Plugin settings are automatically synced to layers every 5 minutes from their particular server IDs. Settings for each plugin instance are stored in the database by server ID. Enter an existing server ID in the setting import field and all settings from that instance will be imported to this instance. Settings on the current instance will be overwritten by the synced settings. Whenever a setting is changed, that change is persisted to the database.
Special player list table "adkats_specialplayers" has been added. In this table, players can be added to any desired group accepted by AdKats. Valid groups can be seen on github, in the adkatsspecialgroups.json file. Players can be added by ID, or by identifier (name, guid, or IP), and can be assigned a game and server to apply them to. If you use player IDs then you wont need to update player names if they change their names, the player names will automatically update when they join the server; This is especially good to use when whitelisting for the hacker-checker. Leave fields blank to indicate wildcard, for example leaving the server column blank for player will mean it applies to all servers of their game. If you specify the server, the group you have them assigned to will only apply for that one server. Each special player list entry now has an effective and expiration date, stored in UTC time.
Orchestration table "adkats_orchestration" has been added. All entries in this table are polled every 5 minutes and sent to the appropriate plugins. Add entries to that table with a given server ID, plugin name, plugin setting name, and setting value. AdKats will send those settings to the target plugins every 5 minutes.
The "Hacker-Checker" (Was uninspired when naming it, sue me.) is a system for automatically catching and acting on players with suspicious or impossible statistics.
The system uses battlelog for player stats, and is able to catch aimbots, damage mods, magic bullet, and other oddities.
The damage per shot each player gets with their weapons is calculated from their battlelog stats, bans being issued if a player attains impossible damage. This section is now completely automated and enabled by default without a means to turn it off, any doubt about bans it issues should be taken with extreme caution as this system when properly configured has not issued a false positive ban in the 2 years it has been active on our servers.
The LIVE mods for this section enable it to detect damage mods from round to round, regardless of overall stats. Players using a damage mod during a round should be banned automatically after round end.
For this check only automatic weapons from specific categories are used in the calculation. This includes Sub Machine Guns, Assault Rifles, Carbines, and Machine Guns. Handguns, snipers, equipment, etc are not included since their HSK values can vary drastically. This limit is simple, if the headshot/kill percentage for any valid weapon is greater than your trigger level, the ban is issued. HSK percentage for even the top competitive players caps at 38%, so we set our value much higher than that. We started with 70% HS/K, and no false positives were found with that value, but lower as desired. The minimum acceptable value we allowed during testing was 50%, and that's where we have it now. 100 kills with the weapon in question are required to trigger this check.
The LIVE mods for this section are not public yet.
Be careful with this one, this is where a lot of legit competitive players reside. This check should only be used to request gameplay video of players to prove their play, then whitelist the player if everything checks out. For this check all weapons aside from melee weapons and equipment are included. This includes Sub Machine Guns, Assault Rifles, Carbines, Machine Guns, Handguns, and Sniper Rifles. This check uses weapon time and total kills, rather simplistic, just kills/total minutes. If that value is greater than your trigger level the ban is issued. After some research and testing the value used on our servers is the default, 5.0. 200 kills with the weapon in question are required to trigger this check.
The LIVE mods for this section are not public yet.
The hacker-checker is able to detect the magic bullet hack and will issue bans accordingly. If any ban it issues is questionable please post about it on MyRCON in the AdKats thread.
The heaviest hacked weapon (the one farthest above normal) is the one displayed in the ban reason using the
following formats:
Damage Mod Bans:
DPS Automatic Ban [WEAPONNAME-DPS-KILLS-HEADSHOTS]
LIVE Damage Mod Bans:
DPS Automatic Ban [LIVE][WEAPONNAME-DPS-KILLS-HEADSHOTS-HITS]
Aimbot Bans:
HSK Automatic Ban [WEAPONNAME-HSK-KILLS-HEADSHOTS]
KPM Bans:
KPM Automatic Ban [WEAPONNAME-KPM-KILLS-HEADSHOTS]
LIVE Magic Bullet:
Magic Bullet [LIVE][7-KILLS-HITS]
AdKats is set up to automatically update itself when stable releases are made, so there is no need to upload newer versions to your layer once you are running it. Once the update is automatically downloaded and patched, all it requires is a Procon reboot to run the updated version. Admins will be informed of available updates when they are published, or if the plugin was able to automatically update, that the Procon instance needs to be rebooted. The automatic update process can be disabled for those who want to manually update, but it is enabled by default.
Ping enforcer allows control of players over a certain average ping, with several key options. A linearly interpolated moving average is used to monitor ping of all players in the server, kicking players after a minimum monitor time is reached, and a minimum number of players are in the server. The system can kick for missing ping, and attempt to manually ping players whose pings are not given by the server.
Players who join the server and are over the limit are warned about it in chat. A player whose ping is normal, but spikes over your limit, is warned about the spike.
Admins are automatically whitelisted, but the entire user list can be optionally whitelisted, or a given subset of role keys. Individual players can be whitelisted with the pwhitelist command.
AFK Manager allows control over players staying in the server without contributing. Kicking AFK players can be done automatically, or via the AFK command. When automatic kick is enabled it will monitor all players in the server, kicking them after the trigger AFK time is reached, but only if the number of players in the server is over a certain amount.
Chat can be optionally ignored, so players just spamming chat without playing can be removed from the server.
Admins are automatically whitelisted, but the entire user list can be optionally whitelisted, or a given subset of role keys. Spectators are immune to AFK kicks.
The internal SpamBot is much akin to that found in other plugins, with a few added bells and whistles. Automatic messages can be set in separate lists for say, yell, and tell options. Each list has its own interval that can be customized, the defaults being 300, 600, and 900 seconds, respectively.
The key difference is that admins and whitelisted players can be blocked from seeing SpamBot messages. This way your admins' chat are not cluttered with messages meant only for promotion or information they already know. Add [whitelistbypass] to the beginning of any spambot message and it will be sent to all players, ignoring this whitelist. Individual players can be whitelisted from seeing messages using the spamwhitelist command.
In cases of low population, commanders can mean the difference between a balanced server and baserape. This manager will not allow players to join as commander until a specified minimum number of players are in the server.
We found a good value to be 40 players on 64p servers.
Surrender is used when one team is much stronger than another, to the point of it becoming nearly impossible for the losing team to move around the map. With this system players can vote to end the round with the current winning team as winner, having the running autobalancer scramble teams for a more balanced game next match.
There are 3 commands used for surrender vote, surrender, votenext, and nosurrender. Access to these three commands, or a subset of them, must be given to your "Guest" role in the role settings section before this system can be used.
Minimum player counts, minimum ticket differences, and minimum ticket difference rates can be added as limits for starting a round surrender. These are important as they prevent players from starting a surrender vote when it's not warranted or necessary.
A timeout can be added to the surrender vote. When enabled and the timeout expires after starting the vote, the vote is canceled and all votes removed.
Sometimes surrender vote is not enough to help the server. This system uses ticket loss/gain rates to automatically trigger either round surrender on the losing team, or auto-nuke on the winning team. This system should not be used on servers that run mixed mode, as different modes will have drastically different ticket rates.
Do not enable this system until you have analyzed the ticket loss/gain rates that consistently happen during baserape on the particular server you wish to enable this on. Using the 'Display Ticket Rates in Procon Chat' setting in section A12 will display the rates in the Procon chat tab for analysis. Once you have the values you can set the windows for winning/losing team ticket rates, activating auto-surrender or auto-nuke.
Other limits like minimum ticket difference and trigger count help make sure the ticket rates it sees are actually from a baserape and not from any other case.
Once a round matches all of the parameters you set, auto-surrender or auto-nuke is triggered. Auto-surrender will cause the round to end, in favor of the current winning team. Auto-nuke will kill every player on the winning team that is currently alive; It will typically issue 1-3 times, making sure all players are dead.
If the connected database goes offline, or becomes over encumbered to the point of being unusable, AdKats will automatically handle that state. If that state is reached, AdKats will temporarily halt all interaction with the database, disable stat logger, and wait for the situation to be rectified. Checks for fixed connection are made every 30 seconds, and once restored stat logger and AdKats connections with the database are re-enabled.
There are currently two ways to interact with AdKats externally. (A third coming soon if possible).
Have your external system add a row to the record table with a new record to be acted on. All information is needed in the row just like the ones sent from AdKats to the database. Review the ones already in your database before attempting this, and ask ColColonCleaner any questions you may have. The only exception is you need to make the 'adkats_read' column for that row = "N", this way AdKats will act on that record. Every 5-10 seconds the plugin checks for new input in the table, and will act on them if found.
Two available MatchCommands have been added, one for issuing commands through AdKats, and the second for fetching admin lists. These can be called by other plugins to integrate their functionality with AdKats and its database.
You can edit the text for each command to suit your needs in plugin settings.
Commands can be accessed with '!', '@', '.', '/!', '/@', '/.', or just '/'.
Any action command given with no parameters (e.g. '!kill') will target the speaker. If admins want to kill, kick, or even ban themselves, simply type the action command without any parameters. Any action command when given a player name (other than moving players) will require a reason.
Command | Default Text | Params | Description |
Confirm Command | yes | None | The in-game command used for confirming other commands when needed. Must be active. Must be accessible under 'Any'. Must use 'yes' as command text. Cannot be denied for any role. |
Cancel Command | no | None | The in-game command used to cancel other commands when needed. Must be active. Must be accessible under 'Any'. Must use 'no' as command text. Cannot be denied for any role |
Kill Player | kill |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for killing players. If the player is dead, they will be killed on spawn. |
Kill Player (Force) | fkill |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
Bypasses all extra functionality of the regular kill command, issuing admin kill on them immediately. |
Kick Player | kick |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for kicking players. |
Temp-Ban Player | tban |
[duration] OR [duration][player][reason] OR [duration][reportID] OR [duration][reportID][reason] |
The in-game command used for temp-banning players. Default time is in minutes, but the number can have a letter after it designating the units. e.g. 2h for 2 hours. Valid suffixes are m, h, d, w, and y. |
Perma-Ban Player | ban |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for perma-banning players. |
Future Perma-Ban Player | fban |
[time] OR [time][player][reason] OR [time][reportID] OR [time][reportID][reason] |
The in-game command used for future-banning players.
Default time is in minutes, but the number can have a letter after it designating the units. e.g. 2h for 2
hours. Valid suffixes are m, h, d, w, and y.
Future ban is the exact opposite of a temp-ban. Enter the time the player has until they are permabanned. This is used for requesting action/videos/etc from players, giving them a time frame to do so. Ban is enforced on-join only, not during gameplay. This command can only be used when ban enforcer is enabled. |
Unban Player | unban |
[player]
OR [player][reason] |
The in-game command used for unbanning players. This command can only be used when ban enforcer is enabled. |
Punish Player | punish |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for punishing players. Will add a Punish record to the database, increasing a player's total points according to your settings, and issue the configured action for that point value. |
Forgive Player | forgive |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for forgiving players. Will add a Forgive record to the database, decreasing a player's total points by 1. |
Warn Player | warn |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for warning players. This will give them a verbal warning across their screen, and log that they were warned. |
Mute Player | mute |
None OR [player][reason] OR [reportID] OR [reportID][reason] |
The in-game command used for muting players. Players will be muted till the end of the round, X kills then kick if they keep talking. Admins cannot be muted. |
Reserved Slot Player | reserved |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to reserved slots for the current server. The setting "Feed Server Reserved Slots" must be enabled to use this command. |
Un-Reserved Slot Player | unreserved | [player] | The in-game command used for removing a player from reserved slots for the current server. The setting "Feed Server Reserved Slots" must be enabled to use this command. |
Spectator Slot Player | spectator |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to spectator list for the current server. The setting "Feed Server Spectator List" must be enabled to use this command. |
Un-Spectator Slot Player | unspectator | [player] | The in-game command used for removing a player from spectator slots for the current server. The setting "Feed Server Spectator List" must be enabled to use this command. |
Ping Whitelist Player | pwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the ping kick whitelist for all servers. |
Un-Ping Whitelist Player | unpwhitelist | [player] | The in-game command used for removing a player from ping kick whitelist for all servers. |
AA Whitelist Player | aawhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the Admin Assistant whitelist for all servers. |
Un-AA Whitelist Player | unaawhitelist | [player] | The in-game command used for removing a player from Admin Assistant whitelist for all servers. |
SpamBot Whitelist Player | spamwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the SpamBot whitelist for all servers. |
Un-SpamBot Whitelist Player | unspamwhitelist | [player] | The in-game command used for removing a player from SpamBot whitelist for all servers. |
MULTIBalancer Whitelist Player | mbwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to MULTIBalancer whitelist for the current server. The setting "Feed MULTIBalancer Whitelist" must be enabled to use this command. |
Un-MULTIBalancer Whitelist Player | unmbwhitelist | [player] | The in-game command used for removing a player from MULTIBalancer whitelist for the current server. "Feed MULTIBalancer Whitelist" must be enabled to use this command. |
MULTIBalancer Disperse Player | disperse |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to MULTIBalancer even dispersion for the current server. The setting "Feed MULTIBalancer Even Dispersion List" must be enabled to use this command. |
Un-MULTIBalancer Disperse Player | undisperse | [player] | The in-game command used for removing a player from MULTIBalancer even dispersion for the current server. "Feed MULTIBalancer Even Dispersion List" must be enabled to use this command. |
Spectator Blacklist Player | specblacklist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the Spectator Blacklist for all servers. Players under this group will not be able to enter the server as a spectator. |
Un-Spectator Blacklist Player | unspecblacklist | [player] | The in-game command used for removing a player from Spectator Blacklist for all servers. |
Report Whitelist Player | rwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the Report Whitelist for all servers. Players under this group cannot be reported. |
Un-Report Blacklist Player | unrwhitelist | [player] | The in-game command used for removing a player from Report Whitelist for all servers. |
Populator Whitelist Player | popwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the Populator Whitelist for all servers. Used when only allowing approved populators to be considered for automatic populator perks. Setting section B27-2. |
Un-Populator Blacklist Player | unpopwhitelist | [player] | The in-game command used for removing a player from Populator Whitelist for all servers. |
TeamKillTracker Whitelist Player | tkwhitelist |
[duration or 'perm'] OR [duration or 'perm'][player] OR [duration or 'perm'][player][reason] |
The in-game command used for adding a player to the TeamKillTracker Whitelist for all servers. "Feed TeamKillTracker Whitelist" must be enabled to use this command. |
Un-TeamKillTracker Blacklist Player | untkwhitelist | [player] | The in-game command used for removing a player from TeamKillTracker Whitelist for all servers. "Feed TeamKillTracker Whitelist" must be enabled to use this command. |
On-Death Move Player | move |
None OR [player] OR [reportID] |
The in-game command used for moving players between teams. Will add players to the "on-death" move list, when they die they will be sent to TeamSwap. If the player is already dead, this command automatically changes to force move. |
Force-Move Player | fmove |
None OR [player] OR [reportID] |
The in-game command used for force-moving players between teams. Will immediately send the given player to TeamSwap. |
Join Player | join |
[player] OR [reportID] |
The in-game command used for joining player's squads. Will immediately send the speaker to the target if possible, within access limitations. |
Pull Player | pull | [player] | Pulls a player to your current squad, killing them in the process. |
Mark Player | mark | [player] | Marks a player for admin notification if they leave the server. |
Lock Player | lock | [player] | Locks a player from admin commands for 10 minutes. Only the locking admin will be able to act on them. |
Unlock Player | unlock | [player] | Allows the locking admin to unlock a currently locked player. |
TeamSwap Self | moveme | None | The in-game command used for moving yourself between teams. Will immediately send the speaker to TeamSwap. |
Report Player | report | [player][reason] | The in-game command used for reporting players. Must have a reason, and will inform a player otherwise when used incorrectly. Will log a Report in the database (External GCP pulls from there for external admin notifications), and notify all in-game admins. Informs the reporter and admins of the report ID, which the punish system can use. |
Call Admin | admin | [player][reason] | The in-game command used for calling admin attention to a player. Same deal as report, but used for a different reason. Informs the reporter and admins of the report ID, which the punish system can use. |
Accept Round Report | accept | [reportID] | The in-game command used for accepting reports as confirmed. |
Deny Round Report | deny | [reportID] | The in-game command used for denying reports. |
Ignore Round Report | ignore | [reportID] | The in-game command used for ignoring reports. |
Contest Report | contest | None | Usable by players to contest round reports before admins act on them. |
Admin Say | say |
[message] OR [preMessageID] |
The in-game command used to send a message through admin chat to the whole server. |
Player Say | psay |
[player][message] OR [player][preMessageID] |
The in-game command used for sending a message through admin chat to only a specific player. Chat access must be AnyHidden. |
Admin Yell | yell |
[message] OR [preMessageID] |
The in-game command used for to send a message through admin yell to the whole server. |
Player Yell | pyell |
[player][message] OR [player][preMessageID] |
The in-game command used for sending a message through admin yell to only a specific player. Chat access must be AnyHidden. |
Admin Tell | tell |
[message] OR [preMessageID] |
The in-game command used for to send a message through both admin say and admin yell to the whole server. |
Player Tell | ptell |
[player][message] OR [player][preMessageID] |
The in-game command used for sending a message through both admin say and admin yell to only a specific player. Chat access must be AnyHidden. |
Log Player Information | log | [player][message] | The in-game command used for logging a message on a player's record. Does not affect their gameplay in any way. |
Player Private Message | msg | [player][message] | Opens a conversation with the given player. The player can either be in the current server, or any other BF3/BF4 server on your database. |
Player Private Reply | r | [message] | Replies to a currently open conversation with the given message. |
Admin Private Message | adminmsg | [message] | Sends a message to all online admins in the server. They can then open a private message with the sender to reply to the admin message. |
What Is | whatis |
[commandName] OR [preMessageID] |
The in-game command used for finding out what a particular preMessage ID, or command name, means. |
Lead Current Squad | lead |
none OR [player] |
The in-game command used to the speaker to leader of their current squad. When targeted at a player, that player will be given leader of their current squad. Only available in BF4. |
Request Rules | rules |
none OR [player] |
The in-game command used to request the server rules. When targeted at a player, that player will be told the server rules. When targeted at a player, the command goes on timeout for that player. |
Feedback | feedback | message | Logs the given message as feedback for the server. |
Request Reputation | rep |
none OR [player] |
The in-game command used to request the server reputation. When targeted at a player, you will be told that player's reputation. Requesting a player's reputation other than your own is admin only. |
Vote Surrender | surrender | none | The in-game command used for starting/voting for a round surrender. Losing team specific, but either surrender or votenext can be used. |
Vote Next Round | votenext | none | The in-game command used for starting/voting for a round surrender. Losing team specific, but either surrender or votenext can be used. |
Vote Against Surrender | nosurrender | none | The in-game command used for voting AGAINST a currently active round surrender. This command may only be used by the losing team. |
Assist Losing Team | assist | none | The in-game command used to join the weak/losing team. Blocked from usage until 2 minutes into any round. Blocked from usage when teams are within 60 tickets of each other. |
Request Online Admins | admins | none | The in-game command used to get the list of current online admins. |
Request Uptimes | uptime | none | The in-game command used to get the uptime of the server, procon/layer, AdKats, and several other things. |
List Round Reports | reportlist | none | The in-game command used to get the latest 6 unanswered round reports. |
VOIP | voip | None | The in-game command used for sending VOIP server info to the speaker. |
Kill Self | killme | None | The in-game command used for killing the speaker. Specific timeout of 10 minutes to avoid abuse. |
Restart Current Round | restart | None | The in-game command used for restarting the round. |
Run Next Round | nextlevel | None | The in-game command used for running the next map in current rotation, but keep all points and KDRs from this round. |
Restart AdKats | prestart | none | The in-game command used for rebooting the AdKats instance. Requires confirmation. |
Shutdown Server | shutdown | none | The in-game command used for shutting down/rebooting the Battlefield server. Requires confirmation. |
End Current Round | endround | [US/RU] | The in-game command used for ending the current round with a winning team. Either US or RU. |
Server Nuke | nuke | [US/RU/ALL] | The in-game command used for killing all players in a subset. US, RU, or ALL will work. |
Server Countdown | cdown | [squad/team/all] [seconds] [reason] | The in-game command used for issuing countdowns on a subset of players. |
SwapNuke Server | swapnuke | none | The in-game command used for team-switching all players in the server. THIS IS EXPERIMENTAL, AND SHOULD BE USED WITH CAUTION. MULTIBalancer unswitcher is automatically disabled when using this command, and re-enabled once complete. |
Kick All Guests | kickall | None | The in-game command used for kicking all players except admins. |
Fetch Player Info | pinfo | [player] | Fetches extended information about the player. Player name, ID, role, team name, team posision, current score, time first seen, amount of time spent on current server, city location, IP change count, reports from/against during current round, infraction points, last punishment time/reason, reputation, and previous names. |
Fetch Player Chat | pchat |
None OR [chatLines] OR [player] OR [chatLines][player] OR self [player] OR [chatLines] self [player] OR [player1][player2] OR [chatLines][player1][player2] |
Fetches chat history or conversation history between players. |
Dequeue Player Action | deq | [player] | Canceles all queued actions on the target player. Moves, kills, etc. |
Request Server Commands | help | None | Lists the server commands you can access. |
Find Player | find | [player] | Returns the team, position, and score, of the targeted player. Chat access must be AnyHidden. |
Player Is Admin | isadmin | [player] | Returns whether the given player is an admin, and states their role. |
Manage AFK Players | afk | None | Calls the AFK Management functionality manually. Cannot be used if AFK payers are being managed automatically. |
Plugin Update | pupdate | None | Calls manual update of AdKats source and any connected extensions to their latest versions. |
Some layer providers require whitelisting of connections through their firewall.
For AdKats to function properly, requests to the following domains/sub-domains must be allowed from your layer for http and https connections. If you do not understand what this means, please send this instruction and the list below to your layer host:
Domain | Usage |
battlelog.battlefield.com | Player identity tracking and anti-cheat. |
raw.github.com | Global configuration/documentation fetching, and database updates. |
raw.githubusercontent.com | Global configuration/documentation fetching, and database updates. |
sourceforge.net | Source updates. |
api.gamerethos.net | Version management, and backup source for definition files. |
ip-api.com | Player location tracking. |
metabans.com | Ban enforcer posting. |
www.timeanddate.com | Global UTC Timestamp |
All are either simple GET or POST requests.
BF4DB.com might be used in the future to trigger updates on players BF4Stats data.
The following URLS are used for reputation stats, special player groups, database updates, and weapon stats for hacker-checker:
Link | Usage |
adkatsreputationstats.json | Command Reputation Constants |
adkatsspecialgroups.json | Special Player Group Definitions |
adkatsupdates.json | Database Updates |
adkatsweaponstats.json | Battlefield Weapon Stats (Damages) |
AdKats issues specific server commands to execute its functions, and run properly. Below are their listings, usages, and intervals of usage.
Command | Usage | Interval |
serverInfo | Fetching server info | Plugin start, 10 second interval. |
vars.teamFactionOverride | Fetching team definitions | Plugin start, round start. |
punkBuster.pb_sv_command | Triggering punkbuster screenshots | Admin report and calladmin commands. |
squad.private | Setting whether a squad should be private or not | Admin join and pull commands. |
squad.leader | Assigning squad leader | Admin lead commands. |
player.isAlive | (BF4 only) Checking if a player is alive | Kill and move commands. |
admin.killPlayer | Killing players | Admin kill and nuke commands, either automatic or manual. |
admin.movePlayer | Moving players between teams | Admin move commands, and players attempting to move from locked teams. |
admin.kickPlayer | Kicking players | Admin kick commands, either automatic or manual. |
admin.say | Sending say to either server or private player | Admin say and tell commands, along with any automated functions that require notification to the user. |
admin.yell | Sending yell to either server or private player | Admin yell and tell commands, along with any automated functions that require unavoidable notification to the user. |
admin.listPlayers | Listing current server players | Plugin start, 10 second interval when TeamSwap queues are not empty. |
admin.shutDown | Shutting down/rebooting the battlefield server | Admin shutdown commands. |
banList.list | Listing current server banlist | If Ban Enforcer is enabled, when new ban(s) are added to the server, if not, after adding new bans to the server. |
banList.add | Adding entries to the server ban list | Admin ban commands, either automatic or manual, when ban enforcer is disabled, or when importing bans from ban enforcer back into the server. |
banList.save | Saving the server ban list | After adding new bans to the server, or, if ban enforcer is enabled, after clearing the server ban list. |
mapList.restartRound | Restarting the current level, removing scores. | Admin restartLevel commands. |
mapList.runNextRound | Running the next map in the list, keeping scores. | Admin nextLevel commands. |
mapList.endRound | Ending the current round with a winner. | Admin endLevel commands, round timer, surrender vote, and auto-surrender. |
reservedSlotsList.remove | Removing entries from the reserved slot list. | Reserved slot orchestration. |
reservedSlotsList.add | Adding entries to the reserved slot list. | Reserved slot orchestration. |
reservedSlotsList.save | Saving the server reserved slot list | Reserved slot orchestration. |
reservedSlotsList.list | Fetching updated server reserved slot list | Reserved slot orchestration. |
spectatorList.remove | (BF4 only) Removing entries from the allowed spectator list. | Allowed spectator orchestration. |
spectatorList.add | (BF4 only) Adding entries to the allowed spectator list. | Allowed spectator orchestration. |
spectatorList.save | (BF4 only) Saving the server allowed spectator list | Allowed spectator orchestration. |
spectatorList.list | (BF4 only) Fetching updated server allowed spectator list | Allowed spectator orchestration. |
Listed below "Add Role" are all the command assignments for each role. Change Allow/Deny for each command for the different user roles to control their access. Type delete in the "delete?" line to delete the user role. When a user role is deleted, all users on that role are changed to the Default Guest role. You cannot delete the Default Guest role.
Listed in this section is an entry for each possible special player group, on every role in your role list. Setting 'Assign' to any entry will place all users/soldiers under that role on the selected special player group. Some settings are forced to 'Assign' per settings in other places in the program, for example if you've fed reserved slots for admins that group is force assigned for all admin roles.
The following settings are sent to stat logger when using the "Feed Stat Logger Settings" orchestration option: