Teraz jest N 28 kwi, 2024 13:38


Misje typu znajdz i zniszcz

Archiwum działów sekcji Operation Flashpoint
  • Autor
  • Wiadomość
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

  • Posty: 1784
  • Dołączył(a): Cz 19 sie, 2004 13:20
  • Lokalizacja: Łódź

Misje typu znajdz i zniszcz

PostPn 15 gru, 2008 22:28

Mówiąc o misjach typu znajdź i zniszcz mam na myśli grupę misji w których należy zniszczyć (zazwyczaj wysadzić) jakiś obiekt czy pojazd, których dokładnego położenia nie znamy - nie chodzi mi o lokalizowanie i likwidację wroga.

Podchodząc do tego w najprostszy sposób robiło się dwie rzeczy. Albo umieszczało się gdzieś cel/cele zaznaczając w briefingu tylko przybliżony obszar, albo szło się o krok dalej i dawało celowi rozrzut podczas wstawiania. Oba takie rozwiązania mają spore wady.
W pierwszym przypadku cel jest zawsze w tym samym miejscu, więc po jednokrotnym przejściu misji wiemy już gdzie co jest - to nie jest duży problem przy misjach SP i ma tą zaletę że można bardzo bogato wykonać otoczenie celu (obiekty w charakterze dekoracji, obstawa, bliskie patrole itp.).
Drugi sposób jest o tyle lepszy, że sami nie wiemy gdzie pojawi się cel. Niestety na tym kończą się zalety. Każdy obiekt ma losowaną pozycję niezależnie więc jeśli zrobimy obóz np. z ogniska i trzech namiotów to samym rozrzutem nie uzyskamy tego obozu w losowym miejscu. Ten problem dotyczy także (a może raczej przede wszystkim) "obstawy" celu. Z bogiem sprawa jeśli cel jest pojazdem, bo wtedy możemy zrobić go dowódcą i jeśli ma rozrzut to reszta grupy pojawi się koło niego (o ile mają domyślnie ustawione "w szyku"). Niestety jest druga wada - mamy wyznaczony losowo obszar i miejsce w którym umieszczony zostanie obiekt jest całkowicie losowe, czyli np. ukryta ciężarówka z amunicją może pojawić się na szczerym polu (świetna kryjówka...), a skrzynie z amunicją pojawić się wtopiona w ścianie budynku lub drzewie (co mało realistycznie wygląda).

Najlepszy wariant byłby taki który pozwalałby ustalić kilka konkretnych miejsc w którym może pojawić się cel i określić prawdopodobieństwo że tam się pojawią. Teoretycznie gracz może poznać wszystkie te miejsca, ale nie zakładam, że misje będzie się rozgrywać więcej niż kilkanaście razy, a trzy cele z których każdy może pojawić się w czterech miejscach dają sporą liczbę kombinacji.

Moja propozycja rozwiązania problemu jest dosyć prosta i nie wymaga skryptu. Wystarczy wstawić nasz cel np. skrzynie z amunicją i nazwać ją cel. Następnie wstawić element logiczny i utworzyć mu cztery pukty trasy. W inicjacji elementu logicznego wpisujemy los = random (4), a następnie w kolejnych punktach trasy w polu warunku los > 0, los >1, los > 2 i los > 3. W polach przy aktywacji każdego z pkt trasy umieszczamy cel setPos getPos this. Cel pojawi się w jednym z punktów trasy elementu logicznego które można swobodnie przesuwać. Koło gracza można wstawić wyzwalacz z warunkiem true i z wpisem player setPos getPos cel - wystarczy opóźnić aktywację wyzwalacza o sekundę i będziemy przenoszeni na skrzynkę co pozwoli skontrolować gdzie dokładnie się pojawia i nanieść ewentualne poprawki (aby z góry określić gdzie się pojawi wystarczy zamienić los = random (4) na np. los = 3.

Oczywiście sama skrzynka wygląda jako cel dziwnie, więc dodam parę małych namiotów. Wstawiam namiot i nazywam go namiot1, a obok niego wyzwlacz z warunkiem true i z wpisanym namiot1 setPos [(getPos cel select 0), (getPos cel select 1)+3)]. trzeba dać jeszcze sekundę opóźnienia aktywacji i namiot zawsze będzie pojawiał się względem skrzynki (warto najpierw zaplanować obozowisko używając setPos i getPos). Aby dać następny namiot wystarczy skopiować go razem z wyzwalaczem, zmienić wpis w wyzwalczu na namiot1_1 setPos [(getPos cel select 0), (getPos cel select 1)-3)]. Przesuniecie można dawać jakie się ma ochotę, a kierunek jest taki jak określimy w edytorze.

Podobnie można postąpić z obstawą. Dla uproszczenia zakładam że to małe obozowiska partyzantów rozproszone w lesie, więc można przy nich spotkać paru ludzi, a patrole nie krążą wokół nich tylko po prostu po całej okolicy. Przemieszczenie grupy ludzi realizuje się podobnie jak przedmiotów. Można zrobić grupę, wstawić jej punkt trasy zaraz koło niej i w przy aktywacji wpisać "_x setPos getpos cel" forEach thislist; [group this, 0] setWPPos getPos cel. Trzeba tylko dać sekundę opóźnienia punktowi trasy. Wszyscy żołnierze wylądują na skrzyni, ale od razu się rozejdą zajmując miejsca w szyku. Można dać małe przesunięcie, aby unknąć ryzyka że któryś zostanie na skrzyni czy "w niej".
Offline
Avatar użytkownika

