Komentarze

# The Lost and Damned Tips: Chopper vs. Chopper
  1. gra wygląda ciekawie, chciałem w nia pograć, ale nikt nie dołącza do mojego serwera...


Prezentacja

Gamemody jest zasobem, który kontroluje wszelkie zagadnienia związane z grą. Dzięki niemu możemy przekazać graczom co mają robić, spawnować ich, tworzyć drużyny, zdefiniować co muszą zrobić by wygrać czy też zdobyć punkty. Przykładem są tu mody typu Race i Deathmatch.


Czym tak właściwie jest ‘gamemode’?

Mówiąc krótko gamemodem nazywamy skrypt, który w pełni korzysta z systemu map MTA. Oznacza to, że gamemod nie ma żadnych specyfikacji map umieszczonych wewnątrz niego tj. rozmieszczenie pojazdów czy tez spawny graczy. toteż gamemod powinien mieć możliwość załadowania plików map właśnie z tymi danymi. Dzięki temu pojedyńczy gamemod może mieć zdefiniowane różne mapy, a dodatkowo gracze mogą stworzyć swoje własne mapy korzystając z Map Editora.


Pliki map

Pliki map są to przede wszystkim pliki XML wraz z rozszerzeniami mapy. One właśnie definiują środowisko mapy. Nie mają one za zadanie zmienić zasad gry – od tego są gamemody.

Każdy element w mapie odpowiada jakiemuś plikowi mapy (.map), odpowiadające za podstawowe składnie, np. spawnpointy, obiekty, pojazdy.


Przykład

Za przykład posłuzy nam gamemod ‘Capture the Flag’. Mapa dla tego typu gamemodu musi mieć zdefiniowane spawnpointy, miejsce gdzie umieszczona jest flaga oraz ewentualnie obiekty i pojazdy. Prosty plik mapy mógłby wyglądać tak:

<map>

<spawnpoint id=’spawnpoint1′ posX=’1959.5487060547′ posY=’-1714.4613037109′ posZ=’877.25219726563′ rot=’63.350006103516′ model=’0′/>

<pickup id=’Armor 1′ posX=’1911.083984375′ posY=’-1658.8798828125′ posZ=’885.40216064453′ type=’armor’ health=’50′ respawn=’60000′/>

<flag posX=’1959.5487060547′ posY=’-1714.4613037109′ posZ=’877.25219726563′ team=’blue’ />

</map>

Tutaj możecie zauważyć dwa podstawowe elementy MTA – spawnpointy oraz pickupy. Co ważniejsze w kodzie pojawia się tzw. ‘flagę’(‘flag’), która definuje nam miejsce oraz kolor flagi.


Przykład wyciąganie informacji z pliku .map

Wspomniany wyzej gamemod musi zostać wypasarzony w jakies elementy, które są zdefiniowane w plikach .map oraz ich przetworzenie:

– pozyskuje tabelę wraz ze wszystkimi elementami flagi

local flagElements = getElementsByType ( ‘flag’ )

– pętla

for key, value in pairs(flagElements) do

– get our info

local posX = getElementData ( value, ‘posX’ )

local posY = getElementData ( value, ‘posY’ )

local posZ = getElementData ( value, ‘posZ’ )

local team = getElementData ( value, ‘team’ )

– tworzenie obiektu wedle pozycji flagi

createObject ( 1337, posX, posY, posZ )

– output dla drżyny. że utworzyliśmy bazę

outputChatBox ( ‘Base for team ‘ .. team .. ‘ created’ )

end

Funkcja getElementsByType pobiera tabelę wszystkich elementów pewnego typu (typ ten odpowiada odpowiedniemu węzłowi w pliku .map).Natomiast funkcja getElementData może zostać urzyta do pobrania odpowiednich atrybutów zawartych w pliku xml. W tym prostym przykładzie w miejscu flagi stworzony zostaje obiekt oraz wyświetlona informacja w czacie. W rzeczywistości jednak będziesz musiał się nieco bardziej wysilić ustalając odpowiednie ‘kolizje’, które ustalają kiedy gracz przechwytuje flagę.


Map manager

Po przeczytaniu powyższych informacji powinieneś dojść do wniosku, że każdy gamemod powinien składać się z dwóch elementów:

* zasoby gamemodu, które zawsze są takie same

* wiele różnych zasobów mapy, które nadają gamemodowi jego specyficzny charakter

Teraz zamist pisać odzielny loader dla każdego gamemodu posłużymy się Map managerem, który dysponuje odpowiednią funkcja odpowiedzialną za ładowanie gamemodów oraz map. Kiedy wpiszesz odpowiednią komendę – np.’gamemode ctf ctf-italy’ on uruchomi oba zasoby tj. ‘ctf’ oraz ‘ctf-italy’. tak więc zostanie uruchomione zdarzenie ‘onGamemodeMapStart’, które powie zasobowi ‘ctf’, że została załadowana odpowiednia mapa. Po tym zasób ‘ctf’ odczyta informację z ‘ctf-italy’ i zacznie spawnowac graczy.


Jak urzyać mapmanagera?

By z niego skorzystać musimy ‘zaznaczyć’ nasz gamemod. Ściślej mówiąc musimy ustawić atrybut ‘type’ (zamknięty w tagu ”) wewnątrz xml. Dodatkowo możemy ustawić nasza własną nazwę dla gamemodu, np. ‘Capture the flag’, która zostanie wyświetlona w ASE zamiast nazwy pliku zasobu.

<!– meta.xml w gamemodzie ‘cowcatapult’ –>

<meta>

<info type=’gamemode’ name=’Cow catapulting 2.0′/>

</meta>

Jeżeli nasz gamemod będzie ładował różne mapy powinniśmy dodać odpowiedniego ‘ładowacza’ dla:

* onGamemodeMapStart

* onGamemodeMapStop (gdy niezbędne jest odładowanie)

Są one niezbędne gdy nasz gamemod zostaje uruchominony i zatrzymany (zakończony) oraz kiedy korzysta z parametrów zasobów map. Dzięki funkcji ‘ładowacza’ możemy pobrac wszelkie niezbędne informacje z zasobów map oraz plików konfiguracyjnych.

function startCtfMap( startedMap ) — startedMap zawiera odniesienie do zasobu mapy

local mapRoot = getResourceRootElement( startedMap ) — pobiera rdzeń węzła rozpoczętej mapy

local flagElements = getElementsByType ( ‘flag’ , mapRoot ) — pobiera wszystkie flagi z .map oraz ustawia je w tabelę

– dalej ładuje informacje tak jak w przykładzie wyżej

— spawnuje graczy etc.

end

addEventHandler(‘onGamemodeMapStart’, getRootElement(), startCtfMap)


Kompatybilując mapy

Mapy są oddzielnymi zasobami. Dzięki nimi nie będziemy musieli edytować gamemodu by wykonać mapę oraz także pozwala na spakowanie z nimi specyfikację mapy, pliki konfiguracyjne.

By wykonać mapę kompatybilną z naszym gamemodem, otwórz jego zasób meta.xml i ustaw atrybit ‘type’ do odpowiedniej mapy. Natomiast atrybuty ‘gamemodeu’ musza być ciągła listą (bez spacji) spaces) of gamemode resource names that the map works with.

<!– meta.xml mapy –>

<meta>

<info type=’map’ gamemodes=’cowcatapult,assault,tdm’/>

</meta>

Kiedy już to wykonamy adminibędą wstanie skorzystać z tych dwóch komend: /gamemode nazwa_gamemodu [Nazwa_mapy] oraz /changemap [Nazwa_mapy] [nazwa_gamemodu]


Co jeszcze powinniśmy zrobić?

Istnieje jeszcze wiele zasobów, w które każdy gamemod powinien zostać wyposarzony:


Helpmanager/ Pomoc

Helpmanager jest standardowo dołączonym interfejsem, który wyświetla wszelkie wskazówki dla graczy. Oprócz standardowych komend gracz moze dodać tu nieco od siebie. Pomoc zawiera zakładki prowadzące do innych części pomocy. Tak więc możemy tu umieścić krótki opis naszego gamemodu czy też naszą listę komend dostępnych w gamemodzie.

There are basicially two ways to use the helpmanager:

* dostarcza podstawowych informacji o co chodzi w gamemodzie

* w wyświetlanym okienku pomocy możemy dodać dowolny element GUI. Dzięki temu bedziemy mogli przekazać konkretniejszych informacji o naszym gamemodzie.


Scoreboard / tabela wyników

Scoreboard jest tabelą, która wyświetla informacje o drużynach oraz graczach aktualnie grajacych na serwerze. W przeciwieństwie do konkurencyjnego multiplayera – SA-MP w MTA mamy mozliwość dowolnej modyfikacji zawartości tej tabeli, dodając do niej przeróżne kolumny. Dla przykładu może tu posłuzyć kolumna ‘points’, która w gamemodzie ‘Control The Flag’ może przedstawiać liczbę osób, które zabił gracz lub ile razy zdobył flagę.


Map cycler

Map cycler odpowiedzialny jest za to jakie gamemody i mapy będą rozgrywane na serwerze. Odpowiada m.in. za to ile razy ma byc rozegrana mapa w rundzie zanim przejdzie do kolejnej rundy. By to jednak uczynić musimy wskazać kiedy gamemod się kończy (np. po końcu rundy).