Hi Leute, ich stehe mal wieder vor einem Problem.. Und zwar habe ich ein GF-Edit auf GUI-Login umgebaut. Das funktioniert auch soweit wunderbar. Nach dem Registrieren speichert er alles wie es soll in die USERNAME.ini. Fast alles.. -.- Was nicht übernommen wird, ist das Passwort.. was den Effekt hat, dass man sich mit jedem beliebigen Passwort einloggen kann. Und das ist ja nicht der Sinn vom Zweck..
Kurz: das Passwort wird nicht in die USERNAME.ini gespeichert - soll es aber!^^
Leider weiß ich nicht, wie ich Pawno sagen kann, dass der Inputtext das Passwort sein soll.. Sonst würde ich den Fehler wahrscheinlich selbst finden.. Umso mehr freue ich mich, wenn jemand den Fehler findet.. Eine kurze Erläuterung dazu wäre auch super
Läuft beides über zwei neue Publics:
public OnPlayerLogin(playerid,password[])
{
new string2[64];
new pname2[MAX_PLAYER_NAME];
new pname3[MAX_PLAYER_NAME];
new string3[128];
GetPlayerName(playerid, pname2, sizeof(pname2));
format(string2, sizeof(string2), "/Accounts/%s.ini", pname2);
new File: UserFile = fopen(string2, io_read);
if ( UserFile )
{
new PassData[256];
new keytmp[256], valtmp[256], val[128];
fread( UserFile , PassData , sizeof( PassData ) );
keytmp = ini_GetKey( PassData );
if( strcmp( keytmp , "Key" , true ) == 0 )
{
valtmp = ini_GetValue( PassData );
strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255);
}
if(strcmp(PlayerInfo[playerid][pPassword],password, true ) == 0 ){
new key[128];
new Data[128];
while(fread(UserFile,Data,sizeof(Data))) {
key = ini_GetKey(Data);
if( strcmp( key , "Admin" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pAdmin] = strval( val ); }
if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); }
if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); }
if( strcmp( key , "Warns" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pWarns] = strval( val ); }
if( strcmp( key , "SkillPoints" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pSkillPoints] = strval( val ); }
}
fclose(UserFile);
gPlayerLogged[playerid] = 1;
gPlayerAccount[playerid] = 1;
GetPlayerName(playerid, pname3, sizeof(pname3));
SendClientMessage(playerid, COLOR_WHITE, "Erfolgreich eingeloggt.");
format(string3, sizeof(string3), "Willkommen %s, du bist als Admin Level %d eingeloggt!", pname3, PlayerInfo[playerid][pAdmin]);
SendClientMessage(playerid, COLOR_WHITE,string3);
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,100);
SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,100);
}
else {
SendClientMessage(playerid, COLOR_GREY, " Falsches Passwort");
fclose(UserFile);
}
}
return 1;
}
public OnPlayerRegister(playerid, password[])
{
new string[64];
new playername[MAX_PLAYER_NAME];
if(IsPlayerConnected(playerid))
{
strmid(PlayerInfo[playerid][pPassword], password, 0, strlen(password), 255);
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "/Accounts/%s.ini", playername);
new File:hFile;
hFile = fopen(string, io_append);
new var[32];
format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
format(var, 32, "Admin=%d\n",PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
format(var, 32, "Warns=%d\n",PlayerInfo[playerid][pWarns]);fwrite(hFile, var);
format(var, 32, "SkillPoints=%d\n",PlayerInfo[playerid][pSkillPoints]);fwrite(hFile, var);
fclose(hFile);
SendClientMessage(playerid, COLOR_WHITE, "Erfolgreich registriert!");
OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]);
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Server Regeln:","1. Beleidigen ist Verboten!\n2. Bugusing ist Verboten!\n3. Cheaten ist Verboten!\n4. Serverwerbung ist Verboten\n\n\nJedlicher Missbrauch der Regeln wird mit\nKick/Warn/Ban bestraft!","Akzeptieren","Ablehnen");
}
return 1;
}
OnDialogResponse:
if(response)
{
switch(dialogid)
{
case DIALOG_LOG:
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_LOG,1,"*** Login","Gib dein Passwort ein.","Weiter","Abbrechen");
return SendClientMessage(playerid,COLOR_LIGHTRED,"Es wurde kein Passwort eingegeben!");
}
if(strlen(inputtext))
{
new tmppass[64];
strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
Encrypt(tmppass);
OnPlayerLogin(playerid,tmppass);
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOG,1,"*** Login","Gib dein Passwort ein.","Weiter","Abbrechen");
SendClientMessage(playerid,COLOR_LIGHTRED,"Das Passwort war falsch!");
}
}
case DIALOG_REG:
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"*** Registrieren","Wähle ein Passwort.","Weiter","Abbrechen");
return SendClientMessage(playerid,COLOR_LIGHTRED,"Das Passwort ist zu kurz!");
}
new tmppass[64];
strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
Encrypt(tmppass);
OnPlayerRegister(playerid,tmppass);
}
}
}
else
{
switch(dialogid)
{
case DIALOG_LOG:ShowPlayerDialog(playerid,DIALOG_LOG,1,"*** Login","Gib dein Passwort ein.","Weiter","Abbrechen");
case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"*** Registrieren","Wähle ein Passwort.","Weiter","Abbrechen");
}
}
Und zu allerlezt - Encrypt:
public Encrypt(string[])
{
for(new x=0; x < strlen(string); x++)
{
string[x] += (3^x) * (x % 15);
if(string[x] > (0xff))
{
string[x] -= 256;
}
}
return 1;
}
Besten Gruß, Jerome
Edit: Hat echt keiner eine Idee??
Kann mir vill jemand erklären wie ich den Textinput des Dialogs auslesen und verwenden kann? Vermute das es daran liegt..