| Модератор форума: GUNNER161, Panikaha |
| Форум РЕДАКТОР - ArmA 3 Вопрос - ответ Тема для небольших вопросов по Arma 3 (взаимопомощь в режиме вопрос-ответ) |
| Тема для небольших вопросов по Arma 3 |
› Суббота
› 06.10.2018
› 09:22
› Сообщение # 1771
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
› Сообщение # 1772
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
› Сообщение # 1773
Возвращаемые параметры записываются в конце функции. Удивительно но работает. Даже не предполагал что висящая в конце скрипта переменная или массив не к чему ни приравненная и не выполняющая задач может выводить информацию за скрипт. А можешь на словах объяснить что дает private ? В данном коде и без нее все выполняется как нужно. На сайте bis посмотрел через переводчик, так и не понял смысла приватности.
|
› Воскресенье
› 07.10.2018
› 08:09
› Сообщение # 1774
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
› Сообщение # 1775
Борюсь целый день с очередной фичей Армы. В каком то из патчей БИСы опять накрутили лишнего. Суть в том что БМП (созданная скриптом) попав под обстрел из засады останавливается и расстреливает тех кого увидит. А вот успевшие укрыться или обстрелявшие и сбежавшие враги оставляют эту БМП в недоумении. Так и стоит на одном месте. CombatMode и Behavior у группы менял без толку. Зато если БМП не создавать скриптом, а поставить в редакторе и заставить проехать с теми же условиями мимо засады, она проезжает адекватно. Постреляв до кого дотянется проезжает опасный участок без остановок.
|
› Воскресенье
› 16.12.2018
› 22:39
› Сообщение # 1776
Дело не в БМП конечно, а в экипаже.
Группу для экипажа сделай на карте. а сам экипаж можно скриптом, будет работать нормально. можно даже на карте маршрут нарисовать которым БМП поедет. |
› Понедельник
› 17.12.2018
› 00:27
› Сообщение # 1777
Миссия с динамическом спавном юнитов. Кроме player больше ни одного поставленного в редакторе. А как группу создать на карте? Поставив юнита с шансом присутствия 0% и прописав в ините grupa1 = group this? Или еще есть другие способы?
Переделать под новой принцип назначения группы много менять придется. Есть способ очистить память экипажа об всех обнаруженных врагах, тогда водитель предполагая что дорога свободна по крайней мере с подобным костылем сможет отъехать? Можно через forgetTarget заставить забыть, но ей нужно указывать поименно каждого замеченного вражеского юнита. |
› Понедельник
› 17.12.2018
› 11:32
› Сообщение # 1778
В редакторе ОБЯЗАТЕЛЬНО надо поставить 4 юнита, по одному каждой стороны. Это запустит в движке систему свой-чужой.
Присутствие нужно 100%. но удлинить строку grupa1 = group this; deleteVehicle this forgetTarget - срабатывает если цель невидна некоторое время. |
› Пятница
› 04.01.2019
› 23:42
› Сообщение # 1779
Slon, может знаешь как убрать заставку после смерти игрока, когда выходит меню перезапуска миссии или выбор переключения на другого доступного юнита? Реализовал возможность переключения на любого бота в миссии через selectPlayer. Но после смерти игрока приходится держать доступного для выбора промежуточного юнита, выбирать его, а потом опять переключаться на нужного бота. Сделал скрипт отслеживая смерть Player и настроил автопереключение на ближайшего бота, но после переключения игроку не дается возможность управления из за заставки, так еще и клавиатура не реагирует. Остается только системной комбинацией windows ctrl+alt+del прибить игру.
|
› Пятница
› 04.01.2019
› 23:53
› Сообщение # 1780
я делал так.
Именно игрока прятал подальше, живым, Создавал группу - запомнил, в неё создаёш бота - переводиш в него управление, запускаешь скрипт на not Alive Bot. Как только он умирает, делаеш нового бота, переводишь управление в него, старую тушку стираешь а основное тело спрятано и живо. И пока игрок Жив окно не выскакивает и можно своё нарисовать. В АА2 и ОА это работало отлично. |
› Суббота
› 05.01.2019
› 00:35
› Сообщение # 1781
Так заставка после смерти игрока сразу же выходит.В кратце по такому коду, переключение на бота происходит, но включается мутный фильтр картинки смерти, которая так и висит на экране после переключения. 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
› Сообщение # 1782
ты не понял
Player в игре НЕ участвует. Спрячь его подальше. С самого начала игры делай подставного бота. |
› Суббота
› 05.01.2019
› 00:46
› Сообщение # 1783
А после смерти игрока повторно, в теле бота на которого переключался, как раз и происходит отключение всех кнопок клавиатуры.
|
› Суббота
› 05.01.2019
› 00:48
› Сообщение # 1784
Так скрипт продолжает работать. Бот умер, делай нового и передавай в управление игроку.
Какой скрипт используешь ? примерно так _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
› Сообщение # 1785
Все равно selectPlayer хоть и переключает игрока в тело выбраного бота, но после смерти уже этого бота, даже в свою личину игрока, поставленого в редакторе, нельзя вернуться, клавиатура недоступна.
|
| |||
| Чат сайта |