Jo das Funktioniert und wie mache ich es jetzt noch das die Coordinaten gespeichert werden und beim login/spawn wider angerufen werden ?
Beiträge von Mr.FR3K3RS
-
-
Hallo Community,
Ich möchte mal gerne wissen wie ich den skin den man gerade trägt speichern und wider laden kann.
Hier sind mal meine stocks :
stock Register(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
SpielerReset(playerid);
dini_Create(Spieler);
dini_Set(Spieler,"Passwort",key);
dini_IntSet(Spieler,"Adminlevel",0);
dini_IntSet(Spieler,"Level",0);
dini_IntSet(Spieler,"Fraktion",0);
dini_IntSet(Spieler,"Team",0);
dini_IntSet(Spieler,"Skin",0);
SendClientMessage(playerid,Blau,"Du hast dich erfolgreich registriert!");
SpawnPlayer(playerid);
return 1;
}stock Login(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(!strcmp(key,dini_Get(Spieler,"Passwort"),false))
{
SendClientMessage(playerid,Blau,"Login erfolgreich!");
SpielerLaden(playerid);
return 1;
}
else
{
SendClientMessage(playerid,Blau,"Das eingebene Passwort ist inkorrekt!");
ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden, gebe\ndein Passwort ein:","Login","Abbrechen");
return 1;
}
}stock SpielerSpeichern(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(dini_Exists(Spieler))
{
dini_IntSet(Spieler,"Adminlevel",sSpieler[playerid][Adminlevel]);
dini_IntSet(Spieler,"Level",sSpieler[playerid][Level]);
dini_IntSet(Spieler,"Fraktion",sSpieler[playerid][Fraktion]);
dini_IntSet(Spieler,"Team",sSpieler[playerid][Team]);
dini_IntSet(Spieler,"Skin",sSpieler[playerid][Skin]);
}
SpawnPlayer(playerid);
return 1;
}stock SpielerLaden(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(dini_Exists(Spieler))
{
SetPlayerScore(playerid,dini_Int(Spieler,"Level"));
sSpieler[playerid][Adminlevel] = dini_Int(Spieler,"Adminlevel");
sSpieler[playerid][Level] = dini_Int(Spieler,"Level");
sSpieler[playerid][Fraktion] = dini_Int(Spieler,"Fraktion");
sSpieler[playerid][Team] = dini_Int(Spieler,"Team");
sSpieler[playerid][Skin] = dini_Int(Spieler,"Skin");
sSpieler[playerid][sLogin] = 1;
SpawnPlayer(playerid);
}
return 1;
} -
Benutzt du vielleicht SA-MP 0.3d R2?
Denn dort ist noch ein Bug vorhanden der genau auf dein Problem deutet.Ja ich benutze R2.
Und hier die DIALOGE
#define REGISTER 1
#define LOGIN 2 -
Sobald ich enter klick.
-
Geht immer noch nicht :/. Server Closed the connection.
-
in wie fern Kick? schließt sich kompletter Server oder steht bei dir, Closed the connection?!
Es steht da Server Closed the connection. -
Ja, ich habe das Problem, das wenn ich mich nach dem Login gleich gekickt werde. Aber ich weis nicht woran das liegen kann.
Könnte mir dabei mal jemand weiter helfen?Hier mal ein paar Zeilen:
public OnPlayerConnect(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(dini_Exists(Spieler))
{
ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_PASSWORD,"Login", "Dein Account wurde gefunden.\nGib bitte dein Passwort ein:", "Login", "Abbrechen");
}
else
{
ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Register", "Gib bitte ein gewünschtes Passwort ein:", "Register", "Abbrechen");
}
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
sSpieler[playerid][sLogin] = 0;
SpielerSpeichern(playerid);
return 1;
}stock Register(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
dini_Create(Spieler);
dini_Set(Spieler,"Passwort",key);
dini_IntSet(Spieler,"Adminlevel",0);
dini_IntSet(Spieler,"Level",0);
dini_IntSet(Spieler,"Fraktion",0);
dini_IntSet(Spieler,"Team",0);
dini_IntSet(Spieler,"Job",0);
SendClientMessage(playerid,Blau,"Du hast dich erfolgreich Registriert");
SpielerReset(playerid);
return 1;
}stock Login(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
if(!strcmp(key,dini_Get(Spieler,"Passwort"),false))
{
SendClientMessage(playerid,Blau,"Login erfolgreich . . . Spielerdaten werden geladen!");
SpielerLaden(playerid);
return 1;
}
else
{
SendClientMessage(playerid,Blau,"Das eingebene Passwort ist inkorrekt!");
ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_PASSWORD,"Login", "Dein Account wurde gefunden.\nGib bitte dein Passwort ein:", "Login", "Abbrechen");
return 1;
}
}stock SpielerSpeichern(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(dini_Exists(Spieler))
{
dini_IntSet(Spieler,"Adminlevel",sSpieler[playerid][Adminlevel]);
dini_IntSet(Spieler,"Level",sSpieler[playerid][Level]);
dini_IntSet(Spieler,"Fraktion",sSpieler[playerid][Fraktion]);
dini_IntSet(Spieler,"Team",sSpieler[playerid][Team]);
dini_IntSet(Spieler,"Job",sSpieler[playerid][Job]);
}
return 1;
}stock SpielerLaden(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(dini_Exists(Spieler))
{
SetPlayerScore(playerid,dini_Int(Spieler,"Level"));
sSpieler[playerid][Adminlevel] = dini_Int(Spieler,"Adminlevel");
sSpieler[playerid][Level] = dini_Int(Spieler,"Level");
sSpieler[playerid][Fraktion] = dini_Int(Spieler,"Fraktion");
sSpieler[playerid][Team] = dini_Int(Spieler,"Team");
sSpieler[playerid][Job] = dini_Int(Spieler,"Job");
sSpieler[playerid][sLogin] = 1;
}
return 1;
}stock SpielerReset(playerid)
{
sSpieler[playerid][Adminlevel] = 0;
sSpieler[playerid][Level] = 0;
sSpieler[playerid][Fraktion] = 0;
sSpieler[playerid][Team] = 0;
sSpieler[playerid][Job] = 0;
return 1;
}public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == LOGIN)
{
if(response == 0)
{
SendClientMessage(playerid,Rot,"Du hast den Authenfizierungs Prozess abgebrochen . . .");
Kick(playerid);
return 1;
}
if(response == 1)
{
Login(playerid,MD5_Hash(inputtext));
return 1;
}
}
if(dialogid == REGISTER)
{
if(response == 0)
{
SendClientMessage(playerid,Blau,"Du hast den Registrierungs Vorgang abgebrochen");
Kick(playerid);
return 1;
}
if(response == 1)
{
if(!strlen(inputtext))
{
SendClientMessage(playerid,Blau,"Bitte gebe ein Passwort ein");
ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Registrieren","Bitte wähle ein Passwort um dir einen Account zu erstellen!","Registrieren","Abbrechen");
return 1;
}
Register(playerid,MD5_Hash(inputtext));
return 1;
}
}
return 1;
} -
Ähm ja habe hier mal ein kleines Job-Sys. gesciptet.
Ja und nun weis ich nicht wie ich das hier um ändern muss:
SetPVarInt(playerid,"Nebenjob",1);Ich arbeite nicht mit PVar sondern mit Dini.
meine stocks sehen so aus:
stock Register(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
dini_Create(Spieler);
dini_Set(Spieler,"Passwort",key);
dini_IntSet(Spieler,"Adminlevel",0);
dini_IntSet(Spieler,"Level",0);
dini_IntSet(Spieler,"Fraktion",0);
dini_IntSet(Spieler,"Team",0);
dini_IntSet(Spieler,"Job",0);
SendClientMessage(playerid,Blau,"Du hast dich erfolgreich Registriert");
SpielerReset(playerid);
return 1;
}stock Login(playerid,key[])
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(!strcmp(key,dini_Get(Spieler,"Passwort"),false))
{
SendClientMessage(playerid,Blau,"Du hast dich erfolgreich eigeloggt.");
SpielerLaden(playerid);
}
else
{
SendClientMessage(playerid,Blau,"Du hast ein Falsches Passwort eingegeben.");
Kick(playerid);
}
return 1;
}stock SpielerSpeichern(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(dini_Exists(Spieler))
{
dini_IntSet(Spieler,"Adminlevel",sSpieler[playerid][Adminlevel]);
dini_IntSet(Spieler,"Level",sSpieler[playerid][Level]);
dini_IntSet(Spieler,"Fraktion",sSpieler[playerid][Fraktion]);
dini_IntSet(Spieler,"Team",sSpieler[playerid][Team]);
dini_IntSet(Spieler,"Job",sSpieler[playerid][Job]);
}
return 1;
}stock SpielerLaden(playerid)
{
new Spieler[64];
new Sname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Sname,sizeof(Sname));
format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
if(dini_Exists(Spieler))
{
SetPlayerScore(playerid,dini_Int(Spieler,"Level"));
sSpieler[playerid][Adminlevel] = dini_Int(Spieler,"Adminlevel");
sSpieler[playerid][Level] = dini_Int(Spieler,"Level");
sSpieler[playerid][Fraktion] = dini_Int(Spieler,"Fraktion");
sSpieler[playerid][Team] = dini_Int(Spieler,"Team");
sSpieler[playerid][Job] = dini_Int(Spieler,"Job");
sSpieler[playerid][sLogin] = 1;
}
return 1;
}stock SpielerReset(playerid)
{
sSpieler[playerid][Adminlevel] = 0;
sSpieler[playerid][Level] = 0;
sSpieler[playerid][Fraktion] = 0;
sSpieler[playerid][Team] = 0;
sSpieler[playerid][Job] = 0;
return 1;
}stock IstSpielerInJob(playerid,jobid)
{
if(sSpieler[playerid][Job] == jobid) return 1;
return 0;
} -
Hallo,
Ich wollte bei diesem befehl mal noch einen text einfügen, das wenn keine admins online sind angezeigt wird: Keine Admins Online
if (strcmp("/admins", cmdtext, true, 10) == 0)
{
new string[64];
new aName[MAX_PLAYER_NAME];
for(new i = 0; i< MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
SendClientMessage(playerid,Weis,"****Admins Online****");
if(sSpieler[playerid][Adminlevel] == 1)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Moderator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] == 2)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Supporter: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] == 3)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Administrator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] == 4)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"ServerOwner: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
}
}
return 1;
} -
Also stimmt es so? Weil bei mir wird beim login das passwort nicht umgewandelt. da muss ich dann immer da gehashte eingeben ?
-
Hallo Leute,
Ich habe hier ein kleines Problem mit MD5.
Und zwar mein eigegebenes Passwort wird beim Rgistrieren verschlüsselt aber beim Einloggen wird es nicht wieder entschlüsselt ?So sieht es bei mir im Script aus:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == LOGIN)
{
if(response == 0)
{
SendClientMessage(playerid,Rot,"Du hast den Authenfizierungs Prozess abgebrochen . . .");
Kick(playerid);
return 1;
}
if(response == 1)
{
Login(playerid,MD5_Hash(inputtext));
return 1;
}
}
if(dialogid == REGISTER)
{
if(response == 0)
{
SendClientMessage(playerid,Blau,"Du hast den Registrierungs Vorgang abgebrochen");
Kick(playerid);
return 1;
}
if(response == 1)
{
if(!strlen(inputtext))
{
SendClientMessage(playerid,Blau,"Bitte gebe ein Passwort ein");
ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte wähle ein Passwort um dir einen Account zu erstellen!","Registrieren","Abbrechen");
return 1;
}
Register(playerid,MD5_Hash(inputtext));
return 1;
}
}
return 1;
} -
Liegt nicht an der Schleife du Troll.
if (strcmp("/admins", cmdtext, true, 10) == 0)
{
new string[64];
new aName[MAX_PLAYER_NAME];
for(new i = 0; i< MAX_PLAYERS; i++)
{
SendClientMessage(playerid,Weis,"****Admins Online****");
if(sSpieler[i][Adminlevel] == 1) {
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Moderator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[i][Adminlevel] == 2)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Supporter: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[i][Adminlevel] == 3)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Administrator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[i][Adminlevel] == 4)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"ServerOwner: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
}
return 1;
}
Wenn ich das so mache steht nur da ****Admins Online**** und das spamt auch nocht den chatt zu ?
Aber wenn ich es so mache else if(sSpieler[playerid][Adminlevel] == 4) steht wenigstens Administrator:... da. -
Hast du das bei jeder Abfrage auch umgeändert?
Wie soll ich das umändern ? -
Das funktioniert nicht da kommt dann IG nur ****Admins Online****
-
Danke benutzername es zeitgt jetzt an das ich Administrator bin, aber es pamt meinen ganzen chatt voll ?
-
Hallo Community,
Ich habe hier mal ein /admins befehl erstellt, aber er funktioniert noch nciht richtig.
So sieht er momentan aus:
if (strcmp("/admins", cmdtext, true, 10) == 0)
{
new string[64];
new aName[MAX_PLAYER_NAME];
for(new i = 0; i< MAX_PLAYERS; i++)
{
SendClientMessage(playerid,Weis,"****Admins Online****");
if(sSpieler[playerid][Adminlevel] >= 1)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Moderator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] >= 2)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Supporter: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] >= 3)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"Administrator: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
else if(sSpieler[playerid][Adminlevel] >= 4)
{
GetPlayerName(i,aName,sizeof(aName));
format(string,sizeof(string),"ServerOwner: %s",aName);
SendClientMessage(playerid,Weinrot,string);
}
}
return 1;
}Mein Problem ist, ich habe mich als Admin Level 3 eigestuf und wenn ich /admins eingebe steht da Moderator und das auch mehrmals hintereinander.
So hier sieht meine Adminabfrage aus:
stock IstSpielerAdmin(playerid,level)
{
if(sSpieler[playerid][Adminlevel] >= level) return 1;
return 0;
} -
Danke für deine Hilfe LeijaT ich werde gleich damit anfangen.
Habe jetzt mal alles angeschaut und mal ausprobiert. Es ist alles sehr cool. Aber meine Frage währe da jetzt noch welches Login/Register sollte ich verwenden?
/EDIT
-
Ich Probiere das mal aus mit dem Anschauen und dann schreiben ohne apzu gucken. Und mit was sollte ich zu erst anfangen ?
Ps.: Es soll ein RL Server werden
-
-
Wie währe es damit: Wie man ein Login/Register System Scriptet?