
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).

2010-03-21 20:33:50
według te rzeczy są najbardziej denerwujące: 1) camperzy. ja rozumiem ze jak na ciebie napieraja to sie ukryjesz, nie m...