[BE] First 611 Report post Posted May 30, 2019 (edited) Скрипт ограничивает скорость техники до указанного вами лимита. 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. Если есть какие-то ошибки или пожелания к доработке - пишите, сделаю. Edited July 8, 2019 by First 1 MaDnEss reacted to this Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 30, 2019 (edited) А если используется плавательная техника? Спойлер А еще оператор in является cASe-seNsItiVE! Поэтому важно чтобы регистр класснеймов в массиве совпадал с тем, что выдает typeof Edited May 30, 2019 by DAP Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 (edited) 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 Главное не забывать удалять хэндлеры когда они уже не нужны. Edited May 31, 2019 by Liquid Share this post Link to post Share on other sites
Kato 2,491 Report post Posted May 31, 2019 @First @Liquid Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея. Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 (edited) 6 минут назад, Kato сказал: Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея. На setVelocity построена ВСЯ арма с модами. ACE лимиттер вроде нормально работает. Тут меня еще смущает, что скрипт по сути накладывает ограничение не на технику, а на игрока который потом будет рулить, а может и не будет. Получается нужно на всех игроков применять? Edited May 31, 2019 by Liquid Share this post Link to post Share on other sites
Kato 2,491 Report post Posted May 31, 2019 1 минуту назад, Liquid сказал: На setVelocity построена ВСЯ арма с модами. Это понятно. Но ощущения от использования такого скрипта на быстрой технике очень неприятные. Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 Прям лагает если perframe без 0.1 слиипов? Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 (edited) 52 минуты назад, Liquid сказал: execVM, while - говно. Есть же EachFrame ивент хэндлер То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал Спойлер Вот из-за таких как ты деятелей у вас постоянно первая миссия не взлетает Edited May 31, 2019 by DAP Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 (edited) 30 минут назад, DAP сказал: То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал Не раз в секунду, а каждый кадр симуляции. Любые действия с движущимися объектами должны проводиться каждый кадр. Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное. проверка простого if и setVelocity занимает МИКРОсекунды. (не мили) Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее. Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. Edited May 31, 2019 by Liquid Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 (edited) 1 час назад, Liquid сказал: Не раз в секунду, а каждый кадр симуляции. Каждый фрейм рендера, ага Читай спецификацию команды 1 час назад, Liquid сказал: Любые действия с движущимися объектами должны проводиться каждый кадр. Сильное утверждение. Проверять я его, конечно, не буду 1 час назад, Liquid сказал: Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное. Если у тебя топовый комп и ты не играешь в арму 3, то... может быть 1 час назад, Liquid сказал: проверка простого if и setVelocity занимает МИКРОсекунды. (не мили) Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее. Можно сделать вообще быстро, запустив просчет в "незапланированной среде" Но тогда игра у тебя просто встанет "колом" 1 час назад, Liquid сказал: Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. Представь себе нет Изучай что именно делает команда sleep Спойлер А если еще и учесть, что @First "немного" накосячил с алгоритмом, то проверка на каждый фрейм вам капитально так даст прикурить от ваших ПК Спойлер Собственно, я уже не удивляюсь тому, что у вас на игорах регулярно миссии не взлетают Я бы удивился, если бы было иначе Edited May 31, 2019 by DAP Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 @First у меня к тебе вопрос: как ты тестил этот скрипт? В редакторе? Share this post Link to post Share on other sites
[BE] First 611 Report post Posted May 31, 2019 (edited) @DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме. 5 минут назад, DAP сказал: В редакторе? И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное... Хотя основу я брал у другого и смотрел что можно сделать лучше. Edited May 31, 2019 by First Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 4 минуты назад, First сказал: @DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме. 5 минут назад, First сказал: И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное... Сразу дам небольшую подсказку: сколько игроков едет в машине? 1 First reacted to this Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 Даю подсказку, я ничего не писал о содержимом цикла, и даже высказал сомнения относительно привязки к игроку. Применение eachFrame всё ещё лучше spawn sleep Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 10 минут назад, Liquid сказал: Применение eachFrame всё ещё лучше spawn sleep Чем? Тем что нагружает твой процессор лишней работой, отбирая ресурсы у других процессов? Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted May 31, 2019 (edited) Тем что твой транспорт не лагает от изменения скорости с негарантированным шансом и негарантированным интервалом. Если есть ярое желание пропускать исполнение кода. То CBA_fnc_addPerFrameHandler с желаемым интервалом. Просто оставлю это тут.http://sqf.ovh/ite/2018/01/21/ITE-the-scheduler.html Edited May 31, 2019 by Liquid Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 (edited) @Liquid писал какой-то балбес. uisleep как раз и отличается от sleep тем, что работает не во времени симуляции движка, а в системном времени. Именно поэтому когда ты ставишь симуляцию на паузу sleep останавливается, а uisleep продолжает "тикать". Спойлер Именно поэтому sleep откровенно врет при низком ФПС Потому что скорость выполнения симуляции замедляется Спойлер А избежать лагов от изменения скорости ты все равно не сможешь, даже вообще не используя приведенный @First скрипт, потому что это арма, а в арме техника ВСЕГДА локальна только водителю, и на всех остальных ей наплевать Спойлер И CBA свой выкинь на помойку Игра уже давно содержит собственную библиотеку функций, а так же кучу интегрированных команд (которые выполняются напрямую движком, без всяких скриптовых костылей), что делает CBA не нужным от слова совсем Это натуральное пятое колесо телеги Edited May 31, 2019 by DAP Share this post Link to post Share on other sites
[LG] neVALYAshka 1,766 Report post Posted May 31, 2019 4 часа назад, DAP сказал: что делает CBA не нужным от слова совсем Это натуральное пятое колесо телеги только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? 2 Kostize and Dock reacted to this Share this post Link to post Share on other sites
DAP 1,539 Report post Posted May 31, 2019 (edited) 10 минут назад, neVALYAshka сказал: только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? Не не могу, а не хочу Мне просто лень и это в корне меняет все Спойлер А вот для своего сурвивала я радиальное меню написал за полчаса Ага, то самое, которое от меня тут множество всяких личностей аж прям требовало для ВТН Ну это так, к слову Edited May 31, 2019 by DAP Share this post Link to post Share on other sites
[LG] neVALYAshka 1,766 Report post Posted June 1, 2019 @DAP ну так покажи хотя бы видосик сего творения, а ещё настройку юзер кнопок, если смог, то мы похлопаем, если не смог, то посмеёмся. Хотя надо учитывать, что даже если смог, то от некоторых вариантов реализации мы тоже посмеёмся. 2 Kostize and Dock reacted to this Share this post Link to post Share on other sites
[KND] Liquid 1,088 Report post Posted June 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 reacted to this Share this post Link to post Share on other sites
DAP 1,539 Report post Posted June 2, 2019 (edited) 15 часов назад, Liquid сказал: 1) повторю ещё раз. Про код внутри цикла я ничего не говорил. Корректный код исполняемый на машине водителя будет нормально ограничивать скорость без лагов и телепортов даже в мультиплеере. Тогда какой смысл использовать eachFrame, да еще и через CBA, когда в арме уже есть такой эвентхандлер, да нагружать движок вычислениями каждый кадр, когда можно делать то же самое, но меньше нагружая движок? Где логика, Карл? 15 часов назад, Liquid сказал: Дружественная система ивентхэндлеров позволяющая удобно выполнять код unscheduled в движке не имплементирована. Не знаю где ты набрался этой чуши, но армовские эвентхандлеры выполняются как раз в незапланированной среде Спойлер И еще по поводу CBA Зачем запускать две функции (CBA > ARMA), когда можно запустить всего одну (ARMA)? Так что... 15 часов назад, Liquid сказал: Ахахахахха Edited June 2, 2019 by DAP Share this post Link to post Share on other sites