Serwer gry
Wstęp
Dedykowany serwer gry służy do uruchamiania środowiska w którym inni gracze mogą prowadzić rozgrywki. Serwer działa w modelu „atrakcji w parku rozrywki”, oczekuje na komplet graczy wymaganych do gry, po czym ją rozpoczyna. Po skończonej partii sytuacja powtarza się.
Uruchamianie i zatrzymanie
Po uruchomieniu serwera do dyspozycji zostaje oddana nam konsola poleceń, za pomocą której możemy konfigurować oraz sterować serwerem. Korzystając z polecenia /help możemy wyświetlić listę dostępnych komend, z kolei /vars_list wyrzuci listę dostępnych opcji konfiguracji wraz z ich aktualnymi wartościami.
Aby ostatecznie włączyć serwer w tryb oczekiwania na graczy, wydajemy komendę /server_start. Komendą /server_stop zatrzymujemy aktywność serwera, lub po prostu zamykamy aplikację.
Konfiguracja
Konfiguracja serwera dedykowanego opiera się na kilkunastu zmiennych których wartości możemy dowolnie modyfikować, dostosowując tym samym działanie aplikacji do naszych potrzeb i wymagań. Aby odczytać domyślną konfigurację wydajemy polecenie /vars_list.
W celu zmiany określonej zmiennej wydajemy komendę składającą się z jej nazwy a następnie wartości która chcemy przypisać – przykłądowo: /sv_maxplayers 20.
Wszystkie ustawienia serwera zaleca się wykonywać przed jego uruchomieniem. Niektóre ze zmiennych, pełniących kluczową rolę w działaniu programu, wprost nie mogą być zmienione w trakcie jego działania.
Poniżej zostały przedstawione ważniejsze zmienne wraz z ich opisem oraz wpływem na działanie serwera gry:
sv_allownocgc – Ustawienie w pozycji prawy (true) powoduje wyłączenie kontroli zasad gry u klienta, a co za tym idzie umożliwia wykonanie większej ilości ruchów graczowi zanim jeszcze ujrzy ich efekt na ekranie, na przykład z powodu zbyt dużego opóźnienia, zmienna ta w żaden sposób nie wpływa na bezpieczeństwo gry.
sv_allowspectate – Ustawienie w pozycji prawy (true) umożliwia obserwacje trwającej rozgrywki graczom nie biorącym udziału w grze.
sv_autoai – Ustawienie w pozycji prawy (true) powoduje zastąpienie graczem komputerowym osoby która opuściła serwer gry w trakcie rozgrywki drużynowej.
sv_bestmap – W stanie ustawienia powoduje dobieranie najlepszych, pod względem ilości miejsc na mapie w stosunku do ilości graczy, pliku mapy spośród zdefiniowanych w zmiennej sv_map.
sv_fastbotprocessing – Pozwala na szybkie przetwarzanie akcji botów (bez zbędnego opóźnienia) w sytuacji gdy ruch gracza komputerowego nie jest widziany przez żadnego z graczy, opcja ta domyślnie stosowana jest dla gry jednoosobowej. W sytuacji gdy na serwerze przebywają osoby obserwujące rozgrywkę, nie ma ona żadnego znaczenia gdyż każdy ruch jest widziany przez obserwatora.
sv_map – Określa plik rozgrywanej mapy. Podanie kilku wartości po znaku średnika „;” spowoduje losowanie mapy spośród podanych pozycji.
sv_maxclients – Maksymalna ilość graczy jaka może przybywać na serwerze.
sv_maxplayers – Maksymalna ilość graczy jaka może brać udział w grze.
sv_maxteamplayers – Maksymalna ilość graczy jaka może znajdować się w jednej drużynie.
sv_minplayers – Minimalna, wymagana ilość graczy aby rozpocząć rozgrywkę.
sv_motd0, sv_motd1, sv_motd2, sv_motd3 – Kolejne linijki wiadomości powitalnej, ukazującej się graczowi po podłączeniu do serwera.
sv_name – Nazwa serwera.
sv_port – Określa port połączeń TCP oraz UDP na których działa serwer, w przypadku uruchomienia dwóch lub więcej serwerów na jednym komputerze wartości te muszą być różne dla każdego z nich.
sv_public – Ustawienie w pozycji prawy (true) powoduje zarejestrowanie serwera w lobby, a tym samym jego widoczność dla innych potencjalnych graczy.
sv_requirelogin – Wymusza konieczność podania danych logowania gracza, oraz poprawnie przejście procedury uwierzytelniania, w celu dołączenia do serwera.
sv_teams – Ilość drużyn dostępnych na serwerze. Wartość „0” odpowiada ich brakowi. Zmienna ta nie może zostać zmieniona w trakcie aktywnej gry.
sv_turntime – Czas tury w trakcie gry wyrażony w sekundach.
sv_waittime – Czas oczekiwania na rozpoczęcie gry w sekundach, po osiągnięciu wymaganej liczby graczy przebywających na serwerze określonej w zmiennej sv_minplayers.
Przykładowa konfiguracja serwera:
/sv_map (4) Bridge.efm;(4) Lost Temple.efm;(8) The Hunters.efm;(12) Iceberg.efm /sv_maxclients 16 /sv_minplayers 2 /sv_motd0 Witaj na przykładowym serwerze Enemy Flag /sv_motd1 Życzę miłej i owocnej gry... :) /sv_name Wojownicy czerwonej flagi /sv_teams 2 /sv_turntime 45 /sv_waittime 120
Oczywiście wartości domyślnych które nam odpowiadają nie musimy ponownie ustawiać.
Skrypty
Aby zautomatyzować proces konfiguracji serwera, możemy posłużyć się skryptami z zestawem komend, gdyż jak łatwo zauważyć wprowadzanie całej konfiguracji przy każdym uruchomieniu serwera jest dość męczące i niewygodne. W tym celu wpisujemy wszystkie polecenia które mają wykonać się przy uruchomieniu aplikacji do pliku tekstowego. Plik ten, o dowolnej nazwie, umieszczamy w folderze z grą w podkatalogu configs. Następnie aby załadować konfigurację wydajemy polecenie /exec nazwa_pliku.txt.
A oto przykładowy zapis konsoli serwera dla wcześniej podanej konfiguracji:
16:04:51 | >exec moj_serwer.txt 16:04:51 | >sv_map (4) Bridge.efm;(4) Lost Temple.efm;(8) The Hunters.efm;(12) Iceberg.efm 16:04:51 | sv_map = (4) Bridge.efm;(4) Lost Temple.efm;(8) The Hunters.efm;(12) Iceberg.efm 16:04:51 | >sv_maxclients 16 16:04:51 | sv_maxclients = 16 16:04:51 | >sv_minplayers 2 16:04:51 | sv_minplayers = 2 16:04:51 | >sv_motd0 Witaj na przykładowym serwerze Enemy Flag 16:04:51 | sv_motd0 = Witaj na przykładowym serwerze Enemy Flag 16:04:51 | >sv_motd1 Życzę miłej i owocnej gry... :) 16:04:51 | sv_motd1 = Życzę miłej i owocnej gry... :) 16:04:51 | >sv_name Wojownicy czerwonej flagi 16:04:51 | sv_name = Wojownicy czerwonej flagi 16:04:51 | >sv_teams 2 16:04:51 | sv_teams = 2 16:04:51 | >sv_turntime 45 16:04:51 | sv_turntime = 45 16:04:51 | >sv_waittime 120 16:04:51 | sv_waittime = 120 16:04:51 | >server_start 16:04:51 | Serwer uruchomiony.
Dodatkowo na końcu konfiguracji została dopisana linijka od razu włączająca serwer gry. Dzięki temu jednym poleceniem serwer gotowy jest w pełni do działania. Plików konfiguracji możemy mieć tyle ile potrzebujemy. Możemy również umieszczać w nich spis komend które wykonują jakąś określoną akcję i używać ich w trakcie działania serwera. Przykład prostego skryptu który ustawia grę drużynową między obecnymi na serwerze graczami a botami:
/sv_teams 2 /set_players_team 1 /set_bots_team 2 /set_waittime 10
A oto przykład zastosowania tego typu skryptu i jego wynik działania w konsoli serwera:
16:08:23 | >exec players_vs_bots.txt 16:08:23 | >sv_teams 2 16:08:23 | sv_teams = 2 16:08:23 | >set_players_team 1 16:08:23 | Druzyna zostala ustawiona. 16:08:23 | >set_bots_team 2 16:08:23 | Druzyna zostala ustawiona. 16:08:23 | >set_waittime 10
Linie pliku konfiguracyjnego, zaczynające się znakiem średnika „;”, traktowane są jako komentarz i nie są przetwarzane przez serwer podczas parsowania.
Aby jeszcze bardziej uprościć proces stawiania serwera gry do 2 kliknięć myszką, możemy wymusić automatyczne ładowanie naszej konfiguracji bez wpisywania polecenia /exec. Wystarczy że podamy nazwę pliku do wykonania (tego samego co dla polecenia /exec) jako parametr pliku wykonywalnego serwera, modyfikując na przykład linię poleceń skrótu. Przykładowo:
"C:\Program Files\BBProject\Enemy Flag\efserver.exe" moj_serwer.txt
Po uruchomieniu serwera z tego skrótu automatycznie zostaną wykonane polecenia z podanego pliku.