Добавяне на "white list" към Nick Protection.

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Заключена
Потребителски аватар

Автор на темата
iv69
Потребител
Потребител
Мнения: 407
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 114 пъти
Получена благодарност: 11 пъти

Добавяне на "white list" към Nick Protection.

Мнение от iv69 » 08 юли 2019, 12:49

Здравейте,
Ще може ли да се направи промяна към плъгина за резервация на "nick"-а, така, че да се добавя и "бял списък", в който ако искаме, да си добавяме сами всички ония имена, които не искаме да бъдат "резервирани" по никакъв начин от играчите ?
Благодаря.

Код: Избери всички

#include <amxmodx>
#include <cromchat>
#include <nvault>

#define MSG_DELAY 15.0
#define MSG_TASK 300533
#define PLUGIN_VERSION "1.0"

new g_iVault
new const g_szUsers[] = "addons/amxmodx/configs/users.ini";

public plugin_init()
{
	register_plugin("Nick Protection", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXNickProtection", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	register_clcmd("say /nick", "Cmd_Nick")
	register_clcmd("say_team /nick", "Cmd_Nick")
	g_iVault = nvault_open("NickProtection")
	CC_SetPrefix("&x04[Nick Protection]")
}

public plugin_end()
	nvault_close(g_iVault)

public client_authorized(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))
		
	if(!is_valid_steam(szAuth))
		return
		
	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
	{
		if(!equal(szAuth, szData))
			server_cmd("kick #%i ^"This is nick reserve for other SteamID. Plss change nickname!^"", get_user_userid(id))
	}
	else set_task(MSG_DELAY, "Inform_User", id + MSG_TASK)
}

public Inform_User(id)
{
	id -= MSG_TASK
	
	if(is_user_connected(id))
		CC_SendMessage(id, "Type &x03/nick &x01and guarded &x03nickname &x01with your &x03SteamID!")
}

public Cmd_Nick(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))
	
	if(!is_valid_steam(szAuth))
	{
		CC_SendMessage(id, "You must have SteamID so you can use the system!")
		return PLUGIN_HANDLED
	}
	
	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
		CC_SendMessage(id, "This Nick is already protected by Steamid &x04%s", szData)
	else if(nvault_get(g_iVault, szAuth, szData, charsmax(szData)))
		CC_SendMessage(id, "You've already protected a Nick with SteamID: &x03%s", szData)
	else
	{
		nvault_set(g_iVault, szAuth, szName)
		nvault_set(g_iVault, szName, szAuth)
		CC_LogMessage(id, _, "The Nick &x03%s &x01is successfully protected with SteamID &x04%s", szName, szAuth)
		remove_task(id + MSG_TASK)
		
		give_user_flag_b(id);
		server_cmd("amx_reloadadmins");
	}

	return PLUGIN_HANDLED
}

get_user_name_lower(const id, szName[], const iLen)
{
	get_user_name(id, szName, iLen)
	strtolower(szName)
}

bool:is_valid_steam(const szAuth[])
{
	if(!equali(szAuth, "STEAM_", 6) || equal(szAuth, "STEAM_ID_LAN") || equal(szAuth, "STEAM_ID_PENDING"))
		return false
	
	return true
}

public give_user_flag_b(id)
{
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	new szText[192], iLine, iLen, szLineData[2][32]
	while((iLine = read_file(g_szUsers, iLine, szText, charsmax(szText), iLen))) 
	{
		if(!iLen || szText[0] == ';' || szText[0] == '/' && szText[1] == '/') continue;	
		if(parse(szText, szLineData[0], charsmax(szLineData[]), szLineData[1], charsmax(szLineData[])) < 2) continue;		
		if(equal(szName, szLineData[0])) return;
	}
	formatex(szText, charsmax(szText), "^"%s^" ^"^" ^"b^" ^"e^"", szName);
	write_file(g_szUsers, szText);
}
p.s. Не е нужно, когато играч се опита да си резервира такъв ник, да му се "отговаря" в чата, че ника е в белия списък, просто е достатъчно да не може да се резервира ник посочен в този списък, който да се " генерира" автоматично може би в /cstrike/addons/amxmodx/configs ... ?

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5320
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 76 пъти
Получена благодарност: 560 пъти
Години: 21
Контакти:

Добавяне на "white list" към Nick Protection.

Мнение от OciXCrom TM » 08 юли 2019, 14:47

Код: Избери всички

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <nvault>

