Dedicated server

From Pavlov VR Wiki
Jump to: navigation, search

Setting up a dedicated server

There are no Windows binaries, this guide is exclusively for Ubuntu/Debian/Debian-like Linux distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own.

If you are considering hosting from home, please read that section of the wiki first.

This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.

If you have no experience using bash, maybe start here. Editing text files via commandline is often a challenge. Suggest using nano and reading guide here

If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.

And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go.

If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.


Server Requirements

Pavlovserver can only be hosted under Linux. This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide.

Ubuntu 18.04 x86_64 and Ubuntu 19/04 amd64 and Ubuntu 20.04 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on "minimal" images as some tools are missing.

  • 2GB RAM + 1GB RAM per each additional server
  • 2.3Ghz Dual Core CPU for a 10 player server + 1 additional CPU per server.
  • 3.2 Ghz core will support up to ~24 players on a larger server.
  • Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server.

Hosting at home

When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests. These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding, https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT.

A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change.

You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further.

Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home

There are serious security implications of hosting this software at home. None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.



Hosting Providers

Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated "Pavlov hosting" as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down.

Provider              | Base CPU | Details
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting
OVH                   | 4.5 GHz  | https://www.ovh.com.au/dedicated-servers/game/
Amazon Web Services   | 4.0 Ghz  | https://aws.amazon.com/ec2/instance-types/z1d/
Pavlov Horde          | 4.0 GHz  | https://pavlovhorde.com/buy
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/
ForestRacks           | 3.8 Ghz  | https://my.forestracks.com/store/pavlov
Smishcraft            | 3.6 Ghz  | https://billing.smishcraft.com/index.php/store/pavlov-vr
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms
ARCTIC VR

Arctic.png Arctic VR is the largest and longest running Pavlov VR hosting provider. They offer EU, NA East and NA West servers for both shack and PCVR. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. In addition to a monthly server service they offer a 10% discount for ordering 6/mo of service.

You can find more about them here: https://www.arctic-vr.com/server-hosting

ForestRacks

ForestRacks is a hosting provider that offers low priced Pavlov VR servers of all sorts including the base server and the beta servers (PC Beta/ Shack) They currently offer server hosting in North America, Germany and in Australia. All servers are controlled in a docker instance using a custom panel ontop of a heavy duty Firewall with 100 Gbps DDOS protection.

All servers owners are guaranteed 24/7 Support via LiveChat or Discord. For anymore information visit https://forestracks.com

Smishcraft Hosting

Smishcraft is a Game service provider that started in 2014 and originally specialised in Minecraft(hence the name) but has since branched out into many other games and services. There servers are hosted within docker containers with rcon and power actions controlled from a web control panel.

They also maintain a public file server with most of the maps for the Shack version of the game and a link for that can be found in there Knowledgebase, for more information use the link above.

PAVLOV HORDE

Pavlov Horde offers ready-made custom Pavlov Shack servers (Quest exclusively!) for TTT, SND, Zombies, and all other game modes. Servers are bundled with KDA Stats collection, rankings, online server account management (maps, PIN), RCON access, and regular maps updates with some exclusive to Horde. A Horde Discord bot is also provided to manage the server, run RCON commands, make custom scoreboards, and grant permissions to friends/team via discord.

You can find more about them here: https://pavlovhorde.com/buy or contact Chingghis for questions by joining the Horde Discord: https://discord.com/invite/cdQTDpDQhe. The Horde discord bot can be invited with this link: https://discord.com/oauth2/authorize?client_id=780880728992383077&scope=bot&permissions=199744

VULTR

Consider using a referral from the community:

Carlos: https://www.vultr.com/?ref=8615589-6G

Carrot: https://www.vultr.com/?ref=8689348

Archaeo: https://www.vultr.com/?ref=8653652-6G

Cheeto: https://www.vultr.com/?ref=8717358

Google Cloud Platform (90 day free credit available)

The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.



Menu -> compute engine -> VM instances
create instance
- region: wherever you like
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)
- boot disk: Ubuntu 20.04
- boot disk -> size: 25gb
- network tags: pavlov-server
- [create]


