Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 0
Sign in to follow this  
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 на сервер и еще несколько файлов и просто немного подправить. Но хотелось бы понимать как это устроено для более детальной настройки.

Edited by ka3ant1p (see edit history)

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

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

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.