Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Новый таймер и когда стоит его создавать

    Добрый вечер. Часто сталкиваюсь с вопросом, стоит ли создавать новый таймер, или "засунуть" нужные мне действия в уже имеющиеся. Так, например, в секундном таймере игрока происходит обновление данных о его состоянии (сколько осталось сидеть в тюрьме, сколько осталось мута, сохранение позиции), находятся какие-то проверки, связанные с работами (не ушел ли игрок далеко от места работы). И.. Таких вещей в целом получается много. Так вот, когда же лучше создавать новый таймер для чего-либо, а когда использовать имеющийся? Хотел бы создать для себя четкое представление, чтобы не задумываться: а как мне быть? Создавать новый или нет?

  2. #2
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Индивидуальные таймеры однозначно лучше в тех случаях, когда основной таймер с циклом на всех игроков перебирает все слоты, а реальный онлайн занимает гораздо меньше, чем есть слотов на этом сервере (и этот цикл не использует foreach). Если же используется foreach или сервер забит игроками полностью - цикл не будет терять лишнее время на левые слоты и тут уже всё зависит от твоего желания, где держать код.

    Хотя я бы всё равно разделял нагрузку по нескольким таймерам, ибо множество маленьких задержек (от выполнения кода в индивидуальных таймерах) будет явно гораздо менее заметно, чем одна, но большая задержка в общем таймере.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  3. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (16.09.2018)
  4. #3
    Аватар для X!X
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2018
    Сообщений
    58
    Репутация:
    1 ±
    Используй динамические зоны в проверке радиуса нахождения на работе
    Мой знакомый держит сервер с 120 онлайном на индивидуальных таймерах, то есть для каждого игрока отдельно

  5. #4
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Да причем здесь то, как реализовывать эти проверки? Меня интересует то, как лучше использовать таймера. Создавать новый таймер для новых действий (один таймер для работ, один для сохранения/обновления данных каких-то игрока, один еще для чего-нибудь), либо лучше все помещать в один. Здесь же стоит учитывать то, насколько нагружают действия внутри таймера.

    И превосходство индивидуальных таймеров очевидно (я на то в шапке темы и писал "секундном таймере игрока", то есть индивидуальном).
    Последний раз редактировалось Elrmrnt-Kritik; 15.09.2018 в 20:33.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Использовать индивидуальные таймеры или один общий - не скажу, ибо всё зависит от многих факторов, начиная с того, на какой машине будет запускаться сервер, и заканчивая тем, сколько всего будет таймеров. Сами по себе таймеры жрут лишь оперативку. Её априори не может быть больше 4 гигов, так как сервер на 32-битной основе. А если ещё и брать в аренду не выделенную машину, а просто хостинг, то мощности той самой машины могут разделяться на неопределённое количество серверов, тем самым реальное количество доступной оперативы может заметно отличаться от того, которое указано в описании хостинга. Собственно, нужно оценивать всё это и уже решать. Хотя я бы старался максимально разделять все действия с одинаковыми временными интервалами (то бишь, если у меня есть несколько систем, которые работают на протяжении всего времени нахождения игрока на сервере, то логично засунуть их в один таймер. Но если есть ещё одна система с тем же временным промежутком, но срабатывать она должна только при определённом условии, то можно уже подумать о том, чтоб убрать её в отдельный таймер). И уже если начнутся краши, быстренько переписать всё под меньшее число таймеров (благо это будет не трудно, если нормально код оформить).

    Но что я могу сказать точно, так это то, что не стоит пользоваться параметром "repeat" там, где в функции, вызываемые таймером, передаётся много данных в качестве аргументов и где этот таймер рано или поздно нужно "убить" до рестарта. Просто потому что KillTimer не отчищает память от побочной инфы после таймера, а просто помечает таймер как "убитый". И такими темпами довольно легко заполнить всю оперативку :)

    Вообще лучшим решением будет использование плагинов, которые реализуют таймеры на своей стороне. Там и точность есть, и другие, довольно критичные, проблемы таймеров исправлены.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (16.09.2018)
  8. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Но что я могу сказать точно, так это то, что не стоит пользоваться параметром "repeat" там, где в функции, вызываемые таймером, передаётся много данных в качестве аргументов и где этот таймер рано или поздно нужно "убить" до рестарта.
    От количества передаваемых данных там мало что зависит, структура таймера сама по себе достаточно раздутая. В Pawn название функции может быть длиной до 31 символа, но в таймерах под название зачем-то выделяется массив в 255 ячеек. Это не говоря уже о том, что гораздо быстрее можно добиться израсходования памяти в секции стека/кучи скрипта, передавая через таймер строки и массивы.
    http://wiki.pro-pawn.ru/wiki/SetTimerEx
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (24.10.2018)
  10. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    От количества передаваемых данных там мало что зависит, структура таймера сама по себе достаточно раздутая. В Pawn название функции может быть длиной до 31 символа, но в таймерах под название зачем-то выделяется массив в 255 ячеек. Это не говоря уже о том, что гораздо быстрее можно добиться израсходования памяти в секции стека/кучи скрипта, передавая через таймер строки и массивы.
    http://wiki.pro-pawn.ru/wiki/SetTimerEx
    Именно строки с массивами я и имел в виду :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (24.10.2018)
 

 

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

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

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

Ваши права

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