Sudayev

Major

Major

  • Posty: 509
  • Dołączył(a): So 11 lut, 2006 15:44

PostWt 16 gru, 2008 11:01

Ekstra. Wlasnie takiego modulu poszukiwalem od dawna i uwazalem jest to awykonalne by wraz z obiektem przemieszczac takze jednostki i inne obiekty.
OFP Jungle Fever | Beta Test Team
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostWt 16 gru, 2008 11:19

Jeśli tych obiektów do przemieszczenia będzie robić się dużo, bo dodamy ognisko, uaza, budynki itd (albo i całą bazę), to warto może zrobić to przesunięcie hurtowo:
-Stworzyć jakąś globalną tablicę obiektów do przesunięcia, np obiektyDoPrzesuniecia i w inicjacji każdego obiektu wpisać:
Kod: Zaznacz cały
obiektyDoPrzesuniecia = obiektyDoPrzesuniecia + [this]

-obliczyć wektor przesunięcia w chwili, gdy cel już się ustatkuje, czyli cos w rodzaju:
Kod: Zaznacz cały
pozCelu = getPos cel; przesuniecie = [(pozCelu select 0) - (pozPierw select 0),(pozCelu select 1) - (pozPierw select 1)];

gdzie pozPierw jest wzięta z pierwotnej lokacji celu
-przesunięcie zrobić tylko w jednym miejscu, np w jakimś opóźnionym wyzwalaczu:
Kod: Zaznacz cały
"tmpPos = getPos _x;_x setPos [(tmpPos select 0)+(przesuniecie select 0),(tmpPos select 1)+(przesuniecie select 1)]" forEach obiektyDoPrzesuniecia;

Oczywiście powyższe ma sens tylko w przypadku dużej (liczebnej w obiekty) siedziby wroga
Offline
Avatar użytkownika

reyhard

Pułkownik

Pułkownik

  • Posty: 1455
  • Dołączył(a): So 12 mar, 2005 09:56
  • Lokalizacja: wielkiego brata

PostWt 16 gru, 2008 15:31

Jak komuś się chce, to można i przy pomocy fwatcha to ładnie zrobić. Stawiamy sobie na deserowej wyspie na przykład obiekty, każdemu z nich dajemy w polu inicjalizacji skrypt, do odpalenia ([this] exec "k.sqs).

w init.sqs dajemy k=[]

p jest to obiekt, będący punktem odniesienia dla wszystkich rozstawianych obiektów
Kod: Zaznacz cały
;k.sqs
_u = _this select 0
~random(5)+1
_pos = [(getpos _u select 0)-(getpos p select 0),(getpos _u select 1)-(getpos p select 1),(getpos _u select 2)]
_type = typeOf _u
_dir = getdir _u
k=k+[[_pos,_type,_dir]];publicVariable "k";
~5
~random(1)
?(bah):exit
bah=true
_n=0
{;call loadFile format[":file write camp_med.sqd %1_%2 %3", "pos",_n, (k select _n)];_n=_n+1}foreach k
exit


powyższy skrypt stworzy tablice, ze współrzędnymi, typem i obrotem obiektu, która jest zapisana w katalogu fwatcha. Kopiujemy sobie ten plik i wsadzamy go później do misji.

przykład
Kod: Zaznacz cały
[
[[-4.11035,-0.532959,0],"fire",103.011],
[[0.0283203,7.23291,0],"reammoboxgerm",0],
[[7.01758,-5.9812,0],"i44_zeltbahn",313.141],
[[0.435547,5.27563,0],"ec_jerrycan5",0],
[[-6.97168,-4.96924,0],"i44_zeltbahn",0],
[[4.81836,-0.494141,0],"i44_zeltbahn",294.542],
[[0.0732422,-6.89111,0],"i44_zeltbahn",0],
[[-0.644531,1.13745,0],"rds_fieldkitchen",272.022],
[[3.35938,6.03809,0],"ammolib_ggr",0],
[[-0.613281,6.57373,0.82],"i44radio2",12.4536]
]


w init.sqs wpisujemy potem :
campMed = call loadFile "camp_med.sqd";

a gdy chcemy w jakiejś lokalizacji stworzyć daną strukturę to wpisujemy:
Kod: Zaznacz cały
{_r=(_x select 1) createVehicle [0,0,0];_r setpos [(getpos player select 0)+((_x select 0) select 0),(getpos player select 1) +((_x select 0) select 1),((_x select 0) select 2)];_r setDir (_x select 2);_r inflame true;if((_x select 1) == "rds_radioarty")then{[_r] exec "\RDS_WWII_Radio\radio.sqs"}}foreach campMed

-to jest dla skryptu jest, dla wyzwalacza _r zamienić trzeba na wartość globalną czyli r
-obiekty w tym wypadku będą tworzone w pobliżu gracza, aby to zmienić trzeba sobie zamienić player na nazwę jakiegoś obiektu


Jak widać, można dodać dla poszczególnych obiektów jakieś specjalne parametry czyli na przkyład inflame true albo uruchomić na danym obiekcie skrypt.
Po prostu przyjmij do wiadomości, że nadciąga rewolucja proletariacka, lada dzień Chavez z Castro i Bin Ladenem nadjadą na białym traktorze i uwolnią ciemiężony lud polski spod władzy międzynarodowego kapitału.

Powrót do Operation Flashpoint

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 43 gości