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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #21
Re: Connect info v1.0

1. Получаешь зря IP адрес или SteamID, если их показ отключен
2. IP адрес и SteamID можно получить и не получить, поэтому делай как условие
3. При подключении и отключении игрока используешь одинаковые функции, поэтому используй их один раз, то есть создай функцию для оптимизации

Спасибо. Учту.

2. IP адрес и SteamID можно получить и не получить, поэтому делай как условие

Это как ?
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #22
Re: Connect info v1.3

Такой код нормально оптимизирован? (Вопрос опытным скриптерам)

PHP:
#pragma semicolon 1
#include <sourcemod>

new Handle:P_ip,
	Handle:P_steam;

new String:bufferP[256];

public Plugin:myinfo = 
{
	name = "Connect_info",
	description = "Показывает информацию об игроках при подключении и отключении",
	author = "R1KO & Satan777",
	version = "1.3",
	url = "http://hlmod.ru/"
};

public OnPluginStart()
{
	P_ip = CreateConVar( "sm_print_ip", "1", "Показывать ли Ip игрока, 1 = да, 0 = нет" );
	P_steam = CreateConVar( "sm_print_steam", "1", "Показывать ли STEAM игрока, 1 = да, 0 = нет" );
}	

GetDataOfClient(client)
{
	decl String:bufferIp[64];
	if (GetConVarBool(P_ip))
	{
		if(GetUserFlagBits(client) & ADMFLAG_ROOT)
		{
			Format(bufferIp, sizeof(bufferIp), "");
		}
		else
		{
			decl String:ip[64];
			GetClientIP(client, ip, sizeof(ip));
			Format(bufferIp, sizeof(bufferIp), "\x01IP \x03[ \x04%s\x03]", ip);
		}
	}

	if (GetConVarBool(P_steam))
	{
		decl String:steamid[64];
		GetClientAuthString(client, steamid, sizeof(steamid));
		Format(bufferP, sizeof(bufferP), "\x03• \x01Игрок \x04%N \x03[ \x04%s\x03] \n%s", client, steamid, bufferIp);
	}
	else
	{
		Format(bufferP, sizeof(bufferP), "\x03• \x01Игрок \x04%N %s", client, bufferIp);
	}
}

public OnClientPostAdminCheck(client)
{
	if (!IsFakeClient(client))
	{
		GetDataOfClient(client);
		PrintToChatAll("%s \x01подключился к серверу.", bufferP);
	}
}

public OnClientDisconnect(client)
{
	if (!IsFakeClient(client))
	{
		GetDataOfClient(client);
		PrintToChatAll("%s \x01отключился от сервера.", bufferP);
	}
}

if (!IsFakeClient(client)) сделал везде, т.к. незнаю как очистить строку.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #24
Re: Connect info v1.3

KorDen, Посмотрел. А если эвент дисконнекта ловить, то будет отлавливатся случай когда игрок только начинает подключаться и сразу жмет "отмена" ?
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Re: Connect info v1.3

KorDen, Посмотрел. А если эвент дисконнекта ловить, то будет отлавливатся случай когда игрок только начинает подключаться и сразу жмет "отмена" ?

В моем плагине отлавливаются и подменяются серверные события - то есть если стандартно отображаться будет дисконнект в чате обычный в нужном тебе случае, тогда да. Если же в этот момент стандартно писать не будет, то не будет и отлавливать... Ну или можно по консоли проследить, пишется ли что либо об этом
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Re: Connect info v1.3

1. Админов? Или только главных админов?

2. Используй принт только один раз

3. Существенно или нет, не знаю, но зачем проверять клиента два раза на то, что он не бот?
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
Re: Connect info v1.3

На заметку по оптимизации!

Чтобы очистить текст String, лучше присваивать тексту под индексу 0 = '\0'
Т.е. вместо этого
Format(bufferIp, sizeof(bufferIp), "");
сделай
или

Если вдруг нужно вставить в String какой-нибудь текст, не обязательно использовать Format, используй strcopy

использование Format берет больше времени на обработку чем FormatEx, так что если буфер не используется как аргумент (в этом плагине буфер как аргумент не используется вовсе), лучше использовать FormatEx
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #28
Re: Connect info v1.3

