В теме 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*20true);
    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*2false"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*20true);
    return 1
}

 

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

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


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

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

 

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

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

 

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

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


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

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

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

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


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

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

 

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

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

 

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

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


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

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

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

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

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


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

Войти

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


Войти

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

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

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

    • Elvis
      От Elvis
      Настоящим информируем о начале набора сотрудников в нашу студию "AlinSA Studios". В рамках текущего проекта "VanguardRP", основанного на мотивах CRMP, мы ищем профессионалов и энтузиастов для выполнения следующих должностей:
       
      1. Технические специалисты
       
      Требования:
       
      | Базовые знания в области информационных технологий
      | Понимание структур кода и принципов работы компиляторов
      | Готовность к обучению и развитию профессиональных навыков
      | Иметь базовое представлении ЯП "Pawn" или "Kotlin" и "Java".
       
      Обязанности:
       
      | Поддержка технической инфраструктуры проекта
      | Участие в разработке и оптимизации программных решений
      | Взаимодействие с командой разработки для внедрения новых функций
       
      2. Пиар-ассистенты
       
      Требования:
       
      | Опыт работы в сфере SMM, маркетинга или PR
      | Навыки взаимодействия с аудиторией и ведения социальных сетей
       
      Обязанности:
       
      | Продвижение проекта в социальных сетях
       
      3. Дизайнеры
       
      Требования:
       
      | Наличие портфолио с примерами выполненных работ (не обязательно, желательно)
      | Владение графическими редакторами ! (Photoshop и Figma)
      | Креативность, внимательность к деталям и способность работать в сжатые сроки
       
      Обязанности:
       
      | создание графического контента для соцсетей, сайта и внутриигровых материалов
      | Разработка дизайна интерфейсов, баннеров, логотипов и иллюстраций
      | Участие в визуальном оформлении проекта
       
      4. Геймдизайнеры
       
      Обязанности:
       
      | Разработка игровых механик, правил взаимодействия и систем баланса
      | Проработка сюжета, персонажей и сценариев для создания эмоциональной связи с игроками
      | Проектирование уровней, задач и сценариев для обеспечения разнообразия игрового процесса
      | Взаимодействие с командой разработчиков, художников и звукорежиссёров для достижения согласованности элементов игры
      | Участие в тестировании прототипов, выявление проблем и балансировка игрового процесса
       
      5. Рупоры
       
      Цель роли: Обеспечить эффективное взаимодействие с целевой аудиторией, формировать положительный имидж проекта, своевременно информировать участников о новостях, обновлениях и
      мероприятиях, а также модерировать сообщества для поддержания комфортной и безопасной среды.
       
      -————————-
      Условия работы:
       
      Обучение и постоянная поддержка со стороны команды
      Гибкий график работы / удалённый формат (обсуждается индивидуально)
       
       
      Если вы заинтересованы в присоединении к нашей команде или хотите получить дополнительную информацию, обращайтесь по следующему контакту:
      Telegram: @AntonLegost
       
       
      Благодарим за внимание! Надеемся на плодотворное сотрудничество.
       
      p.s Новички приветствуются. Для пополнение портфолио и наработки опыта.
       
      С уважением,
      Команда "AlinSA Studios"
    • Kutuzov
      От Kutuzov
      Автор данного канала снимает уроки по программированию на Pawn, также скоро будет на 20 подписчиков снимать мод с нуля в samp. 
      Приглашаем всех на канал, а также особенно новичков. Даже если вы уже знаете pawn, подпишитесь пожалуйста на его канал и поддержите его.
      Автор канала не требует денег!!! Он обучает всех бесплатно!!!
      Ссылка на канал: https://www.youtube.com/@prog_samp_easy
       
      Также у него есть свой тг канал, но начнет вести его, как только будет не менее 10 подписчиков.
       Ссылка на тг канал: https://t.me/pawndevelop
       
      Всем удачи
    • NoVate
      От NoVate
      Доброго времени суток 
       
      Многие новички задавались вопросом: "Как создать свой RP сервер?", "С чего начать разработку?", "Это сложно и я не справлюсь".
      После таких вопросов многие уходили с этой темы и оставляли её на последней полке. Некоторые брались и сталкивались с большими проблемами. И только часть из этих людей доходили до какого-то результата.
       
      Моя цель: сделать создание сервера в SA:MP проще. Чтобы каждый из тех, кто интересовался созданием сервера мог спокойно взять готовую, а что самое главное - базовую сборку и под неё уже создавать различные свои задумки. SA:MP на данный момент не особо актуален, а тем более самый обычный клиент, НО, как мне кажется, если сделать что-то невероятное, то аудитория заметит это и ей будет достаточно интересно "пощупать" данное новшество.
       
      Для тех, кто начнёт писать: "Ты видел свой код?", "Ты сделал не правильно в 777-ой строке" и так далее. Сразу отвечу, цитируя:
       
      Кому стало интересно и кто хотел бы ознакомиться со сборком - прошу в мой Github (не реклама).
      Буду делать коммиты по мере свободного времени и написании кода.
      Если есть какие-то идеи, то пишите в мой Discord сервера (не реклама), который можно будет найти на той же странице.
       
      Спасибо всем за прочтение и хорошего настроения 
    • xiemoniyaz
      От xiemoniyaz
      C:\Users\111\OneDrive\Ðàáî÷èé ñòîë\rrrr\gamemodes\arizona.pwn(78772) : error 017: undefined symbol "GEO_MAX_COUNTRY_NAME_LENGTH" C:\Users\111\OneDrive\Ðàáî÷èé ñòîë\rrrr\gamemodes\arizona.pwn(78772) : error 009: invalid array size (negative, zero or out of bounds) C:\Users\111\OneDrive\Ðàáî÷èé ñòîë\rrrr\gamemodes\arizona.pwn(78772) : error 036: empty statement C:\Users\111\OneDrive\Ðàáî÷èé ñòîë\rrrr\gamemodes\arizona.pwn(78772) : fatal error 107: too many error messages on one line Compilation aborted. Pawn compiler 3.2.3664          Copyright (c) 1997-2016, ITB CompuPhase 4 Errors.  
       
      cmd:get(playerid, params[]) {     extract params -> new player; else return SendClientMessage(playerid, -1, !"/get [playerid]");     new string[GEO_MAX_COUNTRY_NAME_LENGTH+GEO_MAX_REGION_NAME_LENGTH+GEO_MAX_CITY_NAME_LENGTH+GEO_MAX_PROVIDER_NAME_LENGTH+GEO_MAX_MOBILE_STATUS_LENGTH+GEO_MAX_PROXY_LENGTH-6+118];     format(string, sizeof(string),     "Страна: %s\n\     Регион: %s\n\     Город: %s\n\     Провайдер: %s\n\     Использует ли моб.сеть: %s\n\     Использует ли прокси: %s",     GetPlayerIpCountry(player),     GetPlayerIpRegion(player),     GetPlayerIpCity(player),     GetPlayerIpProvider(player),     GetPlayerIpMobileStatus(player),     GetPlayerIpProxyStatus(player));     ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, !" ", string, !"Закрыть", !"");     return true; }  
    • DEST
      От DEST
      Командный процессор: zcmd / dc_cmd + sscanf.