Losowy patrol

Edytor Arma (Arma, Arma2, Arma2OA)

Moderatorzy: kondor, Inkwizytor

elgyd
Posty: 113
Rejestracja: 11 sierpnia 2011, 18:27
ID Steam:

Re: Losowy patrol

Post autor: elgyd »

Dzięki. A da się do tego dopisać czas patrolowania pa tym jak wróg mnie wykryje?
Awatar użytkownika
tasior2103
Posty: 83
Rejestracja: 10 kwietnia 2010, 19:45
ID Steam:
ID gracza: 0
Kontakt:

Re: Losowy patrol

Post autor: tasior2103 »

Możesz wpisać w triggerza czas po jakim ma zacząć działać (w sekundach) od aktywacji (takie trzy pola w których domyślnie wpisane jest 0). Z tym że jest tu jeden problem. Od momentu rozpoczęcia odliczania je jego rzeczywistej aktywacji warunek aktywacji musi być ciągle spełniany inaczej nie zadziała. Oznacza to tyle że jak wejdziesz w trigger (zacznie liczyć) i wyjdziesz z niego zanim minie czas który mu wpisałeś to tigger nie zadziała. Ale nie jestem pewien czy tak to jest w przypadku "Detected by".
http://www.armafans.pl
<ze względu na drastyczne sceny ten link został usunięty>

Obrazek
jawor
Posty: 74
Rejestracja: 01 lipca 2012, 12:26
ID Steam:

Re: Losowy patrol

Post autor: jawor »

Wyskakuje błąd- nie wiem czemu. Poradzicie? :

grupa1 = group this; for Eachunits grupa1; waituntil {!isnil "bis_fnc_init"}; [group grupal1, getPos grupa1, 100] call bis_fnc_taskPatrol;
Awatar użytkownika
Sejtan
Posty: 112
Rejestracja: 03 kwietnia 2007, 20:54
ID Steam: sejtan24
Numer GG: 6538171
Lokalizacja: Starogard Gdański

Re: Losowy patrol

Post autor: Sejtan »

jawor pisze:Wyskakuje błąd- nie wiem czemu. Poradzicie? :

grupa1 = group this; for Eachunits grupa1; waituntil {!isnil "bis_fnc_init"}; [group grupal1, getPos grupa1, 100] call bis_fnc_taskPatrol;
:o Dla pewności, czy przypadkiem oczy mnie nie mylą, Twojego posta przeczytałem kilka razy i okazało się..., że jednak dobrze widzę, ale uwierzyć nadal nie mogę. Rozumiem, że można się pogubić w skryptach i nie rozumieć komend i czasami ciężko się w tym wszystkim połapać... Ale na Boga. O składni

Kod: Zaznacz cały

{komenda _x} forEach units nazwa_grupy
lub

Kod: Zaznacz cały

{komenda _x} forEach units group nazwa_lidera
w TYM wątku jest napisane już chyba wszystko. Nawet to małe nieporozumienie między mną a Artkiem, zaowocowało wyjaśnieniem kiedy się stosuje i co powoduje użycie tych komend. Ty zamiast skopiować sobie gotowe, podane przez nas przykłady, wymyślasz jakieś bzdury. Powiedz mi skąd wziąłeś ten wynalazek?
jawor pisze:grupa1 = group this; for Eachunits grupa1; waituntil {!isnil "bis_fnc_init"}; [group grupal1, getPos grupa1, 100] call bis_fnc_taskPatrol;
...a zresztą... nieważne... W mojej ocenie, jeśli ktoś nie potrafi poradzić sobie z "kopiuj/wklej", powinien sprzedać komputer i zainwestować w... hmmm.... O! np bierki, albo chińczyka... albo coś w tym stylu. Tam jest troszkę mniej myślenia, nie ma skryptów, komend, ani nawet kopiuj/wklej.
Awatar użytkownika
Artek3333
Posty: 578
Rejestracja: 29 czerwca 2007, 20:02
ID Steam:
ID gracza: 0
Lokalizacja: Żywiec

Re: Losowy patrol

Post autor: Artek3333 »

