[BE] First 611 Жалоба Опубликовано 30 мая, 2019 (изменено) Скрипт ограничивает скорость техники до указанного вами лимита. 1. В init.sqf вписать: execVM "Scripts\SpeedLimit.sqf"; 2. Создать папку Scripts в папке с вашей миссией и создать в папке файл SpeedLimit.sqf. (Папка нужна для вашего удобства и удобства тем людям, кто проверяет вашу миссию). В SpeedLimit.sqf вписать код: // Конфиг _maxspeed = 40; // Максимальная скорость техники. while {alive player} do { _vehicle = (vehicle player); if (speed _vehicle > _maxspeed and player == driver (vehicle player)) then { // Тут лучше много не выставлять в _x. Если перекрутить или недокрутить, то техника будет откидываться назад (как при десинхронах), либо вообще улетит. (Рекомендуемо: 0.6 - 0.8). _vel = velocity _vehicle; _x = 0.8; _velNew = [(_vel select 0) * _x, (_vel select 1) * _x, (_vel select 2) * _x]; _vehicle SetVelocity _velNew; }; sleep 0.1; // Как часто крутим. (Рекомендуется: 0.1 - 0.3). }; Разные модификации: Если хотим ограничить скорость только для определенных классов техники: Спойлер // Конфиг _maxspeed = 40; // Максимальная скорость техники. // Массив техники на которую будет работать ограничение скорости. _convoy = [ "ID техники" ,"ID техники 2" ,"ID техники 3" // Продлевайте сколько надо! ]; while {alive player} do { _vehicle = (vehicle player); if (speed _vehicle > _maxspeed and (typeOf _vehicle in _convoy)) then { // Тут лучше много не выставлять в _x. Если перекрутить или недокрутить, то техника будет откидываться назад (как при десинхронах), либо вообще улетит. (Рекомендуемо: 0.6 - 0.8). _vel = velocity _vehicle; _x = 0.8; _velNew = [(_vel select 0) * _x, (_vel select 1) * _x, (_vel select 2) * _x]; _vehicle SetVelocity _velNew; }; sleep 0.1; // Как часто крутим. (Рекомендуется: 0.1 - 0.3). }; Если используется летная техника, то рекомендуется использовать проверку isKindOf "Air"; : Спойлер Найти строчку: if (speed _vehicle > _maxspeed) then И заменить на: if (speed _vehicle > _maxspeed and !(_vehicle isKindOf "Air")) then P.S. Если есть какие-то ошибки или пожелания к доработке - пишите, сделаю. Изменено 8 июля, 2019 пользователем First 1 MaDnEss отреагировал на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 30 мая, 2019 (изменено) А если используется плавательная техника? Спойлер А еще оператор in является cASe-seNsItiVE! Поэтому важно чтобы регистр класснеймов в массиве совпадал с тем, что выдает typeof Изменено 30 мая, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 (изменено) execVM, while - говно. Есть же EachFrame ивент хэндлерhttps://community.bistudio.com/wiki/Arma_3:_Event_Handlers/addMissionEventHandler#EachFrame и мы в сборке имеем CBA которым можно пользоваться вместо EachFrame (это по сути он же и есть)https://cbateam.github.io/CBA_A3/docs/files/common/fnc_addPerFrameHandler-sqf.html Главное не забывать удалять хэндлеры когда они уже не нужны. Изменено 31 мая, 2019 пользователем Liquid Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kato 2 491 Жалоба Опубликовано 31 мая, 2019 @First @Liquid Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 (изменено) 6 минут назад, Kato сказал: Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея. На setVelocity построена ВСЯ арма с модами. ACE лимиттер вроде нормально работает. Тут меня еще смущает, что скрипт по сути накладывает ограничение не на технику, а на игрока который потом будет рулить, а может и не будет. Получается нужно на всех игроков применять? Изменено 31 мая, 2019 пользователем Liquid Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kato 2 491 Жалоба Опубликовано 31 мая, 2019 1 минуту назад, Liquid сказал: На setVelocity построена ВСЯ арма с модами. Это понятно. Но ощущения от использования такого скрипта на быстрой технике очень неприятные. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 Прям лагает если perframe без 0.1 слиипов? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 (изменено) 52 минуты назад, Liquid сказал: execVM, while - говно. Есть же EachFrame ивент хэндлер То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал Спойлер Вот из-за таких как ты деятелей у вас постоянно первая миссия не взлетает Изменено 31 мая, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 (изменено) 30 минут назад, DAP сказал: То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал Не раз в секунду, а каждый кадр симуляции. Любые действия с движущимися объектами должны проводиться каждый кадр. Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное. проверка простого if и setVelocity занимает МИКРОсекунды. (не мили) Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее. Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. Изменено 31 мая, 2019 пользователем Liquid Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 (изменено) 1 час назад, Liquid сказал: Не раз в секунду, а каждый кадр симуляции. Каждый фрейм рендера, ага Читай спецификацию команды 1 час назад, Liquid сказал: Любые действия с движущимися объектами должны проводиться каждый кадр. Сильное утверждение. Проверять я его, конечно, не буду 1 час назад, Liquid сказал: Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное. Если у тебя топовый комп и ты не играешь в арму 3, то... может быть 1 час назад, Liquid сказал: проверка простого if и setVelocity занимает МИКРОсекунды. (не мили) Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее. Можно сделать вообще быстро, запустив просчет в "незапланированной среде" Но тогда игра у тебя просто встанет "колом" 1 час назад, Liquid сказал: Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. Представь себе нет Изучай что именно делает команда sleep Спойлер А если еще и учесть, что @First "немного" накосячил с алгоритмом, то проверка на каждый фрейм вам капитально так даст прикурить от ваших ПК Спойлер Собственно, я уже не удивляюсь тому, что у вас на игорах регулярно миссии не взлетают Я бы удивился, если бы было иначе Изменено 31 мая, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 @First у меня к тебе вопрос: как ты тестил этот скрипт? В редакторе? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[BE] First 611 Жалоба Опубликовано 31 мая, 2019 (изменено) @DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме. 5 минут назад, DAP сказал: В редакторе? И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное... Хотя основу я брал у другого и смотрел что можно сделать лучше. Изменено 31 мая, 2019 пользователем First Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 4 минуты назад, First сказал: @DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме. 5 минут назад, First сказал: И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное... Сразу дам небольшую подсказку: сколько игроков едет в машине? 1 First отреагировал на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 Даю подсказку, я ничего не писал о содержимом цикла, и даже высказал сомнения относительно привязки к игроку. Применение eachFrame всё ещё лучше spawn sleep Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 10 минут назад, Liquid сказал: Применение eachFrame всё ещё лучше spawn sleep Чем? Тем что нагружает твой процессор лишней работой, отбирая ресурсы у других процессов? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 31 мая, 2019 (изменено) Тем что твой транспорт не лагает от изменения скорости с негарантированным шансом и негарантированным интервалом. Если есть ярое желание пропускать исполнение кода. То CBA_fnc_addPerFrameHandler с желаемым интервалом. Просто оставлю это тут.http://sqf.ovh/ite/2018/01/21/ITE-the-scheduler.html Изменено 31 мая, 2019 пользователем Liquid Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 (изменено) @Liquid писал какой-то балбес. uisleep как раз и отличается от sleep тем, что работает не во времени симуляции движка, а в системном времени. Именно поэтому когда ты ставишь симуляцию на паузу sleep останавливается, а uisleep продолжает "тикать". Спойлер Именно поэтому sleep откровенно врет при низком ФПС Потому что скорость выполнения симуляции замедляется Спойлер А избежать лагов от изменения скорости ты все равно не сможешь, даже вообще не используя приведенный @First скрипт, потому что это арма, а в арме техника ВСЕГДА локальна только водителю, и на всех остальных ей наплевать Спойлер И CBA свой выкинь на помойку Игра уже давно содержит собственную библиотеку функций, а так же кучу интегрированных команд (которые выполняются напрямую движком, без всяких скриптовых костылей), что делает CBA не нужным от слова совсем Это натуральное пятое колесо телеги Изменено 31 мая, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[LG] neVALYAshka 1 753 Жалоба Опубликовано 31 мая, 2019 4 часа назад, DAP сказал: что делает CBA не нужным от слова совсем Это натуральное пятое колесо телеги только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? 2 Dock и Kostize отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 31 мая, 2019 (изменено) 10 минут назад, neVALYAshka сказал: только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? Не не могу, а не хочу Мне просто лень и это в корне меняет все Спойлер А вот для своего сурвивала я радиальное меню написал за полчаса Ага, то самое, которое от меня тут множество всяких личностей аж прям требовало для ВТН Ну это так, к слову Изменено 31 мая, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[LG] neVALYAshka 1 753 Жалоба Опубликовано 1 июня, 2019 @DAP ну так покажи хотя бы видосик сего творения, а ещё настройку юзер кнопок, если смог, то мы похлопаем, если не смог, то посмеёмся. Хотя надо учитывать, что даже если смог, то от некоторых вариантов реализации мы тоже посмеёмся. 2 Kostize и Dock отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[KND] Liquid 1 087 Жалоба Опубликовано 1 июня, 2019 В 31.05.2019 в 14:22, DAP сказал: @Liquid писал какой-то балбес. uisleep как раз и отличается от sleep тем, что работает не во времени симуляции движка, а в системном времени. Именно поэтому когда ты ставишь симуляцию на паузу sleep останавливается, а uisleep продолжает "тикать". Показать контент Именно поэтому sleep откровенно врет при низком ФПС Потому что скорость выполнения симуляции замедляется Показать контент А избежать лагов от изменения скорости ты все равно не сможешь, даже вообще не используя приведенный @First скрипт, потому что это арма, а в арме техника ВСЕГДА локальна только водителю, и на всех остальных ей наплевать Показать контент И CBA свой выкинь на помойку Игра уже давно содержит собственную библиотеку функций, а так же кучу интегрированных команд (которые выполняются напрямую движком, без всяких скриптовых костылей), что делает CBA не нужным от слова совсем Это натуральное пятое колесо телеги Ахахахахха 1) повторю ещё раз. Про код внутри цикла я ничего не говорил. Корректный код исполняемый на машине водителя будет нормально ограничивать скорость без лагов и телепортов даже в мультиплеере. 2) По секрету сообщаю, CBA постоянно обновляется и функции имплементированные в движке регулярно объявляются deprecated в CBA с соответствующим уведомлением в rpt и возможным удалением в будущем. Дружественная система ивентхэндлеров позволяющая удобно выполнять код unscheduled в движке не имплементирована. Героям создающим велосипеды с негарантированным проворотом педалей - слава! 1 Dock отреагировал на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DAP 1 539 Жалоба Опубликовано 2 июня, 2019 (изменено) 15 часов назад, Liquid сказал: 1) повторю ещё раз. Про код внутри цикла я ничего не говорил. Корректный код исполняемый на машине водителя будет нормально ограничивать скорость без лагов и телепортов даже в мультиплеере. Тогда какой смысл использовать eachFrame, да еще и через CBA, когда в арме уже есть такой эвентхандлер, да нагружать движок вычислениями каждый кадр, когда можно делать то же самое, но меньше нагружая движок? Где логика, Карл? 15 часов назад, Liquid сказал: Дружественная система ивентхэндлеров позволяющая удобно выполнять код unscheduled в движке не имплементирована. Не знаю где ты набрался этой чуши, но армовские эвентхандлеры выполняются как раз в незапланированной среде Спойлер И еще по поводу CBA Зачем запускать две функции (CBA > ARMA), когда можно запустить всего одну (ARMA)? Так что... 15 часов назад, Liquid сказал: Ахахахахха Изменено 2 июня, 2019 пользователем DAP Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты