В теме 7 сообщений

Sleash
Завсегдатый

Всем доброго времени суток. Сегодня мне бы хотелось вам рассказать от таких функциях в PAWN-языке, как SetTimer и SetTimerEx.

Сразу сделаю такое примечание: Для SetTimer и SetTimerEx можно использовать ТОЛЬКО public!!!

SetTimer

Итак, для начала приступим к лёгкому и пойдём по нарастающей:

Первое, это SetTimer. Функция включает в себя 3 параметра:

native SetTimer(funcname[], interval, repeating);

funcname[] - Это название функции, по сути - название вашего pablic в кавычках.

interval - Интервалы от вызова таймера до срабатывания pablic

               Так же если стоит повторение таймера, то будет работать как интервал между таймерами.

               Измеряется в миллисекундах. 1000 миллисекунд равно 1 секунде

repating - Тут всё просто: будет ли повторяться ваша функция. Может иметь значения: true - будет выполняться повторение ИЛИ false - вызывается 1 раз.

Давайте разберём пример для наглядности:

forward Info();
public Info()
{
    SendClientMessageToAll(0xFFFFFFFF, "Наш сайт: pawno-rus.ru");
}
// И теперь давайте вызовем данный таймер при запуске мода
public OngameModeInit()
{
    SetTimer("Info", 1000*60*20, true);
    return true
}

Давайте разберёмся по интервалу: 1000*60*20. Так как я писал ранее, что 1000 млСек = 1 сек, то: 1 сек * 60 = 1 минута; 1 минута * 20 = 20 минут.

Таким образом данный таймер будет выводить каждые 20 минут для всех игроков на сервере в чат: "pawno-rus.ru".

 

SetTimerEx

 

По сути с SetTimer - всё, теперь перейдём к следующей функции: SetTimerEx:

native SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);

Тут добавляются ещё 2 параметра:

const format[] - формат данных для ввода в функцию. (Такие как: s, d, f);

{Float,_}:... - переменные или значение для данных из const fromat[]

Из данных объяснения мало что можно понять незнающему или начинающему скриптеру, поэтому давайте разберём на примере кода, который при входу даёт на авторизацию две минуты игроку:

forward autorez(playerid);
public autorez(playerid)
{
    if(/*проверка на то залогинился ли игрок*/)
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Вы были кикнуты по причине: Время на авторизацию истекло.");
        Kick(playerid);
        return true;
    }
    return true;
}
//Дальше уже добавлям сам таймер
public OnPlayerConnect(playerid)
{
    SetTimerEx("autorez", 1000*60*2, false, "d", playerid);
    return true;
}

Если первые три пункта мы уже разбирали. то начнём сразу с 4-го:

4. Тут в кавычках надо вставлять тип данных. Наподобие функции format(output[], len, "%s %d %f", string, int, float), только без знака процента (%)

5. Тут уже указывают сами данные, так же разберём как и предыдущий: format(output[], len, "%s %d %f ", string, int, float)

 

Я надеюсь что кому-то помог, а если что непонятно, то спрашивайте, всегда помогу.

Отредактировано пользователем Sleash

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


Ссылка на сообщение
Поделиться на другие сайты
junky.rose
Новичок

Создавать отдельный таймер для времени на авторизацию... Это вообще какой-то полнейший абсурд.

Заметка от keyl , создано

2.17. Запрещено флудить, оффтопить, заниматься флеймом. 

Устное предупреждение.

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


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

@Sleash Приветствую. Исправлю вашу ошибку, думаю вы ошиблись с функцией "SendClientMessage" :look:
 

forward Info();
public Info()
{
    /*
        SendClientMessage - работает по playerid (выводит игроку в чат сообщение);
        SendClientMessageToAll - работает для всех игроков (global);
    */
    SendClientMessageToAll(0xFFFFFFFF, "Наш сайт: pawno-rus.ru");
}
// И теперь давайте вызовем данный таймер при запуске мода
public OngameModeInit()
{
    SetTimer("Info", 1000*60*20, true);
    return 1; 
}

 

Отредактировано пользователем TonY1145
Причина: Описал ошибку

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


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

Стандартные таймеры могут приводить и к падению сервера. Для этого классные ребятки сделали плагины и даже с куда большим функционалом для таймеров чем в самом сампе и крмп. Всем рекомендую:

 

https://github.com/aaamouii/Timer-Fix-plugin

https://github.com/ziggi/samp-plugin-timerfix

 

Вы только посмотрите какая годнота.

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


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

@Sleash Таймер хорошо  к примеру использовать, когда надо допустим выделить секунду перед регистрацией/авторизацией, чтобы база данных спокойно запустилась, подтянуло всё и так далее. 

Ну если рассматривать MySQL, то это необязательно, если к примеру брать mxINI, то лучше все таки 1-2 секунды выделить на загрузку базы данных. Я например могу использовать таймер для того, чтобы сделать задержку перед авторизацией/регой

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


Ссылка на сообщение
Поделиться на другие сайты
Web
¯\_(ツ)_/¯

@Kutuzov ждать он будет разве что когда клиент (игрок) подгрузит текстуры. Про mxini вообще лучше забыть и не использовать. И никто не отменяет кэширование и многопоточность и прочие прилести samp плагина для mysql от BlueG и реализацию Redis от Southclaws.

 

https://github.com/pBlueG/SA-MP-MySQL

https://github.com/Southclaws/pawn-redis

 

Отредактировано пользователем Web

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


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

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

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

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

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


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

Войти

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


