|
|
Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Вопрос - ответ Вопрос по условию |
Вопрос по условию |
› Суббота
› 16.05.2020
› 16:58
› Сообщение #
Господа, день добрый.
Образовался у меня такой вот вопрос, как правильно на языке sqf задать условие Если(if) у зашедшего в триггер есть "КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР" ТО(then) execvm "rad1.sqf"; Или же(else) другая экипировка, то естьне "КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР" _soldier1 setDamage 1; |
› Суббота
› 16.05.2020
› 20:29
› Сообщение #
тут подойдёт сравнение двух массивов
backpackItems Player - это содержимое рюкзака Игрока ["КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР"] - список сравниваемого {_x in backpackItems Player } count ["КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР"] == Количество совпадений в файле можно записать так if ( {_x in backpackItems _soldier1 } count ["КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР"] == 3 ) then { execvm "rad1.sqf"; } else { _soldier1 setDamage 1; }; |
› Суббота
› 16.05.2020
› 20:48
› Сообщение #
Скажи пожалуйста _soldier1 это же по идее переменная?
ну допустим игрока я назову _soldier1 , для него скрипт будет работать, а как же остальные игроки? Им тоже насильно присвоить переменные? |
› Суббота
› 16.05.2020
› 21:00
› Сообщение #
Имя тоже переменная, но глобальная.
Подчёркивание в начале означает что переменная локальная, т.е. для файла. (внутри кода) Так что имя юнита надо начинать со знака, а в середине можно и подчёркивания вставить soldier_1 Для работы с триггером код будет таким While {true} do { // бесконечный цикл { _un = _x;// чтобы избежать конфликта имён if ( {_x in backpackItems _un } count ["КОСТЮМ 1", "ПРОТИВОГАЗ", "ХИМ ДЕТЕКТОР"] == 3 ) then { _un execvm "rad1.sqf"; } else { _un setDamage 1; }; } forEach List Trigg_1; // Имя триггера Trigg_1 sleep 1;// пауза 1 сек }; В данном случае имена юнитам давать не нужно, будет проверять всех находящихся в зоне триггера. |
› Суббота
› 16.05.2020
› 23:23
› Сообщение #
Спасибо за помощь!
Но у меня случился конфуз. Возможно, что то я тут намудрил уже. Суть такая: Одел Комбез и респиратор, скрипт считает, что условие IF нарушено и выполняет условие else Код hint "WORK!"; While {true} do { // бесконечный цикл { _un = _x;// чтобы избежать конфликта имён if ({_x in backpackItems _un } count ["U_C_CBRN_Suit_01_Blue_F", "G_AirPurifyingRespirator_01_F"] == 2) then { _un execvm "rad2.sqf"; } else { _un SetDamage 1; PP_radial = ppEffectCreate ["radialBlur",100]; PP_radial ppEffectEnable true; PP_radial ppEffectAdjust [0.15,0.16,0.43,0.44]; PP_radial ppEffectCommit 1; PP_colorC = ppEffectCreate ["ColorCorrections",1500]; PP_colorC ppEffectEnable true; PP_colorC ppEffectAdjust [1,0.9,0.21,[0.33,0.33,0.33,0.23],[1,1,1,1],[0.33,0.33,0.33,0],[0,0,0,0,0,0,4]]; PP_colorC ppEffectCommit 1; PP_film = ppEffectCreate ["FilmGrain",2000]; PP_film ppEffectEnable true; PP_film ppEffectAdjust [0.74,1.16,0.4,0.5,0.5,true]; PP_film ppEffectCommit 1; "Marker1" setMarkerColor "ColorOrange"; playMusic "rad1"; }; } forEach List t1; // Имя триггера Trigg_1 sleep 10;// пауза 1 сек }; Добавлено (16.05.2020, 23:29) --------------------------------------------- Я сделал вот так: В триггере активацию скрипта, а в скрипте условия. Добавлено (16.05.2020, 23:30) --------------------------------------------- вверху не правильно ссылку залил. https://radikal.ru/lfp/d.radikal.ru/d12/2005/b1/ebb4c741185a.png/htm |
› Суббота
› 16.05.2020
› 23:36
› Сообщение #
тут может дело в том что надетое снаряжение не числится в рюкзаке. - backpackItems
Есть ещё assignedItems Items это всё разное. наверно тут подойдёт uniformItems _un |
› Воскресенье
› 17.05.2020
› 00:31
› Сообщение #
Всё перепробовал, убивает. Буду рыть еще глубже.
|
› Воскресенье
› 17.05.2020
› 00:47
› Сообщение #
чтобы посмотреть у кого что можно в скрипт добавить вот такую строку
hint format ["uniformItems - \n%1\n\n assignedItems - \n%2", uniformItems _un , assignedItems _un]; будет выглядеть вот так |
› Воскресенье
› 17.05.2020
› 01:38
› Сообщение #
Вобщем, не нашол я чем можно узнать что на юните надето. Нужен другой подход.
|
› Воскресенье
› 17.05.2020
› 14:07
› Сообщение #
Вставлю-ка и я свою пятачину.
uniform _un; // название униформы юнита headgear _un; // название головного убора юнита vest _un; // название жилета юнита goggles _un; // название очков юнита Не знаю, к какому типу относится "противогаз" - к очкам или к головному убору, также "хим детектор" - к жилету, или к рюкзаку. Ну а дальше: _cond = false; if (uniform _un isEqualTo "костюм 1") then { if (headgear _un isEqualTo "противогаз") then { if (backpack _un isEqualTo "хим детектор") then {_cond = true}; }; }; if (_cond) then {execVM "rad1.sqf"} else {_un setDamage 1}; |
› Воскресенье
› 17.05.2020
› 15:07
› Сообщение #
спасибо, проверю и отпишусь)
Добавлено (17.05.2020, 18:11) Добавлено (17.05.2020, 20:07) |
| |||
| |||
Чат сайта |