Добавить иммунитет к плагину

vii92

Участник
Сообщения
9
Реакции
0
Всем привет.

Есть плагин, который кикает игроков которые заседелись в спектрах, и к нему нужно добавить иммунитет админам.

Сам в этом не бум бум.Просьба знающих, помогите.
 

Вложения

  • check_spectator.sp
    1.3 КБ · Просмотры: 14

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6

vii92

Участник
Сообщения
9
Реакции
0
Все работает.

Еще вопросик, если я изменю время таймера с 3 минут на 15.Сильно ли будет грузить это сервер? или же нагрузка от времени таймера не зависит ?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Все работает.

Еще вопросик, если я изменю время таймера с 3 минут на 15.Сильно ли будет грузить это сервер? или же нагрузка от времени таймера не зависит ?

Прямо Пропорционально зависит
 

vii92

Участник
Сообщения
9
Реакции
0
Вот такая неприятная ошибочка.

L 11/11/2014 - 10:56:51: [SM] Displaying call stack trace for plugin "check_spectator.smx":
L 11/11/2014 - 10:56:51: [SM] [0] Line 50, /home/groups/sourcemod/upload_tmp/phpv0VK5n.sp::OnClientDisconnect()
L 11/11/2014 - 10:59:41: [SM] Native "KillTimer" reported: Invalid timer handle 1180fa7 (error 1)
 

TolikCorp

Участник
Сообщения
874
Реакции
334
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;
	}
}
Проверяй.
 

vii92

Участник
Сообщения
9
Реакции
0
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 просьба не писать.
 
Последнее редактирование:

artyrka94

Участник
Сообщения
181
Реакции
38
Спасибо. Щас попробую.

Добавлено через 3 минуты
Добавить квар, что бы плагин начинал кикать после определенного количества игроков на сервере.Я думаю многим людям пригодится такой плагин.Легкая замена аналогам.

Про afk manager просьба не писать.

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; 
    } 
}
 

Вложения

  • check_spectator.sp
    2 КБ · Просмотры: 5
  • check_spectator.smx
    4.1 КБ · Просмотры: 1

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #14
artyrka94,
PHP:
_IsPluginEnable() 
    if(GetClientCount() >= GetConVarInt(g_cMinPlayers)) return true;else return false;

PHP:
_IsPluginEnable() return (GetClientCount() >= GetConVarInt(g_cMinPlayers));
 

vii92

Участник
Сообщения
9
Реакции
0
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; 
    } 
}

Спасибо, щас испробую.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Да мне по боробану потрачу я свое время на учебу или на делание плагина за 150 рубелй
Рико хочет пускай бесплатно работает
 
Сообщения
2,587
Реакции
1,344
Черная вдова, хорошо, что ты не единственный вариант. С такими ценами - сервер золотой станет.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
☆★☆БАТЯ☆★☆™,
Ну кто хочет сделать идеальный по их представлением сервер - и так он станет золотым, даже если не деньги то время он точно забирает
 
Сверху Снизу