Перейти к содержанию

Добро пожаловать на проект
Weekly Open Games

Weekly Open Games — это проект для людей, которым интересен хардкорный тип игры. Мы стараемся максимально эффективно использовать структуру, слабые и сильные стороны, а также технику и вооружение различных сторон конфликта, но не ставим перед собой цель провести 100% сбалансированного боестолкновения. Командная игра, командное взаимодействие — фундамент нашего проекта.
О проекте WOG Как начать играть Правила серверов
Авторизация  
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).
};




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

Спойлер

// Конфиг
_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. Если есть какие-то ошибки или пожелания к доработке - пишите, сделаю.

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

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


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

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

Спойлер

А еще оператор in является cASe-seNsItiVE! :yoba-arma: Поэтому важно чтобы регистр класснеймов в массиве совпадал с тем, что выдает typeof :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

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

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


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, Kato сказал:

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, Liquid сказал:

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
52 минуты назад, Liquid сказал:

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

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

Спойлер

Вот из-за таких как ты деятелей у вас постоянно первая миссия не взлетает :yoba-arma:

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
30 минут назад, DAP сказал:

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

 

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

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Liquid сказал:

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

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

1 час назад, Liquid сказал:

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

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

1 час назад, Liquid сказал:

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

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

1 час назад, Liquid сказал:

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

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

1 час назад, Liquid сказал:

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

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

Спойлер

А если еще и учесть, что @First "немного" накосячил с алгоритмом, то проверка на каждый фрейм вам капитально так даст прикурить от ваших ПК :yoba-arma: 

Спойлер

Собственно, я уже не удивляюсь тому, что у вас на игорах регулярно миссии не взлетают :yoba-arma: Я бы удивился, если бы было иначе :yoba-arma:

 

 

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

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


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

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

5 минут назад, DAP сказал:

В редакторе?

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, First сказал:

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

:yoba-arma:

5 минут назад, First сказал:

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

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

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, 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 продолжает "тикать".

Спойлер

Именно поэтому sleep откровенно врет при низком ФПС :yoba-arma: Потому что скорость выполнения симуляции замедляется :yoba-arma:

 

Спойлер

А избежать лагов от изменения скорости ты все равно не сможешь, даже вообще не используя приведенный @First скрипт, потому что это арма, а в арме техника ВСЕГДА локальна только водителю, и на всех остальных ей наплевать :yoba-arma:

 

Спойлер

И CBA свой выкинь на помойку :yoba-arma: Игра уже давно содержит собственную библиотеку функций, а так же кучу интегрированных команд (которые выполняются напрямую движком, без всяких скриптовых костылей), что делает CBA не нужным от слова совсем :yoba-arma: Это натуральное пятое колесо телеги :yoba-arma:

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, DAP сказал:

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, neVALYAshka сказал:

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

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

Спойлер

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

 

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

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


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

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

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

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


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

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

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

Именно поэтому sleep откровенно врет при низком ФПС :yoba-arma: Потому что скорость выполнения симуляции замедляется :yoba-arma:

 

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

А избежать лагов от изменения скорости ты все равно не сможешь, даже вообще не используя приведенный @First скрипт, потому что это арма, а в арме техника ВСЕГДА локальна только водителю, и на всех остальных ей наплевать :yoba-arma:

 

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

И CBA свой выкинь на помойку :yoba-arma: Игра уже давно содержит собственную библиотеку функций, а так же кучу интегрированных команд (которые выполняются напрямую движком, без всяких скриптовых костылей), что делает CBA не нужным от слова совсем :yoba-arma: Это натуральное пятое колесо телеги :yoba-arma:

 

Ахахахахха

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

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

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

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


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

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

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

15 часов назад, Liquid сказал:

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

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

Спойлер

И еще по поводу CBA :yoba-arma: Зачем запускать две функции (CBA > ARMA), когда можно запустить всего одну (ARMA)? :yoba-arma:

Так что...

15 часов назад, Liquid сказал:

Ахахахахха

:yoba-arma:

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

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


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

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

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

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

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

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

Войти

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

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

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

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

×

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

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