[Frage] MySQL Skin Speichern

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
  • Wie kann man bei MySQL machen dass z.B: Ich setze ihm die Skin-ID: 59 und diese soll dann in das Datenbankfeld "Skin" gespeichert werden.
    Und beim betreten des Servers wieder geladen werden, sodass ich die Skin-ID: 59 erhalte.
    Wie könnte man das am besten machen?


    MfG DjNightcore. :thumbup:

  • Dann poste bitte den Code, mit dem du die Statistiken lädst, speicherst und den Code mit dem du den Skin setzt.


    Laden:

    public OnAccountLoad(playerid)
    {
    new Skin;
    Skin = cache_get_field_content_int(0, "Skin", Handle);
    SetPlayerSkin(playerid, Skin);
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dich Erfolgreich Eingeloggt!");
    return 1;
    }


    Speichern:

    public OnAccountSave(playerid)
    {
    new Query[380];
    mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `Skin`='%i' WHERE `ID`=%d",\
    SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
    mysql_tquery(Handle, Query, "", "");
    return 1;
    }


    INFO: Ich hab einiges aus dem Laden + Speichern entfernt (Andere Variablen Level etc, Damit es übersichtlich ist).


    MfG DjNightcore. 8)


    Jeffry:

  • public OnAccountLoad(playerid)
    {
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", Handle);
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dich Erfolgreich Eingeloggt!");
    return 1;
    }


    Und bei OnPlayerSpawn:
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);


  • Es wird nur nichts gespeichert. Es geht nur wenn ich ihm den Skin per Datenbank setze.


    MfG DjNightcore. 8)

  • Du hast ja auch bei OnAccountSave ein Fehler.
    Du musst den Skin vom Spieler davor in einer Variable abspeichern.

    public OnAccountSave(playerid)
    {
    new Query[380];
    SpielerInfo[playerid][pSkin]=GetPlayerSkin(playerid);
    mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `Skin`='%i' WHERE `ID`=%d",\
    SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
    mysql_tquery(Handle, Query, "", "");
    return 1;
    }

    - heftig abhängig von Karli Kugelblitz Choco Drinks


  • Es speichert sich immer noch nichts.. :huh:


    MfG DjNightcore. 8)

  • Wird denn das Geld (etc) gespeichert? Poste gegebenenfalls mal dein ganzes OnAccountSave und den Befehl mit dem du dem Spieler den Skin setzt.


    OnAccountSave:
    forward OnAccountSave(playerid);
    public OnAccountSave(playerid)
    {
    new Query[380];
    SpielerInfo[playerid][pSkin] = GetPlayerSkin(playerid);
    mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Kills`='%d', `Deaths`='%d', `Level`='%d', `Money`='%d', `Tutorial`='%d', `Skin`='%i' WHERE `ID`=%d",\
    IP[playerid], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pVIP], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pDeaths], GetPlayerScore(playerid), SpielerInfo[playerid][pMoney],
    SpielerInfo[playerid][pTutorialFinished], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
    mysql_tquery(Handle, Query, "", "");
    return 1;
    }

    Befehl:

    COMMAND:setskin(playerid, params[])
    {
    new cID, sID, String[128], TargetName[MAX_PLAYER_NAME];
    if(!IsAdmin(playerid,2)) return SendClientMessage(playerid, COLOR_RED, "Du besitzt nicht die benötigten Rechte!");
    if(sscanf(params, "ui", cID, sID)) return SendClientMessage(playerid, COLOR_YELLOW, "Verwendung: /setskin [Spieler-ID] [Skin-ID]");
    GetPlayerName(cID, TargetName, sizeof(TargetName));
    if(cID == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht Online!");
    SetPlayerSkin(cID, sID);
    format(String, sizeof(String), "%s %s (ID: %d) hat deinen Skin zu %i gesetzt.", AdminRanks(playerid), GetName(playerid), playerid, sID);
    SendClientMessage(cID, COLOR_YELLOW, String);
    format(String, sizeof(String), "Du hast %s (ID: %d) seinen Skin zur ID: %i geändert.", TargetName, cID, sID);
    SendClientMessage(playerid, COLOR_YELLOW, String);
    OnAccountSave(playerid);
    return 1;
    }

  • Möglicherweise ist da der Lag schuld.
    Versuche es so:
    COMMAND:setskin(playerid, params[])
    {
    new cID, sID, String[128], TargetName[MAX_PLAYER_NAME];
    if(!IsAdmin(playerid,2)) return SendClientMessage(playerid, COLOR_RED, "Du besitzt nicht die benötigten Rechte!");
    if(sscanf(params, "ui", cID, sID)) return SendClientMessage(playerid, COLOR_YELLOW, "Verwendung: /setskin [Spieler-ID] [Skin-ID]");
    GetPlayerName(cID, TargetName, sizeof(TargetName));
    if(cID == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht Online!");
    SetPlayerSkin(cID, sID);
    SpielerInfo[cID][pSkin] = sID;
    format(String, sizeof(String), "%s %s (ID: %d) hat deinen Skin zu %i gesetzt.", AdminRanks(playerid), GetName(playerid), playerid, sID);
    SendClientMessage(cID, COLOR_YELLOW, String);
    format(String, sizeof(String), "Du hast %s (ID: %d) seinen Skin zur ID: %i geändert.", TargetName, cID, sID);
    SendClientMessage(playerid, COLOR_YELLOW, String);
    OnAccountSave(cID);
    return 1;
    }


    forward OnAccountSave(playerid);
    public OnAccountSave(playerid)
    {
    new Query[380];
    mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Kills`='%d', `Deaths`='%d', `Level`='%d', `Money`='%d', `Tutorial`='%d', `Skin`='%i' WHERE `ID`=%d",\
    IP[playerid], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pVIP], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pDeaths], GetPlayerScore(playerid), SpielerInfo[playerid][pMoney],
    SpielerInfo[playerid][pTutorialFinished], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
    mysql_tquery(Handle, Query, "", "");
    return 1;
    }


  • Wir lassen es einfach, es geht eh nicht.... :cursing:

  • Schreibe alles genau so wie Jeffry es zuletzt gepostet hat und änder folgendes um:


    mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Kills`='%d', `Deaths`='%d', `Level`='%d', `Money`='%d', `Tutorial`='%d', `Skin`='%i' WHERE `ID`=%d",\
    IP[playerid], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pVIP], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pDeaths], GetPlayerScore(playerid), SpielerInfo[playerid][pMoney],
    SpielerInfo[playerid][pTutorialFinished], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);zumysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Kills`='%d', `Deaths`='%d', `Level`='%d', `Money`='%d', `Tutorial`='%d', `Skin`='%i' WHERE `ID`='%d'",\
    IP[playerid], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pVIP], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pDeaths], GetPlayerScore(playerid), SpielerInfo[playerid][pMoney],
    SpielerInfo[playerid][pTutorialFinished], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
    Bei Where ID = %d haben die Apostrophe gefehlt.
    Schau dir doch gegeben falls mal die mysql log wenn es immer noch nicht geht oder poste diese hier.


  • Die spuckt ja nichts aus.

  • Bei Where ID = %d haben die Apostrophe gefehlt.


    Sie braucht man bei Integers nicht zwangsläufig ;)


    Zum Problem:
    Bist du dir sicher, dass du eine Verbindung mit der Datenbank hast? Wird das Geld zum Beispiel gespeichert?


    Und aktualisierst du die Ansicht der Tabelle, nachdem der Spieler gespeichert wird?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen