Egy nagyon kedves játékkal ismerkedtem meg nemrég. Bár a játék már régóta elérhető, valahogy elkerülte a figyelmemet. Először szeretném mindenkinek bemutatni magát a játékot, majd azt, hogy hogyan tud egy dedikált Linux alapú Team Fortress 2 szervert készíteni.

Team Fortress 2 a játék

Kezdjük először a játékkal. Elsőre, azt mondanánk ez nem más mint egy FSP. Megyünk, lövünk. Zászlót védünk meg ilyenek. Alapvetően az alap koncepció ez is. Mégis a TF2-ben különböző védekező, támadó, és támogató karaktereket választhatunk a pályán. Tehát bármit választunk, lesz gyengesége és erőssége. Tehát az agyatlan öldöklés átcsap valamilyen stratégiába. Nem, nagyon, csak kicsit. A lényeg ezen túl is az öldöklés. Ehhez még hozzájön a viccesen rajzolt, rajzfilmszerű grafika, és az, hogy a STEAM-en keresztül ingyen elérhető. Ezek után még mi kell ahhoz, hogy jó szórakozást nyújtson?

Ahelyett, hogy több felesleges szót fecsérelnék a játék bemutatására, inkább tekintsétek meg a Gameday Iroda bemutatóját a játékról (youtube link):

Érdemes kipróbálni, és ha unalmas informatika órákon 8-10 ember összeverődik, akkor garantált a jókedv és az anyázás.

Team Fortress 2 Linux szerver

Természetesen a Team Fortress 2-nek is a multiplayer adja sava borsát. Annál jobb a játék, minél többen játsszák. Ehhez viszont érdemes a milliónyi elérhető szerver közül valamelyikre csatlakozni, vagy sajátot hozni létre. Az utóbbit fogjuk most megvizsgálni jobban.

Telepítés

Én egy Ubuntu 12.04-es rendszert fogok használni, de alapvetően más disztribúciókon is hasonlóan fog működni.

Fontos! Amennyiben 64bites Ubuntu-t használunk, úgy rakjuk fel a 32 bites kompatibilitást garantáló csomagot, mielőtt nekiállnánk a továbbiaknak:

# apt-get install lib32gcc1 ia32-libs

Ha ez megvan, akkor hozzunk létre egy lokális felhasználót a rendszeren. Az én esetemben ez a tf2 lesz. Ha létrehoztuk váltsunk át ezzé a felhasználóvá.

# useradd -md /home/tf2 tf2
# passwd tf2
# su - tf2

tf2_server1

Töltsük le a steam csomagot.

$ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz

tf2_server2

Tömörítsük ki.

$ tar -xvzf steamcmd_linux.tar.gz

tf2_server3

A következő parancs utasítást ad a STEAM binárisunk, hogy azonosítás nélkül (vannak játékok, ahol külön be kell jelentkeznünk itt is, de a TF2-nek elég az anonymous) töltse le a Team Fortress 2 (232250 a TF2 azonosítója a STEAM-nál) komponenset a tf2_server könyvtárba. Értelemszerűen tetszőleges könyvtárt is megadhatunk. A letöltés után még ellenőrizni fogja a steam a letöltött állományokat majd kilép

./steamcmd.sh +login anonymous +force_install_dir ./tf2_server/ +app_update 232250 validate +quit

Először a steam frissítéseinek letöltése:

tf2_server4

Majd a frissítések alkalmazása:

tf2_server5

Majd jöhet a játék maga. Készüljünk körülbelül 3GB-nyi adatra.

tf2_server6

Majd amikor letöltődött, akkor vissza kell, hogy kapjuk a promptot.

tf2_server7

Amennyiben kész vagyunk, akkor így kell, hogy kinézzen a tf2 home könyvtára, és a tf2_server tartalma.

tf2_server8

Ezzel készen is állunk a telepítéssel a TF2 szerver indítható is.

Sajnos alapból nem tudjuk a háttérbe tenni a programot. Ezért trükközésül a screen segédprogramot használjuk. Ezáltal a terminál bezárását követően is futni fog a háttérben a TF2 szerverünk.

TF2 userrel:

$ screen -md -S tf2 /home/tf2/tf2_server/srcds_run -game tf -maxplayers 15 +map pl_badwater

Ha scriptelni szeretnénk, és rootként akarjuk meghívni a parancsot, de hogy a tf2 felhasználónkkal fusson:

#su - tf2 -c "screen -md -S tf2 /home/tf2/tf2_server/srcds_run -game tf -maxplayers 15 +map pl_badwater"

tf2_server9

