
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?







 
 
 


 
 