Killing Floor 2 Auto-Kick Bot on Linux Dedicated Server

     

Update: this functionality has been incorporated into my Killing Floor 2 Linux Server Installer. I recommend you use that instead.

Table of Contents

Preamble

With the Killing Floor 2 Treacherous Skies patch things got considerably harder, especially on HoE difficulty. So, more than ever, it’s critical to have good players and good perks, otherwise your wipe is guaranteed.

On top of that, now we have the prestige system which resets your perks to zero. Unfortunately, a good number of vets are under the impression that their gaming skills can somehow make up for the perk skills they lack, such as:

  • explosives immune to the siren’s scream
  • +500% shotgun penetration
  • +200% syringe recharge rate and +50% syringe potency
  • +500% call out range
  • +100% mag size
  • no damage reduction from shooting through ZEDs
  • 40% reduced damage by parry

The list goes on, you get the idea. While that’s definitely not the case, there’s just no end to arguing with such vets, both on reddit and in game chat. They refuse to go suicidal, let alone hard, because that’s just so degrading, you know. That’s for kiddies, I’m a grown up KF vet with awesome gaming skills, so I have a free pass to HoE!

Anyhow, the good news is, there’s a solution, that won’t even derank your server: kf2_autokick for the rescue! This awesome bot will allow you to automatically kick/ban players based on the minimum perk level requirements you set. No more level 3 survivalists ruining wave 7.

Let’s do it!

Installation

This guide assumes you’ve fully completed the Dedicated Killing Floor 2 Server on Linux tutorial, so everything here will be explained as such.

System

First you need to do some administration, so do these as your regular user (i.e. not the steam user):

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install nodejs yarn dos2unix

Now create a system service file to run the bot:

sudo mcedit /etc/systemd/system/kf2autokick.service

Then paste the following (Shift + Insert):

[Unit]
Description=KF2 Auto-Kick Bot
After=syslog.target network.target

[Service]
Type=simple
User=steam
Group=steam
ExecStart=/bin/node /home/steam/kf2autokick/lib/index.js --config=/home/steam/Config/autokick.json
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Save with F2, then exit with F10. Now also apply the changes, and make autokick start automatically:

sudo systemctl daemon-reload
sudo systemctl enable kf2autokick.service

Create a new sudoers file so that the steam user will be able to control the autokick service:

sudo mcedit /etc/sudoers.d/kf2autokick-sudo

Paste the following:

%steam ALL=NOPASSWD: /bin/systemctl start kf2autokick.service
%steam ALL=NOPASSWD: /bin/systemctl stop kf2autokick.service
%steam ALL=NOPASSWD: /bin/systemctl restart kf2autokick.service
%steam ALL=NOPASSWD: /bin/systemctl status kf2autokick.service
%steam ALL=NOPASSWD: /bin/journalctl --system --unit=kf2autokick.service --follow

Steam

Now switch to the steam user:

sudo -iu steam

Now install kf2_autokick:

git clone https://github.com/Sinewyk/kf2_autokick.git ~/kf2autokick
cd ~/kf2autokick
yarn --frozen-lockfile

Fix the line ending format of the current_player_row.inc file, then open it for editing:

dos2unix ~/Steam/KF2Server/KFGame/Web/ServerAdmin/current_player_row.inc
mcedit ~/Steam/KF2Server/KFGame/Web/ServerAdmin/current_player_row.inc

Find the following line:

<td><%player.perk.name%></td>

Replace it with this:

<td class="foo-bar"><%player.perk.name%>;<%player.perk.level%>;<%player.playerkey%></td>

Save and exit. Now create the config file for your autokick script:

mcedit ~/Config/autokick.json

Paste the following:

{
  "servers": ["http://127.0.0.1:8080"],
  "basicAuthorization": "Admin:YOURADMINPASSWORD",
  "intervalCheck": 5000,
  "action": "kick",
  "minLevel": 20,
  "warnings": true,
  "warningPeriod": 20000,
  "warningMessage": "Minimum level is 20. Please switch perk or you'll be auto-kicked in 20 seconds."
}

This checks the user list every 5 seconds, and kicks if the user doesn’t change to a level 20+ perk within 20 seconds. Change the Admin password to yours, and change the other parameters according to your needs, then save.

Create kf2autokick.sh:

mcedit ~/bin/kf2autokick.sh

Edit it like so:

#!/bin/sh

set -Eeu

function errorexit ()
{
    case $? in
        1)
            echo "Usage: $0 {start|stop|restart|status|log"
            ;;

        2)
            echo 'error!'
            ;;

    esac
}

trap errorexit EXIT

if [ "$#" -ne 1 ]
then
    exit 1
fi

case $1 in
    start)
        sudo /bin/systemctl start kf2autokick.service
        ;;

    stop)
        sudo /bin/systemctl stop kf2autokick.service
        ;;

    restart)
        sudo /bin/systemctl restart kf2autokick.service
        ;;

    status)
        sudo /bin/systemctl status kf2autokick.service
        ;;

    log)
        sudo /bin/journalctl --system --unit=kf2autokick.service --follow
        ;;

    *)
        exit 1

esac

Now you also need to change webadmin authentication to basic auth, since that’s what the auto-kick bot will use. Open My-KFWebAdmin.ini:

mcedit ~/Config/My-KFWebAdmin.ini

Then make sure it contains the following lines:

[WebAdmin.WebAdmin]
bHttpAuth=True

Also open My-KFWeb.ini

mcedit ~/Config/My-KFWeb.ini

It needs to have these lines added:

[IpDrv.WebServer]
MaxConnections=64
bEnabled=true

Now apply the changes:

kf2.sh stop
kf2.sh config
kf2.sh start

Usage

Now, still as the steam user, you can finally start the autokick bot:

kf2autokick.sh start

If you make changes to autokick.json, make sure to restart it to apply the changes:

kf2autokick.sh restart

If you want to see this bot in action, feel free to join my Killing Floor 2 servers!

Welp, I think that’s pretty much it. Enjoy, folks!