#include <a_samp>
#define green 0x21DD00FF
#define Spieler "/Spieler/%s.ini"
#define Verzögerung 1
enum aInfo
{
aPassword[128],
aLogged,
aGeld,
pLevel
};
new AccountInfo[MAX_PLAYERS][aInfo];
new register[MAX_PLAYERS];
new login[MAX_PLAYERS];
forward ScoreUpdate();
forward LogIn(playerid);
forward OnPlayerUpdate(playerid);
forward timer(playerid);
public OnFilterScriptInit()
{
SetTimer("timer",100,1);
return 1;
}
public OnPlayerConnect(playerid)
{
AccountInfo[playerid][aLogged] = 0;
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
new string[128];
format(string, sizeof(string), Spieler, name);
if (AccountInfo[playerid][aLogged] == 0)
{
if (!fexist(string))
{
new kayitmsg[256];
format(kayitmsg,256,"Willkommen\n\n%s bitte erstelle einen neuen Account\n\nNeues Passwort eingeben:",name);
ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Registrieren",kayitmsg,"Registrieren"," Abbrechen");
register[playerid] = 1;
login[playerid] = 0;
}
else if (fexist(string))
{
new girismsg[256];
format(girismsg,256,"Willkommen\n\nBenutzername: %s\n\nGeben bitte das Passwort ein:",name);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Anmeldung",girismsg,"Anmeldung","Abbrechen");
register[playerid] = 0;
login[playerid] = 1;
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
OnPlayerUpdate(playerid);
AccountInfo[playerid][aLogged] = 0;
register[playerid] = 0;
login[playerid] = 0;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if (response == 1)
{
if(dialogid == 0)
{
Encrypt(inputtext);
new player[MAX_PLAYER_NAME];
GetPlayerName(playerid, player, 50);
new string3[32];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), Spieler, playername3);
new ip[20];
GetPlayerIp(playerid,ip,sizeof(ip));
new File: hFile = fopen(string3, io_write);
if (hFile)
{
strmid(AccountInfo[playerid][aPassword], inputtext, 0, strlen(inputtext), 255);
new var[128];
format(var, 128, "Password=%s\n", AccountInfo[playerid][aPassword]);fwrite(hFile, var);
format(var, 128, "IP=%s\n",ip);fwrite(hFile, var);
AccountInfo[playerid][aGeld] = GetPlayerMoney(playerid);
format(var, 128, "Geld=%d\n",AccountInfo[playerid][aGeld]);fwrite(hFile, var);
AccountInfo[playerid][pLevel] = GetPlayerScore(playerid);
format(var, 128, "Level=%d\n",AccountInfo[playerid][pLevel]);fwrite(hFile, var);
fclose(hFile);
printf("%s is signed up.",playername3);
SendClientMessage(playerid, green/*deine farbe*/, "Text nach der erfolgreichen Registrierung -|");
new girismsg[256];
format(girismsg,256,"Willkommen\n\nBenutzername: %s\n\nGeben Sie das Passwort an:",playername3);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Anmeldung",girismsg,"Anmeldung","Abbrechen");
register[playerid] = 0;
login[playerid] = 1;
}
}
if(dialogid == 1)
{
Encrypt(inputtext);
new string2[128];
new playername2[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername2, sizeof(playername2));
format(string2, sizeof(string2), Spieler, playername2);
new File: UserFile = fopen(string2, io_read);
if ( UserFile )
{
new PassData[256];
new keytmp[256], valtmp[256];
fread( UserFile , PassData , sizeof( PassData ) );
keytmp = ini_GetKey( PassData );
if( strcmp( keytmp , "Password" , true ) == 0 )
{
valtmp = ini_GetValue( PassData );
strmid(AccountInfo[playerid][aPassword], valtmp, 0, strlen(valtmp)-1, 255);
}
if(strcmp(AccountInfo[playerid][aPassword],inputtext, true ) == 0 )
{
for(new p = 0; p < strlen(AccountInfo[playerid][aPassword]); p++)
{
inputtext[p] = '?';
}
SetTimerEx("LogIn", Verzögerung*1000, 0, "d", playerid);
printf("%s is logged in.",playername2);
new key[256];
new Data[256];
while ( fread( UserFile , Data , sizeof( Data ) ) )
{
key = ini_GetKey( Data );
}
fclose(UserFile);
}
else
{
new girismsg[256];
printf("%s falsches Passwort wurde verwendet.",playername2);
format(girismsg,256,"FALSCHES PASSWORT\n\nGeben Sie das Passwort an:");
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Anmeldung",girismsg,"Anmeldung","Abbrechen");
login[playerid] = 1;
register[playerid] = 0;
fclose(UserFile);
return 1;
}
}
}
if(dialogid == 2)
{
Encrypt(inputtext);
new string2[128];
new playername2[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername2, sizeof(playername2));
format(string2, sizeof(string2), Spieler, playername2);
new File: UserFile = fopen(string2, io_read);
if ( UserFile )
{
new PassData[256];
new keytmp[256], valtmp[256];
fread( UserFile , PassData , sizeof( PassData ) );
keytmp = ini_GetKey( PassData );
if( strcmp( keytmp , "Password" , true ) == 0 )
{
valtmp = ini_GetValue( PassData );
strmid(AccountInfo[playerid][aPassword], valtmp, 0, strlen(valtmp)-1, 255);
}
if(strcmp(AccountInfo[playerid][aPassword],inputtext, true ) == 0 )
{
for(new p = 0; p < strlen(AccountInfo[playerid][aPassword]); p++)
{
inputtext[p] = '?';
}
SetTimerEx("LogIn", Verzögerung*1000, 0, "d", playerid);
printf("%s is logged in.",playername2);
new key[256] ;
new Data[256];
while ( fread( UserFile , Data , sizeof( Data ) ) )
{
key = ini_GetKey( Data );
}
fclose(UserFile);
}
else
{
new girismsg[256];
printf("%s falsches Passwort wurde verwendet .",playername2);
format(girismsg,256,"FALSCHES PASSWORT\n\nGeben Sie das Passwort an:");
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Anmeldung",girismsg,"Anmeldung","Abbrechen");
login[playerid] = 1;
register[playerid] = 0;
fclose(UserFile);
return 1;
}
}
}
}
else return Kick(playerid);
return 0;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
stock ini_GetKey( line[] )
{
new keyRes[256];
keyRes[0] = 0;
if ( strfind( line , "=" , true ) == -1 ) return keyRes;
strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
return keyRes;
}
stock ini_GetValue( line[] )
{
new valRes[256];
valRes[0]=0;
if ( strfind( line , "=" , true ) == -1 ) return valRes;
strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
return valRes;
}
public LogIn(playerid)
{
AccountInfo[playerid][aLogged] = 1;
new geld = AccountInfo[playerid][aGeld];
new level = AccountInfo[playerid][pLevel];
GivePlayerMoney(playerid, geld);
SetPlayerScore (playerid, level);
register[playerid] = 0;
login[playerid] = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerConnected(playerid))
{
if(AccountInfo[playerid][aLogged] == 1)
{
new string3[128];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), Spieler, playername3);
new ip[20];
GetPlayerIp(playerid,ip,sizeof(ip));
new File: hFile = fopen(string3, io_write);
if (hFile)
{
new var[128];
format(var, 128, "Password=%s\n", AccountInfo[playerid][aPassword]);fwrite(hFile, var);
format(var, 128, "IP=%s\n",ip);fwrite(hFile, var);
AccountInfo[playerid][aGeld] = GetPlayerMoney(playerid);
format(var, 128, "Geld=%d\n",AccountInfo[playerid][aGeld]);fwrite(hFile, var);
AccountInfo[playerid][pLevel] = GetPlayerScore(playerid);
format(var, 128, "Level=%d\n",AccountInfo[playerid][pLevel]);fwrite(hFile, var);
fclose(hFile);
}
}
}
return 1;
}
Encrypt(string[])
{
for(new x=0; x < strlen(string); x++)
{
string[x] += (3^x) * (x % 15);
if(string[x] > (0xff))
{
string[x] -= 256;
}
}
}
public ScoreUpdate()
{
new LevScore;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
LevScore = AccountInfo[i][pLevel];
SetPlayerScore(i, LevScore);
}
}
return 1;
}
public timer(playerid)
{
ScoreUpdate();
return 1;
}