Суббота, 30.11.2024, 01:23Привет Гость
ArmA-2 Моды, миссии, кампании, аддоны, скрипты, редактор

Главная | Файлы | FAQ | Платформа | О сайте | Контакты | Зарегистрироваться | Войти
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 1 из 1
  • 1
Скрипт "Патрульный"
PIONEERДата: Пятница, 24.07.2009, 18:27 | Сообщение # 1
Лейтенант
Сообщений: 589
Репутация: 16
Статус: Offline
//Patrol script by Lost 05.07.2007, ver 1.1

//Юнит патруля
_men = _this select 0;
//Лист врагов
_list_enemy = _this select 1;

//Сохраняем позицию патруля перед скриптом
_posOld = getpos (leader _men);
//Определяем группу и блокируем их вейпойнты, если есть
_grp = group _men;
_grp lockWP true;

/*Каким то неведомым образом, массив переданный через thisList, через N-ный промежуток времени, просто исчезает (полтергейст :-D), тогда записываем обнаруженные юниты в другой массив и работаем с ним, теперь массив "не исчезнет"*/
_save_list_enemy = [];
_save_list_enemy = _save_list_enemy + _list_enemy;

//Таймаут
_movedelay=20;
_t=time - _movedelay;

//Приоритетная цель
_c=0;

//Нужно для подсчёта
_count = count _save_list_enemy;
_n = _count - 1;

try {
waituntil {

//Если лидера убили, то назначаем нового лидера
_leader = leader _grp;
//Выбираем приоритетную цель
_target = (_save_list_enemy select _c);
//Проверяем к какому классу относится цель, если техника, то включается обработка оружия
if(!(_target isKindOf "Man" || _target isKindOf "Car")) then {

//Массив оружия;
_array_weap = [];
//Массив магазинов;
_array_mag = [];
//Массив юнитов
_array_unit = [];
//Массив группы
_array_grp = [];

//Вносим в массив всех юнитов группы
for [{_i = 0}, {_i < count units _grp}, {_i = _i + 1}] do {
_array_grp = _array_grp + [units _grp select _i]
};

for [{_u = 0}, {_u < count _array_grp}, {_u = _u + 1}] do {

_unit = _array_grp select _u;
//Цикл на проверку всего оружия игрока
for [{_i = 0}, {_i < (count weapons _unit)}, {_i = _i + 1}] do {

_weapon = (weapons _unit select _i);

//Ищем ракетное оружие, и вносим в массив
if(getText (configFile >> "CfgWeapons">>_weapon>>"recoil") == "launcherBase") then {
_array_weap = _array_weap + [_weapon];
_array_unit = _array_unit + [_unit]
};
};

//Наше искомое оружие
_weapon = (_array_weap select 0);
_magazines = getArray (configFile >> "CfgWeapons">>_weapon>>"magazines");
_array_mag = _array_mag + _magazines;

for [{_i = 0}, {_i <= (count _magazines) - 1}, {_i = _i + 1}] do {
if(!((magazines _unit) find (_magazines select _i) > -1)) then {
_array_mag = _array_mag - [_magazines select _i];
_array_unit = _array_unit - [_unit];
};
};
};
//Проверка на кол-во юнитов с ракетным оружием и с магазинами к нему
if(count _array_unit == 0) then {throw "tar_vehicle"};
};

//Если патруль потерял извиду врага, выход
if((_leader knowsAbout _target) <= 0.15 || _leader distance _target > (500 + ceil(random 250))) then {throw "ushel"};

//Собсно само преследование
if({alive _x} count _save_list_enemy > 0 && time-_t >= _movedelay) then {
{_x doMove position _target} forEach units _leader;
{_x getSpeed "FAST"} forEach units _leader;
_t=time
};

//Если патруль убил врага, выход
if({alive _x} count _save_list_enemy == 0) then {throw "killed"};

//Скрипт прервётся, если кол-во живых юнитов группы патруля равно 0
{alive _x} count units _grp == 0
};
throw "exit"
}
catch {
switch (_exception) do {
case "ushel" : {
{_x doFollow _leader} forEach units _leader - [_leader];
{_x getSpeed "AUTO"} forEach units _leader;
_grp lockWP false
};
case "killed" : {
{_x doFollow _leader} forEach units _leader - [_leader];
{_x getSpeed "AUTO"} forEach units _leader;
_grp lockWP false
};
case "tar_vehicle" : {
{_x doFollow _leader} forEach units _leader - [_leader];
{_x getSpeed "AUTO"} forEach units _leader;
_grp lockWP false
};
case "exit" : {}
};
};




Хотите больше новостей? Подписывайтесь на мою рассылку
 
  • Страница 1 из 1
  • 1
Поиск:





Copyright web-pioneer.at.ua © 2011 | Используются технологии uCoz
Админ: PIONEER | web-pioneer@yandex.ru | Любое или частичное копирования материала с веб-сайта web-pioneer.at.ua запрещено! А то прокляну.