#define MSG_DELAY 15.0
#define MSG_TASK 300533
#define PLUGIN_VERSION "1.1"

new Trie:g_tWhitelist, g_iVault
new const g_szUsers[] = "addons/amxmodx/configs/users.ini";

public plugin_init()
{
	register_plugin("Nick Protection", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXNickProtection", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)

	register_clcmd("say /nick", "Cmd_Nick")
	register_clcmd("say_team /nick", "Cmd_Nick")

	g_iVault = nvault_open("NickProtection")
	g_tWhitelist = TrieCreate()

	CC_SetPrefix("&x04[Nick Protection]")
	ReadFile()
}

ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/nickprotect_whitelist.ini")

	new iFilePointer = fopen(szFilename, "rt")

	if(iFilePointer)
	{
		new szData[32]

		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)

			switch(szData[0])
			{
				case EOS, ';', '#': continue
				default:
				{
				    strtolower(szData)
				    TrieSetCell(g_tWhitelist, szData, 1)
				}
			}
		}

		fclose(iFilePointer)
	}
}

public plugin_end()
{
	nvault_close(g_iVault)
	TrieDestroy(g_tWhitelist)
}

public client_authorized(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))

	if(!is_valid_steam(szAuth))
		return

	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
	{
		if(!equal(szAuth, szData))
			server_cmd("kick #%i ^"This nick is reserved by another SteamID. Please change your nickname!^"", get_user_userid(id))
	}
	else set_task(MSG_DELAY, "Inform_User", id + MSG_TASK)
}

public Inform_User(id)
{
	id -= MSG_TASK

	if(is_user_connected(id))
		CC_SendMessage(id, "Type &x03/nick &x01to protect your &x03nickname &x01with your &x03SteamID!")
}

public Cmd_Nick(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))

	if(!is_valid_steam(szAuth))
	{
		CC_SendMessage(id, "You must have a SteamID in order to use the system!")
		return PLUGIN_HANDLED
	}

	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
		CC_SendMessage(id, "This nick is already protected by SteamID &x04%s", szData)
	else if(nvault_get(g_iVault, szAuth, szData, charsmax(szData)))
		CC_SendMessage(id, "You've already protected a nick with SteamID: &x03%s", szData)
	else if(TrieKeyExists(g_tWhitelist, szName))
		CC_SendMessage(id, "This nick is in the &x04whitelist &x01and &x03cannot &x01be protected.")
	else
	{
		nvault_set(g_iVault, szAuth, szName)
		nvault_set(g_iVault, szName, szAuth)
		CC_LogMessage(id, _, "The nick &x03%s &x01has been successfully protected with SteamID &x04%s", szName, szAuth)
		remove_task(id + MSG_TASK)

		give_user_flag_b(id);
		server_cmd("amx_reloadadmins");
	}

	return PLUGIN_HANDLED
}

get_user_name_lower(const id, szName[], const iLen)
{
	get_user_name(id, szName, iLen)
	strtolower(szName)
}

bool:is_valid_steam(const szAuth[])
{
	if(!equali(szAuth, "STEAM_", 6) || equal(szAuth, "STEAM_ID_LAN") || equal(szAuth, "STEAM_ID_PENDING"))
		return false

	return true
}

public give_user_flag_b(id)
{
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	new szText[192], iLine, iLen, szLineData[2][32]
	while((iLine = read_file(g_szUsers, iLine, szText, charsmax(szText), iLen)))
	{
		if(!iLen || szText[0] == ';' || szText[0] == '/' && szText[1] == '/') continue;
		if(parse(szText, szLineData[0], charsmax(szLineData[]), szLineData[1], charsmax(szLineData[])) < 2) continue;
		if(equal(szName, szLineData[0])) return;
	}
	formatex(szText, charsmax(szText), "^"%s^" ^"^" ^"b^" ^"e^"", szName);
	write_file(g_szUsers, szText);
}
configs/nickprotect_whitelist.ini - всеки ник на нов ред.

ПС: оправих ти чат съобщенията, понеже се отчаях от английския в тях.

Потребителски аватар

Автор на темата
iv69
Потребител
Потребител
Мнения: 407
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 114 пъти
Получена благодарност: 11 пъти

Добавяне на "white list" към Nick Protection.

Мнение от iv69 » 08 юли 2019, 20:23

OciXCrom написа:
08 юли 2019, 14:47

Код: Избери всички

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <nvault>

