Running a server (advanced topics)

This section will go over some more advanced topics on running your server. Do not try anything here that you do not understand!

Contents

  1. Server administrators
  2. Server commands
  3. Cheat commands
  4. Multiple servers on a single Sven Co-op install
  5. Running a server as a service
  6. HTTP downloads for your Sven Co-op server content

Back to the top...

Server administrators

Sven Co-op has a (minimal) framework for server administrators and owners to get some representation of their status and some basic functionality to help control the game session.

These players are given this status by declaring their Steam ID within the file adminsfile (pointing to "admins.txt" by default). To give a player administrative status simply write their Steam ID on a line in this file. You can write comments after if you want to keep note of the players' handle.

Server administrators will be shown as such on the score board with the icon Server administrator. If the server is yours you can also denote yourself as such by placing an asterisk '*' before your Steam ID, for which you will get a tinted icon Server owner. No additional functionality is currently available to owners, it's mainly for show.

Here is an example of how your administrator list file could look:

// Owners/operators
*STEAM_9:1:488201	# Paul (owner)
*STEAM_9:0:38195	# Jane

// Administrators
STEAM_9:0:95482		# Dave
STEAM_9:1:5828645	# Emily
STEAM_9:1:1522834	# sUpErDeAn
STEAM_9:0:864923	# Zamnuzi

You do not have to include your Steam ID if you are only going to be running a listen server (i.e. for a temporary map test session). As a player hosting a listen server, you are automatically given the ownership status.

The only administrative functionality built-in currently provided is the ability to use cheat commands, primarily because this feature is fairly new to the game. We will be including more functionality in future releases, however our scripting platform is able to determine if a player is an administrator or owner. Anyone can write a server plug-in script to boost the functionality available without a complicated permissions base.

Back to the top...

Server commands

Sven Co-op has server commands that can be used to manage servers better. Some of these are simply CVAR's you can change at run time, while others are pure commands.

Command Parameters Description
kicksteamid "Steam ID" Kicks a players based on their Steam ID case-insensitively. You must surround the Steam ID with quotes.
mp_nextmap_cycle Map name Sets the next map for the server. Players will see this in the score board only after their next respawn.

Back to the top...

Cheat commands

The cheat commands built-in to Sven Co-op can only be used under certain conditions:

If a cheat command is attempted and these conditions are not met the player is told why, and the server will log this event (or print it in the console if logging is disabled).

Cheat commands are useful for private testing sessions, particularly for map authors as they provide some useful controls and limited debugging capabilities. If this is for you we advise you check the provided file "map_test.cfg" as this contains a range of command aliases and bindings to help you do this.

Here is a list of cheat commands currently available:

Command Parameters Description
Basic modes
godmode 0 = disable
1 = enable
Enable or disable god mode.
You will be immune to all damage against your health, but not HEV battery. A map entity can still forcibly kill you, and the kill command will still function as normal.
cl_noclip 0 = disable
1 = enable
Enable or disable no-clipping mode.
You will be flying instead of walking, and can move through solid matter like a ghost. You will not be non-solid yourself though, meaning NPC's can still touch/damage you, and you will still interact with brush based triggers.
cl_notarget 0 = disable
1 = enable
Enable or disable non-targetable mode.
You will be completely invisible to all NPC's, though they can still hear you (they will try to find you), and can damage you by accident.
cl_nonsolid 0 = disable
1 = enable
Enable or disable non-solid mode.
You will become non-solid like a ghost, thus players, NPC's, and brushes can pass through you without touching/damaging you. If something moves inside you and stays there however, you will be unable to move away as that other object is still solid. You will also not take damage from solid type objects (bullets/blades/etc), but particle type damage (explosions/fire/freeze) will still hurt you.
Equipment & status
give Weapon/ammo/item name Give yourself some equipment (weapons, ammo, and items).
Names should reflect the entity name of the equipment, for example weapon_shotgun, ammo_rpg, or item_longjump. You cannot use this to obtain item_inventory based items, use the trigger command instead.
You can technically give yourself any entity (such as a monster), but be warned the effects can be anything from humorous to catastrophic.
giveall
impulse 101
N/A Give yourself every weapon in the game with some ammo for it. The minigun and shock rifle are omitted due to their exclusive usage constraint.
givepoints Number Give yourself score/points. You can use a negative value to deduct points.
reviveme N/A Revive yourself if you've been killed. You will be revived with half health.
healme N/A Fully restores your health.
chargeme N/A Fully charges your HEV suit battery.
Map testing/debugging
teleport Co-ordinates as X Y Z Teleport yourself to specific co-ordinates.
trigger Map entity name Trigger an entity in the map by its target name.
This is best avoided for all but map authors, or those with good knowledge of the map in question. You as an entity will be passed to that entity as its activating and calling entity.