@jawor, aby skorzystać z patrolu który jest zainicjowany w grze, nie potrzeba wtedy zewnętrznych skryptów np. UPS. Wchodzisz na moduły i ustawiasz na mapie taki moduł, który nazywa się (Funkcje). Następnie tworzysz grupę wojaków, a dowódcę tej grupy nazywasz np. Potrol1. W pierwszym lub w którymś tam punkcie nawigacyjnym tejże grupy, w okienku uruchamianie wpisujesz.

Kod: Zaznacz cały

waituntil {!isnil "bis_fnc_init"};
[group patrol1, getPos patrol1, 100] call bis_fnc_taskPatrol;
Nie trzeba wtedy nazywać grupy, tylko dowódcę patrol1. Tyle ile utworzysz grup, tyle możesz ustawić patroli, ale muszą się zgadzać nazwy dowódców w kolejnych komendach wpisanych w punkt. Nawig.
Do uruchomienia tych patroli można również zastosować wyzwalacze.

KOPIOWANIE
Uruchamiasz grę, otwierasz jednostkę, wyzwalacz tam gdzie chcesz coś napisać, wychodzisz z gry do pulpitu - klawisze, przytrzymaj lewy alt a następnie tab i gra zwija ci się do pulpitu
Zaznacz jakąś komendę np. z forum i kopiujesz ją, wchodzisz z powrotem do gry, myszką klikasz na okienko, tam gdzie chcesz wkleić komendę i wklejasz, a robi się to klawiszami – przytrzymujesz lewy Ctrl i wciskasz V i to co kopiowałeś wkleja ci się w okienko. Mam nadzieję, że dość jasno ci to wytłumaczyłem.
jawor
Posty: 74
Rejestracja: 01 lipca 2012, 12:26
ID Steam:

Re: Losowy patrol

Post autor: jawor »

Panowie. Dzięki za łopatologię :)

Szukam porostu czegoś dla mnie i nie za bardzo mogę znaleźć. Chodzi o to, że po wykryciu chcę aby wróg dotarł w miejsce wystrzału, w okolice miejsca z którego strzelałem, obszedł je dobrze np w promieniu 100m i wrócił z powrotem na pozycję startową. Wszystkie te rzeczy które testuję sprawdzają się do momentu że wróg dochodzi do miejsca mojego wystrzału ale zamiast wrócić na pozycję startową próbuje mnie odszukać. Nie mogę się z tym uporać. Czy w ogóle mogę Was jeszcze prosić o pomoc?
Awatar użytkownika
Artek3333
Posty: 578
Rejestracja: 29 czerwca 2007, 20:02
ID Steam:
ID gracza: 0
Lokalizacja: Żywiec

Re: Losowy patrol

Post autor: Artek3333 »

Może spróbuj za pomocą punktów nawigacyjnych. Wstaw wyzwalacz z obrębem np. 400m ustaw wykryty przez daną stronę i zsynchronizuj go z pierwszym punktem nawig. Wrogiego patrolu. Drugi pnk. nawig. Grupie daj typu, znaleźć i zniszczyć i ustaw promień rozmieszczenia na 400m, trzeci pnk. naw. Daj w miejsce startową grupy, może być zwykły ruszaj do.

Działanie:
Po wzbudzeniu alarmu np. strzałem gracza, grupa automatycznie używa pnk. nawig. Typu znajdź i zniszcz. Przeszukuje teren, trwa to pewien okres czasu a jak nie znajdzie nic, to wraca do kolejnego pnk. nawig.
Nie wiem, jaki będzie tego efekt, ja mało korzystam z punktów nawig. Ale punktami też można stworzyć cuda, nie na daremno są w edytorze. ;)
Awatar użytkownika
Sejtan
Posty: 112
Rejestracja: 03 kwietnia 2007, 20:54
ID Steam: sejtan24
Numer GG: 6538171
Lokalizacja: Starogard Gdański

Re: Losowy patrol

Post autor: Sejtan »

Kod: Zaznacz cały

_marker1 = createMarker ["warningArea", position player];   // tworzy marker "warningArea" w miejscu wystrzału, w tym przykładzie jest to miejsce gracza,
_marker2 = createMarker ["warning", position player];   	// tworzy marker "warning" w miejscu wystrzału, w tym przykładzie jest to miejsce gracza,
"warningArea" setMarkerShape "ELLIPSE"; 					// określa marker jako elipse,
"warningArea" setMarkerSize [250, 250]; 					// określa wielkość markera, tym samym określa strefę poszukiwań
"warningArea" setMarkerBrush "BORDER"; 						// określa rodzaj markera,
"warningArea" setMarkerColor "ColorRed";  					// określa kolor markera,
"warning" setMarkerType "hd_warning"; 						// określa typ markera, 
"warning" setMarkerColor "ColorRed";						// określa kolor markera,

rus1 assignAsDriver car1;									// rus1 przypisany jako kierowca car1,
{_x assignAsCargo car1} forEach [rus2, rus3, rus4];			// rus2, 3 i 4 przypisani jako pasażerowie,
[rus1, rus2, rus3, rus4] orderGetIn true;					// nakazuje wsiąść do car1,
waitUntil {count crew car1 == 4};							// skrypt czeka do momentu gdy załoga car1 będzie liczyć 4 osoby,
rus1 doMove markerPos "warning";							// rus1 czyli kierowca, jedzie do markera "warning",
rus1 setSpeedMode "FULL";									// rus1 zapier***a maksymalną prędkością,
waitUntil {car1 distance markerPos "warning" < 15};			// skrypt czeka do momentu gdy car1 zbliży się do markera "warning" na odległosc mniejszą niż 15m,

if (car1 distance markerPos "warning" < 15) then            // warunek if (jeżeli) car1 jest w odległosci poniżej 15m od markera "warning" then (to),
{ 
	doStop rus1; 											// rus1 zatrzymuje car1,
	sleep 3; 												// czekamy 3 sekundy,
	{doGetOut _x && unassignVehicle _x} forEach units grp1; // grupa grp1 (czyli wszystkie rus) dostaje rozkaz wysiadać i już nie jest przypisana do car1,
	waitUntil {count crew car1 == 0};						// znowu skrypt czeka az załoga car1 wyniesie 0, czyli cała wysiądzie,
	sleep 3;												// czekamy 3 sekundy,
	_nul = [rus1, "warningArea"] execVM "JPS.sqf"; 			// grupa rus1 rozpoczyna patrol markera "warningArea" za pomocą skryptu JPS.sqf,
	sleep 60;												// czas w jakim grupa rus1 ma patrolowac marker 
	rus1 assignAsDriver car1;								// rus1 ponownie przypisany jako kierowca car1,
	{_x assignAsCargo car1} forEach [rus2, rus3, rus4];		// rus2, 3 i 4 ponownie przypisani jako pasażerowie,
	[rus1, rus2, rus3, rus4] orderGetIn true;				// nakazuje wsiąść do car1,
	waitUntil {count crew car1 == 4};						// ponownie czekamy aż wszyscy wsiądą do car1,
	rus1 doMove position pos1;								// rus1 jedzie do pos1, czyli tam skąd przyjechał, pos1 to element logiczny ustawiony w edytorze,
	waitUntil {car1 distance pos1 < 5};						// ponownie czekamy aż car1 jest w odległości mniejszej niż 5m od pos1,
		if (car1 distance pos1 < 5) then 					// ponownie warunek if (jeżeli) dystans car1 jest mniejszy niz 5m od pos1 then (to), 
		{ 													
			doStop rus1; 									// rus1 zatrzymuje się,
			sleep 3; 										// czekamy 3 sekundy,
			{doGetOut _x && unassignVehicle _x} forEach units grp1; // grupa grp1 dostaje rozkaz wysiadać i już nie jest przypisana do car1, 
			deleteMarker "warning";							// usuwa marker "warning", 
			deleteMarker "warningArea";						// usuwa marker "warningArea", 
		}; 
};
Obrazek

Jeszcze parę słów wyjaśnień. W wyzwalacz w uruchamianie wpisz

Kod: Zaznacz cały

