Иконка ресурса

Kick Spectators 11-05-2015

SourceSamil

Мошенник
Сообщения
121
Реакции
28
  • Автор ресурса
  • #1
Kick Spectators

Описание:
Плагин кикает игроков, которые находятся в команде spectators или не находятся в какой-либо команде.

ConVars:
//Интервал проверки команды игрока.
sm_checktime 15.0
//Будут ли защищены игроки с иммунитетом.
sm_immunenable 1
//Кол-во иммунитета для защиты.
sm_immunval 30

Версии:
1.0 - Релиз.
1.1 - Работа по циклу.
 
Последнее редактирование модератором:

Danyas

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

ТС, вы не хотите сделать всё через один таймер?

kick_spec.sp(44) : error 100: function prototypes do not match
 

SourceSamil

Мошенник
Сообщения
121
Реакции
28
  • Автор ресурса
  • #3
Хм, я не знаю, что больше грузит сервер цикл или куча таймеров, подскажи

Добавлено через 1 минуту
Эм, у меня нету ошибок
 
Последнее редактирование:

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Хм, я не знаю, что больше грузит сервер цикл или куча таймеров, подскажи

Добавлено через 1 минуту
Эм, у меня нету ошибок

Скорее куча таймеров будет больше кушать чем один цикл.

SourcePawn Compiler 1.6.3

kick_spec (1).sp(44) : error 100: function prototypes do not match
SourcePawn Compiler 1.7.1

Code size: 4012 bytes
Data size: 2908 bytes
Stack/heap size: 16384 bytes
Total requirements: 23304 bytes

Проблема в старом компиляторе, укажите в теме об этом
 

SourceSamil

Мошенник
Сообщения
121
Реакции
28
  • Автор ресурса
  • #5
Проверь на ошибки, т.к. компилирую у себя sourcemod-ом 1.8

Добавлено через 3 минуты
UPD 1.1
Теперь компилируется.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
куча таймеров будет больше кушать чем один цикл
n-ое количество таймеров имеет смысл, когда определённая задержка требуется для каждого игрока. Если же проверяются все подряд и точность не нужна - одним таймеров с циклом по всем игрокам.
 
  • Мне нравится
Реакции: TWRP

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Немного странный способ, можно сделать через событие player_team, ну и при заходе проверить (+ ко всему: создается куча повторяющихся таймеров)

Оффтоп
 
Последнее редактирование:

SourceSamil

Мошенник
Сообщения
121
Реакции
28
  • Автор ресурса
  • #8
Эм, для чего тут тестирование, плагин на 10 строк, таймер теперь 1....
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
SourceSamil
PHP:
// Таймер один? ок..
public OnClientPostAdminCheck( i_Client )
{
    CreateTimer( g_f_Cvar_CheckTime, Timer_CheckTeams, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE );
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
+ ко всему: создается куча повторяющихся таймеров
Конечно куча. Остановки вообще никакой! Завис сервера со временем обеспечен, если карта на сервере не менялась продолжительное время.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Если обнаружатся проблемы - перенесу в новые плагины.
Если их автор не будет фиксить - перенесу в отклоненные.
 

SourceSamil

Мошенник
Сообщения
121
Реакции
28
  • Автор ресурса
  • #12
Фак....

Добавлено через 2 минуты
Простите ребятушки, исправил

Добавлено через 3 минуты
Ромео, я на новом синтаксисе чаще работаю, чем на старом
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
C-подобный:
for( new i_Client = 1; i_Client <= MaxClients; i_Client++ )
{
	if( i_Client > 0 && IsClientInGame( i_Client ) )
В цикле от 1 до MaxClients мы проверяем на то, что число будет > 0.

C-подобный:
if( i_Team != 2 && i_Team != 3 )
Плагин в разделе CS: Source, но проверка идет на != 2 и != 3. Согласно cstrike.inc:
C-подобный:
#define CS_TEAM_NONE		0	/**< No team yet. */
#define CS_TEAM_SPECTATOR	1	/**< Spectators. */
#define CS_TEAM_T 		2	/**< Terrorists. */
#define CS_TEAM_CT		3	/**< Counter-Terrorists. */
Куда разумнее будет проверять на == 1. UPD. Хотя нет. Те, кто только подключились, имеют 0\1 команду, т.к. они выбирают. И они прекрасно могут быть кикнуты как "спектраторы". Данный плагин "одобрять" на данный момент нельзя, в его алгоритме работы серьезная ошибка.

C-подобный:
if( g_b_Cvar_Immunity_Enable )
{
	new AdminId: i_ClientAdminId = GetUserAdmin( i_Client );
	if( i_ClientAdminId == INVALID_ADMIN_ID )
	{
		KickClient( i_Client, "%t", "KickReason" );
	}
	else
	{
		new i_Immunity = GetAdminImmunityLevel( i_ClientAdminId );
		if( i_Immunity < g_i_Cvar_Immunity_Value )
		{
			KickClient( i_Client, "%t", "KickReason" );
		}
	}
}
else KickClient( i_Client, "%t", "KickReason" );
Очень много повторений. Можно написать проще:
C-подобный:
if ( g_b_Cvar_Immunity_Enable )
{
	new AdminId: i_ClientAdminId = GetUserAdmin( i_Client );
	if ( i_ClientAdminId != INVALID_ADMIN_ID && GetAdminImmunityLevel( i_ClientAdminId ) >= g_i_Cvar_Immunity_Value )
	{
		continue;
	}
}
KickClient( i_Client, "%t", "KickReason" );

И да, делать такое через таймер неразумно. Согласен с The End Is Near..., гораздо проще отлавливать player_team.

P.S.
Добавлено через 3 минуты
Ромео, я на новом синтаксисе чаще работаю, чем на старом
Нового синтаксиса тут нет. Плагин написан на синтаксисе сурсмода от 1.0 версии до 1.7.
 
  • Мне нравится
Реакции: R1KO

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
PHP:
public OnConfigsExecuted(  )
{
	g_f_Cvar_CheckTime = GetConVarFloat( g_h_Cvar_CheckTime );
	g_b_Cvar_Immunity_Enable = GetConVarBool( g_h_Cvar_Immunity_Enable );
	g_i_Cvar_Immunity_Value = GetConVarInt( g_h_Cvar_Immunity_Value);
}

public OnMapStart(  )
{
	CreateTimer( g_f_Cvar_CheckTime, Timer_CheckTeams, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE );
}
Сначала запускаем таймер, а уже после обновляем состояние переменных, причём одна из которых - относится именно к этому таймеру?!
И почему бы вообще не сделать всё в одном вызове, причём выкинув лишнюю переменную:
PHP:
public OnConfigsExecuted(  )
{
	CreateTimer( GetConVarFloat( g_h_Cvar_CheckTime ), Timer_CheckTeams, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE );
	g_b_Cvar_Immunity_Enable = GetConVarBool( g_h_Cvar_Immunity_Enable );
	g_i_Cvar_Immunity_Value = GetConVarInt( g_h_Cvar_Immunity_Value);
}
 
Сверху Снизу