Back to the top...

Multiple servers on a single Sven Co-op install

You do not have to have multiple installations of Sven Co-op or Sven Co-op Dedicated Server in order to run multiple game server processes. A single installation can hold multiple configurations, and a set of command line parameters can determine which set to use.

This comes with some pros and cons.

Advantages Disadvantages
  • Less time spent installing and maintaining multiple copies of your server.
  • Less time spent installing and maintaining custom content (i.e. map packs)
  • Less disk space consumed due to only needing a single set of game files.
  • Less effort required modifying/repairing game files (ripent, etc)
  • Each process can choose to use a specific or shared configuration file.
  • Inability for processes to have the same map with different entities (ripent)
    3rd party entity plug-ins like entmod can enable this
  • Inability to limit a process to a specific set of game files.
  • Not always suitable for different people/groups to run servers on the same machine, targeted for one person/group.
  • Configurations must be within the game folder
    Setting permissions can become annoying doing it all manually

Multi-server configuration is intended for people who want to run multiple game server processes of the same game on a single computer (maybe a large server with many processors) without the hassle of multiple installations. This is very common on game service providers or large clans/guilds.

Fortunately, multi-server configuration is very simple and pretty well implemented -- for 1998. First, navigate to the svencoop folder on your server installation. There will be a folder called servers already. Any files you place in this folder are intended to be shared among all game server processes. Create a sub-folder for each game server process you want to have. There is no limit to how many you can have.

There is already an example set of shared configuration files and a server specific configuration set for you to work from. Start by cloning the example folder.

This diagram shows how your server configurations should be laid out.

Example profiling folder structure

You can actually organise your configurations however you like, but this example is a good way of keeping them tidy.

Each configuration folder will then have it's own set of configuration files inside. You don't have to use all of them, but a unique servercfgfile is pretty much essential. A logs folder will also be needed if you ever intend on using the log files again.

If you intend on using both a server specific and shared file (i.e. banned.cfg) you must use your server-specific servercfgfile to execute each file. You will generally want to execute the shared one first, then the server specific one after. Only configuration files (.cfg) can be shared or bequeathed.

Next all you have to do is sort out your command line parameters to use the profiles you've created. This is very easy to do when running your server as unattended services either manually created or through FireDaemon, ServerDoc, or mEAn Loader. Otherwise make a new file "start.cmd" or "start.sh" in the server's configuration folder and put the command in here instead.

Here are some examples of command line parameters that go after svends.exe (Windows) or ./svends_run (Linux). You must change the working directory to the game server root first.

You can also profile other common files such as Metamod's plug-in list (plugins.ini) and AMX mod X's configuration (core.ini). This can be done by adding the following parameters:

You can then point your AMXX configuration files in the amxx-core.ini to files that sit within your profile folder.

Hopefully you can now understand how multi-server configuration an installation can really help, and how easy it is to set up.

Back to the top...

Running a server as a service

Although there is no built-in support for running a Sven Co-op server as a Windows or Linux unattended service you can do this with the aid of a wrapper. These come in various forms, such as scripts, standalone executables, and full utility applications.

Before you begin you absolutely should create a user account on your system to run your service as. No matter which platform you are running, be it a Windows, Linux, or otherwise, you should never run a non-system application in an administrative or super user security context, e.g. "SYSTEM", "LOCAL SERVICE", or "root". Doing this creates a serious security vulnerability on your system.

If you are doing this on Windows firstly bare in mind you will have difficulty doing this on starter or home editions of Windows, because the local security policy management console will not be available to you. You will need to be running the professional, business, enterprise, or ultimate edition of Windows, or any of the Windows Server editions.

To create a service user on Windows:

  1. Create a standard user account with a sensible name like "SvenDS", but don't forget the password. (You'll need it later.)
  2. Ensure this user is not in any administrative user groups, such as "Administrators", "Domain Admins", or "Enterprise Admins".
  3. Configure a local security policy, be it local or domain managed, so that in the user rights assignment section this user is listed within login as a batch job and login as a service.

If you are doing this on Linux simply creating a basic user account will do. Naming it "svends" would be sensible. No further configuration of the user is required. It doesn't even need a password unless you plan to run any command terminals (e.g. Bash over SSH) for management purposes, though as a system administrator you should simply switch yourself to that user via command "sudo -i -u svends" instead.

Windows: FireDaemon Pro

FireDaemon Pro is a utility to make any Windows executable run as if it were a service. Although there are more minimal ways of doing this you will be hard pushed to find such a complete solution packed with features to help you get services up and automate them quickly. Particular advantages include:

A complete guide for installing SvenDS via SteamCmd and setting up a FireDaemon Pro managed service is available from FireDaemon's knowledge base.

