Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±

    Проверка координат

    Приветствую. Есть у меня около 50-ти шлагбаумов/ворот и т.п. На данный момент в секундном таймере проверяется находится ли игрок хотя бы на одной из 50-ти координат и если да - создаёт чекпоинт (CreateDynamicCP), если игрок наступит на чекопинт идёт повторная проверка по 50-ти координатам и открывает уже нужные ворота и тд. Честно говоря, мне не очень нравится такая "схема", так как думаю что слишком много лишней работы поступает серверу. Есть вариант убрать проверки с секундного таймера и сделать на нажатие клавиши. В общем, посоветуйте как лучше сделать, координат собственно довольно много и результаты профилирования "кусаются" за счёт функции IsPlayerInRangeOfPoint.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну можешь для всех этих 50-и координат, например, создать пикап и потом перенести проверку координат из чекпоинта на кнопку, а проверки в таймере удалить
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Конечно на кнопку лучше,
    + в оптимизации
    + в том что не будут открываться шлагбаумы и ворота если случайно туда наступите
    PHP код:
    public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
    {
        if(
    newkeys == KEY_CROUCH//Клавиша бибип
        
    {
            
    //Чтобы пешком не могли открыть можно проверку на нахождение в авто залепить
            
    if(тут_проверка_на_координаты_что_мы_у_шлагбаума)
            {
                
    //Открываем ворота + Запуск таймера закрывания
            
    }
        }
        return 
    1;

    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  4. #4
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну можешь для всех этих 50-и координат, например, создать пикап и потом перенести проверку координат из чекпоинта на кнопку, а проверки в таймере удалить
    На пикапы было бы хорошо всё перенести, но это довольно много времени уйдёт. А если на кнопку? И поставить там антифлудилку (с помощью gettime) на секунду-две чтобы не баловались? И опять же лучше ведь делать проверку == чем &, ведь если использовать & то будет очень много "лишних" срабатываний, например когда игрок будет идти зажимая левый альт, куча срабатываний. Посоветуйте что и как.

  5. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Выше дал же вариант, там не каких пикапов не надо создавать,
    антифлуд туда припаять и нахождение в машине и будёт всё как по маслу..
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Зачем каждый раз создавать чекпоинт? CreateDynamicCP придуман как раз для того, чтобы этого не делать. Зачем проверять координаты при поднятии? Запиши в массив шлагбаумов ID каждого чекпоинта и сравнивай его с ID поднятого чекпоинта.

  7. Пользователь сказал cпасибо:
    Kazoox (10.03.2016)
  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    На пикапы было бы хорошо всё перенести, но это довольно много времени уйдёт. А если на кнопку? И поставить там антифлудилку (с помощью gettime) на секунду-две чтобы не баловались? И опять же лучше ведь делать проверку == чем &, ведь если использовать & то будет очень много "лишних" срабатываний, например когда игрок будет идти зажимая левый альт, куча срабатываний. Посоветуйте что и как.
    Пикап там нужен только для того, чтоб люди видели где нажать кнопку для открытия шлакбаума. Всё остальное уже через OnPlayerKeyStateChange делается
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Зачем каждый раз создавать чекпоинт? CreateDynamicCP придуман как раз для того, чтобы этого не делать. Зачем проверять координаты при поднятии? Запиши в массив шлагбаумов ID каждого чекпоинта и сравнивай его с ID поднятого чекпоинта.
    А собственно сама функция CreateDynamicCP при использовании в таком количестве (в общем там до 100 чекпоинтов может выйти) не сильно будет нагружать систему? В общем какой вариант будет более "приятен" для системы, с кнопкой или с чекпоинтами? Как работает CreateDynamicCp? Я так понимаю с помощью данной функции мы вбиваем в список чекпоинтов чекпоинт, а потом уже система там через какой-то промежуток времени пробегает по этому списку сверяя координаты.
    Последний раз редактировалось Kazoox; 10.03.2016 в 14:01.

  10. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    А собственно сама функция CreateDynamicCP при использовании в таком количестве (в общем там до 100 чекпоинтов может выйти) не сильно будет нагружать систему? В общем какой вариант будет более "приятен" для системы, с кнопкой или с чекпоинтами? Как работает CreateDynamicCp? Я так понимаю с помощью данной функции мы вбиваем в список чекпоинтов чекпоинт, а потом уже система там через какой-то промежуток времени пробегает по этому списку сверяя координаты.
    Streamer плагин тоже проверяет координаты игрока и чекпоинта, но он это делает намного эффективнее. Плагин делит карту на ячейки и проверяет позицию не всех элементов, а только тех, которые находятся в одной ячейке с игроком. Также, это всё реализовано на C++, что быстрее любой реализации стримера на Pawn.

  11. Пользователь сказал cпасибо:
    Kazoox (10.03.2016)
  12. #10
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Streamer плагин тоже проверяет координаты игрока и чекпоинта, но он это делает намного эффективнее. Плагин делит карту на ячейки и проверяет позицию не всех элементов, а только тех, которые находятся в одной ячейке с игроком. Также, это всё реализовано на C++, что быстрее любой реализации стримера на Pawn.
    Я использую CreateDynamicCp при загрузке мода, с пропуском параметра playerid, то есть для всех игроков. Может лучше их как-нибудь поделить группы этак на 2: чекпоинты которые появляются когда игрок пешком (если это допустим вход в здание) и чекпоинты которые появляются когда игрок в машине? Но все равно ведь придется каждую секунду создавать и удалять туда-сюда эти чекпоинты. В общем стоит ли оно того в плане оптимизации или нет? Я про то стоит ли делить на такие "группы". Еще как вариант можно чекпоинты использовать для выхода/входа и для открытия/закрытия ворот, а для всего остального, ну к примеру вызов меню банкомата или окончание рабочего дня использовать вызов кода на кнопку, тот же альт? Посоветуйте.
    P.S собственно в OnGamemeModeInit у меня около 200 чекпоинтов.
    Последний раз редактировалось Kazoox; 11.03.2016 в 18:08.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •