Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
-
Объявления
-
⚙️ Новые онлайн-инструменты для DayZ 07/26/26
-
- 0

попытался задать поведение зомбакам на основе control_zombieAgent.sqf, все вроде бы работает но не совсем правильно.
Зомби во время отсутствия цели бродят в небольшом радиусе. Агрятся только если подойти на расстояние ~50м, на выстрелы агрится не хотят как обычные зомби.
Вот код:
private ["_target","_targetPos","_isAlive","_list","_myDest","_agent","_doloiter","_missposition"]; _agent = _this select 0; _missposition = _this select 1; _isAlive = alive _agent; while {_isAlive} do { _agent disableAI "FSM"; _agent setCombatMode "RED"; _target = objNull; _targetPos = []; _myDest = getPosATL _agent; while {isNull _target and _isAlive} do { _doloiter = true; _isAlive = alive _agent; _target = _agent call zeds_findTarget; _agent forceSpeed 2; sleep 1; }; [_agent,"attack",0,false] call zeds_speak; while {!isNull _target and _isAlive} do { _doloiter = false; _target = _agent call zeds_findTarget; _isAlive = alive _agent; _targetPos = getPosATL _target; _agent moveTo _targetPos; _agent forceSpeed 8; sleep 1; }; _agent setVariable ["targets",[],true]; _isAlive = alive _agent; sleep 1; }; if {_doloiter and _isAlive} then { [_agent,_missposition] call zeds_loiter; };функция zeds_FindTarget (на основе zombie_findtargetAgent):
private ["_agent","_target","_targets","_targetDis","_man","_manDis","_range","_objects","_refobj"]; _agent = _this; _target = objNull; _targets = []; _targetDis = []; _range = 500; _manDis = 0; _refobj = vehicle player; _targets = _agent getVariable ["targets",[]]; if (isNil "_targets") exitWith {}; if (count _targets == 0) then { _objects = nearestObjects [_agent,["ThrownObjects","GrenadeHandTimedWest","SmokeShell"],50]; { private["_dis"]; if (!(_x in _targets)) then { _targets set [count _targets,_x]; _targetDis set [count _targetDis,_dis]; }; } forEach _objects; }; if (count _targets > 0) then { _man = _targets select 0; _manDis = _man distance _agent; { private["_dis"]; _dis = _x distance _agent; if (_dis < _manDis) then { _man = _x; _manDis = _dis; }; if (_dis > _range) then { _targets = _targets - [_x]; }; if (_x isKindOf "SmokeShell") then { _man = _x; _manDis = _dis; }; } forEach _targets; _target = _man; }; if (_manDis > _range) then { _targets = _targets - [_target]; _target = objNull; }; _targetфункция zeds_loiter (на основе zombie_loiter):
private ["_unit","_originalPos","_movepos","_chance","_playerpos"]; _unit = _this select 0; _originalPos = _this select 1; _playerpos = getPos player; _movepos = [_originalPos,((round(random 10)) max 5),((round(random 20)) max 10),((round(random 5)) max 1),0,((round(random 25)) max 5),0] call BIS_fnc_findSafePos; if(isNull group _unit) then { _unit moveTo _movepos; } else { _unit domove _movepos; }; _unit forceSpeed 2;Я понимаю что нигде нету описания того что зомби должны агрится на игрока, я вообще не понимаю как они все же на игрока агрятся.
Изменено пользователем ka3ant1p (история изменений)Но если смотреть zombie_generate или wild_spawnZombies то там задается поведение по средством zombie_agent.fsm в котором я нашел вызов только zombie_findtargetAgent для поиска цели. Хотя если посмотреть zombie_findtarget то именно там идет агр на игрока но при этом нигде не вызывается О_о
Объясните кто то как подправить им поведение, бьюсь уже весь день над этим. Я конечно понимаю что можно тупо скопировать тот же zombie_agent.fsm на сервер и еще несколько файлов и просто немного подправить. Но хотелось бы понимать как это устроено для более детальной настройки.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах