Перейти к содержанию
Авторизация  
First

Скрипт ограничения скорости техники.

Рекомендуемые сообщения

Скрипт ограничивает скорость техники до указанного вами лимита.

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).
};




Разные модификации:
Если хотим ограничить скорость только для определенных классов техники:

  Показать контент




Если используется летная техника, то рекомендуется использовать проверку isKindOf "Air"; :

  Показать контент



P.S. Если есть какие-то ошибки или пожелания к доработке - пишите, сделаю.

Изменено пользователем First

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если используется плавательная техника? :yoba-arma:

  Показать контент

 

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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
Главное не забывать удалять хэндлеры когда они уже не нужны.

Изменено пользователем Liquid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@First @Liquid

Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 07:39, Kato сказал:

Давайте лучше придём к выводу, что скрипт, который каждый фрейм "одёргивает" технику во время движения сам по себе плохая идея.

На setVelocity построена ВСЯ арма с модами. ACE лимиттер вроде нормально работает.
Тут меня еще смущает, что скрипт по сути накладывает ограничение не на технику, а на игрока который потом будет рулить, а может и не будет.
Получается нужно на всех игроков применять?

Изменено пользователем Liquid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 07:45, Liquid сказал:

На setVelocity построена ВСЯ арма с модами.

Это понятно. Но ощущения от использования такого скрипта на быстрой технике очень неприятные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 07:33, Liquid сказал:

execVM, while - говно.
Есть же EachFrame ивент хэндлер

То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал :yoba-arma:

  Показать контент

 

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 08:21, DAP сказал:

То есть ты хочешь запускать скрипт, который будет корректировать velocity техники 15/30/60/120 раз в секунду? Оптимизация? Не, не слышал :yoba-arma:

  Показать контент

Не раз в секунду, а каждый кадр симуляции.
Любые действия с движущимися объектами должны проводиться каждый кадр. Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное.

проверка простого if и setVelocity занимает МИКРОсекунды. (не мили)
Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее.

Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. :mini-happy:

Изменено пользователем Liquid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 08:32, Liquid сказал:

Не раз в секунду, а каждый кадр симуляции.

Каждый фрейм рендера, ага :yoba-arma: Читай спецификацию команды :yoba-arma:

  В 31.05.2019 в 08:32, Liquid сказал:

Любые действия с движущимися объектами должны проводиться каждый кадр. 

 Сильное утверждение. Проверять я его, конечно, не буду :yoba-arma:

  В 31.05.2019 в 08:32, Liquid сказал:

Скачки скорости 150 - 40 - 150 каждую секунду и соответствующие телепорты - это неприемлемо, а значит решение с EachFrame - оптимальное.

Если у тебя топовый комп и ты не играешь в арму 3, то...  может быть :yoba-arma:

  В 31.05.2019 в 08:32, Liquid сказал:

проверка простого if и setVelocity занимает МИКРОсекунды. (не мили)
Оптимизировать тут можно вычисление вектора. vectorMultiply должен быть быстрее.

Можно сделать вообще быстро, запустив просчет в "незапланированной среде" :yoba-arma: Но тогда игра у тебя просто встанет "колом" :yoba-arma:

  В 31.05.2019 в 08:32, Liquid сказал:

Ах да. Еще про оптимизацию. Будто spawn с проверкой while будет не каждый кадр пытаться исполниться. :mini-happy:

Представь себе нет :yoba-arma: Изучай что именно делает команда sleep :yoba-arma:

  Показать контент

 

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме.

  В 31.05.2019 в 09:43, DAP сказал:

В редакторе?

И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное... Хотя основу я брал у другого и смотрел что можно сделать лучше.

Изменено пользователем First

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 09:47, First сказал:

@DAP Специально для тебя надо бы ограничить Йобу, больно глаза мозолят на форуме.

:yoba-arma:

  В 31.05.2019 в 09:47, First сказал:

И не только. Учитывая личные мои умения я ковыряю и смотрю как могу что и где переделать. Не исключено что после всего тут прочитанного я постараюсь переделать его на более адекватное...

