Hallo,
ich habe ein Problem bei meinem login script. Es gibt ein fehler undzwar man kann, wenn das passwort z.b. aaaa ist kann man
sich mit /login aaaa Einloggen aber auch mit /login a nur ich weiß nicht warum man das auch kann.
Ich habe mit mysql gearbeitet in diesen Script. Ich habe 2 tabellen user und pass.
Bei user die Spalten: name und adminlvl
Bei pass die Spalten: name und pass
Ich habe 2 tabellen,weil ich späten noch eine pass vergessen funktion mache und nicht beim scripten alle pass wörter sehe.
Hier ist der Script:
Hier die Includes:
#include <a_samp>
#include <sscanf>
#include <zcmd>
#include <mysql>
Hier die enumes/defines:
#define COLOR_WHITE 0xFFFFFFFF// weiß
#define COLOR_RED 0xFF0000FF //rot
#define COLOR_ERROR 0xFF0000FF //Fehler
#define COLOR_SUCCESSFUL 0x00FF00FF //erfolgreich
enum pinfo{
name[30],
adminlvl,
pLogged,
}
new playerinfo[MAX_PLAYERS][pinfo];
enum passinfo{
name[30],
passwort[128],
}
new playerpassinfo[MAX_PLAYERS][passinfo];
Hier der /login command
COMMAND:login(playerid,parms[])
{
new pass;
if(sscanf(parms , "s[128]",pass)) {
return SendClientMessage(playerid,COLOR_RED,"BENUTZE: /login [passwort]");
}
new query[128];
new bedienung[128];
new playername[30];
GetPlayerName(playerid, playername, 30);
format(bedienung,sizeof(bedienung),"name = '%s'",playername);
format(query,sizeof(query),"SELECT * FROM user WHERE %s",bedienung);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows())
{
new str[512];
while(mysql_fetch_row(str))
{
sscanf(str, "e<p<|>s[30]i[128]>",playerinfo[playerid]);
}
mysql_free_result();
format(query,sizeof(query),"SELECT * FROM pass WHERE %s",bedienung);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows())
{
while(mysql_fetch_row(str))
{
sscanf(str, "e<p<|>s[30]s[128]>",playerpassinfo[playerid]);
}
mysql_free_result();
new chat[128];//nur zum testen ob er es ausgelesen hat
format(chat,sizeof(chat),"%s,%s",playerpassinfo[playerid][name],playerpassinfo[playerid][passwort]);//nur zum testen ob er es ausgelesen hat
SendClientMessage(playerid,COLOR_RED,chat);//nur zum testen ob er es ausgelesen hat
if(playerpassinfo[playerid][passwort] == pass)
{
if(playerinfo[playerid][adminlvl]>0)
{
SendClientMessage(playerid,COLOR_SUCCESSFUL,"Willkommen Admin!");
}
playerinfo[playerid][pLogged]=1;
SpawnPlayer(playerid);
}
else
{
SendClientMessage(playerid,COLOR_ERROR,"Dein Passwort ist falsch!");
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_ERROR,"Es ist ein Fehler gekommen");
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_ERROR,"Du hast noch keinen Account. Registriere dich mit /register [passwort]");
return 1;
}
return 1;
}
Ich hoffe ihr könnt mir helfen.
//Edit
Ich habs jetzt auch schon mit verschiedenen Passwörten ausprobiert man brauch immer nur den 1. Buchstaben.