FrozDark, Давно забыл про него. Новая версия есть, но не выкладывал. Думаю нет нужды.

А в чем отличие Format от FormatEx ?
 
Последнее редактирование:

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Re: Connect info v1.3

R1KO,
FormatEx is only safe if you're not using the source string in the Format options. Otherwise, you have to use Format (AFAIK)
И он обрабатывает лишь один параметр
Т.е. если в Format идет только один форматный параметр, и не используется исходная строчка, то лучше FormatEx. Проще говоря, единственный вариант использования:
PHP:
FormatEx(buf,sizeof(buf),"Blabla: %s blabla", str)
(вместо %s может быть любой другой тип, но параметр может быть только один.
 
  • Мне нравится
Реакции: R1KO

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
Re: Connect info v1.3

R1KO,
И он обрабатывает лишь один параметр
Т.е. если в Format идет только один форматный параметр, и не используется исходная строчка, то лучше FormatEx. Проще говоря, единственный вариант использования:
PHP:
FormatEx(buf,sizeof(buf),"Blabla: %s blabla", str)
(вместо %s может быть любой другой тип, но параметр может быть только один.

а почему один параметр, можно и
FormatEx(buf,sizeof(buf),"Blabla: %s blabla, %s %s", str, str2, str3);
только нельзя использовать buf, т.к. его и форматирует.

Т.е.
FormatEx(buf,sizeof(buf),"Blabla: %s blabla", buf);
ничего не даст
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Re: Connect info v1.3

FrozDark, и правда.. Просто когда смотрел исходники функций, показалось что там используется только третий параметр, а там ведь указатель идет..
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #34
mumuxtarka, PrintToChatAll
 

TWRP

Участник
Сообщения
317
Реакции
44
R1KO, можешь сделать чтобы только для аминов показывало вход и выход, а для игроков ничего.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Connect info v2.1A

только для аминов показывало вход и выход, а для игроков ничего
Пробуй, оптимизировал заодно.
PHP:
new bool:g_bIsAdmin[MAXPLAYERS+1];

public Plugin:myinfo = 
{
	name = "Connect_info",
	author = "R1KO",
	version = "2.1A",
	url = "http://hlmod.ru/"
};

public OnPluginStart() HookEvent("player_disconnect", Event_PlayerDisconnect);

public OnClientPostAdminCheck(iClient)
{
	if (iClient && IsFakeClient(iClient) == false)
	{
		PrintConnect(iClient, true);
		if(GetUserAdmin(iClient) != INVALID_ADMIN_ID) g_bIsAdmin[iClient] = true;
	}
}

public Event_PlayerDisconnect(Handle:hEvent, String:sName[], bool:dontBroadcast)
{
	if (dontBroadcast == false) SetEventBroadcast(hEvent, true);
	if (GetEventBool(hEvent, "bot") == false)
	{
		new iClient = GetClientOfUserId(GetEventInt(hEvent,"userid"));
		if(iClient)
		{
			g_bIsAdmin[iClient] = false;
			PrintConnect(iClient);
		}
	}
}

stock PrintConnect(iClient, bool:IsConnect=false)
{
	decl String:sAuth[32], String:sIp[16];
	GetClientAuthString(iClient, sAuth, 32);
	GetClientIP(iClient, sIp, 16);
	if(IsConnect)
	{
		for(new i=1; i <= MaxClients; i++)
		{
			if(g_bIsAdmin[i]) PrintToChat(i, "\x03• \x01Игрок \x04%N \x01| \x04%s \x01| \x04%s \x01подключился.", iClient, sAuth, sIp);
		}
	}
	else
	{
		for(new i=1; i <= MaxClients; i++)
		{
			if(g_bIsAdmin[i]) PrintToChat(i, "\x03• \x01Игрок \x04%N \x01| \x04%s \x01| \x04%s \x01отключился.", iClient, sAuth, sIp);
		}
	}
}
R1KO, у тебя неточность в коде: момент подключения бота и распознавание админа. В другом плагине может стать ошибкой (багом).
 
  • Мне нравится
Реакции: TWRP

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #39
AlmazON, год назад это давно, я за последние пол года узнал больше чем за всё время до этого.
 
  • Мне нравится
Реакции: TWRP
Сверху Снизу