Warunek w waypoincie (WP) działa dla następnego WP. Innymi słowy grupa nie ruszy do następnego WP dopuki WP w którym OBECNIE się znajduje nie będzie true. Dotyczy to także synchronizacji (F5). Jeśli wyzwalacz synchronizujesz z konkretnym WP grupy, to warunek wywzalacza kontroluje ruch grupy do jej NASTĘPNEGO WP. U Ciebie prawdopodobnie brakuje 'jałowego' WP.
Ja proponuje zrobić to bez wyzwalaczy i synchronizacji (cięzko się potem połapać). Jako, że sam się teraz supportem bawię, to na świeżo podpowiem
Zakładam, że chcesz dowieść paliwo potrzebującej jednostce, więc będzie to ciężarówka z paliwem (wsparcie), te wsparcie nazwijmy sobie, np: (s1). Tylko jedna uwaga, nigdy nie dopuszczaj aby jednostka osiągneła pusty bak, bo trochę paliwa potrzebuje na ustawienie się za cysterną, inaczej jednostka nigdy nie zatankuje (głupie AI...).
Jeśli chcesz, aby wsparcie z paliwem (s1) ruszyło za jakąkolwiek jednostką nie mającą paliwa i wrócić na miejsce startowe, to (s1) musi mieć przynajmniej 3 WP.
Pierwszy WP posłuży za miejsce gdzie (s1) czeka (typ: ruch)
Drugi WP dajesz gdziekolwiek, byle ciut dalej niż pierszy WP, będzie on dynamiczny, a jego położenie określisz w porzebnym momencie (pozycję jednostki potrzebującej paliwa) (typ : ruch, promień: 0),
Trzeci WP daj bardzo blisko pierwszego WP (najlepiej po wstawieniu ustaw go na pierwszym WP), lub ustaw promień tak aby obejmował pierwszy WP (TYLKO pierwszy WP), bo będzie zapętlał całą operację (typ: przełącz).
Pierwszy WP (s1) powinien mieć:
Pojedynczy warunek: true
aktywacja: [[h1, h2], s1] exec "whoneedssupport.sqm";
dezaktywacja:
Jak widać w tablicy parametrów [] jest podtablica [h1, h2] - czyli jednostki którym (s1) dowiezie paliwo.
Można we własnej zmiennej umieścić liste jednostek do obsługi tankowania, np:
tankuj = [h1, h2, h3, h4, h5, 'ile tego chcesz'] + ['inne jednostki jakie chcesz']
i wywołać już skrypt: [tankuj, s1] exec "whoneedssupport.sqm";
Drugi WP (s1) powinien mieć:
Czas: min: 60
Warunek: (isunitneedsupport) and (fuel unitneedsupport > 0.9)
aktywacja: isUnitNeedSupport = false;
dezaktywacja:
W tym WP (s1) daje trochę czasu jednostce 'unitneedsupport' na zatankowanie, a w związku z tym, iż jeśli Twój h1/h2 ma następny WP to prawie nigdy nie bedzie pobierać paliwa do pełna, więc dlatego 0.9.
Trzeci WP (s1) powinien mieć:
Pojedynczy warunek: true
aktywacja:
dezaktywacja:
W pierwszym WP (s1) odpali się skrypt i w końcu coś znajdzie, po czym wyśle (s1) gdzie trzeba i zakończy działanie. (s1) wróci po WPtach, a na ostatnim (trzecim) WP typu przełącz droga się zapętli i znowu aktywny będzie WP pierwszy, który znowu odpali skrypt. I tak w kółko... bez wyzwalaczy, bez synchronizacji
WhoNeedsSupport.sqm
Kod: Zaznacz cały
; WhoNeedsSupport.sqm - kto potrzebuje wsparcia ?
;[_unitsToSupport, _supportUnit] exec "WhoNeedsSupport.sqm";
; np: [[h1,h2]] exec "WhoNeedsSupport.sqm";
; parametry wejściowe:
; _unitsToSupport - tablica jednostek
; _supportUnit - ciężarówka z paliwem
; zmienne globalne, wyjściowe:
; isUnitNeedSupport - czy ktoś chce paliwa ?
; UnitNeedSupport - jednostka która chce paliwa
_unitsToSupport = _this select 0;
_supportUnit = _this select 1;
isUnitNeedSupport = false;
UnitNeedSupport = objNull;
_supportUnit lockWP true;
_index = 0;
#find
_unitA = _unitsToSupport select _index;
_index = _index + 1;
;hint format [" szukanie: %1 \n %2 ", isUnitNeedSupport, UnitNeedSupport];
? (fuel _unitA < 0.2) : isUnitNeedSupport = true; UnitNeedSupport = _unitA;
? (isUnitNeedSupport) : goto "end";
? (_index <= count _unitsToSupport) : goto "find";
_index = 0;
~10
goto "find";
#end
;hint format [" akcja: %1 \n %2 ", isUnitNeedSupport, UnitNeedSupport];
UnitNeedSupport lockWP true;
[_supportUnit, 2] setWPPos getPos UnitNeedSupport;
_supportUnit lockWP false;
@(UnitReady _supportUnit);
UnitNeedSupport lockWP false;
exit;
Zaczołem bawić się eventami... i chyba tak jest najprościej:
Kod: Zaznacz cały
; refuel.sqm
; w inicie jednostki która ma się sama tankować:
; this addEventHandler ["fuel", {_this+[cysterna] exec "refuel.sqm"}]
_vehicle = _this select 0;
_vehiclePos = getPos _vehicle;
_vehicleTankisFull = _this select 1;
_tanker = _this select 2;
? (_vehicleTankisFull) : goto "end";
;hint format ["\n \n \n (%1) \n (%2) \n (%3) ", _vehicle, _vehicleTankisFull, _tanker];
_vehicle lockWP true;
_tanker moveTo getPos _vehicle;
@ (abs((_vehiclePos select 0) - (getpos _tanker select 0)) < 20) and (abs((_vehiclePos select 0) - (getpos _tanker select 0)) < 20);
_vehicle setfuel 0.1;
@(UnitReady _tanker);
_vehicle lockWP false;
_tanker moveTo getWPPos [_tanker, 0];
#end
exit;