Войти

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

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

  • Похожий контент

    • johny walters
      От johny walters
      Мы разрабатываем мобильный сервер и ищем ответственных специалистов на ключевые позиции:

      Разработчик Pawn (чистый или + Client) разработка и оптимизация систем, баз данных (MySQL), клиентская часть (Android/C++), а также обязательное умение работать с кастомными пакетами RakNet (RPC, кастомная синхронизация, перехват и отправка пакетов).
      Руководитель отдела тестирования - выстраивание процессов тестирования, организация работы команды тестеров, составление тест-кейсов, приоритезация баг-репортов и координация ЗБТ/ОБТ.
      Тестеры - активный поиск багов на клиенте и сервере, оформление репортов, проверка фиксов.
      Дизайнер (разработка и реализация общего дизайна проекта, в том числе внутриигровых интерфейсов) - нюансы обсудим, возьмем с любым опытом и направлением, скоординируем по ходу дела.

      От вас: понимание специфики мобильных проектов, ответственность и наличие свободного времени. Опыт на похожих проектах будет огромным плюсом.
      От нас: слаженная команда с хорошими senior разработчиками, четкие задачи, адекватный менеджмент, сильный старт и условия оплаты/бонусов по результатам работы.

      Писать в TG @hard1199 (ОБЯЗАТЕЛЬНО указать желаемую роль и описать свой опыт).
    • sinvays
      От sinvays
      Продаётся проект Criminal RolePlay с 8-летней историей.

      Проект заморожен и не используется длительное время.
      Потратил на него около 250.000 рублей, продаю за приемлимую цену.

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/krnl0
    • Dekmveka
      От Dekmveka
      Здравствуйте, уважаемые пользователи форума PAWNO-RUS.
       
      В этой теме хочу поделиться видеоуроками, ориентированных на новичков, которые сейчас начинают только изучать pawn. 
      Хочу сказать сразу, я не профессиональный блогер с крутым оборудованием, поэтому если что за какие то погрешности в съемке заранее извиняюсь.
      Хотелось бы попросить не писать, что типа pawn и samp уже умер, неактуален, уроков и так полно и так далее и тому подобное. Я лишь просто занимаюсь своим увлечением и решил делиться знаниями с новичками.
      Далее на канале после плейлиста с основами планируется выложить плейлист по MySQL и максимально подробно всё рассказать о MySQL, будет старая добрая рубрика "Мод с нуля" (но на основе плагинов, стандартов и др. актуальных в 2025-2026 году). 
       
      Также хочу сказать, что есть также телеграмм канал. 
      На данный момент там есть ветка для общения, ветка "Инструменты" (там лежат архивы со всем нужным + есть навигационный пост, я просто поделил всё на категории и просто вставил ссылки на архивы которые туда же выложил. Можете зайти посмотреть если интересно). Также в телеграмм канале потом будут исходные файлы с плейлиста "Мод с нуля" и других плейлистах, пока что говорить подробно не буду что буду ещё выкладывать. 
       
      В общем, я даю ссылки, кому интересно, можете смотреть.
      [Часть 1]: Архитектура ядра SAMP || Основы программирования PAWN/PAWNO  -  *кликабельно*
      [Часть 2]: База мода, переменные, format() || Основы программирования PAWN/PAWNO  -  *кликабельно*
      Telegram канал  -  *кликабельно*
       
      Желаю всем приятного просмотра, а также успехов в обучении 
    • Antoxa39
      От Antoxa39
      Здарова бандиты. 
      Вообщем, в этом уроке я расскажу и покажу как подключить Базу Данных к MySQL.
      Не регистрацию,и не в готовом моде где просто пользователя пароль хост и т.д меняете.
      А подключение с нуля.
       
      1.Нам понадобится MySQL.  Я использую R39-6. Скачать 
      2.Приступаем к подготовительному этапу.
      Заходим в Pawn и подключаем MySQL чуть ниже инклюда a_samp. #include <a_mysql>
      Должно быть так.
      После этого отчищаем мод от хлама. Должно получится вот так: жмЫкс
      3.Подключение
      Дальше нам требуется создать переменную,эта переменная будет хранить ИД подключения. в MySQL R39 создаем простую переменную.
      new dbHandle;  В MySQL R41 создаем так:
       new MySQL:dbHandle;  
      теперь создаем Константы
      #define Host "127.0.0.1" #define User "root" // это если вы используете Denwer. Если хостинг указываете другого пользователя. #define DataBase "urok" #define Password_SQL ""//Если вы на хостинге ставите пароль,для Denwer пароль не требуется, чуть позже скажу как его установить Все, теперь переходим в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL); // приравниваем нашу переменную с ИД подключением к коннекту к базе данных. Извиняюсь если коряво обьяснил. Это для R39     return 1; } Для R41
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,Password_SQL,DataBase);// В R41 поменялись местами Пароль и База     return 1; } Если сделаем чтобы при подключении к базе выводилось сообщение о том,подключилось или нет. Я сделаю это без switch. Чтобы сильно не загружать смотрящих этот урок.
      Делаем все там же в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL);     if(mysql_errno())     {         printf("Подключение к базе данных %s не удалось.",DataBase); // %s означает строку. То есть будет выводить название базы данных которое указано в #define DataBase     }     else     {         printf("Подключение к базе данных %s успешно",DataBase);     }     return 1; } Все, с этим закончили. Остался последний этап, это отключение базы данных когда мод выключается.
      Идем в паблик OnGameModeExit()
      public OnGameModeExit() {     mysql_close(dbHandle);     return 1; } Все. База данных подключена.
      Чтобы скачать Denwer жмите сюды: плямп
      Для установки можете перейти по этой ссылке: УСТАНОВКА
    • sinvays
      От sinvays
      Продаётся проект Criminal RolePlay с 8-летней историей.

      Проект заморожен и не используется длительное время.
      Потратил на него около 250.000 рублей, продаю за приемлимую цену.

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/rosetta