Сразу дам небольшую подсказку: сколько игроков едет в машине? :yoba-arma:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даю подсказку, я ничего не писал о содержимом цикла, и даже высказал сомнения относительно привязки к игроку. Применение eachFrame всё ещё лучше spawn sleep

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 10:57, Liquid сказал:

Применение eachFrame всё ещё лучше spawn sleep

Чем? :yoba-arma: Тем что нагружает твой процессор лишней работой, отбирая ресурсы у других процессов? :yoba-arma:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тем что твой транспорт не лагает от изменения скорости с негарантированным шансом и негарантированным интервалом.

Если есть ярое желание пропускать исполнение кода. То CBA_fnc_addPerFrameHandler с желаемым интервалом.

Просто оставлю это тут.
http://sqf.ovh/ite/2018/01/21/ITE-the-scheduler.html

Изменено пользователем Liquid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Liquid писал какой-то балбес. uisleep как раз и отличается от sleep тем, что работает не во времени симуляции движка, а в системном времени. Именно поэтому когда ты ставишь симуляцию на паузу sleep останавливается, а uisleep продолжает "тикать".

  Показать контент

 

  Показать контент

 

  Показать контент

 

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 11:22, DAP сказал:

что делает CBA не нужным от слова совсем :yoba-arma: Это натуральное пятое колесо телеги :yoba-arma:

только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? :pryatki:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 15:34, neVALYAshka сказал:

только в ВТНе до сих пор юзеркнопки через жепу сделаны, а не как в удобных модах с помощью cba, что же ты сделать через армафункции не можешь то а? :pryatki:

Не не могу, а не хочу :yoba-arma: Мне просто лень и это в корне меняет все :yoba-arma:

  Показать контент

 

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DAP ну так покажи хотя бы видосик сего творения, а ещё настройку юзер кнопок, если смог, то мы похлопаем, если не смог, то посмеёмся. 

Хотя надо учитывать, что даже если смог, то от некоторых вариантов реализации мы тоже посмеёмся. :pekas:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 31.05.2019 в 11:22, DAP сказал:

@Liquid писал какой-то балбес. uisleep как раз и отличается от sleep тем, что работает не во времени симуляции движка, а в системном времени. Именно поэтому когда ты ставишь симуляцию на паузу sleep останавливается, а uisleep продолжает "тикать".

  Показать контент

 

  Показать контент

 

  Показать контент

 

Ахахахахха

1) повторю ещё раз. Про код внутри цикла я ничего не говорил. Корректный код исполняемый на машине водителя будет нормально ограничивать скорость без лагов и телепортов даже в мультиплеере.

2) По секрету сообщаю, CBA постоянно обновляется и функции имплементированные в движке регулярно объявляются deprecated в CBA с соответствующим уведомлением в rpt и возможным удалением в будущем. Дружественная система ивентхэндлеров позволяющая удобно выполнять код unscheduled в движке не имплементирована.

Героям создающим велосипеды с негарантированным проворотом педалей - слава!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  В 01.06.2019 в 16:17, Liquid сказал:

1) повторю ещё раз. Про код внутри цикла я ничего не говорил. Корректный код исполняемый на машине водителя будет нормально ограничивать скорость без лагов и телепортов даже в мультиплеере.

Тогда какой смысл использовать eachFrame, да еще и через CBA, когда  в арме уже есть такой эвентхандлер, да нагружать движок вычислениями каждый кадр, когда можно делать то же самое, но меньше нагружая движок? :yoba-arma: Где логика, Карл? :yoba-arma:

  В 01.06.2019 в 16:17, Liquid сказал:

Дружественная система ивентхэндлеров позволяющая удобно выполнять код unscheduled в движке не имплементирована.

Не знаю где ты набрался этой чуши, но армовские эвентхандлеры выполняются как раз в незапланированной среде :yoba-arma:

  Показать контент

Так что...

  В 01.06.2019 в 16:17, Liquid сказал:

Ахахахахха

:yoba-arma:

Изменено пользователем DAP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.