cerere modificare/extragere din plugin

Categoria unde puteti cere pentru tutoriale.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
@LeX
Membru, skill 0
Membru, skill 0
Posts: 16
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: STEAM_0:1:452037874
Fond eXtream: 0
Location: Brasov
Has thanked: 1 time

16 Nov 2019, 21:46

Salut, extream.
as dori daca se poare din plugin-ul ROM-Protect,

Sa se extraga functia de login ale adminilor, adica incarcarea adminilor prin tastarea comenzi "login parola".
am gasit plugin-uri similare dar nici unul nu indeplineste cerintele dorite de mine mai bine ca aceasta functie.
Nu doresc intreg plugin-ul pentru ca imi da eroare iar plugin asemanator de protectie am deja (poare un pic mai bun)

eu am incercat sa fac acest lucru dar ma depaseste :)), plugin-ul ruleaza corect dar nu merge absolut nimic (mind.exe fatal error :)) ) de aceea am apelat la voi :)
si ar mai fi o chestie dar nu am avut timp sa o testez, daca harta se schimba adminii nu vor mai trebui sa se dea login in consola, sa ramana logati numai atunci cand ies de pe server/client sau executa retry vor trebui sa dea login. (asta e optional)

Multumesc pentru timpul acordat citirii acestul mesaj. best regards.
eXtreamSHOP
User avatar
L E V I N
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2552
Joined: 24 Aug 2011, 11:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Has thanked: 37 times
Been thanked: 387 times
Contact:

17 Nov 2019, 00:22

Code: Select all

#include <amxmodx>

//#define DEBUG
#define LOGIN_TIME 90.0

#define LT 97

#if !defined MAX_PLAYERS
	#define MAX_PLAYERS 32
#endif

#if AMXX_VERSION_NUM < 183	
	#define MAX_NAME_LENGTH 32
	new AdminNum;
#endif

new const AL_FILE[]="admins.ini"

enum _:AdminLogin
{
	LoginPass[32],
	LoginAccess[32],
	LoginFlag[6]
}
new Trie:LoginName
new bool:IsAdmin[MAX_PLAYERS+1],bool:CorrectName[MAX_PLAYERS+1],bool:AdminsReloaded
new LastPass[MAX_PLAYERS+1][32],UserName[MAX_PLAYERS+1][32]

public plugin_precache()	loadAdminLogin();
public plugin_init()
{
	register_plugin("ADMIN LOGIN","1.0","luxor")
	register_clcmd("login", "cmdPass");
	register_concmd("amx_reloadadmins", "reloadLogin");
}

public client_putinserver(id)
{
	if(is_user_bot(id)||is_user_hltv(id))	return
	get_user_name(id,UserName[id],charsmax(UserName[]))
	if ( TrieKeyExists(LoginName, UserName[id]) )	set_task(LOGIN_TIME,"VF",id+LT)
}

public VF(id)
{
	id-=LT
	if ( TrieKeyExists(LoginName, UserName[id]) )
	{
		if(!IsAdmin[id])	server_cmd("kick #%d ^"Nu te-ai logat la timp^"",get_user_userid(id))
		else	remove_task(id)
	}
}

#if AMXX_VERSION_NUM < 183
	public client_disconnect(Index)
#else
	public client_disconnected(Index)
#endif
{
	if ( IsAdmin[Index] )
	{
		IsAdmin[Index] = false;
		remove_user_flags(Index);
	}
	remove_task(Index+LT)
}

