Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Вопрос - ответ Тема для небольших вопросов по Arma 3 (взаимопомощь в режиме вопрос-ответ) |
Тема для небольших вопросов по Arma 3 |
› Понедельник
› 10.09.2018
› 10:01
› Сообщение #
Slon, спасибо
А знает ли кто, каким образом проверить бойца на дееспособность? Мол если ранили серьезно, и без реанимации, проведенной другим игроком не встать? |
› Понедельник
› 10.09.2018
› 21:01
› Сообщение #
[scout],
Команда dammage показывает общий урон юнита от 0 до 1. https://community.bistudio.com/wiki/damage и по сложней вариант когда отображаются повреждения зонально, голова, руки жопа. GetHit https://community.bistudio.com/wiki/getHit |
› Вторник
› 11.09.2018
› 14:58
› Сообщение #
Можно еще периодически опрашивать animationState у юнитов. Если соответствует анимации ранения (катается по земле), значит "ранили серьезно"
|
› Пятница
› 05.10.2018
› 00:40
› Сообщение #
Подскажите как реализовать вывод локальных данных внутри скрипта?
То бишь работает основной скрипт, в нем получились некоторые переменные к примеру _abc1 и _abc2, в этом же скрипте эти локальные переменные передаются на обработку в другой скрипт. Что вроде [_abc1,_abc2] call fnc_script. Далее в коде fnc_script эти две переменные обработались и результат обработки нужно вернуть в основной скрипт. Каким образом обработанные данные вернуть в основной скрипт, но не делая эти данные глобальными? |
› Пятница
› 05.10.2018
› 03:28
› Сообщение #
При использовании call никаких дополнительных действий не надо,
переменные объявленные до вызова можно использовать в функции без пересылки и при возврате они получают новые значения. скрипт для проверки _a = 10; _b = 22; _fn = { _a = 5; _b = 4; }; hint format ["%1\n%2", _a, _b]; sleep 3; call _fn; hint format ["%1\n%2", _a, _b]; \\\ а вот использование Spawn сложней. Это параллельный поток, и переменные для функции локальны. передача и возврат переменных делается через глобальную переменную, а значит запускать несколько потоков будет сложно. скрипт для проверки _a = 10; _b = 22; fn_ret = []; _fn = { _n = _this select 0; _m = _this select 1; _n = 5; _m = 4; fn_ret = [_n, _m]; }; hint format ["%1\n%2", _a, _b]; sleep 3; _ret = [_a,_b] Spawn _fn; waitUntil { scriptDone _ret}; \\ ожидание выполнения функции. _a = fn_ret select 0; _b = fn_ret select 1; hint format ["%1\n%2", _a, _b]; |
› Суббота
› 06.10.2018
› 09:22
› Сообщение #
Slon, Извиняюсь, я не правильно сформулировал вопрос. На примере выше насколько понял весь код крутиться в одном файле скрипта. Мне несколько другое нужно. Суть в том, что в какой то момент, скрипт стал слишком тяжеловесным. Поэтому решил некоторые повторяющиеся формулы расчетов, перекинуть в отдельный, второй фаил скрипта, где бы делались вычисления, а потом полученные данные из второго скрипта, вернулись в первый фаил скрипта.
На простом примере это выглядит так: Второй фаил, куда будут скидываться данные для расчетов прописываю в init для быстрого запуска. cod_1 = compile preprocessFileLineNumbers "zadacha_1.sqf"; в втором файле вычислений zadacha_1.sqf такой расчет: _par1 = _this select 0; _par2 = _this select 1; _rabota = _par1 + _par2; В первом основном файле получились некие данные которые нужно обработать во втором файле. Мы эти локальные данные передаем в второй скрипт таким путем: _abc = 10; _asw = 15; [_abc,_asw] call cod_1; В итоге получили локальную переменную _rabota = 25, и вот эту переменную нужно вернуть в первый фаил скрипта инициализирующую расчет. |
› Суббота
› 06.10.2018
› 13:26
› Сообщение #
AleksSan, совершенно не важно где записана функция. Если имена переменных совпадают, они будут изменены. И это надо учитывать.
Команда compile preprocessFileLineNumbers не читает функцию, и обращение к ней не возможно. Надо использовать команду execVM "zadacha_1.sqf"; Если всё же используется команда Call то для отправки и получения строка выглядит так _ms = []; _ms = [_a, _b] Call fn_rabota; в массиве _ms будут возвращённые параметры Все переменные в функции надо сделать приватными fn_rabota = { private ["_a", "_b", итд...]; _a = _this select 0; _b = _this select 1; Возвращаемые параметры записываются в конце функции [_a, _b] }; Также возвращаются и одиночные значения. _ret = [_a, _b] Call fn_rabota; fn_rabota = { .............. _rabota }; |
› Суббота
› 06.10.2018
› 23:51
› Сообщение #
Возвращаемые параметры записываются в конце функции. Удивительно но работает. Даже не предполагал что висящая в конце скрипта переменная или массив не к чему ни приравненная и не выполняющая задач может выводить информацию за скрипт. А можешь на словах объяснить что дает private ? В данном коде и без нее все выполняется как нужно. На сайте bis посмотрел через переводчик, так и не понял смысла приватности.
|
› Воскресенье
› 07.10.2018
› 08:09
› Сообщение #
private - делает переменные локальными для Того блока в котором их определили. Делается это на случай Возможного совпадения Имён.
Блок ограничивается фигурными скобками {блок} и сам файл это блок №1 Переменные не видны за границей блока но видны во Вложенных блоках. пример: в этом случае переменная _а файла изменится _a = 10; _fn = { _a = 5; }; hint str _a; sleep 3; call _fn; hint str _a; В этом случае, переменная _а функции будет локальна для функции и переменную файла не изменит _a = 10; _fn = { private ["_a"]; _a = 5; }; hint str _a; sleep 3; call _fn; hint str _a; есть ещё много вариантов блоков это if (условие) then {блок} While {блок; условие} do {блок} Switch (эталон) do { блок case (сравнение) : {блок}; default : {блок} }; WaitUntil {блок; условие} |
› Воскресенье
› 16.12.2018
› 21:17
› Сообщение #
Борюсь целый день с очередной фичей Армы. В каком то из патчей БИСы опять накрутили лишнего. Суть в том что БМП (созданная скриптом) попав под обстрел из засады останавливается и расстреливает тех кого увидит. А вот успевшие укрыться или обстрелявшие и сбежавшие враги оставляют эту БМП в недоумении. Так и стоит на одном месте. CombatMode и Behavior у группы менял без толку. Зато если БМП не создавать скриптом, а поставить в редакторе и заставить проехать с теми же условиями мимо засады, она проезжает адекватно. Постреляв до кого дотянется проезжает опасный участок без остановок.
|
› Воскресенье
› 16.12.2018
› 22:39
› Сообщение #
Дело не в БМП конечно, а в экипаже.
Группу для экипажа сделай на карте. а сам экипаж можно скриптом, будет работать нормально. можно даже на карте маршрут нарисовать которым БМП поедет. |
› Понедельник
› 17.12.2018
› 00:27
› Сообщение #
Миссия с динамическом спавном юнитов. Кроме player больше ни одного поставленного в редакторе. А как группу создать на карте? Поставив юнита с шансом присутствия 0% и прописав в ините grupa1 = group this? Или еще есть другие способы?
Переделать под новой принцип назначения группы много менять придется. Есть способ очистить память экипажа об всех обнаруженных врагах, тогда водитель предполагая что дорога свободна по крайней мере с подобным костылем сможет отъехать? Можно через forgetTarget заставить забыть, но ей нужно указывать поименно каждого замеченного вражеского юнита. |
› Понедельник
› 17.12.2018
› 11:32
› Сообщение #
В редакторе ОБЯЗАТЕЛЬНО надо поставить 4 юнита, по одному каждой стороны. Это запустит в движке систему свой-чужой.
Присутствие нужно 100%. но удлинить строку grupa1 = group this; deleteVehicle this forgetTarget - срабатывает если цель невидна некоторое время. |
› Пятница
› 04.01.2019
› 23:42
› Сообщение #
Slon, может знаешь как убрать заставку после смерти игрока, когда выходит меню перезапуска миссии или выбор переключения на другого доступного юнита? Реализовал возможность переключения на любого бота в миссии через selectPlayer. Но после смерти игрока приходится держать доступного для выбора промежуточного юнита, выбирать его, а потом опять переключаться на нужного бота. Сделал скрипт отслеживая смерть Player и настроил автопереключение на ближайшего бота, но после переключения игроку не дается возможность управления из за заставки, так еще и клавиатура не реагирует. Остается только системной комбинацией windows ctrl+alt+del прибить игру.
|
› Пятница
› 04.01.2019
› 23:53
› Сообщение #
я делал так.
Именно игрока прятал подальше, живым, Создавал группу - запомнил, в неё создаёш бота - переводиш в него управление, запускаешь скрипт на not Alive Bot. Как только он умирает, делаеш нового бота, переводишь управление в него, старую тушку стираешь а основное тело спрятано и живо. И пока игрок Жив окно не выскакивает и можно своё нарисовать. В АА2 и ОА это работало отлично. |
| |||
Чат сайта |