Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Вопрос - ответ Тема для небольших вопросов по Arma 3 (взаимопомощь в режиме вопрос-ответ) |
Тема для небольших вопросов по Arma 3 |
› Суббота
› 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 и ОА это работало отлично. |
› Суббота
› 05.01.2019
› 00:35
› Сообщение #
![]() В кратце по такому коду, переключение на бота происходит, но включается мутный фильтр картинки смерти, которая так и висит на экране после переключения. while {true} do { if (!alive player) then {selectPlayer ближайший бот}; sleep 1}; ![]() Добавлено (05.01.2019, 00:36) Прикрепления:
9127788.jpg
(24.0 Kb)
|
› Суббота
› 05.01.2019
› 00:42
› Сообщение #
ты не понял
Player в игре НЕ участвует. Спрячь его подальше. С самого начала игры делай подставного бота. |
› Суббота
› 05.01.2019
› 00:46
› Сообщение #
А после смерти игрока повторно, в теле бота на которого переключался, как раз и происходит отключение всех кнопок клавиатуры.
|
› Суббота
› 05.01.2019
› 00:48
› Сообщение #
Так скрипт продолжает работать. Бот умер, делай нового и передавай в управление игроку.
Какой скрипт используешь ? примерно так _ty = TypeOf Player; - - - - запоминаем Тип _grp = createGroup East; - - - делаем Группу _pos = getMarkerPos "Start"; - - место появления. While {true} do { Bot = _grp createUnit [_ty, _pos, [], 5, "FORM"]; - делаем бота SelectPlayer Bot; - - - - - - - - - - - - - - - - - - - - - передаём управление WaitUntil {!alive Bot}; - - - - - - - - - - - - - - - - ждём смерти _as = Bot Spawn {sleep 15; deleteVehicle _this}; - - отправка данных на удаление трупа. sleep 1; }; - - - - - - - - - повтор. |
› Суббота
› 05.01.2019
› 00:59
› Сообщение #
Все равно selectPlayer хоть и переключает игрока в тело выбраного бота, но после смерти уже этого бота, даже в свою личину игрока, поставленого в редакторе, нельзя вернуться, клавиатура недоступна.
|
| |||
Чат сайта |