- Kod: Zaznacz cały
_alarmek = [tr,20] execVM "raf.sqf"; //tr to nazwa tego triggera 20 to czas
if _alarmek then KRON1=1; // w zaleznosci od trigeera tu moge miec KRON2, KRON3...
to _alarmek przyjmie wartosc tego alarm z funkcji? Chodzi mi aby funkcja zwracala wartosc a nie nadawala jakies globalnej zmiennej juz w sobie, Czy jest to mozliwe w sqf.
tak powinno być i nie mam na razie pojęcia dlaczego zamiast tego wyświetla się ścieżka położenia skryptu na dysku
Lepiej dla mnie aby funkcja raf.sqf nie przypisywala sama w środku wartości zmiennej KRONx, tylko zwracala TRUE or FALSE (lub 1 albo 0)
Ale nie zmieni to faktu że gdzieś trzeba będzie przyporządkować wartość ALARM do KRON1, KRON2, KRON3, itd.
Ze swojej strony proponuje dwa uniwersalne rozwiązania:
Wersja 1 - automaczyne przyporządkowanie wartości TRUE do wszystkich KRONx wpisanych w instrukcji w wyzwalaczu np. [tr, 20, "KRON1", "KRON2", "KRON3"]
- Kod: Zaznacz cały
/*
Uruchomienie alarmu [nazwa trigera, czas, "Zmienne uruchamiane w czasie alarmu", ...]
1) nazwa trigera ktory aktywuje skrypt
2) czas na likwidację jednostek ktore zostaly wykryte zanim uruchomi sie alarm
3) zmienne ktore w momencie alarmu uzyskuja wartosc logiczna TRUE
liczba zmiennych KRON jest dowolna
KADRYL
*/
private["_ob","_t","_nr","_i","_K"];
_ob = list (_this select 0);
_t = _this select 1;
_nr = count _this;
_i = 2;
_K = false;
sleep _t;
{if (alive _x) then {_K = true;};} forEach _ob;
while {_i < _nr} do {call compile format ["%1 = _K", (_this select _i)]; _i=_i+1;};
Wersja 2 - automaczyne wykonuje działanie na wpisanych obiektach (ida tam gdzie jest trigger) np. [tr, 20, zolnierz1, zolnierz2, czolg102]
- Kod: Zaznacz cały
/*
Uruchomienie alarmu [nazwa trigera, czas, jednostka1, jednostka2, ...]
1) nazwa trigera ktory aktywuje skrypt
2) czas na likwidację jednostek ktore zostaly wykryte zanim uruchomi sie alarm
3) jednostki ktore w momencie alarmu sa wzywane do miejsca gdzie jest triger
liczba jednostek wzywanych jest dowolna
KADRYL
*/
private["_ob","_t","_nr","_i","_KRON", "_K"];
_ob = list (_this select 0);
_t = _this select 1;
_nr = count _this;
_i = 2;
_KRON = [];
while {_i < _nr} do {_KRON set [count _KRON, (_this select _i)]; _i=_i+1;};
_K = false;
sleep _t;
{if (alive _x) then {_K = true;};} forEach _ob;
{if (_K) then {_x domove (getpos (_this select 0))};} forEach _KRON;