Przejdę od razu do rzeczy.
To dzieje się, kiedy zginie cywil (onCivKilled.sqf):
To natomiast jest skrypt generujący ruch cywili (wander.sqf):
Pierwszy skrypt odpalany jest eventHandlerem "KILLED" na każdym ze stworzonych cywili. Normalnie postaci mają chodzic sobie spacerkiem po mieście, aż zostanie zabity jakiś przechodzień, wtedy ma się zacząć panika. To właśnie robi ten skrypt - zmienia prędkość poruszania się do WP na "FULL" i wyświetla kto zabił cywila i gdzie.
Drugi skrypt startuje po stworzeniu jednostki w mieście (też cywila) i ma kontrolować aby zawsze dostawał waypointy i "spacerował sobie". Najpierw losuje miejsce, nadaje waypoint i czeka aż _obj1 dojdzie do swojego punktu trasy na 7m. Robi to w kółko, aż ten cywil zginie.
Nie wiem z jakiej paki to nie działa. Te wszystkie zakomentowane markery w drugim skrypcie pokazywały, że _wp po zabiciu cywila miał zmienione waypointSpeed z "LIMITED" na "FULL", a pomimo to obiekt nadal szedł sobie spacerkiem!
Czy ktoś mądrzejszy ode mnie może mnie oświecić dlaczego to nie działa i zaproponować jakieś rozwiązanie?
To dzieje się, kiedy zginie cywil (onCivKilled.sqf):
- Kod: Zaznacz cały
/*do skryptu przekazywane jest: [[Jednostka która zginela,zabojca],miasto w ktorym zginela]
Ma wyswietlac napis kto zabil cywila i w jakim miescie, oraz zminiac zachowanie cywili w okolicy, aby zmienili prędkość poruszania na bieg do wyznaczonych wczesniej waypointow (panika) */
_civ = (_this select 0) select 0; //zabity cywil
_killer = (_this select 0) select 1; //jednostka, ktora zabila
_locName = _this select 1; //nazwa lokacji
if (isPlayer _killer) then //jezeli zabojca byl gracz
{
_units = nearestObjects [_civ, ["Man"], 100]; //sprawdz wszystkie jednostki w promieniu 100m od _civ
_unitsCiv = [];
{
if ((side _x) == CIVILIAN) then //jezeli jednostka jest cywilem
{
_wps = waypoints group(_x); //lista waypointow
_wpc = (count _wps); //ilosc waypointow
if(_wpc > 0) then //jezeli sa waypointy
{
_wp = [group(_x), (currentWaypoint group _x)]; //_wp = aktualny waypoint
_wp setWayPointSpeed "FULL"; //pelna predkosc poruszania sie
group(_x) setCurrentWaypoint _wp; //ponowny nakaz ruszenia sie do miejsca
_unitsCiv = _unitsCiv + [waypoints group _x]; //dodaj do tablicy jednostek (debug)
};
};
} forEach _units; //zrob dla wszystkich znalezionych jednostek
//_str = format["%1", _unitsCiv]; //debug
_str = format["%2: %1 zabil(a) cywila.", name _killer, _locName]; //komunikat
hint _str;
publicHint = _str;
publicVariable 'publicHint'; //wyslij do wszystkich (eventHandler w init.sqf)
};
if(true) exitWith {};
To natomiast jest skrypt generujący ruch cywili (wander.sqf):
- Kod: Zaznacz cały
if(!isServer) exitWith {};
private["_obj1","_loc","_radius","_str","_r","_a","_dx","_dy","_pos","_vPos","_markerstr"];
_obj1 = _this select 0; //kontrolowany cywil
_loc = _this select 1; //miasto, w ktorym sie znajduje
waitUntil {alive _obj1}; //poczekaj az jednostka pojawi sie na mapie
_radius = (((size _loc) select 0)+((size _loc) select 1))/2; //sprawdz promien lokacji
//_obj1 setBehaviour "CARELESS";
//_markerstr = createMarker[format["%1",_obj1],position _obj1];
//_markerstr setMarkerShape "ICON";
//_markerstr setMarkerType "DOT";
//-------------------------Marker: debug---------------------------------
while {alive _obj1} do //dopoki cywil zyje
{
//sleep (round(random(15))+10); //stoj troche w waypoincie
_r = round(random(2*_radius));
_a = round(random(360));
_dx = ((position _loc) select 0) + _r*cos(_a);
_dy = ((position _loc) select 1) + _r*sin(_a);
_pos = [_dx,_dy,0]; //powyzej - losowanie lokacji
//_vPos = _pos isFlatEmpty [3 ,2*_radius,5,2,0,false,objnull]; //wylaczone dla testow wydajnosci
_wp = group(_obj1) addWayPoint [_pos, 5]; //stworz nowy waypoint
_wp setWayPointType "MOVE";
_wp setWayPointSpeed "LIMITED"; //nadaj atrybuty
//_markerStr setMarkerPos (getWpPos _wp); //<- debug
//hint format["%1", waypoints group _obj1]; //<- debug
//czekaj az cywil znajdzie sie < 7m od waypointu
while {((position _obj1) distance getWpPos [group _obj1, currentWaypoint (group _obj1)]) > 7} do
{
//_markerstr setMarkerText (waypointSpeed [group _obj1, currentWaypoint (group _obj1)]); //<-debug
sleep 5;
};
};
if(true) exitWith{};
Pierwszy skrypt odpalany jest eventHandlerem "KILLED" na każdym ze stworzonych cywili. Normalnie postaci mają chodzic sobie spacerkiem po mieście, aż zostanie zabity jakiś przechodzień, wtedy ma się zacząć panika. To właśnie robi ten skrypt - zmienia prędkość poruszania się do WP na "FULL" i wyświetla kto zabił cywila i gdzie.
Drugi skrypt startuje po stworzeniu jednostki w mieście (też cywila) i ma kontrolować aby zawsze dostawał waypointy i "spacerował sobie". Najpierw losuje miejsce, nadaje waypoint i czeka aż _obj1 dojdzie do swojego punktu trasy na 7m. Robi to w kółko, aż ten cywil zginie.
Nie wiem z jakiej paki to nie działa. Te wszystkie zakomentowane markery w drugim skrypcie pokazywały, że _wp po zabiciu cywila miał zmienione waypointSpeed z "LIMITED" na "FULL", a pomimo to obiekt nadal szedł sobie spacerkiem!
Czy ktoś mądrzejszy ode mnie może mnie oświecić dlaczego to nie działa i zaproponować jakieś rozwiązanie?