Menu -> Vpc network -> firewall rules
[Create firewall rule]
Name: pavlov server
Target Tags: pavlov-server
Source IP Ranges: 0.0.0.0/0
Protocols and Ports -> Specified protocols and ports -> UDP: 7777, 8177 (Shack and PC)
Protocols and Ports -> Specified protocols and ports -> TCP: 7777, 8177 (Shack-only)
Protocols and Ports -> Specified protocols and ports -> TCP: {RCON port - default 9100}
[save]
Amazon Web Services (30 day free credit available)
Login -> Change Region: Choose your region
Services -> Compute -> EC2 -> Create
Choose an AMI: Ubuntu 18.04
Instance Type: z1d.large

Instance Details -> Tenancy: Dedicated (optional: this will more than triple the cost)

Storage: 50gb disk (or whatever, you're in control of the map roster)

Security Groups:
Create a new Security Group
Security group name: pavlov-server
Description: pavlov server
Rules:
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0
Type: SSH (optional, but I assume you wanna SSH in..)

Launch -> Create new Keypair -> Download -> Launch

Once it's started, SSH in like:
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com

(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)

Starting Server Install

Install dependencies and create the `steam` user. (You only need to do this once):

sudo apt update && sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip
sudo useradd -m steam

[Optional] Set a password for steam.

sudo passwd steam

Login as the steam user. (You will need to do this each time you connect to your server):

sudo su -l steam


Install Steam:

mkdir ~/Steam && cd ~/Steam && curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC) (You will need to run this command each time there is a Pavlov Server update).

To host PC Server (non-beta):

~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/steam/pavlovserver +app_update 622970 +exit

To host PC BETA:

~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/steam/pavlovserver +app_update 622970 -beta beta_server +exit

To host Shack Live (Quest):

~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/steam/pavlovserver +app_update 622970 -beta shack +exit

To host Shack RC (Quest): [At the moment Shack RC is same as LIVE, use LIVE] - [delete if RC returns]

~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/steam/pavlovserver +app_update 622970 -beta shack_beta +exit

Now that we've installed the server, all pavlov server versions should continue.
Install a fresh copy of steamclient.so (May have to do this after each update):

~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit
mkdir -p ~/.steam/sdk64
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so

Make the PavlovServer script executable. (You only need to do this once):

chmod +x ~/pavlovserver/PavlovServer.sh




Server Configuration

Before starting the server we need to configure it. Start by creating some directories:

mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer

Configuring Game.ini

Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin.

nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini
[/Script/Pavlov.DedicatedServer]
bEnabled=true
ServerName="My_private_idaho"
MaxPlayers=10     #Set this to 10 for Shack. 19 is reasonable max for PC large maps. 
bSecured=true
bCustomServer=true 
bVerboseLogging=false 
bCompetitive=false #This only works for SND
bWhitelist=false 
RefreshListTime=120 
LimitedAmmoType=0 
TickRate=90
TimeLimit=60
#Password=0000 
BalanceTableURL="vankruptgames/BalancingTable/main"
MapRotation=(MapId="UGC1758245796", GameMode="GUN")
MapRotation=(MapId="datacenter", GameMode="SND")
MapRotation=(MapId="sand", GameMode="DM")

  • bEnabled - whether the server appears in the server list (unconfirmed)
  • ServerName - name it will be listed as. (approx 35 chars max)
  • MaxPlayers - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes
  • bSecured - enabled Valve Anti-Cheat (VAC)
  • bCustomServer - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)
  • bCompetitive - sets the server to competitive mode for SND. If removed the server will default to false
  • bVerboseLogging - enables verbose logging, mostly detailed statistics. Be prepared for significant increase in logging.
  • bWhitelist - Only allow users in whitelist.txt to join
  • RefreshListTime - sets how often the running server checks for updates in ban/whitelist/mod files
  • LimitedAmmoType - sets limited ammo mode (experimental) 0-2 unlimited,generic,specific
  • TimeLimit - sets time limit for each map
  • TickRate - sets the server tickrate. (so far minimum stable seems around 50 and max around 120)
  • Password - PIN number for server #FYI - this is now also changeable via rcon.
  • BalanceTableURL - custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions
  • MapRotation - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page. When a match ends, the server will load the next map in the rotation. You can also use RCON to switch to a map not included in rotation.

Available game modes as of 21/09/2021: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC
PC Beta only (Temporarily removed, coming back soon): HIDDEN, PUSH, PH (Prophunt)

