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.
cerere modificare/extragere din plugin
Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com
- levin
- 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:
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)
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)
- @LeX
- 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
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
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
- levin
- 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:
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)
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)