FireDaemon Pro is offered on a 30 day trial basis, though if you run any game server on a full time basis the value of a full license will emerge rapidly. The license model is per server/VM -- you are not limited to the number of services you make/run.

Windows: (mEAn) ServerLoader

(mEAn) ServerLoader is an application designed to get a game server process running as a service with minimal effort. It doesn't offer many features other than this, in fact the only automation will be automatic restart if the server process closes. (No monitoring of frozen processes.)

(mEAn) ServerLoader is offered on a freeware basis. Installation steps are as follows:

  1. Download (mEAn) ServerLoader.
  2. Extract the ZIP file to your SvenDS installation area. (A directory "meanloader" will be created within.)
  3. Using the example configuration file below, create a file called "meanloader.ini" alongside your "server.cfg" file and populate it for your requirements.
  4. Open a command prompt to the "meanloader" directory.
  5. Run the following commands:
    • meanloader.exe --install
    • sc config svends start= auto DisplayName= "Sven Co-op dedicated server" obj= ".\SvenDS" password= TheServiceUserPassword
    • sc failure svends reset= 0 actions= restart/60000/restart/60000/restart/60000
    • sc description svends "Sven Co-op dedicated server launched via (mEAn) ServerLoader"

Your service will now be installed. To start/stop this service you can either use the services management console, or use the "sc" command, e.g. "sc start svends" or "sc stop svends".

Example configuration file:

[Settings]
ServiceName = svends
RestartInterval = 3000
NumberOfProcesses = 1
ServicePriority = Low
UserInterface = No

[Process_0]
StartDir = C:\SvenDS
ProcessName =
AppName = C:\SvenDS\SvenDS.exe
CommandLine = -console -game svencoop -secure +ip "1.2.3.4" -port 27015 -noipx +maxplayers 12 +log on +map "_server_start"
StartPause = 1000
StopPause = 1000
UserInterface = No
AutoRestart = Yes
Priority = normal
Paused = No
Window = Hide
NumOfRespChecks = 1
PrcFileLogging = No

If you are running multiple servers via configuration profiling you will be required to perform this installation for each individual server configuration profile you have. That means you must extract the utility into each configuration profile directory, as the utility itself does not offer any pointer to an INI file. (The INI file must reside in the same directory as the EXE.)

Be sure to use a different service name and description for each of your server profiles.

While this utility is capable of managing multiple processes, you cannot opt to start/stop/pause specific servers -- it's either all running or none running.

Linux: Bash script

A Debian 8 "Jessie" compatible Bash script can create a service utilising the "screen" utility to keep the process running behind the scenes. This has not been tested with RHEL/CentOS and similar distributions, and is yet to be tested on Debian 9 "Stretch".

The following steps will need to be actioned for each server configuration profile:

  1. Save file Resource service.sh into your server configuration profile directory.
  2. Edit your saved "service.sh" file to match the name/path for your server configuration profile. (Mainly the PROFILE_NAME, PROFILE_IP_ADDRESS, PROFILE_PORT, and PROFILE_MAX_PLAYERS variables.)
  3. Open a command terminal to your server configuration profile directory.
  4. Make it executable with command "chmod 0750 service.sh".
  5. Run command "service.sh install" as super user to install your service.
  6. Run command "service svends-server1 start" as the service user to start your service, replacing "server1" with your server configuration profile name.

You can replace start for one of the following:

Back to the top...

HTTP downloads for your Sven Co-op server content

If you have a server with a very fast Internet connection or on a local area network, then providing fast downloads through HTTP is a must have. A common solution people take is uploading all their custom content to a web host or another location on the same computer. However, like the multi-server configuration advice above, this wastes disk space by duplicating content.

Here I will show you how to set up an Apache web server that serves the same set of files from your single Sven Co-op installation, without leaking your configuration files and logs (which include passwords). The configuration I provide will also allow you to run a regular website off the same Apache instance.

First visit the Apache Software Foundation, download Apache HTTP Server (I'm working with version 2.2.15 for this guide), and install it.

Navigate to your Apache configuration folder (usually at C:\Program Files\Apache Software Foundation\Apache2.2\conf), and open httpd.conf in a text editor.

Here is a similar (but censored/stripped) copy of my configuration. You will need to replace values that are surrounded with curly brackets { } to relate to your server. Obviously ensure you remove the brackets.

Once you've done that, create a new file called httpd-websites.conf in the conf folder. This is where you will define each website that your Apache will host, including Sven Co-op content. The following example includes a regular website and a file pool for any game on your server.

The key things to note about this example configuration is:

You will need to restart the Apache HTTPD service for configuration changes to take effect. Finally, set your sv_downloadurl to your website with the mod folder (i.e. http://svends.computername/svencoop/ for sub-domain based or http://192.168.0.1:8000/svencoop/ for address/port based) -- the trailing forward slash / is important.

Back to the top...