Maps running a Custom Game Mode (CodZ, BR, Duel, etc.) don't care which GameMode you chose, as long as it isn't Shack TTT, which will always override.

UGC###### are for custom maps from steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=1661803933). To put Mirage in your rotation UGC1661803933 would be the correct MapId

Firewall/Port forwarding

Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding.

You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.

If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open

If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP

If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 & 8177) must also be open via TCP





Shack Maps (Quest)

If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itsself, instead of offloading to Steam.

To get started, first create the directory to hold the maps

mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps

You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach

Download and install CyberDuck onto your "home" PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/

Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server. I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like

In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)

In the directory dropdown (itll say /root) go back to /

Follow the directories until we arrive back at our "maps" folder
/home/steam/pavlovserver/Pavlov/Saved/maps

Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items

Hit Allow

Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.

To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be

MapRotation=(MapId="SVR_Cheeto_Items", GameMode="TDM")

And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.

Adding Shack Maps over Command Line Interface

A bit more complicated, but adding maps over CLI has its benefits

First, CD to the maps directory you made above

cd ~/pavlovserver/Pavlov/Saved/maps

Download the map files from whatever you use to upload them. To do this, you can either use curl or wget

curl -O insertURLhere


If you download your map from Google Drive, make sure that your .zip folder is shared to anyone.

Then, get the file's url from the shared link.

Example : https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view

will be 19bI8gUHaN5tUrDvnadAacUnchQf6_k

Edit "fileId" and "fileName" before you execute the command.

fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k
fileName=SVR_USER_MAPNAME
curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${fileId}" > /dev/null
code="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"  
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${code}&id=${fileId}" -o ${fileName} 


To keep with the Items example:

curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip

Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.

unzip SVR_Cheeto_Items.zip

Now finish like before by adding the map to your Game.ini

nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini
MapRotation=(MapId="SVR_Cheeto_Items", GameMode="TDM")

Admin/Moderator list (optional)

ADMIN MENU NO LONGER EXISTS FOR PC AND IS LIMITED IN SHACK, BUT IS EXPECTED TO RETURN/IMPROVE IN THE FUTURE (Delete comment when it returns)

If you add moderators to your server, they will have an "admin panel" in their menu which will allow them to:

  • kill player
  • teleport to player
  • kick player
  • ban player (note this ban is only in memory and clears when server restarts. If you want it to be permanent, use blacklist.txt file (below) and/or Rcon ban command)
  • rotate to next map
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt

Example Mod List:

76541198397498572 #Optional Comment: Player name
76541198397498573 #Some Other Player

ArcticVR Admin Menu

Arcticmenu.jpg

Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include:

  • Switch Maps+Modes
  • Teleport Players to Players
  • Change Player Skins
  • Control Player Buying+Cash
  • Spawn Items
  • Clean up corpses + guns
  • Spawn Bots
  • Spawn Items for other players
  • Control Teams + Balance/Shuffle Teams
  • ResetSND
  • And More

You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu

Blacklist/Whitelist (optional)

If you want the ability to ban players or only allow players based on their steamID you can use blacklist.txt and whitelist.txt to define these players

Both files should be written in ~/pavlovserver/Pavlov/Saved/Config/ and have same format as Mod list above.

touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt

Currently bans actioned by admins in-game are only held in memory and not written to blacklist.txt. As such, they go away when server is rebooted.

(Shack - with b24 and move to app labs, blacklist/whitelist are based on oculus name. This may change.)

Handy tools for finding steamIDs

Steam ID finder: https://steamidfinder.com/lookup/

You want to enter in the steamID64 format.

This tool can convert or lookup IDs: https://steamid.io/

If you are looking for a steamID of a player that has been on your server recently this is technique to find them:

grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation

Starting the server

cd ~/pavlovserver && ./PavlovServer.sh

That's it, your server will be automatically broadcast to the master server! :)

Two handy tools to determine quickly if your server is broadcasting are Pablub (PC only) and Horde (Shack) and Horde (PC version)

Note that when you close your terminal, the server will go down. See the "supervisors" section below for how to prevent this.


Supervising the server using systemd

Running ./PavlovServer.sh in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background, you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the more robust (supervisord, systemd).

Systemd is running by default on Ubuntu Linux, so we'll use that here.

