
Wyobraźmy sobie że mamy taki cel misji "wykradnij ważne dane przeciwnikowi i dostarcz do bazy". Oczywiście chodzi o zdobycie nośnika z danymi np. notatnika albo laptopa, może to być też dowolne przenośne urządzenie (jakiś prototyp?). W misji dla jednego gracza było to banalne. Wystarczyło dojść do jakiegoś miejsca i wrócić do bazy, ale w coopie sprawy się komplikują.
Jeśli graczy jest kilku trzeba stwierdzić który znalazł się obok obiektu (i go wziął), umożliwić przejęcie obiektu w przypadku śmierci noszącego i ustalić czy obiekt dotarł do bazy. Najprostsze byłoby gdyby istniał przedmiot który z technicznego punktu widzenia jest amunicją - gracz mógłby go podnieść tak jak każdy magazynek i wyrzucić kiedy by chciał, gdyby zginął każdy mógłby podnieść obiekt i nie byłoby problemu z wykryciem tego czy gracz po powrocie do bazy ma ten przedmiot. Niestety nie ma czegoś takiego, a w każdym razie nie w każdym modzie i można sprobować obejść ten problem robiąc taką misję na czystym OFP.
Moja propozycja jest taka. Obiektem jest jakiś przedmiot z kategorii "puste" np. radio, jeśli ktoś z grupy gracza (również AI) znajdzie się blisko tego radia, radio znika, a ten koleś staje się "nosicielem" (o czym informuje sideChat'em). Jeśli on zginie radio pojawi się obok niego i ponownie każdy z grupy graczy będzie mógł je podnieść. Jeśli "nosiciel" będzie dość blisko "bazy" cel będzie zaliczony.
Takie rozwiązanie odrzuca możliwość przekazywania przedmiotu między graczami, ale w gruncie rzeczy jest to zbędne. Jedyny problem to sytuacja w której "nosiciel" nie może chodzić dlatego przyjmę że taka osoba nie może wziąść przedmiotu i nie może go dłużej przenosić gdy zostanie ranna. W sytuacji gdy "nosiciel" w chwili śmierci znajdował się w pojeździe, zostanie on z niego "wyrzucony" i radio pojawi się koło ciała (co eliminuje kwestię ustalania komu z pozostałych pasażerów przypada radio). Jestem pewien że te uproszczenia rozjuszą zwolenników skryptowania, ale będą musieli to jakoś przecierpieć
Istnieje jeszcze kilka potencjalnie "niebezpiecznych" sytuacji, a mianowicie śmierć "nosiciela" w jakimś pojeździe latającym/pływającym lub śmierć tegoż na piętrze budynku, ale póki co nie zaprzątam sobie tym głowy.
Od strony technicznej wygląda to tak. Wstawiamy gracza i dodajemy mu paru żołnierzy do grupy (jest dowódcą). Wstawiamy radio i nazywamy je np. obiekt. Wstawiamy wyzwalacz o wymiarach 3 na 3, cykliczny i grupujemy go z grupą gracza (ma reagować na kogokolwiek z grupy) i nazywamy go check. W polu warunek ma być: this AND vehcile (thisList select 0) == (thisList select 0) AND canStand (thisList select 0) - chodzi także o to by gracz nie siedział w jakimś pojedzie np. śmigłowcu 100 metrów nad obiektem. W polu przy aktywacji wpisujemy nosiciel = (thislist select 0); obiekt setPos [0,0,0]; check setPos [0,0,0]; nosiciel sideChat "mam obiekt". Następnie wstawiamy kolejny wyzwalacz cykliczny który w polu warunek ma not alive nosiciel OR not canStand nosiciel, a w polu przy aktywacji obiekt setPos getPos nosiciel; check setPos getPos nosiciel. Wstawiamy trzeci wyzwalacz cykliczny, który w polu warunek ma not alive nosiciel, a w polu przy aktywacji nosiciel action ["EJECT",vehicle nosiciel].
Na koniec wstawmy gdzieś daleko cywila (najlepiej tam gdzie nie może zginąć) i w inicjacji wpiszmy mu this = nosiciel oraz oficera o nazwie baza i wyzwalacz z warunkiem nosiciel distance baza < 5 i z hint "Zadanie wykonane" w polu przy aktywacji.
Można jeszcze dorzucić pusty jeep i można się pobawić w testowanie. Jako dowódca możemy kazać swoim ludziom podchodzić do radia, a także posłać im kulkę w głowę albo nogi dla testu (również gdy siedzą w samochodzie).
http://www.toya.net.pl/~rycop/schowek/Z ... .Intro.zip
Jeśli graczy jest kilku trzeba stwierdzić który znalazł się obok obiektu (i go wziął), umożliwić przejęcie obiektu w przypadku śmierci noszącego i ustalić czy obiekt dotarł do bazy. Najprostsze byłoby gdyby istniał przedmiot który z technicznego punktu widzenia jest amunicją - gracz mógłby go podnieść tak jak każdy magazynek i wyrzucić kiedy by chciał, gdyby zginął każdy mógłby podnieść obiekt i nie byłoby problemu z wykryciem tego czy gracz po powrocie do bazy ma ten przedmiot. Niestety nie ma czegoś takiego, a w każdym razie nie w każdym modzie i można sprobować obejść ten problem robiąc taką misję na czystym OFP.
Moja propozycja jest taka. Obiektem jest jakiś przedmiot z kategorii "puste" np. radio, jeśli ktoś z grupy gracza (również AI) znajdzie się blisko tego radia, radio znika, a ten koleś staje się "nosicielem" (o czym informuje sideChat'em). Jeśli on zginie radio pojawi się obok niego i ponownie każdy z grupy graczy będzie mógł je podnieść. Jeśli "nosiciel" będzie dość blisko "bazy" cel będzie zaliczony.
Takie rozwiązanie odrzuca możliwość przekazywania przedmiotu między graczami, ale w gruncie rzeczy jest to zbędne. Jedyny problem to sytuacja w której "nosiciel" nie może chodzić dlatego przyjmę że taka osoba nie może wziąść przedmiotu i nie może go dłużej przenosić gdy zostanie ranna. W sytuacji gdy "nosiciel" w chwili śmierci znajdował się w pojeździe, zostanie on z niego "wyrzucony" i radio pojawi się koło ciała (co eliminuje kwestię ustalania komu z pozostałych pasażerów przypada radio). Jestem pewien że te uproszczenia rozjuszą zwolenników skryptowania, ale będą musieli to jakoś przecierpieć
Istnieje jeszcze kilka potencjalnie "niebezpiecznych" sytuacji, a mianowicie śmierć "nosiciela" w jakimś pojeździe latającym/pływającym lub śmierć tegoż na piętrze budynku, ale póki co nie zaprzątam sobie tym głowy.
Od strony technicznej wygląda to tak. Wstawiamy gracza i dodajemy mu paru żołnierzy do grupy (jest dowódcą). Wstawiamy radio i nazywamy je np. obiekt. Wstawiamy wyzwalacz o wymiarach 3 na 3, cykliczny i grupujemy go z grupą gracza (ma reagować na kogokolwiek z grupy) i nazywamy go check. W polu warunek ma być: this AND vehcile (thisList select 0) == (thisList select 0) AND canStand (thisList select 0) - chodzi także o to by gracz nie siedział w jakimś pojedzie np. śmigłowcu 100 metrów nad obiektem. W polu przy aktywacji wpisujemy nosiciel = (thislist select 0); obiekt setPos [0,0,0]; check setPos [0,0,0]; nosiciel sideChat "mam obiekt". Następnie wstawiamy kolejny wyzwalacz cykliczny który w polu warunek ma not alive nosiciel OR not canStand nosiciel, a w polu przy aktywacji obiekt setPos getPos nosiciel; check setPos getPos nosiciel. Wstawiamy trzeci wyzwalacz cykliczny, który w polu warunek ma not alive nosiciel, a w polu przy aktywacji nosiciel action ["EJECT",vehicle nosiciel].
Na koniec wstawmy gdzieś daleko cywila (najlepiej tam gdzie nie może zginąć) i w inicjacji wpiszmy mu this = nosiciel oraz oficera o nazwie baza i wyzwalacz z warunkiem nosiciel distance baza < 5 i z hint "Zadanie wykonane" w polu przy aktywacji.
Można jeszcze dorzucić pusty jeep i można się pobawić w testowanie. Jako dowódca możemy kazać swoim ludziom podchodzić do radia, a także posłać im kulkę w głowę albo nogi dla testu (również gdy siedzą w samochodzie).
http://www.toya.net.pl/~rycop/schowek/Z ... .Intro.zip
Ostatnio edytowano Cz 25 gru, 2008 13:10 przez alderous, łącznie edytowano 1 raz