Warum speichert er nicht ?

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
  • Warum speichert mein OnPlayerDisconnect nicht beim Disconnecten ?



    public OnPlayerDisconnect(playerid, reason)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
    print("Gespeichert");
    return 1;
    }


    Der Print gibt aus den Befehl beendet zu haben.

  • Rücke den mal anständig ein


    Code
    format_sting(sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]");
    mysql_query(query)

    >> Ungetestet <<

  • Nein leider gehts auch damit nicht.


    public OnPlayerDisconnect(playerid, reason)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin_level = '%d' WHERE id = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][admin_level], PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    print("Gespeichert");
    return 1;
    }
    @Jeffry

    3 Mal editiert, zuletzt von robbi2304 ()

  • Leider nichts verwendbares.



    Code
    [16:20:46] UPDATE users SET level = '0', money = '150010', kills = '1', deaths = '6', admin_level = '3' WHERE id = '2'
    
    
    [16:20:46] [part] Nick has left the server (0:1)

    Hinzu muss ich sagen das nur das Geld nicht Richtig gespeichert wird alles andere schon

    Einmal editiert, zuletzt von robbi2304 ()

  • Ja klar



    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    PlayerInfo[playerid][admin_level] = cache_get_field_content_int(0, "admin_level", handle);
    loadPlayerCars(playerid);
    SpawnPlayer(playerid);
    }
    return 1;
    }

  • Poste bitte einen Code, mit dem Geld gegeben wird, welches nicht gespeichert wird.

    Ich weiß nicht was du genau meinst, aber ich versuche mal das zu verstehen.
    Ich gebe dir hier mal den OnPlayerDeath




    public OnPlayerDeath(playerid, killerid, reason)
    {
    //Beispielcode
    if(killerid != INVALID_PLAYER_ID)
    {
    PlayerInfo[killerid][pKills]++;
    GivePlayerMoney(killerid, 10);
    PlayerInfo[killerid][pMoney] += 10;
    if(PlayerInfo[killerid][pKills] > 3)
    {
    PlayerInfo[killerid][pLevel] = 1;
    }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
    }


    Hier soll dem Toten 10$ abgezogen werden und dem Mörder 10$ gutgeschrieben werden. Funktioniert wird aber nicht gespeichert in der Datenbank

  • Poste bitte einen Code, mit dem Geld gegeben wird, welches nicht gespeichert wird.

    Ich weiß nicht was du genau meinst, aber ich versuche mal das zu verstehen.
    Ich gebe dir hier mal den OnPlayerDeath



    public OnPlayerDeath(playerid, killerid, reason)
    {
    //Beispielcode
    if(killerid != INVALID_PLAYER_ID)
    {
    PlayerInfo[killerid][pKills]++;
    GivePlayerMoney(killerid, 10);
    PlayerInfo[killerid][pMoney] += 10;
    if(PlayerInfo[killerid][pKills] > 3)
    {
    PlayerInfo[killerid][pLevel] = 1;
    }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
    }


    Hier soll dem Toten 10$ abgezogen werden und dem Mörder 10$ gutgeschrieben werden. Funktioniert wird aber nicht gespeichert in der Datenbank

  • Im Query steht:
    money = '150010',

    Das ist leider der Wert mit dem ich Connected bin. Kaufe ich dann etwas für 150.000$ z.b zieht er das zunächst InGame ab, speichert dies aber nicht in die Datenbank.


    Deswegen wundert mich das ganze auch weil ich es einfach nicht gespeichert kriege.


    Die MySQL Zeile heißt auch

    Code
    money


    yep

  • public OnPlayerDeath(playerid, killerid, reason){ //Beispielcode if(killerid != INVALID_PLAYER_ID) { PlayerInfo[killerid][pKills]++; GivePlayerMoney(killerid, 10); PlayerInfo[killerid][pMoney] += 10; if(PlayerInfo[killerid][pKills] > 3) { PlayerInfo[killerid][pLevel] = 1; } } PlayerInfo[playerid][pDeaths]++; return 1;}


    Hier soll dem Toten 10$ abgezogen werden und dem Mörder 10$ gutgeschrieben werden. Funktioniert wird aber nicht gespeichert in der Datenbank

    Du gibst in dem Fall aber nur dem Killer 10$, dem Totem wird aber nichts abgezogen.
    Machs mal so:


    Mit freundlichem Gruß
    Weper

  • Du gibst in dem Fall aber nur dem Killer 10$, dem Totem wird aber nichts abgezogen.Machs mal so:


    Vielen dank für deine Info. Ich denke das umstellen ist das kleinere Problem. Ich würde zunächst erstmal gern den Spieler speichern können und das vollständig. Aber wiegesagt danke für den Hinweis :D

  • Zeig uns mal den Code, mit dem du dem Spieler das Geld abziehst, wenn er z.B. etwas kauft.


    ocmd:hauskaufen(playerid, params[])
    {
    if(hatPlayerHaus(playerid))return SendClientMessage(playerid, COLOR_RED, "Du hast bereits ein Haus.");
    print("[MySQL] 1");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    print("[MySQL] 2");
    if(!IsPlayerInRangeOfPoint(playerid, 5,
    hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    print("[MySQL] 3");
    if(!strlen(hInfo[i][h_besitzer]))
    {
    if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht genügend Geld.");
    print("[MySQL] 4");
    GivePlayerMoney(playerid, -hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer], getPlayerName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    updateHaus(i);
    saveHaus(i);
    return 1;
    }
    return SendClientMessage(playerid, COLOR_RED,
    "Das Haus steht nicht zum Verkauf.");
    }
    return 1;
    }

  • Du ziehst dem Spieler das Geld zwar ab (GivePlayerMoney(playerid, -hInfo[i][h_preis]);),
    aktualisierst jedoch die

    Code
    PlayerInfo[playerid][pMoney]


    Variable nicht.


    Setzt mal folgendes unter GivePlayerMoney(playerid, -hInfo[i][h_preis]); (Zeile 17)



    Code
    PlayerInfo[playerid][pMoney]-=hInfo[i][h_preis];

    Mit freundlichem Gruß
    Weper

    Einmal editiert, zuletzt von wepper () aus folgendem Grund: Falsche Variable

  • So nun habe ich noch ein Problem mit dem createhaus befehl.



    ocmd:createhaus(playerid, params[])
    {
    if(!isAdmin(playerid, 3))return
    SendClientMessage(playerid, COLOR_RED, "Dein Adminrang ist zu niedrig.");
    new Float:xc, Float:yc, Float:zc;
    GetPlayerPos(playerid, xc, yc, zc);



    new id=getFreeHausID();
    hInfo[id][h_x]=xc;
    hInfo[id][h_y]=yc;
    hInfo[id][h_z]=zc;
    hInfo[id][ih_x]=0.0;
    hInfo[id][ih_y]=0.0;
    hInfo[id][ih_z]=0.0;
    hInfo[id][h_interior]=0;
    strmid(hInfo[id][h_besitzer], "", 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    hInfo[id][h_preis]=1;
    updateHaus(id);
    //In Datenbank abspeichern
    new query[256];
    format(query, sizeof(query),
    "INSERT INTO haus (h_x, h_y, h_z, ih_x, ih_y, ih_z, h_interior, h_preis) VALUES ('%f', '%f', '%f', '0.0', '0.0', '0.0', '0', '1')",
    xc, yc, zc);
    mysql_function_query(handle, query, true, "OnHausCreated", "i", id);
    return 1;
    }



    Alle Prints werden Ordnungsgemäß ausgeführt.


    MySQL Log gibt folgendes aus



    Code
    [18:46:06] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
    [18:46:06] [ERROR] cache_get_field_content_int - invalid datatype
    [18:46:06] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
    [18:46:06] [ERROR] cache_get_field_content_int - invalid datatype

    Feld id soll nicht vorhanden sein. Ist aber vorhanden.


    Habe ich mal wieder iwo einen Fehler gemacht und den nicht gesehen ?