To run the server as a systemd service, create the file /etc/systemd/system/pavlovserver.service (as root) by typing

 
sudo nano /etc/systemd/system/pavlovserver.service

Copy contents below into the file and save.

[Unit]
Description=Pavlov VR dedicated server

[Service]
Type=simple
WorkingDirectory=/home/steam/pavlovserver
ExecStart=/home/steam/pavlovserver/PavlovServer.sh

RestartSec=1
Restart=always
User=steam
Group=steam

[Install]
WantedBy = multi-user.target

If you'd like your server to start as competitve without editing the game.ini copy and paste this instead,

[Unit]
Description=Pavlov VR dedicated server

[Service]
Type=simple
WorkingDirectory=/home/steam/pavlovserver
ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1

RestartSec=1
Restart=always
User=steam
Group=steam

[Install]
WantedBy = multi-user.target

Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:

sudo systemctl start pavlovserver
sudo systemctl restart pavlovserver
sudo systemctl stop pavlovserver
sudo systemctl status pavlovserver

To view the logs:

sudo journalctl -u pavlovserver
# to live-tail the logs
sudo journalctl -u pavlovserver -f

If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:

sudo systemctl enable pavlovserver



Rcon Overview and Commands

If you are here looking for a quick tool to use RCON on your server. The most user friendly option is here: https://pavlovhorde.com/rcon. You will of course expose your credentials to the horde admin, but Chingghis is a trusted member of the community unlikely to turn you into a clown using RCON.


To enable Rcon access create config file:

 nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt 

Copy in the following text - change password, and if desired the port:

Password=ChangeThisPassword
Port=9100

You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)


Ban/Unban

If you want Ban/Unban to work file /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt needs to be writable by user running server. (If you followed the instructions on the wiki, username steam is running the server and creates the file).


Commands:

