Nach dem Registerscript werde ich direkt gespawnt

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Hey,
    habe ein Problem wenn ich auf meinem Server mir einen Account mache, gebe ich mein Passwort ein und drücke auf registrieren und werde direkt gespawnt wie änder ich dass, das sich nachdem man auf registrieren klickt das Login Dialog öffnet?


    Ein Teil des Scriptes:



    if(mysql_CheckAccount(playerid) == 1)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Willkommen zurück auf meinen Server.\nGib unten bitte dein Passwort ein","Login","Abbrechen");
    }
    else if(mysql_CheckAccount(playerid) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Register vorgang","Dein Account wurde nicht in der Datenbank gefunden.\nDeshalb gib unten dein gewünschtes Passwort ein, um dich zu Registrieren.","Register","Abbrechen");
    }
    return 1;



    if(dialogid == DIALOG_REGISTER)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,GRAU,"Du hast den Register Vorgang abgebrochen und wurdest deshalb gekickt.");
    Kick(playerid);
    return 1;
    }
    if(response == 1)
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Register vorgang","Dein Account wurde nicht in der Datenbank gefunden.\nDeshalb gib unten dein gewünschtes Passwort ein, um dich zu Registrieren.","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid,inputtext);
    return 1;
    }
    }
    }

  • public OnPlayerSpawn(playerid)
    {
    StopAudioStreamForPlayer(playerid);
    if(IsPlayerInFraktion(playerid,0))
    {
    SetPlayerPos(playerid,1230.0509,-914.0554,43.0938);
    SetPlayerFacingAngle(playerid,90.0000);
    }
    if(IsPlayerInFraktion(playerid,1))
    {
    SetPlayerPos(playerid,-1593.0668,716.1681,-5.2422);
    SetPlayerFacingAngle(playerid,270.0000);
    }
    if(IsPlayerInFraktion(playerid,2))
    {
    SetPlayerPos(playerid,689.3741,-1276.0062,13.5591);
    SetPlayerFacingAngle(playerid,90.0000);
    }
    if(IsPlayerInFraktion(playerid,3))
    {
    SetPlayerPos(playerid,-2720.3262,-318.6116,7.8438);
    SetPlayerFacingAngle(playerid,45.0000);
    }
    return 1;
    }

  • stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }

  • hat doch eig damit nix zutun, will ja damit er den Login Dialog mir anzeigt, nachdem ich auf Registrieren geklickt habe.


    aber habe SpawnPlayer nur hier damit die skinauswahl übersprungen wird (das mit den pfeilen und spawnen):



    public OnPlayerRequestClass(playerid, classid)
    {
    SetSpawnInfo(playerid,0,101,1230.0509,-914.0554,43.0938,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }

  • Ja aber trtz. Spawnt der den Player doch irgendwie?
    //E: HÄNGE GRAD FALSCH WARTE !!!

  • Da liegt der Fehler. OnPlayerRequest Class wird aufgerufen, wenn der Spieler zur Auswahl bekommst.
    http://wiki.sa-mp.com/wiki/OnPlayerRequestClass


    Das geschieht nach eigener Erfahrung aber meist auch wenn man den Registerdialog (sofern bei OnPlayerConnect aufgerufen) schließt.
    Du solltest das aber ganz einfach umgehen können, indem du einen boolean verwendest.


    Global deklarieren


    new boolean:loggedIn[MAX_PLAYERS];


    Bei OnPlayerConnect initialisieren


    loggedIn[playerid] = false;


    Beim logindialog wenn man eingeloggt ist


    loggedIn[playerid] = true;


    Bei OnPlayerRequestClass



    public OnPlayerRequestClass(playerid, classid)
    {
    if(loggedIn[playerid] == false) return 1;
    SetSpawnInfo(playerid,0,101,1230.0509,-914.0554,43.0938,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }

  • wenn ich es mache wie du es geschreiben hast kommt beim Compilen: " warning 213: tag mismatch "


    bei:
    if(loggedIn[playerid] == false) return 1;
    und bei
    loggedIn[playerid] = false;
    und bei
    loggedIn[playerid] = true;



    //edit
    wenn ich new boolean:loggedIn[MAX_PLAYERS]; zu new bool:loggedIn[MAX_PLAYERS]; ändere bekomme ich keine warnings aber ingame werde ich trotzdem direkt eingeloggt
    Teil des Scriptes:
    http://pastebin.com/6y1LmZvR

    7 Mal editiert, zuletzt von WerWoWas ()

  • Ja das war mein Fehler. Bei SAMP werden Boolean-Variablen nicht durch boolean sondern bool deklariert.
    Aber eigentlich düftest du nicht spawnen wenn unter OnPlayerRequestClass das einzige mal OnPlayerSpawn verwendet wird.


    Versuchs mal so


    public OnPlayerRequestClass(playerid, classid)
    {
    if(loggedIn[playerid] == true){
    SetSpawnInfo(playerid,0,101,1230.0509,-914.0554,43.0938,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    }
    return 1;
    }

  • geht immernoch net
    wenn ich beim Register Dialog nix eingebe und drücke auf registrieren, kommen unten die Pfeile und ich kann auf spawn drücken, wenn ich auf spawn drücke werde ich gespawnt aber das dialog ist immernoch da

  • Wenn du bei


    public OnPlayerRequestClass(playerid, classid) SpawnPlayer(playerid);nutzt wäre es logischerweisse ratsam bei public OnPlayerSpawn(playerid)die Dialoge aufzurufen und mit einer Variable dabei abzufragen ob er schon eingeloggt ist oder nicht. Sollte er nun schon eingeloggt sein, wird dies nicht mehr angezeigt.

  • hier:




    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return false;
    }


    //edit hat sich erledigt

    Einmal editiert, zuletzt von WerWoWas ()