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
Töltsük le a steam csomagot.
$ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
Tömörítsük ki.
$ tar -xvzf steamcmd_linux.tar.gz
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:
Majd a frissítések alkalmazása:
Majd jöhet a játék maga. Készüljünk körülbelül 3GB-nyi adatra.
Majd amikor letöltődött, akkor vissza kell, hogy kapjuk a promptot.
Amennyiben kész vagyunk, akkor így kell, hogy kinézzen a tf2 home könyvtára, és a tf2_server tartalma.
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"
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
Ha pedig sikeresen fut a TF2 szerverünk, akkor valami hasonlót kell látnunk a screen-be. (detacholni a „CTRL + d”-vel tudunk)
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.
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
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
Ö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.