Skuteczny sposób na zakończenie misji Coop

Moderator: Inkwizytor

ODPOWIEDZ
eJay
Posty: 769
Rejestracja: 10 stycznia 2007, 18:31
ID Steam:

Skuteczny sposób na zakończenie misji Coop

Post autor: eJay »

Szukam metody kończenia misji Coop po zrealizowaniu wykonanych zadań. Mam na przyklad 2 wyzwalacze:

a) zadanie1=true
b) zadanie2=true

Oba odnosza sie do zrealizowanych zadań, wymaganych do ukonczenia misji. Potem chcialbym, aby gracz(e) musieli dojsc do pewnego miejsca, aby misja zakonczyla sie. Ustawiam wyzwalacz z Ktokolwiek/Obecny z aktywacja end1=true. Nastepnie tworze kolejny wyzwalacz z warunkiem (zadanie1 and zadanie 2 and end1) i zaznaczam Koniec1. Problem w tym, ze to nie dziala.

Zna ktos metode, ktora bylaby JiP oraz MP friendly?
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: kondor »

1. unikajmy opcji domyslnych, a wiec w init.sqf:

Kod: Zaznacz cały

zadanie1 = false;
zadanie2 = false;
end1 = false;
zeby nie zastanawiac sie co te zmienne przechowuja zanim dostaną true
2. Zeby na miec pewnosc ze wszedzie zmienne beda miec ta samą wartość w polach "przy aktywacji" tych wyzwalaczy dodaj:

Kod: Zaznacz cały

PublicVariable "zadanie1";
(i analogicznie zadanie2 oraz end1)
3.JIP istnieje polecenie onPlayerConnected czy cos takiego, ale nie bardzo wiem co mialbym z nim zrobic, wiec powiadomienie o wartosciach zmiennych dla dołączających graczy robię tak:
w init.sqf ustawiam dodatkową zmienną i ją rozgłaszam:

Kod: Zaznacz cały

publikowac_zmienne = true;
publicVariable "publikowac_zmienne";
do mapy dodaje cykliczny wyzwalacz aktywowany na publikowac_zmienne, ktory w polu przy aktywacji uruchami skrypt mniej wiecej o takiej tresci:

Kod: Zaznacz cały

sleep 3;
if(local element_logiczny)then{
 PublicVariable "zadanie1";
 PublicVariable "zadanie2";
 PublicVariable "end1";
};
wtedy nowy ma juz dobre wartosci dla tych zmiennych
Awatar użytkownika
Grey
Posty: 104
Rejestracja: 12 lutego 2007, 15:24
ID Steam:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: Grey »

Komplikacja i brak optymalizacji. Przesylanie publicvariable to zawsze dodatkowy ruch, cos sie moze zgubic. Przesylanie w ciemno cykliczne to generowanie zupelnie zbednego ruchu.

Starczy, ze server pilnuje zadan. Gdy ogolnie zadania zostana zrealizowane, dopiero wtedy server informuje o realizacji.
Wyjatek, jesli chcemy zaznaczac to w notesie, ze zadanie zostalo zrealizowane. Wtedy klienci moga zostac poinformowani.

Tu jest custom script dla laczacego sie playera
http://www.armaholic.com/page.php?al=alias8215

Gdy player sie laczy, mozna rozeslac info ze zadanie zostalo zrealizowane a nie zapetlac.

A tak w ogole to chyba najlepiej uzywac frameworka BAS-f, tam wiekszosc skryptow i warunkow jest juz wlasciwie napisana i opisana, do wyboru do koloru. I nie ma problemu z testowaniem w roznych sytuacjach.
Awatar użytkownika
kondor
Posty: 1526
Rejestracja: 13 marca 2007, 11:50
ID Steam: Przemek_kondor
Kontakt:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: kondor »

Racja sposob moj jest najwyzej sredniej jakosci, ale publicvariable to zaledwie kilka pakietow w protokole tcp - nie moze sie zgubic z definicji.
Framework BASu jest dobrym narzedziem, ale w niektorych misjach czesto jest zbednym nadmiarem. W kazdym badz razie missionmakerzy powinni sie z nim zaznajomic
eJay
Posty: 769
Rejestracja: 10 stycznia 2007, 18:31
ID Steam:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: eJay »

Tak tylko tu chodzi mi bardziej o wlasciwe wpisanie warunkow. Uzywam tegoz Frameworka i jest tam MP Ending Controller, ale wymaga on wpisania warunku i wlasciwego wyzwalacza na mapie.
Awatar użytkownika
Grey
Posty: 104
Rejestracja: 12 lutego 2007, 15:24
ID Steam:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: Grey »

@eJay
Teraz nie bardzo jak mam sie temu przyjerzec, brak czasu.

@kondor
Na marginesie napisze, ze w OFP KAŻDE publicvariable bylo problemem, chyba, ze uzywalo sie addonu CoC, ktory automatyzowal cala wymiane zmiennych, lacznie z ciagami, sprawdzal synchronizacje i nawet umozliwial komunikacje pomiedzy poszczegolnymi maszynami.
eJay
Posty: 769
Rejestracja: 10 stycznia 2007, 18:31
ID Steam:

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: eJay »

Czy ktoś z was wie w jaki sposob poprawnie wykorzystac polecenie "Thislist" w warunku wyzwalacza?

Mam misje coop. Ustawilem wyzwalacz, aktywacja na Wschód. Oprócz tego w warunku dopisałem "aP1 in thislist or aP2 in thislist". Tak wiec chce, aby obie jednostki (sterowane przez graczy) mogly aktywowac ten wyzwalacz. Dodam jeszcze, ze w obrebie wyzwalacza sa dwie jednostki wschodu kierowane przez AI (hmm cos w formie punktu ewakuacyjnego). Obecnosc przynajmniej jednego gracza w tym wyzwalaczu ma zakonczyc misje. Problem jest taki, ze to dziala jedynie w Podglądzie. Kiedy juz testuje misje na serwerze - wychodzi bubel i misja nie chce sie zakonczyc.

Probowalem to zrobic metoda podaną przez kondora (ostatni post) w watku - http://www.armedassault.com.pl/viewtopic.php?f=54&t=817

Jednak wtedy bubel wychodzi jeszcze wiekszy, gdyz misja konczy sie od razu, bez mojej obecnosci w tym wyzwalaczu. Jak poprawnie zastosowac ten thislist, bo ArmA Wiki ma troche pomieszane informacje...
Awatar użytkownika
Trance
Posty: 1090
Rejestracja: 20 maja 2007, 19:06
ID Steam:
ID gracza: 0

Re: Skuteczny sposób na zakończenie misji Coop

Post autor: Trance »

Ja bym proponował połączyc ten wyzwalacz z jednostkami, ktore moga zakonczyc misje w grupe i powinno dzialac, bez instrukcji thislist.
Obrazek
ODPOWIEDZ

Wróć do „Edytor - tworzenie misji, skrypty oraz programowanie”