ArmA 2 - Mechanika misji
Mechanika misji opiera się zazwyczaj na grupie wyzwalaczy odpowiedzialnych za aktywację poszczególnych elementów misji, w tym zakończeń. Działają one zazwyczaj na podstawie typowej konstrukcja logicznej: Jeśli X to COŚ. Pole "Aktywacji" w Triggerze odpowiada za to, co się stanie - to jest nasze COŚ. A jak określać X?
Poniżej najbardziej podstawowe (a zarazem i najbardziej potrzebne) "triki" związane ze stroną techniczną misji.
IMPLIKACJA:
Czyli jak sprawić, by DOPIERO W MOMENCIE, gdy warunek X zostanie spełniony stało się określone COŚ (w tym wypadku mam na myśli zachowanie jednostek).
Wszystko opiera się na Synchronizacji, na tryb której przełączamy się w edytorze po pacnięciu F5. Dajmy na to, że chcemy by jednostka przeszła z punktu A do punktu B po spełnieniu warunku X (w tym wypadku będzie to wezwanie radiem).
Stawiasz jednostkę
Ustawiasz jej dwa waypointy - pierwszy w punkcie A, drugi w punkcie B
Stawiasz wyzwalacz, 0x0, aktywacja Radio Alfa, typ zmiana
Przełączasz się na tryb synchronizacji
Przeciągasz niebieską mackę z wyzwalacza do PIERWSZEGO punktu trasy jednostki
Zrobione. Teraz jednostka przejdzie do punktu A i będzie czekać aż kodem radiowym alfa (0-0-1) pozwolisz jej ruszyć do punktu B.
Warunek X może być dowolny. W ten sposób możesz udostępnić swojej grupie wsparcie innych grup wzywane radiem lub alarm (przykład poniżej) po którym jednostki wroga z pobliskiego garnizonu ruszą do zaalarmowanej jednostki.
PRZYKŁAD - alarm
Jesteś Rosjaninem, masz zdobyć wioskę trzymaną przez Amerykanów
Ustawiasz wroga w punkcie A (cel do zdobycia)
Ustawiasz wroga w punkcie B (pobliski garnizon)
Ustawiasz wyzwalacz o pożądanych wymiarach (jednostki wschodu wykryte w obrębie wyzwalacza przez jednostki zachodu aktywują alarm i spowodują pożądaną akcję - POZA wyzwalaczem nie) aktywacja WSCHÓD i poniżej zamiast Obecny\Present wybierasz Odkryty przez Zachód\Detected by West, typ zmiana i OK
Teraz stawiasz wrogowi w punkcie B (garnizon) 2 waypointy - pierwszy w garnizonie, tuż koło nich, drugi w punkcie A (celu) by udali się tam gdy wróg zauważy Twoje jednostki;
Synchronizujesz wyzwalacz z pierwszym, garnizonowym punktem trasy
I voila. Gdy jakiekolwiek jednostki wschodu zostaną odkryte przez Amerykanów, jednostki z garnizonu ruszą na pomoc siłom w punkcie A.
AKTYWOWANY PRZEZ
By dany wyzwalacz był aktywowany tylko przez daną grupę, a nie stronę (tj. by trigger aktywowała zamiast wszystkich jednostek partyzanckich tylko wybrana grupa, np. gracza) należy po ustawieniu wyzwalacza pacnąć F2 (grupowanie) i zgrupować (poprzez przeciągnięcie niebieskiej macki z triggera do wybranej jednostki) wyzwalacz z jednostką. Voila - teraz tylko Twoi wybrańcy będą mogli spełnić warunek triggera.
ELIMINACJA CELU
Wpisz w warunku wyzwalacza:
NOT (alive banan1)
Wyzwalacz aktywuje się gdy jednostka nazwana banan1 zginie.
ELIMINACJA WROGA NA TERENIE
Zakładamy, że miasteczko, które ma zostać oczyszczone z wroga (jednostek wschodu - Rosjan) jest malutkie (kilka domków) i mieści się w domyślnych wymiarach wyzwalacza (50x50), dla uproszczenia. Ty sobie już wszystko dostosujesz.
Tworzysz zatem wyzwalacz o wymiarach 50x50 (jak wyżej wspomniałem, są ustawione domyślnie przy stawianiu wyzwalacza), aktywacja WSCHÓD (z rozwijanego menu) a później niżej wybierasz Nieobecny\Not Present (w zależności od wersji językowej), rodzaj Koniec#nr i... voila. Gdy wróg zostanie wymieciony lub ucieknie (jednostki wschodu nie będą obecne w obrębie wyzwalacza) misja zostanie zakończona.
STRATY:
COŚ nastąpi gdy w grupie jednostki "banan1" zostanie mniej niż 5 jednostek:
(count units group banan1) < 5
DOTARCIE DO PUNKTU:
Powiedzmy, że jesteś Amerykaninem i w puncie wyjścia czeka na Ciebie helikopter. Ustaw tuż koło niego wyzwalacz, o rozmiarach dajmy na to 15x15, aktywacja ZACHÓD Obecny\Present, typ Koniec#nr; Teraz kliknij F2 (grupowanie) i przeciągnij cienką niebieską linię z wyzwalacza do Twojej jednostki i ustaw "Ktokolwiek z grupy". W ten oto sposób gdy ktokolwiek z drużyny dojdzie do śmigłowca warunek się spełni i misja zostanie zaliczona
UWAGA: Z tego co kojarzę aktywacja przez "cała drużyna" jest zbugowana - jeśli polegnie któryś z członków wyzwalacz nie zadziała (tak było kiedyś)
USZKODZENIE JEDNOSTKI
Załóżmy że mamy wrogą jednostkę o nazwie banan1, jest to pojazd pancerny. Gdy jednostka ta zostanie uszkodzona, aktywuje się wyzwalacz, który spowoduje aktywację zmiennej uszkodzenie1.
1. Wstawiamy wyzwalacz o rozmiarze 0x0, w polu Typ wybieramy Zmiana.
2. W polu Warunek wpisujemy getDammage banan1 >=0.1 - spowoduje to aktywację wyzwalacza gdy jednostka (w naszym przypadku pojazd pancerny) o nazwie banan1 zostanie lekko uszkodzona. Uszkodzenia zawierają się w przedziale od 0 do 1, gdzie 1 oznacza pojazd zniszczony.
3. Jeśli chcemy, by wyzwalacz aktywował się w momencie, gdy pojazd nie będzie mógł się poruszać i załoga wysiądzie z wozu (z powodu zbyt dużych uszkodzeń), postępujemy tak, jak w punkcie powyżej, lecz w polu Warunek wpisujemy not (CanMove banan1).
4. W polu Przy aktywacji wpisujemy uszkodzenie1=true. Oczywiście wyzwalacz może spowodować zupełnie inne zdarzenie, to co się stanie po jego uruchomieniu zależy tylko i wyłącznie od nas.
WYKRYCIE OBIEKTU
Przypuśćmy, że mamy wyznaczone zadanie - zlokalizować wrogi obóz. Musimy stworzyć wyzwalacz, który aktywuje się, gdy znajdziemy tenże obóz i spowoduje zaliczenie celu misji.
1. Wstawiamy wyzwalacz o rozmiarze 0x0, w polu Typ wybieramy Zmiana.
2. W polu warunek wpisujemy PLAYER KnowsAbout namiot1 > 1 - spowoduje to aktywację wyzwalacza gdy obiekt o nazwie namiot1 zostanie wykryty (należy zwrócić uwagę, że wykrycie nie oznacza tylko zauważenia obiektu, musi on również pokazać się na mapie - bez lornetki jest to dosyć trudne). Liczba (w tym wypadku 1) oznacza "stopień wykrycia" obiektu przez jednostkę.
3. W polu Przy aktywacji wpisujemy obj1=true; tskObj1 setTaskState "SUCCEEDED" - spowoduje to aktywację zmiennej obj1 oraz zaliczenie w briefingu zadania o nazwie tskObj1.
Jeśli obóz, który mamy wykryć jest duży i znajduje się w nim kilka namiotów lub innych obiektów, należy nadać nazwę każdemu z nich. Załóżmy, że mamy obóz, w którym znajdują się dwa duże namioty (każdy nazwany kolejno: namiot1, namiot2) oraz flaga (o nazwie flaga1). Jeśli chcemy, aby wyzwalacz aktywował się, gdy którykolwiek z tych obiektów zostanie wykryty, jego warunek powinien wyglądać tak:
(PLAYER KnowsAbout namiot1 > 1) OR (PLAYER KnowsAbout namiot2 > 1) OR (PLAYER KnowsAbout flaga1 > 1)
ŁĄCZONE
A teraz pytanie - jak w prosty sposób połączyć kilka objective'ów?
Załóżmy że są 3:
a) Eliminacja celu
b) Oczyszczenie wioski
c) Ewakuacja
Stawiasz na podstawie tego, co powyżej 3 wyzwalacze: Odpowiedzialny za zabicie celu banan1, za oczyszczenie wioski i ewakuacyjny. Teraz we wszystkich ustawiasz typ "Zmiana" zamiast "Koniec#nr" i wpisujesz w aktywacji wyzwalaczy odpowiednio dla:
a) wyzwalacza odpowiedzialnego za zabicie banan1 - obj1=true
b) wyzwalacza odpowiedzialnego za oczyszczenie wioski - obj2=true
c) wyzwalacza odpowiedzialnego za ewakuację - obj3=true
Zapisujesz zmiany - "OK"
Potem tworzysz nowy wyzwalacz, rozmiar 0x0, brak aktywacji, typ Koniec#nr
Zamiast "this" w warunku wpisz
obj1 AND obj2 AND obj3
I voila. Po spełnieniu wszystkich warunków (po zabiciu banana, oczyszczeniu wioski i wycofaniu się do helikoptera) misja się zakończy i wyświetli debriefing końca#nr ileś.
To póki co wszystko co dla Was mamy. Za pomocą tego oraz Cośtam=True można naprawdę wiele, ale za dużo czasu zajęłoby tłumaczenie nawet tych częściej wykorzystywanych wariantów. Miłego kombinowania :)
Poniżej najbardziej podstawowe (a zarazem i najbardziej potrzebne) "triki" związane ze stroną techniczną misji.
IMPLIKACJA:
Czyli jak sprawić, by DOPIERO W MOMENCIE, gdy warunek X zostanie spełniony stało się określone COŚ (w tym wypadku mam na myśli zachowanie jednostek).
Wszystko opiera się na Synchronizacji, na tryb której przełączamy się w edytorze po pacnięciu F5. Dajmy na to, że chcemy by jednostka przeszła z punktu A do punktu B po spełnieniu warunku X (w tym wypadku będzie to wezwanie radiem).
Stawiasz jednostkę
Ustawiasz jej dwa waypointy - pierwszy w punkcie A, drugi w punkcie B
Stawiasz wyzwalacz, 0x0, aktywacja Radio Alfa, typ zmiana
Przełączasz się na tryb synchronizacji
Przeciągasz niebieską mackę z wyzwalacza do PIERWSZEGO punktu trasy jednostki
Zrobione. Teraz jednostka przejdzie do punktu A i będzie czekać aż kodem radiowym alfa (0-0-1) pozwolisz jej ruszyć do punktu B.
Warunek X może być dowolny. W ten sposób możesz udostępnić swojej grupie wsparcie innych grup wzywane radiem lub alarm (przykład poniżej) po którym jednostki wroga z pobliskiego garnizonu ruszą do zaalarmowanej jednostki.
PRZYKŁAD - alarm
Jesteś Rosjaninem, masz zdobyć wioskę trzymaną przez Amerykanów
Ustawiasz wroga w punkcie A (cel do zdobycia)
Ustawiasz wroga w punkcie B (pobliski garnizon)
Ustawiasz wyzwalacz o pożądanych wymiarach (jednostki wschodu wykryte w obrębie wyzwalacza przez jednostki zachodu aktywują alarm i spowodują pożądaną akcję - POZA wyzwalaczem nie) aktywacja WSCHÓD i poniżej zamiast Obecny\Present wybierasz Odkryty przez Zachód\Detected by West, typ zmiana i OK
Teraz stawiasz wrogowi w punkcie B (garnizon) 2 waypointy - pierwszy w garnizonie, tuż koło nich, drugi w punkcie A (celu) by udali się tam gdy wróg zauważy Twoje jednostki;
Synchronizujesz wyzwalacz z pierwszym, garnizonowym punktem trasy
I voila. Gdy jakiekolwiek jednostki wschodu zostaną odkryte przez Amerykanów, jednostki z garnizonu ruszą na pomoc siłom w punkcie A.
AKTYWOWANY PRZEZ
By dany wyzwalacz był aktywowany tylko przez daną grupę, a nie stronę (tj. by trigger aktywowała zamiast wszystkich jednostek partyzanckich tylko wybrana grupa, np. gracza) należy po ustawieniu wyzwalacza pacnąć F2 (grupowanie) i zgrupować (poprzez przeciągnięcie niebieskiej macki z triggera do wybranej jednostki) wyzwalacz z jednostką. Voila - teraz tylko Twoi wybrańcy będą mogli spełnić warunek triggera.
ELIMINACJA CELU
Wpisz w warunku wyzwalacza:
NOT (alive banan1)
Wyzwalacz aktywuje się gdy jednostka nazwana banan1 zginie.
ELIMINACJA WROGA NA TERENIE
Zakładamy, że miasteczko, które ma zostać oczyszczone z wroga (jednostek wschodu - Rosjan) jest malutkie (kilka domków) i mieści się w domyślnych wymiarach wyzwalacza (50x50), dla uproszczenia. Ty sobie już wszystko dostosujesz.
Tworzysz zatem wyzwalacz o wymiarach 50x50 (jak wyżej wspomniałem, są ustawione domyślnie przy stawianiu wyzwalacza), aktywacja WSCHÓD (z rozwijanego menu) a później niżej wybierasz Nieobecny\Not Present (w zależności od wersji językowej), rodzaj Koniec#nr i... voila. Gdy wróg zostanie wymieciony lub ucieknie (jednostki wschodu nie będą obecne w obrębie wyzwalacza) misja zostanie zakończona.
STRATY:
COŚ nastąpi gdy w grupie jednostki "banan1" zostanie mniej niż 5 jednostek:
(count units group banan1) < 5
DOTARCIE DO PUNKTU:
Powiedzmy, że jesteś Amerykaninem i w puncie wyjścia czeka na Ciebie helikopter. Ustaw tuż koło niego wyzwalacz, o rozmiarach dajmy na to 15x15, aktywacja ZACHÓD Obecny\Present, typ Koniec#nr; Teraz kliknij F2 (grupowanie) i przeciągnij cienką niebieską linię z wyzwalacza do Twojej jednostki i ustaw "Ktokolwiek z grupy". W ten oto sposób gdy ktokolwiek z drużyny dojdzie do śmigłowca warunek się spełni i misja zostanie zaliczona
UWAGA: Z tego co kojarzę aktywacja przez "cała drużyna" jest zbugowana - jeśli polegnie któryś z członków wyzwalacz nie zadziała (tak było kiedyś)
USZKODZENIE JEDNOSTKI
Załóżmy że mamy wrogą jednostkę o nazwie banan1, jest to pojazd pancerny. Gdy jednostka ta zostanie uszkodzona, aktywuje się wyzwalacz, który spowoduje aktywację zmiennej uszkodzenie1.
1. Wstawiamy wyzwalacz o rozmiarze 0x0, w polu Typ wybieramy Zmiana.
2. W polu Warunek wpisujemy getDammage banan1 >=0.1 - spowoduje to aktywację wyzwalacza gdy jednostka (w naszym przypadku pojazd pancerny) o nazwie banan1 zostanie lekko uszkodzona. Uszkodzenia zawierają się w przedziale od 0 do 1, gdzie 1 oznacza pojazd zniszczony.
3. Jeśli chcemy, by wyzwalacz aktywował się w momencie, gdy pojazd nie będzie mógł się poruszać i załoga wysiądzie z wozu (z powodu zbyt dużych uszkodzeń), postępujemy tak, jak w punkcie powyżej, lecz w polu Warunek wpisujemy not (CanMove banan1).
4. W polu Przy aktywacji wpisujemy uszkodzenie1=true. Oczywiście wyzwalacz może spowodować zupełnie inne zdarzenie, to co się stanie po jego uruchomieniu zależy tylko i wyłącznie od nas.
WYKRYCIE OBIEKTU
Przypuśćmy, że mamy wyznaczone zadanie - zlokalizować wrogi obóz. Musimy stworzyć wyzwalacz, który aktywuje się, gdy znajdziemy tenże obóz i spowoduje zaliczenie celu misji.
1. Wstawiamy wyzwalacz o rozmiarze 0x0, w polu Typ wybieramy Zmiana.
2. W polu warunek wpisujemy PLAYER KnowsAbout namiot1 > 1 - spowoduje to aktywację wyzwalacza gdy obiekt o nazwie namiot1 zostanie wykryty (należy zwrócić uwagę, że wykrycie nie oznacza tylko zauważenia obiektu, musi on również pokazać się na mapie - bez lornetki jest to dosyć trudne). Liczba (w tym wypadku 1) oznacza "stopień wykrycia" obiektu przez jednostkę.
3. W polu Przy aktywacji wpisujemy obj1=true; tskObj1 setTaskState "SUCCEEDED" - spowoduje to aktywację zmiennej obj1 oraz zaliczenie w briefingu zadania o nazwie tskObj1.
Jeśli obóz, który mamy wykryć jest duży i znajduje się w nim kilka namiotów lub innych obiektów, należy nadać nazwę każdemu z nich. Załóżmy, że mamy obóz, w którym znajdują się dwa duże namioty (każdy nazwany kolejno: namiot1, namiot2) oraz flaga (o nazwie flaga1). Jeśli chcemy, aby wyzwalacz aktywował się, gdy którykolwiek z tych obiektów zostanie wykryty, jego warunek powinien wyglądać tak:
(PLAYER KnowsAbout namiot1 > 1) OR (PLAYER KnowsAbout namiot2 > 1) OR (PLAYER KnowsAbout flaga1 > 1)
ŁĄCZONE
A teraz pytanie - jak w prosty sposób połączyć kilka objective'ów?
Załóżmy że są 3:
a) Eliminacja celu
b) Oczyszczenie wioski
c) Ewakuacja
Stawiasz na podstawie tego, co powyżej 3 wyzwalacze: Odpowiedzialny za zabicie celu banan1, za oczyszczenie wioski i ewakuacyjny. Teraz we wszystkich ustawiasz typ "Zmiana" zamiast "Koniec#nr" i wpisujesz w aktywacji wyzwalaczy odpowiednio dla:
a) wyzwalacza odpowiedzialnego za zabicie banan1 - obj1=true
b) wyzwalacza odpowiedzialnego za oczyszczenie wioski - obj2=true
c) wyzwalacza odpowiedzialnego za ewakuację - obj3=true
Zapisujesz zmiany - "OK"
Potem tworzysz nowy wyzwalacz, rozmiar 0x0, brak aktywacji, typ Koniec#nr
Zamiast "this" w warunku wpisz
obj1 AND obj2 AND obj3
I voila. Po spełnieniu wszystkich warunków (po zabiciu banana, oczyszczeniu wioski i wycofaniu się do helikoptera) misja się zakończy i wyświetli debriefing końca#nr ileś.
To póki co wszystko co dla Was mamy. Za pomocą tego oraz Cośtam=True można naprawdę wiele, ale za dużo czasu zajęłoby tłumaczenie nawet tych częściej wykorzystywanych wariantów. Miłego kombinowania :)