Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Kazoox
    Пользователь

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

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

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

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    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,360
    Репутация:
    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,037
    Репутация:
    705 ±
    Зачем каждый раз создавать чекпоинт? CreateDynamicCP придуман как раз для того, чтобы этого не делать. Зачем проверять координаты при поднятии? Запиши в массив шлагбаумов ID каждого чекпоинта и сравнивай его с ID поднятого чекпоинта.

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

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

    Широко известно, что идеи стоят 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,037
    Репутация:
    705 ±
    Цитата Сообщение от 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 12 ПоследняяПоследняя

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

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

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

Ваши права

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