Nach jedem Login muss ich mich neu registrieren, aber warum ?

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
  • Hallöchen,
    ich habe da ein kleines Problem wie ihr der Überschrift schon entnehmen könnt.
    Es geht darum, sobald ich mich einlogge muss ich mich neu registrieren ..


    Ich glaube es hat mit folgendem zu tun.



    Function OnPlayerLogin(playerid,password[])
    {
    new string2[128];
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
    new PassData[256];
    new keytmp[256], valtmp[256];
    fread( UserFile , PassData , sizeof( PassData ) );
    keytmp = dini_Get(string2, "Key");
    if( strcmp( keytmp , "Key" , true ) == 0 )
    {
    valtmp = ini_GetValue( PassData );
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    }
    if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
    {
    new key[ 256 ];
    new Data[ 256 ];
    while ( fread( UserFile , Data , sizeof( Data ) ) )
    {
    key = ini_GetKey( Data ); // Genau diese Zeile mein Ich
    dini_IntSet(Data, "Level", PlayerInfo[playerid][pLevel]);
    dini_IntSet(Data, "AdminLevel", PlayerInfo[playerid][pAdmin]);
    **** und so weiter ***



    Kann es and dieser Zeile Liegen ?


    Mfg Saphire

  • Es geht darum, sobald ich mich einlogge muss ich mich neu registrieren ..


    Wie meinst du das?
    Du loggst dich ein im Login Dialog, und danach kommt der Dialog zum registrieren? Oder wie?


    Außerdem hast du da bei OnPlayerLogin immer noch die zwei Systeme durcheinander.
    Hier man den Teil verbessert, den du gepostet hast (so wie es aussieht willst du ja dini verwenden):
    Function OnPlayerLogin(playerid,password[])
    {
    new string2[128];
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
    new PassData[256];
    new keytmp[256], valtmp[256];
    valtmp = dini_Get(string2, "Key");
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
    {
    PlayerInfo[playerid][pLevel] = dini_Int(string2, "Level");
    PlayerInfo[playerid][pAdmin] = dini_Int(string2, "AdminLevel");
    //usw...

  • Jeffry:


    Es geht darum das wenn ich mich einlogge und der Account bereits existiert, ich mich dennoch registriern muss. Nach dem Tutorial kann ich spielen aber wenn ich einen Relogg mache muss ich mich wieder Registrieren.


    Ja ich will Dini benutzen.


    oke danke dir


    #edit:
    Ehm ich bekomme Errors und warnings.
    Du hast mir das vorhin anders gezeigt und jetzt
    "PlayerInfo[playerid][pLevel] = dini_Int(string2, "Level");"


    Ehm Errors und warnings :

    Spoiler anzeigen


    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17225) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17295) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17296) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17297) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17301) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17302) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17305) : warning 213: tag mismatch
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17331) : error 017: undefined symbol "key"
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17331) : error 017: undefined symbol "Data"
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17333) : error 017: undefined symbol "key"
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17333) : error 017: undefined symbol "Data"
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17183) : warning 204: symbol is assigned a value that is never used: "keytmp"
    C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(17182) : warning 204: symbol is assigned a value that is never used: "PassData"


    und die Zeilen zu den geweiligen Errors in der gleichen Reinfolge :D


    Spoiler anzeigen


    PlayerInfo[playerid][GetPlayerFightingStyle(playerid)] = dini_Int(string2, "FightingStyle");
    PlayerInfo[playerid][SpawnChange[playerid]] = dini_Int(string2, "SpawnChange");
    PlayerInfo[playerid][WantedLevel[playerid]] = dini_Int(string2, "WantedLevel");
    PlayerInfo[playerid][WantedLevel[playerid]] = dini_Int(string2, "WantedPoints");
    PlayerInfo[playerid][OfflineFlucht[playerid]] = dini_Int(string2, "Offflucht");
    PlayerInfo[playerid][Knast[playerid]] = dini_Int(string2, "Knast");
    PlayerInfo[playerid][KnastTime[playerid]] = dini_Int(string2, "KnastTime");
    if( strcmp( key , tmpstring , true ) == 0)weapon[i-1] = strval(ini_GetValue( Data )); // das ist vom alten system
    if( strcmp( key , tmpstring , true ) == 0)ammo[i-1] = strval(ini_GetValue( Data )); // das ist auch vom alten System

    Spoiler anzeigen
    new PassData[256]; // muss ich nichts zu sagen
    new keytmp[256]; // hier ebenso

    Einmal editiert, zuletzt von Saphire ()

  • Dann zeig mal den Teil der dir die beiden Dialoge (Login oder Register) anzeigt, steht wahrscheinlich bei OnPlayerConnect.



    EDIT:
    SetPlayerFightingStyle(playerid, dini_Int(string2, "FightingStyle"));
    SpawnChange[playerid] = dini_Int(string2, "SpawnChange");
    WantedLevel[playerid] = dini_Int(string2, "WantedLevel");
    WantedLevel[playerid] = dini_Int(string2, "WantedPoints");
    OfflineFlucht[playerid] = dini_Int(string2, "Offflucht");
    Knast[playerid] = dini_Int(string2, "Knast");
    KnastTime[playerid] = dini_Int(string2, "KnastTime");


    Die zwei Zeilen vom alten System und die zwei Zeilen drunter kannst du löschen.

  • Hier werden die Dialoge angezeigt.


    Spoiler anzeigen


    Function OnPlayerRequestClass(playerid, classid)
    {
    new nam[MAX_PLAYER_NAME];
    new str[300];
    GetPlayerName(playerid, nam, sizeof(nam));
    format(str, sizeof(str),"{FFFFFF}Herzlich Willkommen auf Momento Roleplay - The Time Starts\nWir Freuen uns das du zu uns gejoint bist.\nDer Account Name{FF5A00} %s {FFFFFF}wurde in unserer Datenbank nicht gefunden.\nErstelle dir einfach einen Account damit du hier spielen kannst.", nam);
    new str2[150];
    format(str2, sizeof(str2),"{FFFFFF}|~~| Willkommen {FF5A00}%s {FFFFFF}|~~|\n\n|*| Schön das du wieder da bist |*| \n\n|~~| Gib dein Passwort ein um dich einzuloggen! |~~|", nam);
    if(IsPlayerNPC(playerid))
    {
    SpawnPlayer(playerid);
    return 1;
    }
    new timestamp = gettime();
    new Name[MAX_PLAYER_NAME];
    new file[128];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(file,sizeof(file),"Accounts/%s.ini", Name);
    new bisgebannt = dini_Int(file,"TBan");
    if(timestamp < bisgebannt) //wenn der gerade genommene Timestamp kleiner als bisgebannt ist, liegt das entbannungsdatum in der Zukunft.
    {
    new differenz = bisgebannt - timestamp; //wir subtrahieren bisgebannt von timestamp, wir erhalten also die Zeit in Sekunden wie lange der Spieler noch gebannt ist.
    new minuten = differenz / 60; //wir machen aus den Sekunden Minuten....
    new vstr[64]; //neuer String wird deklariert....
    format(vstr,sizeof(vstr),"Du bist noch %i Minuten gebannt!",minuten); //So bekommt der Spieler sogar noch angezeigt, wie langer er noch genau gebannt ist.
    SendClientMessage(playerid,0xFAFAFAFF,vstr); //String wird dem Spieler ausgegeben
    KickTimer(playerid);//Kick erfolgt
    }
    else if(gPlayerAccount[playerid] == 1 && gPlayerLogged[playerid] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFF00}Login",str2,"Login","Abbrechen");
    }
    else if(gPlayerAccount[playerid] == 0 && gPlayerLogged[playerid] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"{FFFF00}Account",str,"Erstellen","Abbrechen");
    }

    Spoiler anzeigen
    PlayerPlaySound(playerid, 1176, 0.0, 0.0, 0.0);
    PlayerInfo[playerid][pModel] = Peds[classid][0];
    SetPlayerTeamFromClass(playerid,classid);
    SetupPlayerForClassSelection(playerid);
    return 1;
    }


    Mfg


    #edit:
    diese 2 Zeilen sind aber hier drin und ich weis nicht ob ich die einfach so löschen kann.



    new weapon[14];
    new ammo[14];
    for(new i = 1;i< 14;i++)
    {
    new tmpstring[128];
    format(tmpstring,sizeof tmpstring, "waffenslot%d",i);
    if( strcmp( key , tmpstring , true ) == 0)weapon[i-1] = strval(ini_GetValue( Data ));
    format(tmpstring,sizeof tmpstring, "ammoslot%d",i);
    if( strcmp( key , tmpstring , true ) == 0)ammo[i-1] = strval(ini_GetValue( Data ));
    GivePlayerWeaponEx(playerid,weapon[i-1],ammo[i-1]);
    }

    Einmal editiert, zuletzt von Saphire ()

  • Ändere hier mal
    format(file,sizeof(file),"Accounts/%s.ini", Name);
    zu:
    format(file,sizeof(file),"Accounts/%s.ini", Name);
    if(fexist(file)) gPlayerAccount[playerid] = 1;
    else gPlayerAccount[playerid] = 0;



    Siehe auch meinen Post oben, da hab ich noch was editiert.

  • Jeffry:


    diese 2 Zeilen sind aber hier drin und ich weis nicht ob ich die einfach so löschen kann.



    new weapon[14];
    new ammo[14];
    for(new i = 1;i< 14;i++)
    {
    new tmpstring[128];
    format(tmpstring,sizeof tmpstring, "waffenslot%d",i);
    if( strcmp( key , tmpstring , true ) == 0)weapon[i-1] = strval(ini_GetValue( Data ));
    format(tmpstring,sizeof tmpstring, "ammoslot%d",i);
    if( strcmp( key , tmpstring , true ) == 0)ammo[i-1] = strval(ini_GetValue( Data ));
    GivePlayerWeaponEx(playerid,weapon[i-1],ammo[i-1]);
    }

  • Ah, dann kannste es so schreiben:
    new weapon[14];
    new ammo[14];
    new tmpstring[128];
    for(new i = 1;i< 14;i++)
    {
    format(tmpstring,sizeof tmpstring, "waffenslot%d",i);
    weapon[i-1] = dini_Int(string2, tmpstring);
    format(tmpstring,sizeof tmpstring, "ammoslot%d",i);
    ammo[i-1] = dini_Int(string2, tmpstring);
    GivePlayerWeaponEx(playerid,weapon[i-1],ammo[i-1]);
    }