Powiadomienie o obecności w mieście

Edytor Arma (Arma, Arma2, Arma2OA)

Moderatorzy: kondor, Inkwizytor

ODPOWIEDZ
fdd
Posty: 26
Rejestracja: 10 czerwca 2010, 20:20
ID Steam:
ID gracza: 0

Powiadomienie o obecności w mieście

Post autor: fdd »

Siedzę nad prostym (chociaż dla mnie nie do końca :D) skryptem który w założeniu miał w hincie pokazywać nazwę jednostki która weszła do miasta.

W init wyzwalacza który ma ustawioną detekcję na ktokolwiek (tak musi być, bo jednostki mam z addrating -99999) wpisuję np:

Kod: Zaznacz cały

nul=[this, 100, "Nazwa miasta"] execVM "occuped.sqf"
sam skrypt wygląda tak:

Kod: Zaznacz cały

_unit  	= _this select 0;
_zasieg 	= _this select 1;
_miasto	= _this select 2;


_wykryte = nearestObjects [_unit, ["Man"], _zasieg]; 

_komunikat      = format[" jest okupowane przez: %1", _wykryte]; 
_outmsg1	     = composeText [_miasto,_komunikat];

sleep 1;
hint _outmsg1; 
Problem w tym, że gdy jakaś żywa jednostka wejdzie w zasięg wyzwalacza to nearestObjects zwraca mi tylko [].
Gdy skrypt przypiszę do czegoś innego np do żołnierza

Kod: Zaznacz cały

nul=[p1, 100, "Nazwa miasta"] execVM "occupedPRO.sqf";
i umieszczę go przy wyzwalaczu (żeby zasięg się pokrywał) to nearestObjects zwraca mi wszystko ok, ale zawsze ten żołnierz aktywuje mi wyzwalacz, bo jest ustawiony na "ktokolwiek" ;/

Proszę o pomoc.



edit:
Rozwiązałem problem, w ten sposób

tworzę objekt game logic, nazywam go np. FF1 i umieszczam przy wyzwalaczu.
Wyzwalacz, aktywacja na ktokolwiek, zasięg np 100 na 100, powtarzalnie, w init:

Kod: Zaznacz cały

(count thislist) >=2
w aktywację:

Kod: Zaznacz cały

nul=[FF1, 100, "Nazwa miasta",20] execVM "occuped.sqf"
skrypt teraz wygląda tak:

Kod: Zaznacz cały

_unit 	= _this select 0;
_zasieg 	= _this select 1;
_miasto	= _this select 2;
_pauza	= _this select 3;


	_wykryte 			= nearestObjects [_unit, ["Man"], _zasieg];
	_wykrytezywe		= [];
	{if (alive _x) then {_wykrytezywe set [(count _wykrytezywe ),_x];};} foreach _wykryte; 


while {(count _wykrytezywe) > 0} do
{
	_wykryte 			= nearestObjects [_unit, ["Man"], _zasieg];
	_wykrytezywe		= [];
	{if (alive _x) then {_wykrytezywe set [(count _wykrytezywe ),_x];};} foreach _wykryte;  

	_komunikat = format[" jest okupowane przez: %1", _wykrytezywe]; 
	_outmsg1			= composeText [_miasto,_komunikat];
	_chatmsg1	= _miasto+_komunikat;
	// hint _outmsg1; 
	admin globalChat _chatmsg1;
	sleep _pauza;
	sleep 2;


};
Nie rozumiem tylko dlaczego działa jedynie kilka razy, po pewnym czasie pętla się zatrzymuje nawet gdy jako warunek wpiszę true :ohno


edit:
problem rozwiązany

Kod: Zaznacz cały

// trigger condition. (count thislist) >=2
// trigger on act. abc=[FF1, 10, "MIASTO", 1] execVM "occupedmb.sqf"
// game logic object FF1

_unit 		= _this select 0;
_zasieg 	= _this select 1;
_miasto	= _this select 2;
_pauza	= _this select 3;

_wykryte 	= nearestObjects [_unit, ["Man"], _zasieg];
_wykrytezywe		= [];

while {true} do 
{
	_wykryte 	= nearestObjects [_unit, ["Man"], _zasieg];
	_wykrytezywe		= [];
	{if (alive _x) then {_wykrytezywe set [(count _wykrytezywe ),_x];};} foreach _wykryte;  


	_komunikat	= format[" jest okupowane przez: %1", _wykrytezywe]; 
	_outmsg	= composeText [_miasto,_komunikat];
	_chatmsg1	= _miasto+_komunikat;

	
	if ((count _wykrytezywe) >= 1) then {admin globalChat _chatmsg1};
	// if ((count _wykrytezywe) >= 1) then {hint _outmsg1} else {exit};

	sleep _pauza;

};
ODPOWIEDZ

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