MySQL Positionen in Datenbank speichern HILFE

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
  • Hallo nochmal,
    ich habe schon einmal einen Thread mit diesen Thema eröffnet aber
    da nach 6 Messages keine weitere Antwort kam, und auch
    keine Lösung gefunden wurde.. eröffne ich Ihn nochmal.


    Save:
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
    {
    //Nun speichern wir die Daten in der Datenbank.
    mysql_SetInt("accounts", "Registriert", SpielerInfo[playerid][Registered], "Name", SpielerInfo[playerid][Name]);


    new Float: PosXX, Float: PosYY, Float: PosZZ, Float: PosAA;
    GetPlayerPos(playerid, PosXX, PosYY, PosZZ);
    GetPlayerFacingAngle(playerid, PosAA);
    SpielerInfo[playerid][Interior] = GetPlayerInterior(playerid);


    mysql_SetInt("accounts", "Stufe", GetPlayerScore(playerid), "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Skin", SpielerInfo[playerid][Skin], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "AdminRank", SpielerInfo[playerid][AdminRank], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Warnings", SpielerInfo[playerid][Warnings], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Gemutet", SpielerInfo[playerid][Muted], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Gebannt", SpielerInfo[playerid][Banned], "Name", SpielerInfo[playerid][Name]);


    mysql_SetInt("accounts", "Fraktion", FraktionInfo[playerid][Mitglied], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "FraktionLeitung", FraktionInfo[playerid][Leitung], "Name", SpielerInfo[playerid][Name]);
    }
    }
    return 1;
    }


    Load:
    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
    {
    if(SpielerInfo[playerid][Banned] == 1)
    {
    new BanString[128];
    new BannedName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,BannedName,sizeof(BannedName));
    format(BanString,sizeof(BanString),"/Datenbank/Accounts/%s.txt",BannedName);
    format(BanString,sizeof(BanString),"%s versucht sich mit seinem gebannten Account ein zu loggen",BannedName);
    MessageToAdmins(Color_Orange,BanString,1);
    SendClientMessage(playerid,Color_Red,"SERVER: Dein Account wurde vom Server verbannt!");
    Ban(playerid);//Bannt den Spieler und schreibt Ihm in die "samp.ban"
    return 1;
    }
    GetPlayerName(playerid, SpielerInfo[playerid][Name], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
    SpielerInfo[playerid][Registered] = mysql_GetInt("accounts", "Registriert", "Name", SpielerInfo[playerid][Name]);


    SpielerInfo[playerid][PosX] = mysql_GetFloat("accounts","PosX","Name",SpielerInfo[playerid][Name]); //Er speichert die PosX in die Tabelle Accounts, in das Feld PosX
    SpielerInfo[playerid][PosY] = mysql_GetFloat("Accounts","PosY","Name",SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][PosZ] = mysql_GetFloat("Accounts","PosZ","Name",SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][PosA] = mysql_GetFloat("Accounts","PosR","Name",SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][Interior] = mysql_GetInt("Accounts","Interior","Name",SpielerInfo[playerid][Name]);


    SetPlayerScore(playerid, mysql_GetInt("accounts", "Stufe", "Name", SpielerInfo[playerid][Name])); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
    SetPlayerSkin(playerid, mysql_GetInt("accounts", "Skin", "Name", SpielerInfo[playerid][Name]));
    GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][Name]));
    SpielerInfo[playerid][AdminRank] = mysql_GetInt("accounts", "AdminRank", "Name", SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][Warnings] = mysql_GetInt("accounts", "Warnings", "Name", SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][Muted] = mysql_GetInt("accounts", "Gemutet", "Name", SpielerInfo[playerid][Name]);
    SpielerInfo[playerid][Banned] = mysql_GetInt("accounts", "Gebannt", "Name", SpielerInfo[playerid][Name]);

    FraktionInfo[playerid][Mitglied] = mysql_GetInt("accounts", "Fraktion", "Name", SpielerInfo[playerid][Name]);
    FraktionInfo[playerid][Leitung] = mysql_GetInt("accounts", "FraktionLeitung", "Name", SpielerInfo[playerid][Name]);

    PlayerSpawn(playerid);

    SendClientMessage(playerid,Color_Green,"Erfolgreich eingeloggt");

    if(SpielerInfo[playerid][AdminRank] > 0)
    {
    new Level[64];
    format(Level,sizeof(Level),"Du bist als Stufe %d Administrator eingeloggt",SpielerInfo[playerid][AdminRank]);
    SendClientMessage(playerid,Color_White,Level);
    }
    new Welcome[256];
    format(Welcome,sizeof(Welcome),"~w~Willkommen ~n~~y~ %s",SpielerInfo[playerid][Name]);
    GameTextForPlayer(playerid,Welcome,5000,1);
    IsLoggedIn[playerid] = 1;
    }
    return 1;
    }


    OnPlayerSpawn:
    public OnPlayerSpawn(playerid)
    {


    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,botname,sizeof(botname));
    if(!strcmp(botname,"TouristBOTBus",true))
    {
    PutPlayerInVehicle(playerid,car_TouristBus, 0);
    }
    }

    SetPlayerPos(playerid,SpielerInfo[playerid][PosX],SpielerInfo[playerid][PosY],SpielerInfo[playerid][PosZ]); //Position wird gesetzt.
    SetPlayerFacingAngle(playerid,SpielerInfo[playerid][PosA]); //Die Drehung wird gesetzt.
    SetPlayerInterior(playerid,SpielerInfo[playerid][Interior]);//Das Interior wird gesetzt.
    return 1;
    }


    Ich hoffe das reicht an Infos und ich hoffe das ich eine Lösung bekomme.
    Danke

  • Schau mal in meiner Signatur, genau für solche Fälle gemacht ;)


    Und nächstes mal die Sufu benutzen ! ;)

  • Zitat

    Schau mal in meiner Signatur, genau für solche Fälle gemacht ;)


    Und nächstes mal die Sufu benutzen ! ;)

    Ich hab dein Tutorial schon gesehen, und auch so versucht wie du es erklärst.
    Hilft trozdem nicht, funktioniert genauso wie vorhin -> NICHT

  • Hast du denn mal selber versucht den Fehler zu finden ?


    Wird es denn in der database gespeichert? wenn ja auch richtig?
    wird es geladen richtig oder falsch?
    und wird dann einfach nur die position nicht richtig gesetzt?


    //EDIT
    höhö ich sehe garkein code wie du es speicherst..


    Wie es aussieht ist das das Tutorial von maddin
    also
    mysql_SetFloat("accounts", "PosX", x, "Name", Spieler[playerid][pName]);

  • stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
    {
    //Nun speichern wir die Daten in der Datenbank.
    mysql_SetInt("accounts", "Registriert", SpielerInfo[playerid][Registered], "Name", SpielerInfo[playerid][Name]);


    new Float: PosXX, Float: PosYY, Float: PosZZ, Float: PosAA;
    GetPlayerPos(playerid, PosXX, PosYY, PosZZ);
    GetPlayerFacingAngle(playerid, PosAA);


    mysql_SetInt("accounts", "Stufe", GetPlayerScore(playerid), "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Skin", SpielerInfo[playerid][Skin], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "AdminRank", SpielerInfo[playerid][AdminRank], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Warnings", SpielerInfo[playerid][Warnings], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Gemutet", SpielerInfo[playerid][Muted], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "Gebannt", SpielerInfo[playerid][Banned], "Name", SpielerInfo[playerid][Name]);


    mysql_SetInt("accounts", "Interior", GetPlayerInterior(playerid), "Name", SpielerInfo[playerid][Name]);
    mysql_SetFloat("accounts", "PosX", PosXX, "Name", SpielerInfo[playerid][Name]);
    mysql_SetFloat("accounts", "PosY", PosYY, "Name", SpielerInfo[playerid][Name]);
    mysql_SetFloat("accounts", "PosZ", PosZZ, "Name", SpielerInfo[playerid][Name]);
    mysql_SetFloat("accounts", "PosA", PosAA, "Name", SpielerInfo[playerid][Name]);


    mysql_SetInt("accounts", "Fraktion", FraktionInfo[playerid][Mitglied], "Name", SpielerInfo[playerid][Name]);
    mysql_SetInt("accounts", "FraktionLeitung", FraktionInfo[playerid][Leitung], "Name", SpielerInfo[playerid][Name]);
    }
    }
    return 1;
    }



  • Hallo, es klappt leider immernoch nicht ich werde immer wieder an der selben Stelle gespawnt.

  • Damit wird es gespeichert und ausgelesen wird es auch, sollte es zumindest.


    Nun musst du einfach an der Stelle wo er auf seine alten position gesetzt werden soll folgendes machen:

    SetPlayerPos(playerid,SpielerInfo[playerid][PosX],SpielerInfo[playerid][PosY],SpielerInfo[playerid][PosZ]);
    SetPlayerFacingAngle(playerid,SpielerInfo[playerid][PosA]);
    SetPlayerInterior(playerid, SpielerInfo[playerid][Interior]);


    //edit:


    Also in der Tabelle steht immer 0..

    Wie sind denn die Eigenschaften der Spalten für die Position?


  • Das habe ich doch schon bei OnPlayerSpawn nur es steht ja auch irgendwie in der Datenbank immer auf 0
    bei X Y und Z und A


    Die Eigenschaften sind für X Y un Z bei Lenght auf 9 und bei Decimals auf 5




    //Edit zweite Antwort hinzugefügt


  • Bei mir ist der Typ float :O?