Mr_David
Мастер
Данный урок поможет вам научиться использовать 1 таймер в моде, который может обрабатывать большинство операций со временем.
Например, вы используете в моде несколько таймеров: один для сохранения аккаунтов, который обновляется каждые 30 секунд, другой, например - для обновления склада с материалами, обновляется раз в 5 секунд, а третий отвечает за обновление часов на сервере и обновляется каждую секунду.
Допустим что вы поставили 3 таймера в OnGameModeInit() и задали им нужный интервал:
PHP код:
Три таймера будут создавать нагрузку на сервер, а ведь все это можно уместить в один таймер. Назовем его Processor, зададим ему интервал в 1000 мс (значит в одну секунду) и включим при запуске мода
PHP код:
И теперь нацепим на процессор функцию обновления часов
Теперь функция "Обновить_часы()" будет вызываться каждую секунду, как и должно было быть.
Но как поступить с сохранением аккаунтов и обновлением склада? Ведь они имеют иной интервал.
А мы сделаем так: Создадим переменные:
Что мы делаем? Мы добавляем к переменным по значению, которое в действительности для таймера равняется 1 секунде, а когда это значение достигнет времени обновления, то мы вызовем необходимую функцию и обнулим переменную, тем самым запустив цикл заново.
Что у нас в итоге получилось:
Автор урока: BRICS
Например, вы используете в моде несколько таймеров: один для сохранения аккаунтов, который обновляется каждые 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;
}
Что у нас в итоге получилось:
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;
}
Последнее редактирование:
