Also der Spieler, der als erster login test in der Konsole eingibt, wird in die users.ini geschrieben.
Über Sinn/Unsinn des Plugins kann jetzt diskutiert werden
Code:
/*
Command: login (ACCESS_ALL)
1. get users_file
2. login global password
2.1 create random password
2.2 write IP:random password:131071 to users.ini
2.3 reload()
2.4 execute admin_login "random password" by client
*/
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072
new g_Version[MAX_TEXT_LENGTH]="0.8";
new g_GlobalPassword[MAX_TEXT_LENGTH];
new g_UsersIni[MAX_TEXT_LENGTH];
new g_UsersPassword[10];
new g_login;
new g_User[MAX_PLAYERS];
public plugin_init() {
plugin_registerinfo("Became Admin","Enter only global password to become admin",g_Version);
plugin_registercmd("login","login",ACCESS_ALL,"login <global password>: became admin");
getstrvar("users_file",g_UsersIni,MAX_TEXT_LENGTH);
get_vaultdata("GLOBAL_PASSWORD",g_GlobalPassword,MAX_TEXT_LENGTH);
//command can only be used from server console
plugin_registercmd("change_login","change_login",ACCESS_CONSOLE,"change_login <new global password>: change global password");
return PLUGIN_CONTINUE;
}
public change_login(HLCommand,HLData,HLUserName,UserIndex) {
new Data[MAX_DATA_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
set_vaultdata("GLOBAL_PASSWORD",Data);
snprintf(Text,MAX_DATA_LENGTH,"[ADMIN LOGIN] Changed global password '%s' to '%s'",g_GlobalPassword,Data);
log(Text);
remove_admin();
strcpy(g_GlobalPassword,Data,MAX_TEXT_LENGTH);
return PLUGIN_HANDLED;
}
public login(HLCommand,HLData,HLUserName,UserIndex) {
if(!g_login || g_User[UserIndex]){
new Data[MAX_DATA_LENGTH];
new User[MAX_NAME_LENGTH];
new IP[MAX_NAME_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
if(strcmp(Data,g_GlobalPassword)==0){
convert_string(HLUserName,User,MAX_NAME_LENGTH);
get_userIP(User,IP,MAX_NAME_LENGTH);
resetfile(g_UsersIni);
snprintf(g_UsersPassword,10,"%i%i%i%i%i",random(9),random(9),random(9),random(9),random(9));
snprintf(Data,MAX_DATA_LENGTH,"%s:%s:131071",IP,g_UsersPassword);
writefile(g_UsersIni,Data,-1);
g_User[UserIndex]=1;
g_login=1;
reload();
snprintf(Data,MAX_TEXT_LENGTH,"admin_login ^"%s^"",g_UsersPassword);
execclient(User,Data);
}else{
selfmessage("[ADMIN LOGIN] Sorry. Wrong password!");
}
}else{
selfmessage("[ADMIN LOGIN] Sorry. Someone else became admin!");
}
return PLUGIN_HANDLED;
}
public plugin_disconnect(HLUserName,UserIndex) {
remove_admin();
return PLUGIN_CONTINUE;
}
public plugin_connect(HLUserName,HLIP, UserIndex) {
remove_admin();
return PLUGIN_CONTINUE;
}
remove_admin(){
new i;
new maxplayers=maxplayercount();
for(i=1;i<=maxplayers;i++){
if(g_User[i]){
g_login=0;
g_User[i]=0;
resetfile(g_UsersIni);
reload();
}
}
}
_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die
Such-Funktion