public cmdPass(Index)
{
	new Password[32]
	read_argv(1, Password, charsmax(Password));
	remove_quotes(Password);
	if (!Password[0])
	{
		console_print(Index,"Nu ai introdus nici o parola, comanda se scrie in consola astfel : login ^"parola ta^"");
		return PLUGIN_HANDLED;
	}

	loadAdminLogin();
	IsAdmin[Index] = false;
	
	if ( !getAccess(Index, Password, charsmax(Password)) )	return PLUGIN_HANDLED;
	
	if (!IsAdmin[Index])
	{
		LastPass[Index][0] = EOS;
		if (!CorrectName[Index])	console_print(Index, "Nu s-a gasit nici un admin care sa poarte acest nickname");
		else	console_print(Index, "Parola introdusa de tine este incorecta.");
	}
	else
	{
		if ( equal(LastPass[Index], Password) )	console_print(Index, "Admin-ul tau este deja incarcat.");
		else
		{
			console_print(Index, "Admin-ul tau a fost incarcat.");
			IsAdmin[Index] = true;
		}
	}
	
	return PLUGIN_HANDLED;
}
bool:getAccess(Index, UserPass[], len)
{
	if (!(get_user_flags(Index) & ADMIN_RESERVATION))
	{
		console_print(Index, "Nu iti poti incarca adminul daca nu ai slot.");
		return false;
	}
	
#if AMXX_VERSION_NUM < 183
	for (new i = 0; i < AdminNum; ++i)
#else
	for (new i = 0; i < TrieGetSize(LoginName); ++i)
#endif
	{
		if ( TrieKeyExists(LoginName, UserName[Index]) )	CorrectName[Index] = true;
		else
		{
			CorrectName[Index] = false;
			continue;
		}
		
		new TempData[AdminLogin];
		TrieGetArray(LoginName, UserName[Index], TempData, charsmax(TempData));
		if ( equal(TempData[LoginFlag], "f") && CorrectName[Index] )
		{
			if ( equal(TempData[LoginPass], UserPass) || IsAdmin[Index] )
			{
				new Access = read_flags(TempData[LoginAccess]);
				remove_user_flags(Index);
				set_user_flags(Index, Access);
				IsAdmin[Index] = true;
				set_task(0.1, "delayforSavingLastPass", Index, UserPass, len);
			}
			break;
		}
	}
	
	return true;
}
public loadAdminLogin()
{
	new Path[64]
	get_localinfo("amxx_configsdir", Path, charsmax(Path));
	format(Path, charsmax(Path), "%s/%s", Path, AL_FILE);
	
	if ( !file_exists(Path) )
	{
		new FilePointer = fopen(Path, "wt");
		if ( !FilePointer ) 	return;
		
		fputs(FilePointer, "; Aici vor fi inregistrate adminele protejate.^n");
		fputs(FilePointer, "; Exemplu de adaugare admin : ^"nume^" ^"parola^" ^"acces^" ^"f^"^n");
		
		fclose(FilePointer);
	}
	else
	{
		new FilePointer = fopen(Path, "rt");
		if ( !FilePointer ) 	return;
		
		if (LoginName == Invalid_Trie)	LoginName = TrieCreate();
		
		TrieClear(LoginName);
		
		#if AMXX_VERSION_NUM < 183
			AdminNum = 0;
		#endif
		
		new Text[121], Name[MAX_NAME_LENGTH], TempData[AdminLogin];
		while (!feof(FilePointer))
		{
			fgets(FilePointer, Text, charsmax(Text));
			trim(Text);
		
			if ( (Text[0] == ';') || !Text[0] || ((Text[0] == '/') && (Text[1] == '/')) )	continue;
		
			if (parse(Text, Name, charsmax(Name), TempData[LoginPass], charsmax(TempData[LoginPass]), 
							TempData[LoginAccess], charsmax(TempData[LoginAccess]), TempData[LoginFlag], charsmax(TempData[LoginFlag])) != 4)	continue;
			
			TrieSetArray(LoginName, Name, TempData, charsmax(TempData));
		
			#if AMXX_VERSION_NUM < 183
				++AdminNum;
			#endif
		
			#if defined DEBUG
				server_print("Nume : %s - Parola : %s - Acces : %s - Flag : %s", Name, TempData[LoginPass], TempData[LoginAccess], TempData[LoginFlag]);
			#endif
		}
		fclose(FilePointer);
	}
}
public reloadLogin(Index, level, cid) 
{
	AdminsReloaded = true;
	set_task(1.0, "reloadDelay");
}
public client_command(Index)
{
	if (AdminsReloaded)	reloadDelay();
	return PLUGIN_CONTINUE;
}
public reloadDelay()
{
	if (!AdminsReloaded)	return;
	
	new Players[MAX_PLAYERS], PlayersNum;
	get_players(Players, PlayersNum, "ch");
	
	for (new i = 0; i < PlayersNum; ++i)	if ( IsAdmin[Players[i]] )	getAccess(Players[i], LastPass[Players[i]], charsmax(LastPass[]));
	
	AdminsReloaded = false;
}
public delayforSavingLastPass(UserPass[], Index)	copy(LastPass[Index], charsmax(LastPass[]), UserPass);
public client_infochanged(Index)
{
	if ( !is_user_connected(Index) )	return;
	
	new NewName[MAX_NAME_LENGTH]
	get_user_info(Index, "name", NewName, charsmax(NewName));
		
	if (equali(NewName, UserName[Index])||!IsAdmin[Index])	return;
	
	IsAdmin[Index] = false;
	remove_user_flags(Index);
	
	return;
}
Nu fac nimic contra cost! Faceți cerere bine detaliată aici, pe forum. Nu-mi mai dați add pe Steam doar pentru a mă avea în lista de prieteni.
Am cont și activez doar aici! Aveți grijă la cei ce încearcă să mă copieze..Puteți lua legătura cu mine dacă aveți o problemă/nelămurire în acest caz.
În cazul în care utilizați ceva din addonsurile postate de mine aici, e bine să fiți la curent cu modificările aduse unor plugine, aici.
User avatar
@LeX
Membru, skill 0
Membru, skill 0
Posts: 16
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: STEAM_0:1:452037874
Fond eXtream: 0
Location: Brasov
Has thanked: 1 time

