Иммунитет у всех админов:
Все работает.
Еще вопросик, если я изменю время таймера с 3 минут на 15.Сильно ли будет грузить это сервер? или же нагрузка от времени таймера не зависит ?
Всё настолько плохо ?150 р, если согласен - пиши в лс
#pragma semicolon 1
#include <sourcemod>
public Plugin:myinfo =
{
name = "Check Spectator",
author = "Grisha",
description = "Автоматический кик игроков сидящих в спектрах более 3-х минут",
version = "1.2",
url = "http://forum.sourcemod-plugins.ru/"
};
new Handle:i_ExitPlayer[MAXPLAYERS+1],
bool:g_bIsAdmin[MAXPLAYERS+1];
public OnPluginStart()
{
CreateTimer(5.0, i_CheckSpectators, _, TIMER_REPEAT);
}
public OnClientPostAdminCheck(client) g_bIsAdmin[client] = (!IsFakeClient(client) && GetUserAdmin(client) != INVALID_ADMIN_ID);
public Action:i_CheckSpectators(Handle:timer)
{
for (new i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i) && !g_bIsAdmin[i] && GetClientTeam(i) == 1)
{
i_ExitPlayer[i] = CreateTimer(180.0, i_KickSpectators, i);
}
}
}
public Action:i_KickSpectators(Handle:timer, any:client)
{
if(IsClientInGame(client) && GetClientTeam(client) == 1 && i_ExitPlayer[client] != INVALID_HANDLE)
{
KickClient(client, "Вы были кикнуты.\nМаксимальное время нахождения в спектрах 3 минуты");
PrintToChatAll("\x04[\x03★\x04]\x01 Игрок\x03 %N\x01 засиделся в спектрах и был кикнут..", client);
}
i_ExitPlayer[client] = INVALID_HANDLE;
}
public OnClientDisconnect(client)
{
g_bIsAdmin[client] = false;
if (i_ExitPlayer[client] != INVALID_HANDLE)
{
KillTimer(i_ExitPlayer[client]);
i_ExitPlayer[client] = INVALID_HANDLE;
}
}
Проверяй.PHP:#pragma semicolon 1 #include <sourcemod> public Plugin:myinfo = { name = "Check Spectator", author = "Grisha", description = "Автоматический кик игроков сидящих в спектрах более 3-х минут", version = "1.2", url = "http://forum.sourcemod-plugins.ru/" }; new Handle:i_ExitPlayer[MAXPLAYERS+1], bool:g_bIsAdmin[MAXPLAYERS+1]; public OnPluginStart() { CreateTimer(5.0, i_CheckSpectators, _, TIMER_REPEAT); } public OnClientPostAdminCheck(client) g_bIsAdmin[client] = (!IsFakeClient(client) && GetUserAdmin(client) != INVALID_ADMIN_ID); public Action:i_CheckSpectators(Handle:timer) { for (new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && !g_bIsAdmin[i] && GetClientTeam(i) == 1) { i_ExitPlayer[i] = CreateTimer(180.0, i_KickSpectators, i); } } } public Action:i_KickSpectators(Handle:timer, any:client) { if(IsClientInGame(client) && GetClientTeam(client) == 1 && i_ExitPlayer[client] != INVALID_HANDLE) { KickClient(client, "Вы были кикнуты.\nМаксимальное время нахождения в спектрах 3 минуты"); PrintToChatAll("\x04[\x03★\x04]\x01 Игрок\x03 %N\x01 засиделся в спектрах и был кикнут..", client); } i_ExitPlayer[client] = INVALID_HANDLE; } public OnClientDisconnect(client) { g_bIsAdmin[client] = false; if (i_ExitPlayer[client] != INVALID_HANDLE) { KillTimer(i_ExitPlayer[client]); i_ExitPlayer[client] = INVALID_HANDLE; } }
Спасибо. Щас попробую.
Добавлено через 3 минуты
Добавить квар, что бы плагин начинал кикать после определенного количества игроков на сервере.Я думаю многим людям пригодится такой плагин.Легкая замена аналогам.
Про afk manager просьба не писать.
#pragma semicolon 1
#include <sourcemod>
public Plugin:myinfo =
{
name = "Check Spectator",
author = "Grisha и несколько посонов из hlmod'a",
description = "Автоматический кик игроков сидящих в спектрах более 3-х минут",
version = "1.2",
url = "http://forum.sourcemod-plugins.ru/"
};
new Handle:i_ExitPlayer[MAXPLAYERS+1],
bool:g_bIsAdmin[MAXPLAYERS+1],
Handle:g_cMinPlayers;
public OnPluginStart()
{
CreateTimer(5.0, i_CheckSpectators, _, TIMER_REPEAT);
g_cMinPlayers = CreateConVar("sm_checkspec_min", "5", "Минимальное количество игроков для работы плагина");
}
public OnClientPostAdminCheck(client) g_bIsAdmin[client] = (!IsFakeClient(client) && GetUserAdmin(client) != INVALID_ADMIN_ID);
public Action:i_CheckSpectators(Handle:timer)
{
if(_IsPluginEnable())
for (new i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i) && !g_bIsAdmin[i] && GetClientTeam(i) == 1)
{
i_ExitPlayer[i] = CreateTimer(180.0, i_KickSpectators, i);
}
}
}
_IsPluginEnable()
if(GetClientCount() >= GetConVarInt(g_cMinPlayers)) return true;else return false;
public Action:i_KickSpectators(Handle:timer, any:client)
{
if(IsClientInGame(client) && GetClientTeam(client) == 1 && i_ExitPlayer[client] != INVALID_HANDLE)
{
KickClient(client, "Вы были кикнуты.\nМаксимальное время нахождения в спектрах 3 минуты");
PrintToChatAll("\x04[\x03★\x04]\x01 Игрок\x03 %N\x01 засиделся в спектрах и был кикнут..", client);
}
i_ExitPlayer[client] = INVALID_HANDLE;
}
public OnClientDisconnect(client)
{
g_bIsAdmin[client] = false;
if (i_ExitPlayer[client] != INVALID_HANDLE)
{
KillTimer(i_ExitPlayer[client]);
i_ExitPlayer[client] = INVALID_HANDLE;
}
}
PHP:#pragma semicolon 1 #include <sourcemod> public Plugin:myinfo = { name = "Check Spectator", author = "Grisha и несколько посонов из hlmod'a", description = "Автоматический кик игроков сидящих в спектрах более 3-х минут", version = "1.2", url = "http://forum.sourcemod-plugins.ru/" }; new Handle:i_ExitPlayer[MAXPLAYERS+1], bool:g_bIsAdmin[MAXPLAYERS+1], Handle:g_cMinPlayers; public OnPluginStart() { CreateTimer(5.0, i_CheckSpectators, _, TIMER_REPEAT); g_cMinPlayers = CreateConVar("sm_checkspec_min", "5", "Минимальное количество игроков для работы плагина"); } public OnClientPostAdminCheck(client) g_bIsAdmin[client] = (!IsFakeClient(client) && GetUserAdmin(client) != INVALID_ADMIN_ID); public Action:i_CheckSpectators(Handle:timer) { if(_IsPluginEnable()) for (new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && !g_bIsAdmin[i] && GetClientTeam(i) == 1) { i_ExitPlayer[i] = CreateTimer(180.0, i_KickSpectators, i); } } } _IsPluginEnable() if(GetClientCount() >= GetConVarInt(g_cMinPlayers)) return true;else return false; public Action:i_KickSpectators(Handle:timer, any:client) { if(IsClientInGame(client) && GetClientTeam(client) == 1 && i_ExitPlayer[client] != INVALID_HANDLE) { KickClient(client, "Вы были кикнуты.\nМаксимальное время нахождения в спектрах 3 минуты"); PrintToChatAll("\x04[\x03★\x04]\x01 Игрок\x03 %N\x01 засиделся в спектрах и был кикнут..", client); } i_ExitPlayer[client] = INVALID_HANDLE; } public OnClientDisconnect(client) { g_bIsAdmin[client] = false; if (i_ExitPlayer[client] != INVALID_HANDLE) { KillTimer(i_ExitPlayer[client]); i_ExitPlayer[client] = INVALID_HANDLE; } }