"Sterowanie" poczynaniami AI
Moderatorzy: kondor, Inkwizytor
"Sterowanie" poczynaniami AI
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ć.
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ć.
-
- Posty: 77
- Rejestracja: 31 grudnia 2009, 14:51
- ID Steam:
- ID gracza: 0
Re: "Sterowanie" poczynaniami AI
Jeśli robisz to na punktach trasy to nie jest takie trudne. Robisz tablicę obiektów. Np:
Następnie liczysz elementy tablicy:
A potem pozycję losowego elementu z tablicy:
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:
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
pzdr
Kod: Zaznacz cały
_objects = [obj1, obj2, obj3, obj4];
Kod: Zaznacz cały
_number = count _objects;
Kod: Zaznacz cały
_pos = _objects select (floor (random _number));
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;
Mam nadzieję, że nie namęczyłem się, kiedy chodziło o coś innego

pzdr
Re: "Sterowanie" poczynaniami AI
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".
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".
-
- Posty: 77
- Rejestracja: 31 grudnia 2009, 14:51
- ID Steam:
- ID gracza: 0
Re: "Sterowanie" poczynaniami AI
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;
Robisz wyzwalacz z warunkiem aktywacji:
Kod: Zaznacz cały
(nazwadowodcy knowsAbout twojanazwa) >= 1;
Kod: Zaznacz cały
NULL = [[baza1, baza2, baza3], group nazwagrupy] execVM "move.sqf";
Kod: Zaznacz cały
NULL = [[wiocha1, wiocha2, wiocha3], group this] execVM "move.sqf";
pzdr
Re: "Sterowanie" poczynaniami AI
Dziaała
Da się zrobić coś w stylu
?
Wtedy nie musiałbym robić wyzwalacza dla każdej grupy po dwa razy, a to ważne, żeby nie mieć burdelu w misji.

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.
-
- Posty: 77
- Rejestracja: 31 grudnia 2009, 14:51
- ID Steam:
- ID gracza: 0
Re: "Sterowanie" poczynaniami AI
No wtedy to tylko w taki sposób
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ż.
I tak, żeby sprawdzić, czy nie wie o każdym z twojej grupy. Trochę pisania jest, ale można przeżyć.
pzdr
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)))
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))
pzdr