#define MSG_DELAY 15.0
#define MSG_TASK 300533
#define PLUGIN_VERSION "1.1"

new Trie:g_tWhitelist, g_iVault
new const g_szUsers[] = "addons/amxmodx/configs/users.ini";

public plugin_init()
{
	register_plugin("Nick Protection", PLUGIN_VERSION, "OciXCrom")
	register_cvar("CRXNickProtection", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)

	register_clcmd("say /nick", "Cmd_Nick")
	register_clcmd("say_team /nick", "Cmd_Nick")

	g_iVault = nvault_open("NickProtection")
	g_tWhitelist = TrieCreate()

	CC_SetPrefix("&x04[Nick Protection]")
	ReadFile()
}

ReadFile()
{
	new szFilename[256]
	get_configsdir(szFilename, charsmax(szFilename))
	add(szFilename, charsmax(szFilename), "/nickprotect_whitelist.ini")

	new iFilePointer = fopen(szFilename, "rt")

	if(iFilePointer)
	{
		new szData[32]

		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)

			switch(szData[0])
			{
				case EOS, ';', '#': continue
				default: TrieSetCell(g_tWhitelist, szData, 1)
			}
		}

		fclose(iFilePointer)
	}
}

public plugin_end()
{
	nvault_close(g_iVault)
	TrieDestroy(g_tWhitelist)
}

public client_authorized(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))

	if(!is_valid_steam(szAuth))
		return

	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
	{
		if(!equal(szAuth, szData))
			server_cmd("kick #%i ^"This nick is reserved by another SteamID. Please change your nickname!^"", get_user_userid(id))
	}
	else set_task(MSG_DELAY, "Inform_User", id + MSG_TASK)
}

public Inform_User(id)
{
	id -= MSG_TASK

	if(is_user_connected(id))
		CC_SendMessage(id, "Type &x03/nick &x01to protect your &x03nickname &x01with your &x03SteamID!")
}

public Cmd_Nick(id)
{
	new szAuth[35]
	get_user_authid(id, szAuth, charsmax(szAuth))

	if(!is_valid_steam(szAuth))
	{
		CC_SendMessage(id, "You must have a SteamID in order to use the system!")
		return PLUGIN_HANDLED
	}

	new szData[35], szName[32]
	get_user_name_lower(id, szName, charsmax(szName))

	if(nvault_get(g_iVault, szName, szData, charsmax(szData)))
		CC_SendMessage(id, "This nick is already protected by SteamID &x04%s", szData)
	else if(nvault_get(g_iVault, szAuth, szData, charsmax(szData)))
		CC_SendMessage(id, "You've already protected a nick with SteamID: &x03%s", szData)
	else if(TrieKeyExists(g_tWhitelist, szName))
		CC_SendMessage(id, "This nick is in the &x04whitelist &x01and &x03cannot &x01be protected.")
	else
	{
		nvault_set(g_iVault, szAuth, szName)
		nvault_set(g_iVault, szName, szAuth)
		CC_LogMessage(id, _, "The nick &x03%s &x01has been successfully protected with SteamID &x04%s", szName, szAuth)
		remove_task(id + MSG_TASK)

		give_user_flag_b(id);
		server_cmd("amx_reloadadmins");
	}

	return PLUGIN_HANDLED
}

get_user_name_lower(const id, szName[], const iLen)
{
	get_user_name(id, szName, iLen)
	strtolower(szName)
}

bool:is_valid_steam(const szAuth[])
{
	if(!equali(szAuth, "STEAM_", 6) || equal(szAuth, "STEAM_ID_LAN") || equal(szAuth, "STEAM_ID_PENDING"))
		return false

	return true
}

public give_user_flag_b(id)
{
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	new szText[192], iLine, iLen, szLineData[2][32]
	while((iLine = read_file(g_szUsers, iLine, szText, charsmax(szText), iLen)))
	{
		if(!iLen || szText[0] == ';' || szText[0] == '/' && szText[1] == '/') continue;
		if(parse(szText, szLineData[0], charsmax(szLineData[]), szLineData[1], charsmax(szLineData[])) < 2) continue;
		if(equal(szName, szLineData[0])) return;
	}
	formatex(szText, charsmax(szText), "^"%s^" ^"^" ^"b^" ^"e^"", szName);
	write_file(g_szUsers, szText);
}
configs/nickprotect_whitelist.ini - всеки ник на нов ред.