Amennyiben be szeretnénk lépni a screen-be, abban az esetben kaphatunk “Cannot open your terminal ‘/dev/pts/4’ – please check.” hibaüzenetet. Erre a workaround a következő.

# su - tf2
# script /dev/null
# screen -rd

tf2_server10

Ha pedig sikeresen fut a TF2 szerverünk, akkor valami hasonlót kell látnunk a screen-be. (detacholni a “CTRL + d”-vel tudunk)

tf2_server11

Ha valaki látni szeretné élőben, annak itt van egy videó is. (youtube link)

Egyedi konfiguráció

Természetesen nem csak az indítási parancs argumentumaként adhatunk meg beállítási lehetőségeket. Létrehozhatunk egy konfigurációs állományt, amibe definiáljuk a TF2 szerverünk működését.

$ vi tf2_server/cfg/server.cfg
// Server Name
hostname "game.xorp.hu"

// Rcon Cvars
rcon_password "titkosjelszavad" //Set's remote control password
sv_rcon_banpenalty 15 //Number of minutes to ban users who fail rcon authentication
sv_rcon_log 1 //Enable/disable rcon logging.
sv_rcon_maxfailures 3 //Max number of times a user can fail rcon authentication before being banned
sv_rcon_minfailures 5 //Number of times a user can fail rcon authentication in sv_rcon_minfailuretime before being banned
sv_rcon_minfailuretime 10 //Number of seconds to track failed rcon authentications

// Server Password
//sv_password "insert a password here" // Password protects server

mapcyclefile "cfg/mapcycle.txt"

// Server Cvars
mp_allowspectators 1 //Toggles whether the server allows spectator mode or not
mp_autocrosshair 0
mp_autoteambalance 0 //Toggles server autoteambalance
mp_respawnwavetime 0
mp_disable_respawn_times 1
mp_bonusroundtime 5 //Time in seconds after round win until round restarts
mp_chattime 5 //amount of time in seconds players can chat after the game is over

mp_decals 1
mp_defaultteam 1
mp_disable_autokick 1 //Prevents a userid from being auto-kicked
mp_enableroundwaittime 0 //Enable timers to wait between rounds.
mp_fadetoblack 0 //fade a player's screen to black when he dies
mp_falldamage 5 //Amount of damage players sustains from a fall
mp_flashlight 0 //Toggles flashlight on or off
mp_footsteps 1 //Toggles footsteps on or off
mp_forcecamera 0 //Restricts spectator modes for dead players
mp_forcerespawn 1
mp_fraglimit 0
mp_idlemaxtime 999999 //Maximum time a player is allowed to be idle (in minutes)
mp_maxrounds 999999 //max number of rounds to play before server changes maps
mp_teams_unbalance_limit 2 //Teams are unbalanced when one team has this many more players than the other team. (0 disables check)
mp_time_between_capscoring 5 //Delay between scoring of owned capture points.
mp_timelimit 30 //game time per map in minutes
mp_winlimit 999999 //Max number of rounds one team can win before server changes maps
sv_allow_color_correction 1 //Allow or disallow clients to use color correction on this server.
sv_allow_wait_command 0 //Allow or disallow the wait command on clients connected to this server.
sv_allowdownload 1 //Allow clients to download files
sv_allowupload 1 //Allow clients to upload customizations files
sv_alltalk 0 //Players can hear all other players, no team restrictions
sv_alternateticks 0 //If set, server only simulates entities on even numbered ticks.
sv_autosave 0 //Set to 1 to autosave game on level transition. Does not affect autosave triggers.
sv_bonus_challenge 0 //Set to values other than 0 to select a bonus map challenge type.
sv_cacheencodedents 1 //If set to 1, does an optimization to prevent extra SendTable_Encode calls.
sv_cheats 0 //Allow cheats on server
sv_clearhinthistory 0 //Clear memory of server side hints displayed to the player.
sv_consistency 0 //Whether the server enforces file consistency for critical files
sv_contact "" //Contact email for server sysop
sv_downloadurl "" //Location from which clients can download missing files
sv_enableoldqueries 1 //Enable support for old style (HL1) server queries
sv_pausable 0 //Is the server pausable.

// Lan or internet play, Server region cvars
sv_lan 0 //Server is a lan server ( no heartbeat, no authentication, no non-class C addresses )
sv_region 3 // Region Codes: 0 - US East coast, 1 - US West coast, 2 - South America, 2 - South America, 3 - Europe, 4 - Asia, 5 - Australia, 6 - Middle East, 7 - Africa, 255 - world

//server Logging
sv_log_onefile 0 //Log server information to only one file.
sv_logbans 1 //Log server bans in the server logs.
sv_logblocks 0 //If true when log when a query is blocked (can cause very large log files)
sv_logecho 0 //Echo log information to the console.
sv_logfile 1 //Log server information in the log file.
sv_logflush 0 //Flush the log file to disk on each write (slow).
sv_logsdir "logs" //Folder in the game directory where server logs will be stored.

//Server Rates
sv_maxcmdrate 0 //(If sv_mincmdrate is > 0), this sets the maximum value for cl_cmdrate.
sv_maxrate 40000 //Max bandwidth rate allowed on server, 0 == unlimited
sv_maxreplay 2 //Maximum replay time in seconds
sv_maxupdaterate 105 //Maximum updates per second that the server will allow
sv_mincmdrate 0 //This sets the minimum value for cl_cmdrate. 0 == unlimited.
sv_minrate 0 //Min bandwidth rate allowed on server, 0 == unlimited
sv_minupdaterate 100 //Minimum updates per second that the server will allow

// Bot settings
tf_bot_quota "15" //Determines the total number of TF2 Bots in the game. Only has effect is "tf_bot_quota_mode" = "fill" or "match".
tf_bot_quota_mode "fill"
// If 'normal', the server will never add/remove TFbots without explicit commands and bot_quota has no effect.
// If 'fill', the server will adjust bots to keep N players in the game, where N is bot_quota.
// If 'match', the server will maintain a 1:N ratio of humans to bots, where N is bot_quota.
tf_bot_join_after_player "0" // 0 = bots stay, 1 = bots are only on if at least 1 human player is on

Üdvözlő szöveg

Egyedi üdvözlő táblákat hozhatunk létre a szerverünkhöz. Ezt fogják látni majd a csatlakozók. Ide kiírhatunk szabályokat, beállításokat.

tf2_motd

Ehhez a következő file-t szerkesszük, illetve hozzuk létre:

$ vi tf2_server/tf/cfg/motd.txt
Ide jöhet a sok szöveg, ami meg fog jelenni ott is. Ebbe a file-ba tehetünk HTML kódot is!

Rendszer indótó script

Természetesen jó lenne a friss TF2 szerverünket valahogy rávenni, hogy amikor a Linux indul, akkor indítsa a játék szervert is. Ehhez egy scriptet érdemes létrehozni.

# vi /etc/init.d/tf2
# replace  with the user you created above
SRCDS_USER="tf2"
 
# Do not change this path
PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
# The path to the game you want to host. example = /home/newuser/dod
DIR=/home/tf2/tf2_server
DAEMON=$DIR/srcds_run
 
# Change all PARAMS to your needs.
PARAMS="-game tf +map pl_badwater"
NAME=SRCDS
DESC="source dedicated server"
 
case "$1" in
    start)
        echo "Starting $DESC: $NAME"
        if [ -e $DIR ]; then
            cd $DIR
            su $SRCDS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"
        else
            echo "No such directory: $DIR!"
        fi
        ;;
 
    stop)
        if screen -ls |grep $NAME; then
            echo -n "Stopping $DESC: $NAME"
            kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
            echo " ... done."
        else
            echo "Couldn't find a running $DESC"
        fi
        ;;
 
    restart)
        if screen -ls |grep $NAME; then
            echo -n "Stopping $DESC: $NAME"
            kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
            echo " ... done."
        else
            echo "Couldn't find a running $DESC"
        fi
        echo -n "Starting $DESC: $NAME"
        cd $DIR
        screen -d -m -S $NAME $DAEMON $PARAMS
        echo " ... done."
        ;;
 
    status)
        # Check whether there's a "srcds" process
        ps aux | grep -v grep | grep srcds_r > /dev/null
        CHECK=$?
        [ $CHECK -eq 0 ] && echo "SRCDS is UP" || echo "SRCDS is DOWN"
        ;;
 
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac
 
exit 0

A felhasználót, a PATH, és PARAM változókat állítsuk a saját rendszerünk szerint.

Majd a következő paranccsal adjuk a rendszer indítási szekvenciához.

# cd /etc/init.d/
# update-rc.d tf2 defaults

tf2_server13

Természetesen kézzel is vezérelhetjük a script által a TF2 szerverünket:

# /etc/init.d/tf2 status
# /etc/init.d/tf2 stop
# /etc/init.d/tf2 start
# /etc/init.d/tf2 restart

tf2_server12

Összegzés

A Team Fortress 2 egy nagyon jó játék. Érdekes, cseles, és kicsit taktikus. Én magam órákat el tudtam vele tölteni. Nagyobb társaságban pedig igazi unaloműző lehet. Ha valaki akar hozzán csatalkozni, vagy csak egy helyet keres ahol tud TF2-t játszani, az nézzen be a game.xorp.hu szerverre.