Beiträge von Derakar

    Bitte benutz doch den PAWN BB-Code


    Der Code nochmal übersichtlich:


    forward saveCar();
    public saveCar()
    {
    for (new i=0; i< MAX_VEHICLES; i++)
    {
    new vehicle;
    vehicle = GetPlayerVehicleID(i);
    new autos[255];
    format(autos, sizeof(autos), "/Autos/%i.ini", vehicle);
    if ( !dini_Exists(autos) ) { dini_Create(autos); }
    dini_FloatSet(autos,"Gefahrene KM", vehicles[vehicle][vehicleKm]);
    }
    return 1;
    }


    und natürlich das laden:



    forward loadCar();
    public loadCar()
    {
    for (new j=0; j< MAX_VEHICLES; j++)
    {
    new vehicle;
    vehicle = GetPlayerVehicleID(j);
    new autos[255];
    format(autos, sizeof(autos), "/Autos/%i.ini", vehicle);
    if ( !dini_Exists(autos) ) { dini_Create(autos); }
    vehicles[vehicle][vehicleKm] = dini_Float(autos,"Gefahrene KM");
    }
    return 1;
    }

    Direkt nach dem Klicken auf Registrieren.



    public AfterRegister(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,mysql);
    if(num_rows == 1){
    sInfo[playerid][pDBID] = cache_get_field_content_int(0,"ID",mysql);
    }
    return 1;
    }


    da ist der Registerbutton auch nochmal:


    if(playertextid == SB_REGISTER){
    new str[50],query[1024],query2[1024],passwort[35];
    GetPVarString(playerid,"PasswortText", str,sizeof(str));
    mysql_escape_string(str,passwort,mysql);
    format(query,sizeof(query),"INSERT INTO accounts (Name,Passwort) VALUES ('%s',MD5('%s')) ",SpielerName(playerid),passwort);
    mysql_function_query(mysql,query,false,"","");
    format(query2,sizeof(query2),"SELECT ID FROM accounts WHERE Name='%s'",SpielerName(playerid));
    mysql_function_query(mysql,query2,true,"AfterRegister","i",playerid);
    ShowPlayerDialog(playerid,DIALOG_GESCHLECHT,0,"{FF9E00}Wähle dein Geschlecht","Wähle nun dein Geschlecht, mit welchem du auf dem Server spielen möchtest.\nDu kannst natürlich auch dein echtes bentzen.", "Männlich", "Weiblich");
    }

    Okay, jetzt geht es ^^.


    ABER Ich möchte, dass das Script nach dem Registrieren den Spieler einmal speichert. Macht er aber nicht....


    RegisterSpieler: (Das Speichern hab ich wieder rausgenommen)



    stock RegisterSpieler(playerid){
    PlayerTextDrawHide(playerid, SB_BG);
    PlayerTextDrawHide(playerid, SB_NICK);
    PlayerTextDrawHide(playerid, SB_PASS);
    PlayerTextDrawHide(playerid, SB_NICKFELD);
    PlayerTextDrawHide(playerid, SB_PASSFELD);
    PlayerTextDrawHide(playerid, SB_SN);
    PlayerTextDrawHide(playerid, SB_REGISTER);
    PlayerTextDrawHide(playerid, SB_LOGIN);
    CancelSelectTextDraw(playerid);
    TextDrawShowForPlayer(playerid,Datum);
    TextDrawShowForPlayer(playerid,Uhr);


    SetPlayerScore(playerid,sInfo[playerid][pLevel]);
    GivePlayerMoney(playerid,150);
    SetPlayerColor(playerid, WEISS);
    new randM = random(sizeof(SkinM)), randW = random(sizeof(SkinW));
    new Skin1 = SkinM[randM];
    new Skin2 = SkinW[randW];
    if(sInfo[playerid][pGeschlecht] == 1){
    SetSpawnInfo( playerid, 0, Skin1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
    sInfo[playerid][pSkin] = Skin1;
    } else if(sInfo[playerid][pGeschlecht] == 2){
    SetSpawnInfo( playerid, 0, Skin2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
    sInfo[playerid][pSkin] = Skin2;
    }


    sInfo[playerid][pGeld] = GetPlayerMoney(playerid);
    sInfo[playerid][pEingeloggt] = 1;
    sInfo[playerid][pLevel] = 1;


    SpawnPlayer(playerid);
    SetPlayerPos(playerid,1511.8359, -1713.5916, 14.0469);
    return 1;
    }

    Heyho! Ich habe einiges zu meinem "SpielerSpeichern" hinzugefügt und nun gibt er mir diesen Error. Ich habe schon mehrmals drüber geschaut und weiß nicht wo der Fehler ist. Ausserdem will ich, dass der Spieler nach dem Registrieren gespeichert wird, damit es zu keinen Bugs führt aber ich hab es jetzt schon oft versucht und verschiedene Dinge ausprobiert aber er will einfach nicht den stock ausführen...


    Das ist in der Console:


    Code
    [01:39:34] <<< UPDATE accounts SETLevel='1',Geld='150',Skin='21',Alter='0',Geschlecht='1',Admin='0',Gebannt='0',Fraktion='0',Rank='0',Wanteds='0'WHERE ID='24' >>>


    und das in der mysql_log.log


    Code
    [01:44:14] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Alter='0', Geschlecht='1', Admin='0', Gebannt='0', Fraktion='0', Rank='0', Wante' at line 1


    Hier ist mein SpielerSpeichern stock


    stock SpielerSpeichern(playerid){


    if(sInfo[playerid][pEingeloggt] == 0) return 1;
    new query[1024];
    format(query,sizeof(query),"UPDATE accounts SET Level='%i', Geld='%i', Skin='%i', Alter='%i', Geschlecht='%i', Admin='%i', Gebannt='%i', Fraktion='%i', Rank='%i', Wanteds='%i' WHERE ID='%i'", sInfo[playerid][pLevel], sInfo[playerid][pGeld], sInfo[playerid][pSkin], sInfo[playerid][pAlter], sInfo[playerid][pGeschlecht], sInfo[playerid][pAdmin], sInfo[playerid][pBan], sInfo[playerid][pFrak], sInfo[playerid][pRank], sInfo[playerid][pWanted], sInfo[playerid][pDBID]);
    mysql_function_query(mysql,query,false,"","");
    printf("<<< %s >>>",query); // Speicher Debug
    return 1;
    }

    Heyho,
    Mein Permban Befehl sperrt den Spieler nicht nach dem Bann.


    Ich habe das Speichern schon mal Debugt und er UPDATET es auch aber es wird nicht in die Datenbank übernommen, was etwas komisch ist.


    ocmd:permban(playerid,params[])
    {
    new pID,Grund[128],kickstr[128];
    if(sInfo[playerid][pEingeloggt] == 0) return SendClientMessage(playerid, GRAU, LOGINERROR);
    if(sInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, GRAU, ADMERROR);
    if(sscanf(params, "is[128]",pID,Grund)) return SendClientMessage(playerid, GRAU, "Verwende: /permban {FF9E00}<Spieler-ID> <Grund>");
    format(kickstr,sizeof(kickstr), "%s wurde von %s vom dauerhaft Server gebannt! Grund: %s", SpielerName(pID), SpielerName(playerid), Grund);
    SendClientMessageToAll(DROT, kickstr);
    SetTimer("KickTimer2", 1000, false);
    sInfo[playerid][pBan] = 1;
    SpielerSpeichern(playerid);
    SpielerReset(playerid);
    return 1;
    }


    stock SpielerSpeichern(playerid){


    if(sInfo[playerid][pEingeloggt] == 0) return 1;
    new query[1024];
    format(query,sizeof(query),"UPDATE accounts SET Level='%i',Geld='%i', Admin='%i',Gebannt'%i' WHERE ID='%i'",sInfo[playerid][pLevel],GetPlayerMoney(playerid),sInfo[playerid][pAdmin],sInfo[playerid][pBan], sInfo[playerid][pDBID]);
    mysql_function_query(mysql,query,false,"","");
    printf("%s",query);
    return 1;
    }

    Heyho
    ich möchte folgendes wissen. Un zwar wenn ich auf "Passwort eingeben" klicke soll ein Dialog kommen wo der Spieler sein oder bisher gewähltes Passwort reinschreiben muss. Wenn er dann auf Registrieren oder Login ( auf dem Bild nicht vorhanden) klickt soll er halt entweder Registriert werden oder Eingeloggt werden.


    Bisher habe ich, dass der wenigstens schonmal das Richtige Textdraw hinbastelt. Aber wie mach ich das nun mit dem Extra Textdraw (das Passwort was "gespeichert" wird und dann beim klicken auf Register/Login abgerufen wird und er eingeloggt oder registiert wirs)?


    Hier der Code:


    Nach abfrage ob er schon einen Account besitzt:
    public CheckUser(playerid)
    {
    new num_rows, num_fields;
    cache_get_data(num_rows, num_fields, mysql);
    if(num_rows == 0){
    //Registrierung
    PlayerTextDrawShow(playerid, SB_REGISTER);
    }
    else
    {
    //Login
    // new input[200];
    // format(input,sizeof(input),"{908B8E}Willkommen zurück auf {FF9E00}%s{908B8E}!\nDein Account wurde in der Datenbank gefunden.\nGebe hier bitte dein Passwort ein, welches du bei der Registrierung gewählt hast.",SERVERNAME);
    // ShowPlayerDialog(playerid,DIALOG_LOGIN,3,"{FF9E00}Login",input,"Absenden","Verlassen");


    PlayerTextDrawShow(playerid, SB_LOGIN);
    }
    return 1;
    }


    Hier die Dialoge die ich bisher hatte:
    if(dialogid == DIALOG_REGISTER){
    if(response){
    new query[1024],query2[1024],passwort[35];
    if(strlen(inputtext) >= 6){
    mysql_escape_string(inputtext,passwort,mysql);
    format(query,sizeof(query),"INSERT INTO accounts (Name,Passwort) VALUES ('%s',MD5('%s')) ",SpielerName(playerid),passwort);
    mysql_function_query(mysql,query,false,"","");
    format(query2,sizeof(query2),"SELECT ID FROM accounts WHERE Name='%s'",SpielerName(playerid));
    mysql_function_query(mysql,query2,true,"AfterRegister","i",playerid);


    sInfo[playerid][pEingeloggt] = 1;
    sInfo[playerid][pLevel] = 1;

    SetSpawnInfo( playerid, 0, 289, 1511.8359, -1713.5916, 14.0469, 222.1692, 0, 0, 0, 0, 0, 0 );
    SpawnPlayer(playerid);

    SetPlayerScore(playerid,sInfo[playerid][pLevel]);
    GivePlayerMoney(playerid,150);
    } else {
    new input[200];
    format(input,sizeof(input),"{908B8E}Das Passwort ist nicht lang genug. (min. {FF9E00}6{908B8E} Zeichen)\nGebe hier dein gewünschtes Passwort ein, mit welchem du dich registrieren möchtest!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,3,"{FF9E00}Registrierung",input,"Absenden","Verlassen");
    }
    } else {
    Kick(playerid);
    }
    return 1;
    }

    //##########################################################################################################################################################################


    if(dialogid == DIALOG_LOGIN){
    if(response){
    new query[1024],passwort[35];
    if(strlen(inputtext) > 0){
    mysql_escape_string(inputtext,passwort,mysql);
    format(query,sizeof(query),"SELECT * FROM accounts WHERE Name='%s' AND Passwort=MD5('%s')",SpielerName(playerid),passwort);
    mysql_function_query(mysql,query,true,"OnPasswortResponse","i",playerid);
    } else {
    new input[200];
    format(input,sizeof(input),"{908B8E}Du hast kein Passwort angegeben.\nGebe hier bitte dein Passwort ein, welches du bei der Registrierung gewählt hast.",SERVERNAME);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,3,"{FF9E00}Login",input,"Absenden","Verlassen");
    }
    } else {
    Kick(playerid);
    }
    return 1;
    }


    Hier wenn er auf den Register Button klickt was aber auch bisher noch Falsch ist:
    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {
    if(playertextid == SB_REGISTER){
    CancelSelectTextDraw(playerid);
    new input[200];
    format(input,sizeof(input),"{908B8E}Herzlich Willkommen auf {FF9E00}%s{908B8E}!\nDein Account wurde nicht in der Datenbank gefunden.\nGebe hier dein gewünschtes Passwort ein, mit welchem du dich registrieren möchtest!",SERVERNAME);
    ShowPlayerDialog(playerid,DIALOG_REGISTER,3,"{FF9E00}Registrierung",input,"Absenden","Verlassen");
    }
    return 1;
    }



    Ja aber ich würde das gerne mit PlayerTextDraws machen um Bugs zu vermeiden.