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: 24
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: ALeX-RsX
Fond eXtream: 0
Location: Brasov
Has thanked: 2 times
Been 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.
RoyalServer 2
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 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;
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
@LeX
Membru, skill 0
Membru, skill 0
Posts: 24
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: ALeX-RsX
Fond eXtream: 0
Location: Brasov
Has thanked: 2 times
Been 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
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 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..
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
@LeX
Membru, skill 0
Membru, skill 0
Posts: 24
Joined: 09 Feb 2015, 19:28
Detinator Steam: Da
SteamID: ALeX-RsX
Fond eXtream: 0
Location: Brasov
Has thanked: 2 times
Been 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: Yandex [Bot] and 1 guest