PWN
Neu! Login/Register System machen
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
ok habs thx
-
weiß denn niemand wieso man mit jedem passwort reinkommt? oda besser wie man das ändert das man nur mit dem eigentlichen passwort reinkommt?!
-
In die pwn.
-
sry hab mich vllt etwas falsch ausgedrückt.
ich meine das man sich mit jedem passwort einloggen kann. diesen fehler will ich beseitigen! -
Hab schon viel ausprobiert. Aber entweder stimmt garkein PW oder es gehen alle -.-*
Habs jetzt hinbekommen, das wenn mein PW 123 ist, das wenn man ein falsches PW eingibt, dann die Meldung kommt. Ist auch richtig. Aber wenn ich 1234 angebe, komme ich trotzdem rein. Hoffe ihr versteht es^^
Oh man, habs hinbekommen
Na toll. Alles funzt. Auch nach rcon gmx. Aber wenn ich die konsole schließe und wieder öffne, kann man wieder mit jedem Passwort rein
__________________________________________________________________________________________________________________________________________________________________
So jetzt funzt alles, mit kleiner Hilfe von 8d.Bei den Defines:
#define Weiß 0xFFFFFFAA
#define Hellblau 0x33CCFFAA
#define rot 0xAA3333AA
Bei den Forwards:
forward OnPlayerUpdate(playerid);
forward Encrypt(string[]);
forward Einloggen(playerid,password[]);
Bei den News:
new PlayerInfo[MAX_PLAYERS][pInfo];
new gPlayerLogged[MAX_PLAYERS];
new gPlayerAccount[MAX_PLAYERS];enum pInfo
{
pPassword[128],
pAdmin,
pKills,
pDeaths,
pCash,
};OnPlayerConnect:
public OnPlayerConnect(playerid)
{
new Spieler[MAX_PLAYER_NAME];
new Text[128];
GetPlayerName(playerid, Spieler, sizeof(Spieler));
format(Text, sizeof(Text), "%s.cer", Spieler);
if(fexist(Text))
{
gPlayerAccount[playerid] = 1;
SendClientMessage(playerid, COLOR_YELLOW, "Du bist bereits registriert, benutze /login [password]");
return 1;
}
else
{
gPlayerAccount[playerid] = 0;
SendClientMessage(playerid, COLOR_YELLOW, "Du bist noch nicht registriert, benutze /register [password]");
}
return 1;
}OnPlayerDisconnect:
public OnPlayerDisconnect(playerid, reason)
{
OnPlayerUpdate(playerid);
gPlayerLogged[playerid] = 0;
return 1;
}OnPlayerDeath:
public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo[playerid][pDeaths] += 1;
GivePlayerMoney(killerid,300);
new score = GetPlayerScore(playerid);
SetPlayerScore(killerid, score+1);
PlayerInfo[killerid][pKills] +=1;
return 1;
}OnPlayerCommandText:
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128];
new idx;
cmd = strtok(cmdtext, idx);
new tmp[128];
new playername[MAX_PLAYER_NAME];
if (strcmp(cmd, "/einloggen", true) ==0 )
{
if(IsPlayerConnected(playerid))
{
new pass[64];
if(gPlayerLogged[playerid] == 1)
{
SendClientMessage(playerid, rot, "Du bist bereits eingeloggt!");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, Grau, "Benutze: /login [password]");
return 1;
}
strmid(pass, tmp, 0, strlen(cmdtext), 255);
Encrypt(pass);
Einloggen(playerid,pass);
}
return 1;
}
if (strcmp(cmd, "/erstellen", true)==0)
{
new string[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, Grau, "Benutze: /erstellen [Passwort]");
return 1;
}
if (gPlayerAccount[playerid] == 1)
{
SendClientMessage(playerid, rot, "Der Account ist schon registriert!");
return 1;
}strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255);
Encrypt(PlayerInfo[playerid][pPassword]);
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "/Spieler/%s.ini", playername);
new File: file = fopen(string, io_read);
if (file)
{
SendClientMessage(playerid, rot, "Der Account ist schon registriert!");
fclose(file);
return 1;
}
new File:hFile;
hFile = fopen(string, io_append);
new var[32];//
format(var, 32, "Passwort=%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
format(var, 32, "Morde=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Tode=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
format(var, 32, "Geld=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
fclose(hFile);
Einloggen(playerid,PlayerInfo[playerid][pPassword]);
return 1;
}
return 0;
}Einloggen:
public Einloggen(playerid,password[])
{
new name2[MAX_PLAYER_NAME];
new string2[64];
GetPlayerName(playerid, name2, sizeof(name2));
format(string2, sizeof(string2), "/Spieler/%s.ini", name2);
new File: UserFile = fopen(string2, io_read);
if (UserFile)
{
new PassData[256];
new valtmp[256], keytmp[256];
fread( UserFile , PassData , sizeof( PassData ) );
keytmp = ini_GetKey( PassData );
if( strcmp( keytmp , "Passwort" , 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[ 256 ],val[ 256 ];
new Data[ 256 ];
while ( fread( UserFile , Data , sizeof( Data ) ) )
{
key = ini_GetKey( Data );
if( strcmp( key , "Adminlevel" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pAdmin] = strval( val ); }
if( strcmp( key , "Morde" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); }
if( strcmp( key , "Tode" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); }
if( strcmp( key , "Geld" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); }
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
}
fclose(UserFile);
gPlayerLogged[playerid] = 1;
gPlayerAccount[playerid] = 1;
GetPlayerName(playerid, name2, sizeof(name2));
format(string2, sizeof(string2), "Willkommen %s, du hast dich erfolgreich eingeloggt!", name2);
SendClientMessage(playerid, Weiß,string2);
SpawnPlayer(playerid);
}
else
{
SendClientMessage(playerid, rot, "Das Passwort ist falsch!");
fclose(UserFile);
}
}
return 1;
}OnPlayerUpdate:
public OnPlayerUpdate(playerid)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid])
{
new string3[32];
new pname3[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname3, sizeof(pname3));
format(string3, sizeof(string3), "/Spieler/%s.ini", pname3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
new var[32];
format(var, 32, "Passwort=%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
format(var, 32, "Adminlevel=%d\n", PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
format(var, 32, "Morde=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Tode=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
format(var, 32, "Geld=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
fclose(hFile);
}
}
}
return 1;
}Die Stocks:
stock ini_GetKey( line[] )
{
new keyRes[128];
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[128];
valRes[0]=0;
if ( strfind( line , "=" , true ) == -1 ) return valRes;
strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
return valRes;
}strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}Encrypt:
public Encrypt(string[])
{
for(new x=0; x < strlen(string); x++)
{
string[x] += (3^x) * (x % 15);
if(string[x] > (0xff))
{
string[x] -= 64;
}
}
return 1;
}So, das wars.
-
gZ @ Jake
Naja das tutorial suckt so richtig 0/10
Funzt nix, kein Support, naja... zum glück nicht meine sache =)
finde es gut von dir, dass du deine Lösung hier postest =) Endlich ein vernünftiger Post in diesem Thema
8D.
-
Versteht man gut 9,5/10
-
.... kein Support,....Wie soll ich bitte Support geben wenn ich selbst ka von dem Passwort Ding habe o.O?
-
cool danke jake!
hm.. new problem... immer nachdem registrieren stürzt das game immer ab !
-
Wie soll ich bitte Support geben wenn ich selbst ka von dem Passwort Ding habe o.O?
Du meintest doch du hast es nicht ausm GF? Also hast es selbst geschrieben? Wenn ja müsstest dich doch damit auskennen
-
Unter anderem
-
Eine Frage, wie schreibt man in den .inis alles untereinander? Wäre ein bisschen ordentlicher
-
\n nach jedem Eintrag
EDIT: Hui mein 1.000 Beitrag in diesem Forum
-
Danke, aber bei mir ist es dein ca 870.er^^
Edit: Das habe ich da schon stehen, funzt also nicht
-
Nope mit Smalltalk nicht
Beweis: http://forum.sa-mp.de/wbb/inde…earchID=166003&highlight=
@Topic
Hm bei ner .cer Datei geht es aber -.-
-
Möchte es aber in .inis haben
-
-
Warum speicherst du alle Daten unter OnPlayerUpdate(playerid) ?
Wieso checkst du in OnPlayerUpdate(playerid) ob der Spieler connectet ist?
Weiterhin checkst du auch bei /login ob der Spieler connectet ist oder nicht,wieso aber bei /register nicht?Mehr sinnloses Zeug aufzählen mach ich,wenn mir diese beantwortet wurden :].
Nein,so gehts nicht.Da ist auch ein Fehler drin.
new sendername = GetPlayerName(playerid,sendername,sizeof(sendername)); //<- 100% funktioniert das nicht
Schon wieder auch diese genial IsPlayerConnected() Abfrage .
*Push*
Würde schon gern mal antworten haben :0! -
xD wieso denn nicht? Kann man ja auch rausnehmen, is sowieso Bughaft also kann ich das Tut sowieso löschen ~.~, Jake´s Version geht^^