Help                                -Returns the full list of commands
Ban {UniqueID}                      -Bans the player from the server (adds them to blacklist.txt)
Kick {UniqueID}                     -Kicks the player from the server
Kill {UniqueID}                     -Kills the player 
Unban {UniqueID}                    -Unbans the player from the server (tries to remove the unique id from blacklist.txt)'
Blacklist                           -Shows the current blacklist of banned players
AddMod {UniqueID}                   -Adds a mod ID to the mods.txt file 
RemoveMod {UniqueID}                -Removes a mod ID to the mods.txt file
ItemList                            -Shows available items for GiveItem command
RotateMap                           -Rotates to the next map in the game.ini
SwitchMap {MapName/ID} {GameMode}   -Switches to the map/gamemode specified, ex "SwitchMap DataCenter TDM" or "SwitchMap UGC1080326389 DM"
SwitchTeam {UniqueID} {TeamId}      -Switches the specified players team
GiveItem {UniqueID} {ItemId}        -Give the specified player the Item
GiveCash {UniqueID} {CashAmt}       -Give the specified player cash
GiveTeamCash {TeamId} {CashAmt}     -Gives all members of the teamId cash
GiveVehicle {UniqueID} {VehicleID}  -Spawns Vehicle on top of player, see below for vehicle IDs
InspectPlayer {UniqueID}            -Returns information about the player specified (PlayerName, Cash, KDA, TeamId etc)
RefreshList                         -Returns a list of players on the server (unique/steamId)
Slap {UniqueID} {damage amt}        -Inflicts damage amount on player.  From zero to 100.
ServerInfo                          -Returns information about the server (ServerName, CurrentMap, PlayerCount/MaxPlayerCount etc)
Disconnect                          -Disconnects the player from Rcon
ResetSND                            -Resets the match back to round 1 keeping the same teams
SetPlayerSkin {UniqueID} {SkinId}   -Sets the skin for the specified player, see below for IDs
SetLimitedAmmoType {0-5}            -Sets the limited ammo type for the duration of the match. See below for the different ammo types available
SetPin {####}                       -(Beta only) Sets the password on your server, must be 4 digits e.g. "SetPin 0000". Running SetPin without a number will remove the pin from the server.

Limited ammo types:

0 = Unlimited
1 = Limited Generic
2 = Limited Specific
3 = Custom (for modders)
4 = Limited Special
5 = Boxless Mode

Skin IDs:

clown
prisoner
naked
farmer
russian
nato
us
soviet
german
cop (PC Beta and Shack only)
infinitum (Shack only, coming back to PC soon)
hidden (Shack only, coming back to PC soon)

Vehicle IDs:

panzer
sherman
t34
truck
atv
tiger (Shack and PC Beta only)

Item IDs: To get the current itemlist for your server, run the ItemList command. AK 57 1911 acog adrenaline ak12 AK47 akshorty ammo_pistol ammo_rifle ammo_shotgun ammo_smg ammo_sniper ammo_special ammocrate antipersonnelmine AntiTank antitankmine AR ar9 aug AutoShotgun AutoSniper awp ballisticsshield bandage bar bayonet_leeenfield bayonet_m1garand bayonet_mosin bayonet_trenchgun boltcutters bren Canted_Reddot cet9 crowbar de detectivesmg dnascanner dp27 DrumShotgun flaregun flash flash_ru Flashlight_Rifle G43 galul goldengun Grenade grenade_dis grenade_ger grenade_ru grenade_svt grenade_us Grip_Angled Grip_Vertical handcuffs healthstation Holo kar98 keycard Knife kross Laser_Pistol Laser_Rifle leeenfield LMGA lockpick luger m16 m1garand m9 medkit mg42 monocular mosin mp40 MP5 newtonlauncher P90 Painkillers pickaxe pipe Pliers ppsh PushBomb reddot reddot_pistol RepairTool Revolver RL_M1A1 rl_panzer RL_PIAT rl_rpg sawedoff Scope scope_kar98 scope_leeenfield scope_mosin scope_springfield scur Shotgun silentcet9 skinhelmet_ger skinhelmet_svt skinhelmet_us sks SMG Smoke smoke_ger smoke_ru smoke_svt smoke_us sock springfield sten stg44 supp_pistol supp_rifle svt40 Syringe tankmg tankturret taser teleporter thompson Tokarev tranqgun trenchgun tripalarm tttc4 tttknife uzi vanas vzz webley

Game Modes:
DM - Death Match
KOTH - King Of The Hill
GUN - Gun Game
OITC - One In The Chamber
SND - Search and Destroy
TANKTDM - WW2 Team Death Match
TDM - Team Death Match
TTT - Trouble in Terrorist Town
WW2GUN - WW2 Gun Game
ZWV - Zombie Wave Survival
PUSH - Push (Only works on Haguenau)
HIDDEN - The Hidden (Temporarily removed)
PH - Prophunt (Temporarily removed. Both of these will come back soon.)


Connecting to RCON

Make sure whatever port you used is open in your firewall for TCP connections. Connections are simple TCP port/telnet style connections.

To test connecting to the rcon port and issuing simple commands use netcat or telnet:

nc {ip address} {port}
telnet {ip address} {port}
For the password use the md5 hash of the password in the file (this may change in the future). You can get this using
echo -n password | md5sum

If successful you should get an Authenticated=1 reply


Tools available to access Rcon interface

A good first place to start is the Horde web interface. You can find your PC server at https://pavlovhorde.com/pcServers and Shack servers at https://pavlovhorde.com/.

Enter the port and the plaintxt version (not md5sum) of the password and connect to your server using this site. You will of course expose your credentials to the admin, but Chingghis is a trusted member of the community unlikely to turn you into a clown using RCON.

If you want private control of your server, you will need to do a bit more work for it. At the simplest, using netcat (nc) or telnet as described above will give you basic access to all commands

If you want to batch commands (i.e. for moving players on to teams and triggering ResetSnd) the following script can be useful to call a pre-written batch files of commands. Call with your batch file as the first argument to the script. The file should have one command per line with first line being the hashed password as above.

 
#!/bin/bash
function slowcat(){ while read; do sleep .05; echo "$REPLY"; done; }
cat  $1 | slowcat | nc {ip address} {port}

Example batchfile:

8b96753b29612d8c98d6b696140b5d9f
ResetSnd
Disconnect


Rcon access from within VR

PavlovRconWebserver, pavlov-vr-rcon and pavlov_rcon_tcl have been designed to be accessible within VR using virtual desktop view.


pavlov_rcon_tcl: This is a tool designed to run on your desktop for access within VR

https://github.com/Oakraven79/pavlov_rcon_tcl


PavlovRconWebserver is an interface designed to be usable from everywhere all the time. (also in VR over desktop view) Feature video

Features: 
SSH tunnel your rcon connection, 
mutliserver administration, 
most rcon commands from the wiki, 
map(realtime steam workshop maps)/item selector, 
control over browser(Android,IOS,Windows,Linux,etc), 
Roles: Admins/Users(Moderators)/etc.,
Ban over time,
Player list

https://github.com/devinSpitz/PavlovRconWebserver

While functional, the PavlovRconWebserver is still in development. Important: You should only give this tool Rcon access. DO NOT give it SSH/root access in the "Servers" tab. We have confirmed with 2 different server hosts at different times that it WILL break your pavlovserver installs if you do. The Rcon tool works fine though.


pavlov-vr-rcon: This is tool designed to run on your desktop for access from within VR with SND team setup

https://github.com/Krzychu81/pavlov-vr-rcon


RCON access from Discord

For the ultimate in both control and complexity of setup, use pavlov-bot. This is a discord bot that will listen for commands in your discord channel and execute them. Supports all Rcon commands with handy features such as discord role based authentication and authorisation, player, map and team aliases (No more SteamIDs or UGC####). For shack users it has been updated to support EOS ids, so should be fully functional for both server versions

https://github.com/makupi/pavlov-bot

Horde also offers a Discord Bot to grant RCON permissions to friends in Discord, and run commands from specific channels. Invite the Horde Bot to your Discord server with this link: https://discord.com/oauth2/authorize?client_id=780880728992383077&scope=bot&permissions=199744

Tips on developing apps to use RCON

What is important if you are issuing commands using a program at high frequency is that you open one connection and put all of the commands through that open connection with a small (.5 sec is fine) delay. What you don't want to do is open a new connection for each command or shove all of the commands through super fast. First causes performance issues and the second dropped commands.

Advanced Server Administration

Running multiple servers on one host

  • Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.
  • Make multiple server installs by defining a separate install dir for each server.
  • Run each server with a unique port. eg: ./PavlovServer.sh -PORT="Desired Port"
  • The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)
  • If you are using RCON, each server will need a unique port defined in RconSettings.txt
  • Ensure the ports are forwarded and opened in your firewall

To duplicate directories:

be in the steam home folder

cp -r pavlovserver pavlovserver1
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]

Starting server in competitive mode

Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting. You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.

/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1

Useful Linux Commands

Check if pavlov is running by checking process status. If the only row you see is the grep command, pavlov server is not started.

 ps -ef | grep pav 

Sample output:

steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav

Dump the log to the console so you can scroll through it:

 cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log 

Search the log for a string - replace my_string with case-sensitive string

 cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string 


Default Map ID's

datacenter

sand

bridge

containeryard

siberia (Prison Break)

hospital (Zombies map)

killhouse

range

tutorial

santorini

station

stalingrad (PC only)

ogcontainers (Shack only)

industry (PC BETA only)

haguenau (PC BETA and Shack only)

Troubleshooting

To run the server without outputting the heartbeat:

./PavlovServer.sh | sed '/heartbeat/d'

To monitor the logs (without heartbeat) from another terminal:

tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'

Check your CPU Clock Speed with:

lscpu | grep MHz

Server won't start

Error message:

ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory

First two errors are harmless. The third one is because libc++ step was skipped or failed. Using sudo capable id (probably not steam id), [re]run this line:

sudo apt update && sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip 


Map wont load (kicks to datacenter)

try deleting all the downloaded workshop maps with:

sudo rm -rf /tmp/workshop/7777/content/555160/*
for all maps or
sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC
for specific map

Server stuck rotating forever

Run these 2 commands, then restart your server:

cd ~/Steam && ./steamcmd.sh +login anonymous +app_update 1007 +quit
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

Google server - ping 999

Make sure your compute engine has a network tag and your network rules are applied to the tag. Make sure you opened the specified ports.

Can't connect to RCON

Check the file and group owner of RconSettings file. It should be steam, or the ID used to run the pavlov server.

cd /home/steam/pavlovserver/Pavlov/Saved/Config 
ls -la 

If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server. (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue. If steam can't access these files, it could cause problems.).

cd /home/steam/pavlovserver/Pavlov/Saved/Config
sudo chown steam RconSettings.txt
sudo chgrp steam RconSettings.txt
ls -la 

PC ONLY - Map Download stops

When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!

This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits!

Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.

Getting Help

There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!