Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 » Скрипты » Вопросы по скриптописанию (Тонкости написания скриптов) |
Вопросы по скриптописанию |
› Пятница
› 20.12.2013
› 21:03
› Сообщение #
Знаю , где-то для этого есть спец.тема , но спрошу тут . Как давать НПЦ анимации ?
К нацистам отношения не имею , подобрал никнейм под аватарку =D
|
› Суббота
› 15.03.2014
› 13:23
› Сообщение #
Как в мультиплеере, передать removeaction на все клиенты?
т.е. если одинз из игроков выполнил addaction, в котором потом есть removeaction, то у других игроков, тоже исчезнет этот addaction? |
› Суббота
› 15.03.2014
› 14:36
› Сообщение #
addaction - локальное, кому дали у того и есть
removeaction - также. |
› Суббота
› 15.03.2014
› 19:33
› Сообщение #
Да да. Это я знаю.
addaction прописан у объекта на карте. Просто надо сделать так, чтобы если один игрок уже использовал addaction, то сработал removeaction для всех. |
› Суббота
› 15.03.2014
› 23:40
› Сообщение #
T-72Б, нежно сделать триггер который сотрёт экшен. в условие глобальная переменная, одновременное срабатывание через
https://community.bistudio.com/wiki/publicVariable а ещё тут посмотри http://arma.at.ua/forum/28-1473-23004-16-1239258352 |
› Воскресенье
› 16.03.2014
› 00:42
› Сообщение #
нежно сделать триггер который сотрёт экшен. в условие глобальная переменная, одновременное срабатывание через но я нашёл иной путь. Создал триггер, который кидал любого игрока на место gunner транспорта. И активировал (gunner car) addaction. Только вот появились два вопроса. Как проверить, находится ли (gunner car) в car? Проверка нужна, чтобы прекращать все скрипты, которые активировал (gunner car), находясь в car. нашёл Но крайний вопрос. Чтобы использовать terminate, надо дать скрипту переменную. С этим всё ясно. Но как дать скрипту переменную в addaction? act=(gunner car) addAction ["GO", "script.sqf"]; Или лучше через exitwith {}? if ((OPC emptyPositions "gunner") > 0) exitwith {}; ---------------------- Я вроде всё сделал, условия поставил, но они почему-то не работают. Понять не могу почему. Что ещё надо этому скрипту? Уже три дня его пишу. Код waitUntil {sleep 5;(OPC emptyPositions "gunner") > 0}; sleep 1; tankcr ={ (gunner OPC) removeaction TANKact; onMapSingleClick "tankwp setpos _pos"; hint "click map to APC#1 pos wp"; sleep 5; if (isServer) then { _side = createCenter BLUFOR; _groupGR = createGroup west; _drGRc = _groupGR createUnit ["B_crew_F", [0, 0, 0], [], 0, "FORM"]; _drGRc setPos getpos tankpos; _drGRd = _groupGR createUnit ["B_crew_F", [0, 0, 0], [], 0, "FORM"]; _drGRd setPos getpos tankpos; _drGRg = _groupGR createUnit ["B_crew_F", [0, 0, 0], [], 0, "FORM"]; _drGRg setPos getpos tankpos; _GRveh = createVehicle ["B_APC_Tracked_01_rcws_F", getPos tankpos, [], 0, "none"]; sleep 1; _drGRc setSpeedMode "normal"; _drGRc= leader _groupGR; _GRveh allowCrewInImmobile true; _drGRd moveInDriver _GRveh; _drGRg moveIngunner _GRveh; _drGRc moveInCommander _GRveh; _drGRc setCombatMode "RED"; _drGRc move getpos tankwp; sleep 5; waitUntil {sleep 5;(({alive _x} count (units _groupGR)) < 2)}; sleep 5; _GRveh setdamage 1; {_x setdamage 1} forEach units _groupGR; sleep 5; deleteVehicle _GRveh; {deleteVehicle _x} forEach units _groupGR; sleep 5; [] execvm "supportBLUE\tank.sqf"; }; hint "APC#1 dead"; }; sleep 1; hint "APC#1 ready"; TANKact=(gunner OPC) addAction ["APC#1", "[] spawn tankcr"]; Активация через триггер. Триггер с повтором. as=[] execvm "supportBLUE\tank.sqf";player moveInGunner OPC План такой. 1. Запускаем скрипт. 2. Проверяем, находится ли кто-нибудь за стрелка. 2.1 если нет, то продолжаем выполнять. 3. Появился стрелок, добавляем ему действие через addaction 4. Выполняем код. 5. Если APC уничтожили, то запускаем скрипт заново. После запуска, должен цикл начаться сначала. НО! Условие waitUntil {sleep 5;(OPC emptyPositions "gunner") > 0}; не срабатывает или срабатывает, даже если за стрелком никого нет. Сообщение отредактировал T-72Б - Воскресенье, 16.03.2014, 18:53
|
› Понедельник
› 17.03.2014
› 10:36
› Сообщение #
|
› Четверг
› 27.03.2014
› 19:38
› Сообщение #
Что будет сильнее нагружать систему: поставленные в редакторе юниту 10-15 вейпов или такой скрипт, который то же самое делает?
|
› Четверг
› 27.03.2014
› 20:08
› Сообщение #
andrucio, Сколько поинтов не имеет значения, работает только активный.
но не это важно Цитата waituntil {_un distance (getmarkerpos "TMk") < 3}; слишком мало условий , недостаточный контроль . а если бота хлопнут? а если он заблудится? итд. |
› Вторник
› 08.04.2014
› 17:46
› Сообщение #
Slon, скрипт для патрулей на аэродроме. При расстоянии между ВП больше 25-30м эти
5 групп, самый короткий путь - 10 ВП, самый длинный (вдоль полосы и обратно) - не пробовал, но наверное, больше 50 будет. Суть скрипта - вокруг юнита по кругу в 25м создается массив точек, через 10град. Вычисляется самая ближайшая к текущему маркеру и бот направляется на нее. Затем все по новой. По контролю согласен. Но хлопать бота в этой миссии некому:), заблудиться он тоже не может на открытом месте, даже больше - при тесте боты зашли за колючку, уперлись в тупик, но развернулись и почапали обратно, на правильный путь. Да и waituntil там всего на 25м (он уже убран внутрь цикла for, что позволило избавиться от создания маркера) При желании можно параллельно навесить проверку alive с прерыванием скрипта по ID Добавлено (08.04.2014, 17:46) Код { _x addEventHandler ["killed", {if ((_this select 1)==player) then {[] execVM "kill_civil.sqf"}}] } foreach (units _crowd); Все прекрасно, экран затемняется и вываливается окно с нужным дебрифингом, но в фоне основное действие продолжается. Добавлял forceEnd - не помогло. Может быть, потому, что завершение происходит в параллельном потоке? Как исправить? |
› Вторник
› 08.04.2014
› 18:13
› Сообщение #
andrucio, используй
https://community.bistudio.com/wiki/endMission |
› Вторник
› 08.04.2014
› 19:10
› Сообщение #
Slon, при endmission все внутренние сейвы убиваются. Нужен именно фейл, чтобы переиграть с ближайшей точки
|
› Вторник
› 08.04.2014
› 19:54
› Сообщение #
|
› Четверг
› 10.04.2014
› 11:46
› Сообщение #
В mission.sqm удали строки с лишними аддонами.
============== ============== Не могу понять в чём проблема. Вроде условие нормальное. Выполнение в случае false тоже. Код while {true} do{ waitUntil {sleep 0.5; alive player}; if !((uniform player=="U_B_CombatUniform_mcam_vest") or (uniform player=="U_I_CombatUniform_tshirt")) then { private "_veh"; while {alive player} do { waitUntil {sleep 0.5; vehicle player != player}; _veh = vehicle player; if (_veh isKindOf "Tank" && !(_veh isKindOf "APC")) then { if ((driver _veh== player) or (gunner _veh == player)) then { player action ["eject", _veh]; waitUntil {sleep 0.5; vehicle player == player}; player action ["engineOff", _veh]; }; }; }; } else { waitUntil {sleep 0.5; !alive player}; }; }; ============== ============== Запилил чуток по другому. Код while {true} do {_veh=vehicle player; if ((driver _veh== player) or (gunner _veh == player)) then { if !((uniform player=="U_B_CombatUniform_mcam_vest") or (uniform player=="U_I_CombatUniform_tshirt")) then {if (_veh isKindOf "Tank" && !(_veh isKindOf "APC"))} then {hint "take crewman uniform";player action ["eject", _veh]};}; sleep 0.5 }; Сообщение отредактировал T-72Б - Четверг, 10.04.2014, 12:48
|
› Четверг
› 10.04.2014
› 14:49
› Сообщение #
Slon, а как можно узнать номер дисплея и номер контрола, отвечающих за открытие окна брифинга в начале миссии, который появляется после загрузки лоадскрина?
Суть в следующем. Хочу этот брифинг принудительно закрыть, то есть, чтоб автоматом нажалась кнопка "далее". На бис-форуме нашел тему, где указано, как скипить дебрифинг. PS briefing=0 в дескрипшене работает только в том случае, если в папке с миссией нет briefing.html Сообщение отредактировал andrucio - Четверг, 10.04.2014, 15:11
|
| |||
Чат сайта |