new bgladmin[MAXPLAYERS + 1], // счетчик количества использования для гл.админа
bgladminsec[MAXPLAYERS + 1], // счетчик секунд использования для гл.админа
badminsec[MAXPLAYERS + 1]; // счетчик секунд использования для админа
new bool:badmin[MAXPLAYERS + 1] = { false, ... }; // счетчик количества использования для админа (булевая - для разового использования, т.е. и константа не нужна)
static const maxgladm = 2; // константа для максимума использования количества для гл.админа
static const maxgladmsec = 31; // константа для максимума использования секунд для гл.админа (3 сек, т.к. CreateTimer(0.1, Hooking - мл сек)
static const maxadmsec = 51; // константа для максимума использования секунд для админа (5 сек)
bool:HasAccess(client)
{
if (GetAdminFlag(GetUserAdmin(client), Admin_Custom2, Access_Real) || GetAdminFlag(GetUserAdmin(client), Admin_Custom2, Access_Effective)) // для флага доступа Custom2 (гл.админа)
{
if (bgladmin[client] < maxgladm) // проверяем счетчик, на его максимум (не равно, т.к. начинаем с нуля)
{
bgladmin[client]++; // если меньше, то +
return true; // разрешаем
}
else // если больше или равно
{
PrintToChat(client, "%c[HOOK] %cРазрешено использовать паутину %c2 раза %cза раунд", COLOR_GREEN, COLOR_DEFAULT, COLOR_GREEN, COLOR_DEFAULT); //чат
return false; // запрещаем
}
}
else if (GetAdminFlag(GetUserAdmin(client), Admin_Custom5, Access_Real) || GetAdminFlag(GetUserAdmin(client), Admin_Custom5, Access_Effective)) // для флага доступа Custom5 (админа)
{
if (!badmin[client]) // (false) проверяем счетчик, на его максимум (true)
{
badmin[client] = true; // раз использования
return true; // разрешаем
}
else // (true) уже использовали
{
PrintToChat(client, "%c[HOOK] %cРазрешено использовать паутину %c1 раз %cза раунд", COLOR_GREEN, COLOR_DEFAULT, COLOR_GREEN, COLOR_DEFAULT); //чат
return false; // запрещаем
}
}
else if (GetAdminFlag(GetUserAdmin(client), Admin_Root, Access_Real) || GetAdminFlag(GetUserAdmin(client), Admin_Root, Access_Effective)) // флаг root
{
return true; // разрешаем
}
else // нет доступа ко всем флагам, и предлагаем
{
EmitSoundToClient(client, deniedWav);
PrintToChat(client, "%c[HOOK] %cУ вас нет Паутинки :(\nКупить её вы можете у создателя: %cskype", COLOR_GREEN, COLOR_DEFAULT, COLOR_GREEN);
return false; // запрещаем
}
}
public Action:Hooking(Handle:timer, any:index)
{
if (gStatus[index] && IsClientInGame(index) && IsPlayerAlive(index))
{
//...
if (bgladmin[index]) // проверяем что использует гл.админ
{
bgladminsec[index]++; // + к счетчику секунд
if (bgladminsec[index] > maxgladmsec) // проверяем если, секунды уже больше - его заданного максимума
{
Action_UnHook(index); // принуждаем выключить
return Plugin_Stop;
}
}
else if (badmin[index]) // проверяем что использует админ
{
badminsec[index]++; // + к счетчику секунд
if (badminsec[index] > maxadmsec) // проверяем если, секунды уже больше - его заданного максимума
{
Action_UnHook(index); // принуждаем выключить hook
return Plugin_Stop;
}
}
Hook_Push(index); // иначе, если счетчик секунд - позваляет, - включаем hook
}
else
{
Action_UnHook(index);
return Plugin_Stop;
}
return Plugin_Handled;
}
public Event_OnRoundStart(Handle:event, const String:name[], bool:silent)
{
for (new i = 1; i <= MaxClients; ++i) // возвращаем в начале раунда на началное значения, для повторного использования
{
bgladmin[i] = 0;
badmin[i] = false;
bgladminsec[i] = 0;
badminsec[i] = 0;
}
}
Action_UnHook(client)
{
//...
bgladminsec[client] = 0; // возвращаем секунды, для повторного использования
}