Благодарности:
- s1lent
- AMXX Dev Team
Описание: Это готовое решение для вызова функций в указанное время.
Установка: Первым делом необходимо выделить память для объекта класса CTaskManager, а затем освободить.
- Код: Выделить всё
void OnMetaAttach()//or amxx attach
{
g_pTaskManager = new CTaskManager;
}
void OnMetaDetach()//or amxx detach
{
delete g_pTaskManager;
}
Далее, в StartFrame вызывать соответствующий метод класса.
- Код: Выделить всё
void StartFrame_Post()
{
if (g_pTaskManager != NULL)
g_pTaskManager->StartFrame(TASK_FREQUENCY);
SET_META_RESULT(MRES_IGNORED);
}
Собственно, установка завершена, но я рекомендую также при включении сервера очищать все задачи (далее, "таски"). Делается это с помощью метода ClearTaskByOwner, который очищает все таски указанного edict'а. Если не указывать значение аргументу, то он очищает все существующие таски.
- Код: Выделить всё
void ServerActivate_Post(edict_t *pEdictList, int edictCount, int clientMax)
{
if (g_pTaskManager != NULL)
g_pTaskManager->ClearTaskByOwner();
SET_META_RESULT(MRES_IGNORED);
}
С помощью этого же метода мы можем очистить все таски закрепленные за игроками, когда он заходит или выходит из сервера.
- Код: Выделить всё
void ClientPutInServer_Post(edict_t *pPlayer)
{
if (g_pTaskManager != NULL)
g_pTaskManager->ClearTaskByOwner(pPlayer);
SET_META_RESULT(MRES_IGNORED);
}
Пример использования:
- Код: Выделить всё
int ShowPlayerGreeting_TaskHandle(edict_t *pPlayer);
void ClientPutInServer_Post(edict_t *pPlayer)
{
if (g_pTaskManager != NULL)
g_pTaskManager->ClearTaskByOwner(pPlayer);
g_pTaskManager->SetTask(pPlayer, (task_handle_t)ShowPlayerGreeting_TaskHandle, 5.0, TASK_NORMAL);
SET_META_RESULT(MRES_IGNORED);
}
int ShowPlayerGreeting_TaskHandle(edict_t *pPlayer)
{
UTIL_ClientPrint(pPlayer, print_center, "Hello, %s!", pPlayer->v.netname);
return TASK_IGNORED;
}
Вы должны зарегистрироваться, чтобы видеть ссылки..