Досмотр
|
|
Shaten | Дата: Воскресенье, 22.12.2013, 23:24 | Сообщение # 1 |
Группа: Удаленные
| Привет, Fess ! Сделал функцию досмотра, за основу взял твой скрипт обыска ящиков. Получилось вот что, игрок (player, делаю для мультиплеера) подходить к юниту s1, и у него появляется функция "обыскать", она вызывает скрипт, в нем я прописал Player action ["GEAR",s1]. Все хорошо, любой игрок может открыть инвентарь s1 находясь рядом.
Теперь вопрос: 1 Возможно ли провернуть тоже самое, но не для s1, а для любого юнита перед игроком (в радиусе пары метров) ? 2 Тоже самое, но что бы эта функция была доступна не всем игрокам, а конкретным ? 3 Тоже, но функция доступна в определенном месте (досмотровая), я так понимаю это триггер и условие на присутствие в нем юнита (name in thisList)?
Интересны все три варианта, для разных сценариев. Очень тебе признателен за твои видео, много узнал, много понял, спасибо !
|
|
| |
Fess | Дата: Воскресенье, 22.12.2013, 23:30 | Сообщение # 2 |
Добрый админ
Сообщений: 2339
Статус: 
| Цитата Shaten (  ) Возможно ли... Возможно, все три пункта. Я даже как-то делал функцию рукопашного боя. Типа подходишь к любому игроку вражеской фракции и появляется надпись "Убить..." Здесь тот же принцип.
Ну всё, написал, проверил, все работает. Значит, смотри. Вот коды двух файлов
Цитата dosmotr.sqf DOSMOTR = FALSE;
// Ждем, пока игрок войдет в зону досмотра while {!DOSMOTR} do {sleep 1;};
_side = EAST; // сторона тех, к кому будет применяться обыск, задаешь сам, EAST\WEST\т.д. _marked = [];
while {DOSMOTR} do {
// ищем вражеских мужиков _array = getPos player nearEntities ["MAN", 5]; // если вражеские мужики найдены то if ({side _x == _side} count _array > 0) then {
{ // Добавляем действие на обыск if(side _x == _side && !(_x in _marked)) then {
_x addAction ["Обыскать..","check.sqs", [], 10, false, true, "", "player distance _target < 3 && DOSMOTR && alive _target"]; _marked set [count _marked, _x]; // заносим его в массив обыскиваемых мужиков
}; } forEach _array; }; sleep 1; };
// Освобождаем память от мужиков _marked = []; // Перезапускаем этот скрипт as = [] execVM "dosmotr.sqf";
Цитата check.sqs _gen = _this select 0 _caller = _this select 1 _id = _this select 2 ; it's to remove the action once it is activated ; _gen removeAction _id
_caller action ["GEAR",_gen] В самой игре тебе надо будет поставить триггер с многоразовой активацией, размер выставишь какой тебе нужен. В поля пишешь
Цитата Активация DOSMOTR = TRUE; hint "TRUE" Цитата Деактивация DOSMOTR = FALSE; hint "FALSE" Теперь жмёшь F2 и соединяешь себя и флажок триггера голубой ниточкой. Всё. Любой юнит стороны _side можно будет обыскать.
Прилагаю пример миссии для ArmA III http://yadi.sk/d/FUCtWpu8Ej6uN
|
|
| |
Shaten | Дата: Понедельник, 23.12.2013, 01:08 | Сообщение # 3 |
Группа: Удаленные
| Вот спасибо ! Возник еще вопросик. Ставлю триггер tr1 пишу ему в активацию: tr1 = nearestObjects [thisTrigger, ["Building"], 1000]; {_x setDammage 1} forEach tr1; Все дома в радиусе километра разрушаются, но вот деревья, заборы и столбы остаются. Как их уронить? Ставил вместо "Building" "Land", ничего не происходит, кроме собственной смерти если рядом. Пробовал ставить Trees и Wall ради эксперимента, тоже ничего. Отдельно забор по id уронить можно, а вот кучей не вышло. ArmA 2
|
|
| |
Fess | Дата: Понедельник, 23.12.2013, 09:47 | Сообщение # 4 |
Добрый админ
Сообщений: 2339
Статус: 
| Цитата Shaten (  ) Ставлю триггер tr1 пишу ему в активацию: tr1 = nearestObjects [thisTrigger, ["Building"], 1000]; {_x setDammage 1} forEach tr1; Все дома в радиусе километра разрушаются, но вот деревья, заборы и столбы остаются. Как их уронить? Уважаемый Shaten, почти правильно делал) Надо было так:
Код {_x setDamage 1} forEach nearestObjects [player, [], 500]; Само собой, вместо player подставишь любой нужный тебе объект.
|
|
| |