17 Nov 2019, 01:08

Multumesc mult, este perfect
cerinta optionala este inca valida
adica daca un admin iese de pe server sa nu ii scoata accesul imediat pentru ca pentru fiecare shimbare de harta adminul va trebui incarcat de fiecare data
gen daca se deconecteaza de pe server sa ii scoata accesul in x secunde (90 de exp) iar daca intra pe server se va anula acel "task" si cand se deconecteaza la fel si tot asa, sa se evite incarcarea adminunui prin parola de prea multe ori.
Si daca se poate tot o functie optionala cei ce intra cu nick-ul din "admins.ini" vor avea un timp cat sa isi incarce admin-ul prin parola in caz contrar vor primi kick dupa x secunde daca nu au introdus parola

Multumesc inca o data L E V I N.

ps. functiile optionale nu sunt 100% necesare, daca cineva doreste sa ma ajute si in aceasta privinta este bine venit.
in orice caz daca nimeni nu va mai posta puteti da T/C cu incredere, multumesc :*
User avatar
L E V I N
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2552
Joined: 24 Aug 2011, 11:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Has thanked: 37 times
Been thanked: 387 times
Contact:

17 Nov 2019, 01:33

păi dacă vrei să nu li se mai reseteze parola, ce rost mai are timpu de logare? alege 1 din 2..
Nu fac nimic contra cost! Faceți cerere bine detaliată aici, pe forum. Nu-mi mai dați add pe Steam doar pentru a mă avea în lista de prieteni.
Am cont și activez doar aici! Aveți grijă la cei ce încearcă să mă copieze..Puteți lua legătura cu mine dacă aveți o problemă/nelămurire în acest caz.
În cazul în care utilizați ceva din addonsurile postate de mine aici, e bine să fiți la curent cu modificările aduse unor plugine, aici.
User avatar
@LeX
Membru, skill 0
Membru, skill 0
Posts: 16
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: STEAM_0:1:452037874
Fond eXtream: 0
Location: Brasov
Has thanked: 1 time

17 Nov 2019, 08:48

Adica da, ai dreptate cu timpul de logare.
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 6 guests