Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Единый таймер

Статус
В этой теме нельзя размещать новые ответы.

Mr_David

Мастер
Данный урок поможет вам научиться использовать 1 таймер в моде, который может обрабатывать большинство операций со временем.

Например, вы используете в моде несколько таймеров: один для сохранения аккаунтов, который обновляется каждые 30 секунд, другой, например - для обновления склада с материалами, обновляется раз в 5 секунд, а третий отвечает за обновление часов на сервере и обновляется каждую секунду.

Допустим что вы поставили 3 таймера в OnGameModeInit() и задали им нужный интервал:

PHP код:
PHP:
#define Время_Обновления_Часов 1*1000 
#define Время_Обновления_Склада 5*1000 
#define Время_Сохранения_Аккаунтов 30*1000
PHP:
public OnGameModeInit() 
{ 
     SetTimer("Обновить_часы",Время_Обновления_Часов,true); 
     SetTimer("Обновить_склад",Время_Обновления_Склада,true); 
     SetTimer("Сохранить_аккаунты",Время_Сохранения_Аккаунтов,true); 
     return 1; 
}

Три таймера будут создавать нагрузку на сервер, а ведь все это можно уместить в один таймер. Назовем его Processor, зададим ему интервал в 1000 мс (значит в одну секунду) и включим при запуске мода
PHP код:
PHP:
#define PROCESSOR_UPDATE 1000
PHP:
forward Processor();
PHP:
public OnGameModeInit() 
{ 
     SetTimer("Processor",PROCESSOR_UPDATE,true); 
     return 1; 
}
PHP:
public Processor() 
{ 
     return 1; 
}
И теперь нацепим на процессор функцию обновления часов

PHP:
public Processor() 
{ 
     Обновить_часы(); 
     return 1; 
}
Теперь функция "Обновить_часы()" будет вызываться каждую секунду, как и должно было быть.
Но как поступить с сохранением аккаунтов и обновлением склада? Ведь они имеют иной интервал.
А мы сделаем так: Создадим переменные:


PHP:
new Обновление_склада = 0; 
new Обновление_часов = 0; 
new Сохранение_аккаунтов = 0;  
И процессор заменим на следующее:
PHP:
public Processor() 
{ 
    Обновление_склада ++; 
    Сохранение_аккаунтов ++; 
    Обновление_часов ++; 
    if(Обновление_часов >= Время_Обновления_Часов) 
    //Зачем мы обновляем часы, когда они сами могут обновляться с процессором? 
    //- Для удобного настраивания времени обновления через define 
    { 
          Обновление_часов = 0; 
          Обновить_часы(); 
    } 
    if(Обновление_склада >= Время_Обновления_Склада) 
    { 
          Обновление_склада = 0; 
          Обновить_склад(); 
    } 
    if(Сохранение_аккаунтов >= Время_Сохранения_Аккаунтов ) 
    { 
          Сохранение_аккаунтов = 0; 
          Сохранить_аккаунты(); 
    } 
    return 1; 
}
Что мы делаем? Мы добавляем к переменным по значению, которое в действительности для таймера равняется 1 секунде, а когда это значение достигнет времени обновления, то мы вызовем необходимую функцию и обнулим переменную, тем самым запустив цикл заново.

Что у нас в итоге получилось:

PHP:
#define PROCESSOR_UPDATE 1000 
#define Время_Обновления_Часов 1 
#define Время_Обновления_Склада 5 
#define Время_Сохранения_Аккаунтов 30
PHP:
new Обновление_склада = 0; 
new Обновление_часов = 0; 
new Сохранение_аккаунтов = 0;
PHP:
forward Processor();
PHP:
public OnGameModeInit() 
{ 
    SetTimer("Processor",PROCESSOR_UPDATE,true); 
    return 1; 
}
PHP:
public Processor() 
{ 
    Обновление_склада ++; 
    Сохранение_аккаунтов ++; 
    Обновление_часов ++; 
    if(Обновление_часов >= Время_Обновления_Часов) 
    { 
          Обновление_часов = 0; 
          Обновить_часы(); 
    } 
    if(Обновление_склада >= Время_Обновления_Склада) 
    { 
          Обновление_склада = 0; 
          Обновить_склад(); 
    } 
    if(Сохранение_аккаунтов >= Время_Сохранения_Аккаунтов ) 
    { 
          Сохранение_аккаунтов = 0; 
          Сохранить_аккаунты(); 
    } 
    return 1; 
}
Автор урока: BRICS
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу