Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Скриптовые команды (всякая всячина) |
Скриптовые команды |
› Четверг
› 20.03.2014
› 03:06
› Сообщение #
Вот что сделал, работает нормально. Даже если две группы одновременно выедут. Вот только про spawn не знаю. Его алгоритмы, после срабатывания и удаления машины и группы водителей эти потоки удаляются? Не получится так что в цикле их будет все больше и больше засоряя память?
Код while {true} do { WaitUntil {{alive _x} count units gruppa4 < 7}; /в боевой группе сильные потери, осталось менее 7 солдат в живых. _truk = createVehicle ["O_Truck_03_covered_F", getmarkerPos "start", [], 10, "NONE"]; _truk spawn {sleep 600; deletevehicle _this}; _driver = [getmarkerPos "start", west, ["B_helipilot_F", "B_helipilot_F"]] call BIS_fnc_spawnGroup; _driver spawn {sleep 590; {deletevehicle _x} foreach units _this}; /создаем транспорт и водителей, даем вейпоинты на движение, вешаем им удаление через 10 минут. _wpo = _driver addWaypoint [getMarkerPos "start", 5]; _wpo setWaypointType "GETIN NEAREST"; _wpo = _driver addWaypoint [getMarkerPos "dvig7", 0]; _wpo setWaypointType "TR UNLOAD"; _wpo = _driver addWaypoint [getMarkerPos "start", 0]; _wpo setWaypointType "MOVE"; _grupa1 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F", "B_Soldier_TL_F"]] call BIS_fnc_spawnGroup; {_x assignasCargo _truk} forEach units _grupa1; {_x moveInCargo _truk} forEach units _grupa1; /создаем группу которую присоединим к воюющей группе, но не сразу, а то они приписавшись к группе переходят в боевой режим и захотят покинуть транспорт раньше времени. sleep 60; (units _grupa1) Join gruppa4; sleep 10; }; Сообщение отредактировал AleksSan - Четверг, 20.03.2014, 03:11
|
› Четверг
› 20.03.2014
› 07:51
› Сообщение #
AleksSan, Можно объединить
[_driver, _truk] spawn {sleep 590; {deletevehicle _x} foreach units (_this select 0); sleep 10; deletevehicle (_this select 1)}; |
› Четверг
› 20.03.2014
› 12:58
› Сообщение #
AleksSan, Можно объединить [_driver, _truk] spawn {sleep 590; {deletevehicle _x} foreach units (_this select 0); sleep 10; deletevehicle (_this select 1)}; Спасибо, то что нужно для минимализации кода. И вопрос открыт остался, в этом цикле spawn наверное за всю миссию раз 100 активируется, не наложится ли это лишними потоками в память? Может в конце кода после удаления техники и водителей прописать exitwitch? |
› Четверг
› 20.03.2014
› 13:18
› Сообщение #
AleksSan, если у тебя не Пентиум 133, можеш не переживать.
exitwitch ненужен. |
› Четверг
› 20.03.2014
› 13:18
› Сообщение #
И вопрос открыт остался, в этом цикле spawn наверное за всю миссию раз 100 активируется, не наложится ли это лишними потоками в память? Может в конце кода после удаления техники и водителей прописать exitwitch? поток, запускаемый через spawn, активируется один раз в момент его вызова. Как только выполнится последняя строка его кода (в данном случае через 600с), он закроется. Это как и любой другой скрипт Разве что твои юниты будут умирать пачками, респавн траков будет практически непрерывный, тогда потоки будут множиться.. но все равно каждый из них удалится через 10мин |
› Четверг
› 20.03.2014
› 18:20
› Сообщение #
Благодарю, жаль лимит на плюсики истек.
|
› Четверг
› 20.03.2014
› 20:11
› Сообщение #
AleksSan,завтра будет новый день:)
|
› Пятница
› 21.03.2014
› 15:52
› Сообщение #
Народ а подскажите пожалуйста команда setViewDistance.
Мне необходимо чтобы на карте выставилось 2500м и нельзя было менять, ни больше ни меньше. Правильно ли понимаю, что я должен написать некую строку setViewDistance 2500; в файл int.sqf? Сообщение отредактировал Shaadan - Пятница, 21.03.2014, 15:53
|
› Пятница
› 21.03.2014
› 18:07
› Сообщение #
|
› Понедельник
› 24.03.2014
› 17:47
› Сообщение #
|
› Воскресенье
› 30.03.2014
› 17:57
› Сообщение #
Shaadan,
----------------------------------- setViewDistance 1200; //Дистанция видимости setObjectViewDistance 1350; //Прорисовка обьектов для гармонии вида немного подальше setTerrainGrid 45; //Трава ----------------------------------- Всё это можно прописаь хоть триггер хоть init.sqf Сообщение отредактировал dmb91 - Воскресенье, 30.03.2014, 17:58
Жизнь - Родине, Честь - Никому.
"Ми боремся не потому, что ненавидим тех, кто находится перед нами, а потому что любим тех, кто у нас за спиной". •••••••••••••••••••••••••••••••••••••• Исторические карты Украины (Maps of Ukraine XVI-XX) https://youtu.be/UENTo8MSpDY Исторические карты Украины-Руси https://youtu.be/rh9y97in2CA |
› Четверг
› 03.04.2014
› 02:55
› Сообщение #
Непонятка с скриптом подсчета юнитов в радиусе триггера. Изменил проверенный триггер (выводил постоянно хинт сколько и каких сторон юнитов, в его радиусе) радиусом 500, активация кто угодно, по активации прописано: ss = thisList execVM "count.sqf"
Код while {true} do { _ar = _this; _east = {if(side _x == east) then {alive _x}} count _ar; _res = {if(side _x == resistance) then {alive _x}} count _ar; WaitUntil {(_east + _res) < 5}; titletext ["менее 5 юнитов", "Plain Down"]; sleep 10; }; east и resistance союзники, идет подсчет их общего числа юнитов. Так в начале хинт с текстом при количестве солдат меньше 5 каждые 10 секунд выходил - скрипт работает правильно. Если же в радиусе тригера становилось юнитов больше 5 то текст сообщения не выходил, так и должно быть. Но если же юнитов опять становилось менее 5 скрипт должен бы был возобновить цикл и текст заного выводится, но нет, стоит цикл. Или есть другой вариант подсчета юнитов в радиусе триггера? Сообщение отредактировал AleksSan - Четверг, 03.04.2014, 03:08
|
› Четверг
› 03.04.2014
› 05:30
› Сообщение #
неверно, в thisList массив- состояние на момент запуска, далее неизменный. ss = ИмяТригера execVM "count.sqf" для подсчёта стороны есть спец оператор. countSide синтаксис - side countSide arrayName _trg = _this; while {true} do { WaitUntil {_ls = List _trg; (East countSide _ls + West countSide _ls) < 5}; titletext ["менее 5 юнитов", "Plain Down"]; sleep 10; }; |
› Четверг
› 03.04.2014
› 15:37
› Сообщение #
Благодарю за подсказки. Только в скрипте вывел из цикла строку _ls = List _trg; дабы лист юнитов не крутился в цикле. Проверил на работоспособности не сказалось, даже переместив тригер в новое место корректно работает с количеством юнитов в нем.
Немножко допилил и получился не сложный скрипт контроля последовательно захватываемых зон. Код _trg = _this; _ls = List _trg; while {true} do { WaitUntil {West countSide _ls > 7 && (East countSide _ls) + (resistance countSide _ls) < 5}; titletext ["зона триг захвачена синими", "Plain Down"]; sleep 10; }; По хорошему что бы не мучится с зачисткой зоны триггера выискивая по домам и кустам остатки east +resistance сил, можно по выполнению условия (когда west преобладает > 7, а противника < 5), массив оставшихся юнитов (East countSide _ls) + (resistance countSide _ls) объединить в группу и уже группу заставить отступить или же бросится в последний бой. Но не хватает знаний. Пробовал так: _ms = (East countSide _ls); _mse = units _ms; не выдает список юнитов которыми можно было бы оперировать. Сообщение отредактировал AleksSan - Четверг, 03.04.2014, 15:43
|
› Четверг
› 03.04.2014
› 15:57
› Сообщение #
AleksSan, измени сторону активации триггера, получиш список нужной стороны
_trg setTriggerActivation ["EAST", "PRESENT", true]; https://community.bistudio.com/wiki/setTriggerActivation |
| |||
Чат сайта |