"Sterowanie" poczynaniami AI

Edytor Arma (Arma, Arma2, Arma2OA)

Moderatorzy: kondor, Inkwizytor

ODPOWIEDZ
Awatar użytkownika
Vari
Posty: 46
Rejestracja: 15 stycznia 2010, 16:50
ID Steam:
Numer GG: 1022354
ID gracza: 0

"Sterowanie" poczynaniami AI

Post autor: Vari »

Jak mogę zrobić coś takiego, aby dane grupy AI atakowały zdefiniowane regiony(wsie) losowo, a gdy w tych miejscach znajdzie się mój oddział, który je zaatakuje, będą się wycofywać do innych zdefiniowanych regionów (obozy) losowo?
Może to pogmatwane: Chcę zrobić coś w stylu polowania na grupy czedaków. Oni będą losowo atakowali rożne punkty, ja będę dostawał odczyt, gdzie są, podjeżdżał tam, a potem ścigał ich, żeby znaleźć obóz losowo wybrany przez wycofujące się AI spośród najbliższych, mam tylko problem z tą losowością. Ktoś ma jakiś pomysł? Jeżeli nadal źle wytłumaczone, powiedzcie, co jest niejasne, postaram się jakoś uściślić.
krzysiek2222
Posty: 77
Rejestracja: 31 grudnia 2009, 14:51
ID Steam:
ID gracza: 0

Re: "Sterowanie" poczynaniami AI

Post autor: krzysiek2222 »

Jeśli robisz to na punktach trasy to nie jest takie trudne. Robisz tablicę obiektów. Np:

Kod: Zaznacz cały

_objects = [obj1, obj2, obj3, obj4];
Następnie liczysz elementy tablicy:

Kod: Zaznacz cały

_number = count _objects;
A potem pozycję losowego elementu z tablicy:

Kod: Zaznacz cały

_pos = _objects select (floor (random _number));
I wtedy _pos to losowo wybrana pozycja. Obiekty, to może być logika gry albo coś podobnego (niewidzialnego).
W sumie na tej podstawie możesz zrobić taki skrypcik:

Kod: Zaznacz cały

_objects = _this select 0;
_group = _this select 1;
_number = count _objects;
_pos = _objects select (floor (random _number));
_group move _pos;
I w ten sposób masz skrypt, który przyjmuje w parametrze tablicę objektów i jako drugi parametr grupę. Powoduje, że grupa idzie w kierunku losowego objektu.
Mam nadzieję, że nie namęczyłem się, kiedy chodziło o coś innego :D

pzdr
Awatar użytkownika
Vari
Posty: 46
Rejestracja: 15 stycznia 2010, 16:50
ID Steam:
Numer GG: 1022354
ID gracza: 0

Re: "Sterowanie" poczynaniami AI

Post autor: Vari »

Tak tak - o to chodziło, ale jak ostatnio będę miał jeszcze kilka pytań, jeśli nie masz nic przeciwko :>
Gdzie mogę zdefiniować, które grupy mają się tego łapać? Możliwe, że to jakieś oczywiste, ale nie mogę zrozumieć tych zmiennych "_this select cośtam".
krzysiek2222
Posty: 77
Rejestracja: 31 grudnia 2009, 14:51
ID Steam:
ID gracza: 0

Re: "Sterowanie" poczynaniami AI

Post autor: krzysiek2222 »

Kod: Zaznacz cały

_objects = _this select 0;
_group = _this select 1;
_number = count _objects;
_pos = position (_objects select (floor (random _number)));
_group move _pos;
To wklejasz do move.sqf
Robisz wyzwalacz z warunkiem aktywacji:

Kod: Zaznacz cały

(nazwadowodcy knowsAbout twojanazwa) >= 1;
W "Przy aktywacji" wtedy wpisujesz:

Kod: Zaznacz cały

NULL = [[baza1, baza2, baza3], group nazwagrupy] execVM "move.sqf";
baza1, baza2, baza3, to nazwy obiektów, które wskazują lokalizację bazy. Jeśli ktokolwiek z grupy przeciwnika wykryje ciebie, to wtedy zaczną oni iść do wyznaczonej losowo wyznaczonej bazy. Żeby atakowali losowo wyznaczoną wioskę po prostu w aktywacji dowódcy tej grupy wpisz:

Kod: Zaznacz cały

NULL = [[wiocha1, wiocha2, wiocha3], group this] execVM "move.sqf";
Powinno działać (robiłem podobny skrypt z ustawianiem losowej pozycji grupie obiektów).

pzdr
Awatar użytkownika
Vari
Posty: 46
Rejestracja: 15 stycznia 2010, 16:50
ID Steam:
Numer GG: 1022354
ID gracza: 0

Re: "Sterowanie" poczynaniami AI

Post autor: Vari »

Dziaała ;) Da się zrobić coś w stylu

Kod: Zaznacz cały

czdkz1, albo czdzk2, albo czdkz3 knowsabout cdf1 albo cdf2
?
Wtedy nie musiałbym robić wyzwalacza dla każdej grupy po dwa razy, a to ważne, żeby nie mieć burdelu w misji.
krzysiek2222
Posty: 77
Rejestracja: 31 grudnia 2009, 14:51
ID Steam:
ID gracza: 0

Re: "Sterowanie" poczynaniami AI

Post autor: krzysiek2222 »

No wtedy to tylko w taki sposób

Kod: Zaznacz cały

(((u1 knowsAbouts t1) or (u1 knowsAbouts t2)) or ((u1 knowsAbouts t3) or (u1 knowsAbouts t4))) or (((u2 knowsAbouts t1) or (u2 knowsAbouts t2)) or ((u2 knowsAbouts t3) or (u2 knowsAbouts t4)))
I tak, żeby były wszystkie możliwe kombinacje.
Proponuje zrobić trochę inaczej: Na każdą grupę przypada jeden wyzwalacz i wtedy sprawdzasz, czy nie wiedzą o kimkolwiek z twojej grupy. Pamiętaj, że jak jeden Czedak wie, to cała jego grupa też.

Kod: Zaznacz cały

((chdk1 knowsAbout cdf1) or (chdk1 knowsAbout cdf2)) or ((chdk1 knowsAbout cdf3) or (chdk1 knowsAbout cdf4))
I tak, żeby sprawdzić, czy nie wie o każdym z twojej grupy. Trochę pisania jest, ale można przeżyć.

pzdr
ODPOWIEDZ

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