Просмотр полной версии : [Вопрос] Проверка координат
Приветствую. Есть у меня около 50-ти шлагбаумов/ворот и т.п. На данный момент в секундном таймере проверяется находится ли игрок хотя бы на одной из 50-ти координат и если да - создаёт чекпоинт (CreateDynamicCP), если игрок наступит на чекопинт идёт повторная проверка по 50-ти координатам и открывает уже нужные ворота и тд. Честно говоря, мне не очень нравится такая "схема", так как думаю что слишком много лишней работы поступает серверу. Есть вариант убрать проверки с секундного таймера и сделать на нажатие клавиши. В общем, посоветуйте как лучше сделать, координат собственно довольно много и результаты профилирования "кусаются" за счёт функции IsPlayerInRangeOfPoint.
Ну можешь для всех этих 50-и координат, например, создать пикап и потом перенести проверку координат из чекпоинта на кнопку, а проверки в таймере удалить
vovandolg
10.03.2016, 00:06
Конечно на кнопку лучше,
+ в оптимизации
+ в том что не будут открываться шлагбаумы и ворота если случайно туда наступите
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_CROUCH) //Клавиша бибип
{
//Чтобы пешком не могли открыть можно проверку на нахождение в авто залепить
if(тут_проверка_на_координаты_что_мы_у_шлагбаума)
{
//Открываем ворота + Запуск таймера закрывания
}
}
return 1;
}
Ну можешь для всех этих 50-и координат, например, создать пикап и потом перенести проверку координат из чекпоинта на кнопку, а проверки в таймере удалить
На пикапы было бы хорошо всё перенести, но это довольно много времени уйдёт. А если на кнопку? И поставить там антифлудилку (с помощью gettime) на секунду-две чтобы не баловались? И опять же лучше ведь делать проверку == чем &, ведь если использовать & то будет очень много "лишних" срабатываний, например когда игрок будет идти зажимая левый альт, куча срабатываний. Посоветуйте что и как.
vovandolg
10.03.2016, 02:01
Выше дал же вариант, там не каких пикапов не надо создавать,
антифлуд туда припаять и нахождение в машине и будёт всё как по маслу..
Зачем каждый раз создавать чекпоинт? CreateDynamicCP придуман как раз для того, чтобы этого не делать. Зачем проверять координаты при поднятии? Запиши в массив шлагбаумов ID каждого чекпоинта и сравнивай его с ID поднятого чекпоинта.
На пикапы было бы хорошо всё перенести, но это довольно много времени уйдёт. А если на кнопку? И поставить там антифлудилку (с помощью gettime) на секунду-две чтобы не баловались? И опять же лучше ведь делать проверку == чем &, ведь если использовать & то будет очень много "лишних" срабатываний, например когда игрок будет идти зажимая левый альт, куча срабатываний. Посоветуйте что и как.
Пикап там нужен только для того, чтоб люди видели где нажать кнопку для открытия шлакбаума. Всё остальное уже через OnPlayerKeyStateChange делается
Зачем каждый раз создавать чекпоинт? CreateDynamicCP придуман как раз для того, чтобы этого не делать. Зачем проверять координаты при поднятии? Запиши в массив шлагбаумов ID каждого чекпоинта и сравнивай его с ID поднятого чекпоинта.
А собственно сама функция CreateDynamicCP при использовании в таком количестве (в общем там до 100 чекпоинтов может выйти) не сильно будет нагружать систему? В общем какой вариант будет более "приятен" для системы, с кнопкой или с чекпоинтами? Как работает CreateDynamicCp? Я так понимаю с помощью данной функции мы вбиваем в список чекпоинтов чекпоинт, а потом уже система там через какой-то промежуток времени пробегает по этому списку сверяя координаты.
А собственно сама функция CreateDynamicCP при использовании в таком количестве (в общем там до 100 чекпоинтов может выйти) не сильно будет нагружать систему? В общем какой вариант будет более "приятен" для системы, с кнопкой или с чекпоинтами? Как работает CreateDynamicCp? Я так понимаю с помощью данной функции мы вбиваем в список чекпоинтов чекпоинт, а потом уже система там через какой-то промежуток времени пробегает по этому списку сверяя координаты.
Streamer плагин тоже проверяет координаты игрока и чекпоинта, но он это делает намного эффективнее. Плагин делит карту на ячейки и проверяет позицию не всех элементов, а только тех, которые находятся в одной ячейке с игроком. Также, это всё реализовано на C++, что быстрее любой реализации стримера на Pawn.
Streamer плагин тоже проверяет координаты игрока и чекпоинта, но он это делает намного эффективнее. Плагин делит карту на ячейки и проверяет позицию не всех элементов, а только тех, которые находятся в одной ячейке с игроком. Также, это всё реализовано на C++, что быстрее любой реализации стримера на Pawn.
Я использую CreateDynamicCp при загрузке мода, с пропуском параметра playerid, то есть для всех игроков. Может лучше их как-нибудь поделить группы этак на 2: чекпоинты которые появляются когда игрок пешком (если это допустим вход в здание) и чекпоинты которые появляются когда игрок в машине? Но все равно ведь придется каждую секунду создавать и удалять туда-сюда эти чекпоинты. В общем стоит ли оно того в плане оптимизации или нет? Я про то стоит ли делить на такие "группы". Еще как вариант можно чекпоинты использовать для выхода/входа и для открытия/закрытия ворот, а для всего остального, ну к примеру вызов меню банкомата или окончание рабочего дня использовать вызов кода на кнопку, тот же альт? Посоветуйте.
P.S собственно в OnGamemeModeInit у меня около 200 чекпоинтов.
Актуально
Я использую CreateDynamicCp при загрузке мода, с пропуском параметра playerid, то есть для всех игроков. Может лучше их как-нибудь поделить группы этак на 2: чекпоинты которые появляются когда игрок пешком (если это допустим вход в здание) и чекпоинты которые появляются когда игрок в машине? Но все равно ведь придется каждую секунду создавать и удалять туда-сюда эти чекпоинты. В общем стоит ли оно того в плане оптимизации или нет? Я про то стоит ли делить на такие "группы". Еще как вариант можно чекпоинты использовать для выхода/входа и для открытия/закрытия ворот, а для всего остального, ну к примеру вызов меню банкомата или окончание рабочего дня использовать вызов кода на кнопку, тот же альт? Посоветуйте.
P.S собственно в OnGamemeModeInit у меня около 200 чекпоинтов.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot