Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
ka3ant1p

поведение зомби, поиск цели

попытался задать поведение зомбакам на основе 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;

Я понимаю что нигде нету описания того что зомби должны агрится на игрока, я вообще не понимаю как они все же на игрока агрятся.
Но если смотреть zombie_generate или wild_spawnZombies то там задается поведение по средством zombie_agent.fsm в котором я нашел вызов только zombie_findtargetAgent для поиска цели. Хотя если посмотреть zombie_findtarget то именно там идет агр на игрока но при этом нигде не вызывается О_о
Объясните кто то как подправить им поведение, бьюсь уже весь день над этим. Я конечно понимаю что можно тупо скопировать тот же zombie_agent.fsm на сервер и еще несколько файлов и просто немного подправить. Но хотелось бы понимать как это устроено для более детальной настройки.

Изменено пользователем ka3ant1p (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Так же не свосем понятно откуда это тогда вызывается

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах



Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.