Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 » Скрипты » Вопросы по скриптописанию (Тонкости написания скриптов) |
Вопросы по скриптописанию |
› Понедельник
› 23.09.2013
› 01:34
› Сообщение #
Используй тип
class PistolCore : Default { type = 2; }; class RifleCore : Default { type = 1; }; class MGunCore : Default { type = "1 + 4";// т.е.5 }; class LauncherCore : Default { type = 4; }; class GrenadeCore : Default { type = 0; }; class CannonCore : Default { type = 65536; }; class FakeWeapon : MGunCore { type = 0; }; а для твоих нужд вот так Код { _tx = getNumber (configFile >> "CfgWeapons" >> _x >> "type"); if (_tx == 2) exitWith {Player removeWeapon _x}; } forEach (weapons Player); Player AddWeapon "Новый Ствол"; |
› Понедельник
› 23.09.2013
› 14:54
› Сообщение #
Да, Slon, твой более универсальный, можно практически любое оружие заменить на ходу. Типа пришел в партизанский отряд дедок с двустволкой - получай автоматом калаш для борьбы с оккупантами, а наган свой оставь при себе:)
Спасиб большое! ЗЫ У меня в ролике перс стреляется от безысходности, а у него оказался макарSD, дык глушитель из головы вылазит. Неэстетично:) |
› Понедельник
› 30.09.2013
› 21:37
› Сообщение #
for "_i" from 0 to 99 do
{ _mi doMove (getMarkerPos "MARK1"); _mi flyInHeight 400; _mi disableAI "AUTOTARGET"; ?!unitReady _mi:goto _mi enableAI "AUTOTARGET"; _mi flyInHeight 100; sleep 80; _mi disableAI "AUTOTARGET"; _mi doMove (getMarkerPos "MARK2"); }; накидал такой цикл для истребителя. Но требуется его коррекция ( в частности по поводу ?!unitReady _mi:goto) суть действа: 1 самолёт двигается в точку MARK1 2 выбирает высоту 400 метров 3 целей ни каких до точки не преследует 4 проверка наличия истребителя в заданном районе 5 выбирает цель (разрешение получает) 6 снижается до высоты 100 метров 7 атакует в течении 80 секунд 8 получает запрет на атаку 9 уходит на точку MARK2 КТО ПОМОЖЕТ ДОВЕСТИ ДО УМА? Сообщение отредактировал alex70-03 - Понедельник, 30.09.2013, 21:38
|
› Вторник
› 01.10.2013
› 14:14
› Сообщение #
Здравствуйте господа.Такой вопрос, как с помощью скрипта в группе с 3 или 4человек при движении с пункта А в пункт
Б создать тылового дозорного? То есть, чтоб какой то, юнит (с группы) сзади, поворачивался и контролировал тыл. (Опишу нагляднее, группа движется рывками, типа «настороже», во время останова, этот юнит оборачивается и контролирует тыл). Возможно ли такое сделать? Я пробовал с командой «setDir», но не выходит, вообще не могу пойматьточку останова группы во время передвижения, команда «Stopped» - это когда отдан приказ ком.группы насколько я понял. Хотя бы тыкните в какую сторону копать. Спасибо. |
› Вторник
› 01.10.2013
› 15:23
› Сообщение #
команда боту повернуться http://community.bistudio.com/wiki/setFormDir
повернуть голову ненадолго http://community.bistudio.com/wiki/doWatch момент остановки - скорость меньше 1 м/с (как пример) но не сразу. а через если стоим больше 2 сек While {true} do { бесконечный цикл WaitUntil {(Speed Player) < 1}; - точка отсчёта скорость игрока sleep 2;---------------------------------проверочная пауза if ((Speed Player) < 1) then { организуем наблюдение WaitUntil {(Speed Player) > 0}; до момента отхода догоняем строй }; sleep 1;снижение скорости цикла }; |
› Вторник
› 01.10.2013
› 20:29
› Сообщение #
Slon
Спасибо Большое ! Все идеально, хех... теперь группа передвигается более реалистично. |
› Вторник
› 01.10.2013
› 21:35
› Сообщение #
|
› Вторник
› 01.10.2013
› 22:00
› Сообщение #
Цитата (alex70-03) Fox777, срочно выкладывай готовый пример) если не жалко Код Sleep 1; _sold1 = _this select 0; _sold2 = _this select 1; _sold3 = _this select 2; _sold1 setUnitPos "middle"; _sold1 setBehaviour "stealth"; _sold1 setSpeedMode "limited"; _sold1 Move (getMarkerPos "pos1"); _sold2 setBehaviour "stealth"; _sold2 setUnitPos "middle"; _sold3 setBehaviour "stealth"; _sold3 setUnitPos "middle"; While {true} do { WaitUntil {(Speed _sold1) < 1}; sleep 2; if ((Speed _sold1) < 1) then { _dir= getDir _sold1; _sold2 setFormDir _dir + 90; sleep 0.5; _sold2 setFormDir _dir + 120; WaitUntil {(Speed _sold1) > 0}; }; sleep 1; }; Выставляю группу из трех солдат на карту (например Утес), называю их например: Sold1, Sold2, Sold3, группирую. Ставлю маркер, метров за 100-200 от группы, прямоугольник 20*20 называю "pos1". Сам код сохраняю и закидываю в папку с миссией, назвав например test.sqf. В поле инициализации командира группы пишем: null=[this, Sold2, Sold3] exec VM "test.sqf"; Если кто подправит буду только рад, в планах хочу создать скрипт типа "Upsmon", вот и собираю по кусочкам. |
› Вторник
› 01.10.2013
› 22:32
› Сообщение #
Fox777,
_sold2 setFormDir _dir + 90; sleep 0.5; _sold2 setFormDir _dir + 120; WaitUntil {(Speed _sold1) > 0}; этот блок лучше сделать так WaitUntil { sleep 0.5; _sold2 setFormDir _dir + 90; sleep 0.5; _sold2 setFormDir _dir + 120; (Speed _sold1) > 0}; |
› Воскресенье
› 06.10.2013
› 18:41
› Сообщение #
Реально лучше , Спасибо, мне еще учиться и учится. С вашими знаниями можно ИИ Армы мозги вправить , а то когда по "Troopmon" смотрю на ботов иногда посмеяться хочется.
Добавлено (06.10.2013, 18:41) |
› Воскресенье
› 06.10.2013
› 18:49
› Сообщение #
Fox777,
попробуй это http://community.bistudio.com/wiki/assignedTarget |
› Воскресенье
› 06.10.2013
› 21:04
› Сообщение #
Цитата (Slon) попробуй это http://community.bistudio.com/wiki/assignedTarget |
› Понедельник
› 07.10.2013
› 01:22
› Сообщение #
Здравствуйте всем. Вот пытаюсь создать скрипт обмена информацией между бойцами группы, с последующим целеуказанием, но запутался. Создаю пустые массивы для определенных типов целей, потом, по замыслу, каждый боец вкладывает имена видимых целей в эти массивы. Массивы изменяются динамически через определенный шаг.
Наваял. Получилось немного коряво. Не работает! Две недели голову ломаю. Подскажите что не так. Сам скрипт: _comander = _this select 0; _group = group _commander; _unit = units _group; _i = 0; _j = count _unit; // резервируем массивы целей _man = []; _tank = []; _car = []; while {_i < _j} do { // пока боец жив, выполнять while {alive (_unit select _i)} do { _n = 0; //массив объектов, которые видит объект _objects = (_unit select _i) nearTarget 600; // один из видимых объектов _obj = _objects select _n; // сторона объекта _side = _obj select 2; // если сторона объекта ЗАПАД if (_side == WEST) then { //имя объекта _name = _obj select 4; // бойцы группы получают информацию о цели {_x reveal _name} foreach unit _group; if ("man" countType [_name] != 0) then {КОМАНДА 1}; if ("tank" countType [_name] != 0) then {КОМАНДА 2}; if ("car" countType [_name] != 0) then {КОМАНДА 3}; }; sleep 1; // следующий объект _n = _n + 1; }; // следующий боец _i = _i + 1; }; Добавлено (07.10.2013, 01:22) |
› Понедельник
› 07.10.2013
› 08:52
› Сообщение #
примерно так
_group = group (_this select 0); _man = []; _tank = []; _car = []; While {true} do { { { if ((_x select 2) == West) then { Switch true do { case ((_x select 1) isKindOf "Man"): { if !((_x select 4) in _man) then { _man set [count _man, _x select 4] }}; case ((_x select 1) isKindOf "tank"): { if !((_x select 4) in _tank) then { _tank set [count _tank, _x select 4] }}; case ((_x select 1) isKindOf "car"): { if !((_x select 4) in _car) then { _car set [count _car, _x select 4] }}; }}; } forEach (_x nearTargets 600); } forEach (units _group); }; |
› Пятница
› 11.10.2013
› 10:43
› Сообщение #
Спасибо Slon.
Добавлено (11.10.2013, 10:43) |
| |||
Чат сайта |