ПС: оправих ти чат съобщенията, понеже се отчаях от английския в тях.
Благодаря, ще пробвам , а за помощта за превода - бих те почерпил "истинска" биричка или каквото пиеш, но сме на голямо разстояние :).
Ще пробвам и ще пиша работи ли :beer: .

Добавено преди 26 минути 55 секунди:
Значи, имам питане: "ini"-файла в configs-папката, плъгина ли ще го създаде или трябва аз да го добавя ръчно? Това първо: и друго, ако трябва аз да го добавям nickprotect_whitelist.ini, аз опитах това, но така написан плъгина не блокира резервирането на имената от списъка, нито създава автоматически този nickprotect_whitelist.ini ?

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5320
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 76 пъти
Получена благодарност: 560 пъти
Години: 21
Контакти:

Добавяне на "white list" към Nick Protection.

Мнение от OciXCrom TM » 08 юли 2019, 23:59

Ти трябва ръчно да го създадеш. Дай да видя (снимка) какво точно си написал във файла.

Потребителски аватар

Автор на темата
iv69
Потребител
Потребител
Мнения: 407
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 114 пъти
Получена благодарност: 11 пъти

Добавяне на "white list" към Nick Protection.

Мнение от iv69 » 09 юли 2019, 00:35

OciXCrom написа:
08 юли 2019, 23:59
Ти трябва ръчно да го създадеш. Дай да видя (снимка) какво точно си написал във файла.
Просто тест. Ето файла:
nickprotect_whitelist.ini
(143 Байта) Свален 9 пъти
nickprotect_whitelist.ini
(143 Байта) Свален 9 пъти
Пробвах два пъти, с някое от написаните там имена. Не ми ги блокира(като забранени), а си ги добавя както и преди и във users.ini, така и във NickProtection.vault .

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5320
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 76 пъти
Получена благодарност: 560 пъти
Години: 21
Контакти:

Добавяне на "white list" към Nick Protection.

Мнение от OciXCrom TM » 09 юли 2019, 20:27

Плъгинът блокира ползването на командата /nick за играчи с тези имена. Ти как точно тества дали работи, тоест дали влезна с някое от имената в списъка?

Потребителски аватар

Автор на темата
iv69
Потребител
Потребител
Мнения: 407
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 114 пъти
Получена благодарност: 11 пъти

Добавяне на "white list" към Nick Protection.

Мнение от iv69 » 10 юли 2019, 11:35

OciXCrom написа:
09 юли 2019, 20:27
Плъгинът блокира ползването на командата /nick за играчи с тези имена. Ти как точно тества дали работи, тоест дали влезна с някое от имената в списъка?
Влязох с име от този списък, написах : /nick , и ми резервира ника?! Преди това бях компилирал локално и правилно плъгина, бях изчистил както NickProtection.vault във /cstrike/addons/amxmodx/data/vault , така и всички автоматично добавени от плъгина имена на админи без пароли с флаг "b" във файла users.ini ! След резервирането на ника, първо ми го добави във users.ini , а малко след това и в NickProtection.vault във /cstrike/addons/amxmodx/data/vault . Съжалявам на три пъти пробвах всичко това, и трите пъти ми прие ника.
Чудя се дали е възможно проблема да е от това , че имаме и функция автоматично добавяне на админи с плъгина( за резервиран слот с флага "b" ?

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5320
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 76 пъти
Получена благодарност: 560 пъти
Години: 21
Контакти:

Добавяне на "white list" към Nick Protection.

Мнение от OciXCrom TM » 10 юли 2019, 13:44

Видях къде е грешката. Забравих, че ника го конвертирах да е само със малки букви. Ъпдейтнах кода.

Потребителски аватар

Автор на темата
iv69
Потребител
Потребител
Мнения: 407
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 114 пъти
Получена благодарност: 11 пъти

Добавяне на "white list" към Nick Protection.

Мнение от iv69 » 10 юли 2019, 15:57

OciXCrom написа:
10 юли 2019, 13:44
Видях къде е грешката. Забравих, че ника го конвертирах да е само със малки букви. Ъпдейтнах кода.
Плъгина сега работи перфектно и безотказно! Препоръчвам го на всички, съдържа доста важни неща в себе си и е полезен както за класици, така и за респаун и каквито щете още сервери!

:clap: Кроме !!! :lock:

Заключена

Върни се в “Заявки за плъгини”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 2 госта