Hallo habe probleme habe mir von hier ein Gui Login nachgemacht und hat auch prima gefunkt doch jetzt funkt es auf einmal nicht mehr habe nicht wirklich etwas gemacht
und habe es nochmal kontrolliert mit dem hier im forum stimmt alles überein was kann da los sein
mein login funkt nicht mehr ??
- Optiimal
- Geschlossen
- Erledigt
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
-
-
mensch von wo soll man das wissen, posten doch den code -.-
-
Ihr beginnt damit eine normale Struktur aufzubauen, mit allen Daten die ihr braucht
Pawn-Quelltext
1
2
3
4
5
6
7
enum spieler_daten
{
wanted,
skin,
Float:lastx,Float:lasty,Float:lastz,
eingeloggt
}nun möchten wir das ganze auch nutzen können für die Gesamten Spieler , man könnte das natürlich gleich alles mit MAX_PLAYERS hinklatschen aber so
macht ihr alles nur Unordentlicher & unübersichtlicher ( vom Ressourcen verbraucht mal ganz abgesehen )Pawn-Quelltext
1
new Spieler[MAX_PLAYERS][spieler_daten];Wie ihr seht die Variable ,,Spieler´´ mit 200 Slots & 200x den gleichen Inhalt also spieler_daten , warum mache ich das so ?
Nun ja so wird das ganze noch einmal ein Stück besser da man sich keine Zahlen oder extra Variablen merken muss & zudem ist
das ganze Strukturierter aufgebaut.Als nächstes geht ihr erst einmal in die Klasse/Callback ,,OnPlayerDisconnect´´ & löscht die Daten bzw. setzt sie zurück damit nicht Später ein anderer Spieler eure Daten hat,
außerdem Speichern wir alle wichtigen Dinge vorher, wir müssen aber auch abfragen ob der Spieler schon eingeloggt war damit nicht irgendwelche Daten gespeichert werden.Pawn-Quelltext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(fexist(accFormat) && Spieler[playerid][eingeloggt])
{
dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
}
Spieler[playerid][eingeloggt] = 0;
Spieler[playerid][wanted] = 0;
Spieler[playerid][skin] = 0;
Spieler[playerid][lastx] = (0.0);
Spieler[playerid][lasty] = (0.0);
Spieler[playerid][lastz] = (0.0);So fürs erste war es das , nun geht es weiter mit den Dialog ID's , ihr definiert nun oben die Dialog ID's , ihr könnt natürlich auch gleich irgendwelche Zahlen nehmen aber
so verliert man die Übersicht nicht & weiß welchen Dialog man schon belegt hat.Pawn-Quelltext
1
2
#define DIALOG_LOGIN 3
#define DIALOG_REG 4Das tut ihr am besten in den Kopf des Skripts wo die von außerhalb einbezogenen Inc Dateien auch ihren Platz finden.
So also unser Login Dialog hat ID 3 & die 4 bekommt der Dialog für die Registrierung.Fahren wir weiter fort mit dem erkennen des Accounts & abfragen dazu gehen wir in OnPlayerConnect & fragen ab ob die Datei mit unserem Nickname existiert.
Pawn-Quelltext
1
2
3
4
5
6
7
8
9
10
11
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(fexist(accFormat))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
}
else
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
}So nun Suchen wir ,,OnDialogResponse´´ auf Fragen die Dialog Daten ab.
Pawn-Quelltext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(response)
{
switch(dialogid) // dialogid auswählen
{
case DIALOG_LOGIN: // ID Login
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
}
if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
{
Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
Spieler[playerid][skin] = dini_Int(accFormat,"skin");
Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
}
}
case DIALOG_REG: // ID Registrieren
{
if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
}
dini_Create(accFormat);
dini_Set(accFormat,"Passwort",inputtext);
Spieler[playerid][eingeloggt] = 1;
SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
}
}
}
else
{
switch(dialogid)
{
case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
}
}
return 1;
}So wie man sieht Frage ich ab ob der Button 1 genutzt wird ,,if(response)´´ und fahre fort , dann wechsele ich zur richtigen Dialog ID und handle dementsprechend wie in einem normalen Login/Register System, der Unterschied ist dabei das wir nicht abfragen müssen ob der Spieler schon eingeloggt oder Registriert ist , denn der Spieler kann die Dialoge ja nicht Manuell abrufen wann er möchte denn das wird
bei OnPlayerConnect erledigt.Zum Schluss muss ich noch sagen , das ihr die Daten wir Wanted noch im Spieler übernehmen bzw. könnt ihr eure Variable nehmen oder sie setzen wie Beispielsweise mi SetPlayerWantedLevel
oder die Position bei OnPlayerSpawn , hier mal eben gemacht , also wie gesagt einfach selber übernehmen , hier geht es nur um die Verbindung zwischen GUI & Interaktiven Funktionen etc.Pawn-Quelltext
1
2
3
4
5
6
7
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(dini_Isset(accFormat,"lastx"))
{
SetPlayerPos(playerid,Spieler[playerid][lastx],Spieler[playerid][lasty],Spieler[playerid][lastz]);
}Hier habe nichts verändert oder sonstiges!
-
Du musst wenn du deinen login eingegeben hast dann auf Spawn klicken
ist bei mir genau so er spawn nicht automatisch du musst auf Spawn klicken!"
LG ALPHA -
Ne das ist nicht das Problem das weis ich eh aber es ist ein Dialog login system und der dialog fürs einlogen kommt nicht mehr habe nichts verändert oder nsonstiges hat auf einmal nicht mehr gefunkt
-
breadfish.de
Hat das Thema geschlossen.