player addEventHandler ["Fired", {n = [] execVM "patrol.sqf"}];
i zgrupuj go (F2) z żołnierzem na którego wystrzały ma reagować patrol. W moim przypadku to był gracz, dlatego zamiast nazwa_jednostki piszę player. Komenda ta uruchomi powyższy skrypt w momencie wystrzału playera z broni. Żeby sprawdzić jak to działa, najlepiej pobrać misję przykładową którą tu dołączam.
Załączniki
test.Chernarus.rar
(4.86 KiB) Pobrany 253 razy
jawor
Posty: 74
Rejestracja: 01 lipca 2012, 12:26
ID Steam:

Re: Losowy patrol

Post autor: jawor »

N I E S A M O W I T E !!! :rox



Zarąbiste to jest. A ja próbuję zrobić to bez samochodu i nie wychodzi. Grupa rus1 dociera do warningArea, ale go nie patroluje- stoi w miejscu i nie wraca do pos1. Co jest nie tak?



_marker1 = createMarker ["warningArea", position player]; // tworzy marker "warningArea" w miejscu wystrzału, w tym przykładzie jest to miejsce gracza,
_marker2 = createMarker ["warning", position player]; // tworzy marker "warning" w miejscu wystrzału, w tym przykładzie jest to miejsce gracza,
"warningArea" setMarkerShape "ELLIPSE"; // określa marker jako elipse,
"warningArea" setMarkerSize [50, 50]; // określa wielkość markera,
"warningArea" setMarkerBrush "BORDER"; // określa rodzaj markera,
"warningArea" setMarkerColor "ColorRed"; // określa kolor markera,
"warning" setMarkerType "hd_warning"; // określa typ markera,
"warning" setMarkerColor "ColorRed"; // określa kolor markera,


rus1 doMove markerPos "warning"; // rus1 czyli kierowca, jedzie do markera "warning",
rus1 setSpeedMode "FULL"; // rus1 zapier***a maksymalną prędkością,
waitUntil {car1 distance markerPos "warning" < 15}; // skrypt czeka do momentu gdy car1 zbliży się do markera "warning" na odległosc mniejszą niż 15m,

if (rus1 distance markerPos "warning" < 15) then // warunek if (jeżeli) car1 jest w odległosci poniżej 15m od markera "warning" then (to),
{

_nul = [rus1, "warningArea"] execVM "JPS.sqf"; // grupa rus1 rozpoczyna patrol markera "warningArea" za pomocą skryptu JPS.sqf,
sleep 60; // czas w jakim grupa rus1 ma patrolowac marker
rus1 doMove position pos1; // rus1 jedzie do pos1, czyli tam skąd przyjechał, pos1 to element logiczny ustawiony w edytorze,
waitUntil {rus1 distance pos1 < 5}; // ponownie czekamy aż car1 jest w odległości mniejszej niż 5m od pos1,
if (rus1 distance pos1 < 5) then // ponownie warunek if (jeżeli) dystans car1 jest mniejszy niz 5m od pos1 then (to),
{
sleep 3; // czekamy 3 sekundy,
deleteMarker "warning"; // usuwa marker "warning",
deleteMarker "warningArea"; // usuwa marker "warningArea",
};
};
tom3kb
Posty: 511
Rejestracja: 04 marca 2011, 06:30
ID Steam:
ID gracza: 209283
Lokalizacja: Sieradz

Re: Losowy patrol

Post autor: tom3kb »

Nie zostawiłeś w swoim skrypcie odniesień do car1, którego jak zrozumiałem nie używasz np:

Kod: Zaznacz cały

waitUntil {car1 distance markerPos "warning" < 15}; // skrypt czeka do momentu gdy car1 zbliży się do markera "warning" na odległosc mniejszą niż 15m,
czy też jakich podobnych.
jawor
Posty: 74
Rejestracja: 01 lipca 2012, 12:26
ID Steam:

Re: Losowy patrol

Post autor: jawor »

OK. A teraz tak: jak zabiję kierowce (rus1)to praktycznie skryprt nie działa. Co z tym zrobić? Reszta wsiada do wozu ale nie ruszają.
ODPOWIEDZ

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