Autoschaden speichern und Laden

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
  • Guten Morgen zusammen.


    Ich versuche mich grade an das speichern und laden des Schadens der Fahrzeuge:



    Ich habe die mit forward deklariert aber kommt immer noch Fehler:
    forward Autoschadenspeichern();
    forward Autoschadenladen(vID);





    hier von mein spielerlade-system:


    forward AutoSpeichernPerDB(carid);
    forward OnPlayerCarsLoad(playerid);


    getFreeCarID()
    {
    for(new i=0; i<sizeof(AutoInfo); i++)
    {
    if(AutoInfo[i][Fahrzeugid] == 0)return i;
    }
    return 0;
    }
    loadplayercars(playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM Autos WHERE Besitzer='%i' ",sInfo[playerid] [db_id]);
    mysql_function_query(dbhandle,query,true,"OnPlayerCarsLoad","i",playerid);
    return 1;
    }
    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeCarID();
    AutoInfo[id] [Besitzer]=cache_get_field_content_int(i,"Besitzer",dbhandle);
    AutoInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    AutoInfo[id][c_x]=cache_get_field_content_float(i,"c_x",dbhandle);
    AutoInfo[id][c_y]=cache_get_field_content_float(i,"c_y",dbhandle);
    AutoInfo[id][c_z]=cache_get_field_content_float(i,"c_z",dbhandle);
    AutoInfo[id][c_r]=cache_get_field_content_float(i,"c_r",dbhandle);
    AutoInfo[id] [db_id]=cache_get_field_content_int(i,"id",dbhandle);
    AutoInfo[id][Fahrzeugid]=CreateVehicle(AutoInfo[id][model],AutoInfo[id][c_x],AutoInfo[id][c_y],AutoInfo[id][c_z],AutoInfo[id][c_r],-1,-1,-1);
    }
    return 1;
    }





    Nun will ich es aber auf
    Autoschadenspeichern()
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++);
    new Float:CarHealth[MAX_VEHICLES];
    GetVehicleHealth(GetPlayerVehicleID(playerid),CarHealth[GetPlayerVehicleID(playerid)]);
    new query[125];
    format(query,sizeof(query),"UPDATE Autos Schaden = '%f'",CarHealth[GetPlayerVehicleID(playerid)]);
    return 1;
    }
    Autoschadenladen(vID)
    {
    new result[15];
    Deine_content_Version_von_deiner_MySQL_Funktion(0,"Health",result);
    CarHealth[0] = floatstr(result);
    return 1;
    }


    so wie ich es jetzt gemacht habe aber ich komm einfach nicht weiter.



    Ich weiss einfach auch nicht was ich da machen muss. selbst in youtube forum gibt es kein tutorial dazu und somit bin ich rat los und wende mich an breadfish.


    Jeffry bitte hier melden

  • Was möchtest du denn machen? willst du nur die Mysql Version umschreiben oder willst du den Schaden in dein bisheriges System übernehmen?

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Kaito damit du es auch noch mal verstehst:




    "Ich versuche mich grade an das speichern und laden des Schadens der Fahrzeuge" das heißt ich will es in meiner mysql_db abspeichern und auch wieder aus der db laden aber wenn er mir immer vorheült das die funktionen nicht deklariert wären was sie aber leider sind kann ich es vergessen.

  • Kaito damit du es auch noch mal verstehst:


    Das kannst du zum einen gleich erstmal lassen, sonst brauchst du keine Hilfe mehr erwarten.


    Nun zu deinem Problem:


    Anstatt CarHealth nun AutoInfo[id][health]



    Beim Speichern sieht es ungefähr so aus
    "`c_y` = '%f'", da musst du musst du (nicht am Ende), sondern vor dem "where" ein ", `health`=%f" und bei den Variablen noch hinzufügen(hier auch nicht an der Letzten Stelle) "AutoInfo[id][health]", Dass müsste bei den denn so aussehen "AutoInfo[id][health], AutoInfo[id] [db_id] ".



    ACHTUNG: du musst eventuell in der Tabelle "Autos" "health" hinzufügen und auf Type "FLOAT" setzen.

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Das hatte ich nicht gemeint mit new Float:CarHealth[MAX_VEHICLES]; :huh:



    Bei deinem Enum AutoInfo bzw. dort wo auch "Besitzer" und "model" etc. steht,
    fügst du noch ein:


    Float:carhealth


    Dann fügst du unter deine include folgendes ein:
    native IsValidVehicle(vehicleid);



    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeCarID();
    AutoInfo[id] [Besitzer]=cache_get_field_content_int(i,"Besitzer",dbhandle);
    AutoInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    AutoInfo[id][c_x]=cache_get_field_content_float(i,"c_x",dbhandle);
    AutoInfo[id][c_y]=cache_get_field_content_float(i,"c_y",dbhandle);
    AutoInfo[id][c_z]=cache_get_field_content_float(i,"c_z",dbhandle);
    AutoInfo[id][c_r]=cache_get_field_content_float(i,"c_r",dbhandle);
    AutoInfo[id] [db_id]=cache_get_field_content_int(i,"id",dbhandle);
    AutoInfo[id][Fahrzeugid]=CreateVehicle(AutoInfo[id][model],AutoInfo[id][c_x],AutoInfo[id][c_y],AutoInfo[id][c_z],AutoInfo[id][c_r],-1,-1,-1);
    }
    return 1;
    }



    Zu:



    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeCarID();
    AutoInfo[id] [Besitzer]=cache_get_field_content_int(i,"Besitzer",dbhandle);
    AutoInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    AutoInfo[id][c_x]=cache_get_field_content_float(i,"c_x",dbhandle);
    AutoInfo[id][c_y]=cache_get_field_content_float(i,"c_y",dbhandle);
    AutoInfo[id][c_z]=cache_get_field_content_float(i,"c_z",dbhandle);
    AutoInfo[id][c_r]=cache_get_field_content_float(i,"c_r",dbhandle);
    AutoInfo[id] [db_id]=cache_get_field_content_int(i,"id",dbhandle);
    AutoInfo[id][carhealth] = cache_get_field_content_float(i,"Schaden",dbhandle);
    AutoInfo[id][Fahrzeugid]= CreateVehicle(AutoInfo[id][model],AutoInfo[id][c_x],AutoInfo[id][c_y],AutoInfo[id][c_z],AutoInfo[id][c_r],-1,-1,-1);
    SetVehicleHeal(id);
    }
    return 1;
    }


    So nun noch den Schaden ab und an speichern (laut deiner Vorlage):


    Spoiler anzeigen

    public Autoschadenspeichern()
    {
    new query[125];
    for(new veh = 0; veh < MAX_VEHICLES;veh++)
    {
    if(!IsValidVehicle(veh))
    {
    GetVehicleHealth(AutoInfo[veh][Fahrzeugid],AutoInfo[veh][carhealth]);
    format(query,sizeof(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE Besitzer = '%s'", AutoInfo[veh][carhealth],AutoInfo[veh] [Besitzer]);
    mysql_function_query(dbhandle,query,false,"","");
    }
    }
    return 1;
    }


    ganz unten hin (am besten am Ende des Scriptes)
    stock SetVehicleHeal(id) return SetVehicleHealth(AutoInfo[id][Fahrzeugid],AutoInfo[id][carhealth]);



    MfG ;)

    Einmal editiert, zuletzt von ReborN () aus folgendem Grund: Abgeändert | Abgeändert² | Abgeändert³ (eindeutig zu spät)

  • enum AutoSystemEnum{
    Fahrzeugid,
    Besitzer[MAX_PLAYER_NAME],
    model,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    db_id,
    Float:carhealth
    }


    Du solltest vielleicht erstmal die Grundlagen von Pawn anschauen. ..


    MfG ;)

  • Der Schaden der Autos wird immer noch nicht in die Datenbank abgespeichert wodurch das Laden des Schadens auch nicht gehen wird.



    So sieht mein AutoSystemEnum aus:


    enum AutoSystemEnum{
    Fahrzeugid,
    Besitzer[MAX_PLAYER_NAME],
    model,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    db_id,
    Float:Schaden
    }




    Speicherfunktion:


    public Autoschadenspeichern()
    {
    new query[125];
    for(new veh = 0; veh < MAX_VEHICLES;veh++)
    {
    if(!IsValidVehicle(veh))
    {
    GetVehicleHealth(AutoInfo[veh][Fahrzeugid],AutoInfo[veh][Schaden]);
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE Shaden = '%f", AutoInfo[veh][Schaden],AutoInfo[veh] [Besitzer]);
    mysql_function_query(dbhandle,query,false,"","");
    }
    }
    return 1;
    }
    stock SetVehicleHeal(id) return SetVehicleHealth(AutoInfo[id][Fahrzeugid],AutoInfo[id][Schaden]);



    Laden der Fahrzeuge mit Schaden:


    loadplayercars(playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM Autos WHERE Besitzer='%i' ",sInfo[playerid] [db_id]);
    mysql_function_query(dbhandle,query,true,"OnPlayerCarsLoad","i",playerid);
    return 1;
    }


    Es wird nichts gespeichert und wir auch in der Msysql.log so angezeigt:

  • format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE Shaden = '%f", AutoInfo[veh][Schaden],AutoInfo[veh] [Besitzer]);
    zu:
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE id= '%d'", AutoInfo[veh][Schaden],AutoInfo[veh] [db_id]);


    Das "id" beim WHERE musst du anpassen, wie es bei dir in der Datenbank heißt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • public Autoschadenspeichern()
    {
    new query[125];
    for(new veh = 0; veh < MAX_VEHICLES;veh++)
    {
    if(!IsValidVehicle(veh))
    {
    GetVehicleHealth(AutoInfo[veh][Fahrzeugid],AutoInfo[veh][Schaden]);
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE db_id= '%f'", AutoInfo[veh][Schaden],AutoInfo[veh] [db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    }
    }
    return 1;
    }


  • format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE db_id= '%f'", AutoInfo[veh][Schaden],AutoInfo[veh] [db_id]);
    zu:
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE id= '%d'", AutoInfo[veh][Schaden],AutoInfo[veh][db_id]);


    Warum speicherst du den Schaden eigentlich nicht dort, wo du die Position (etc) speicherst?

  • public Autoschadenspeichern()
    {
    new query[125];
    for(new veh = 0; veh < MAX_VEHICLES;veh++)
    {
    GetVehicleHealth(AutoInfo[veh][Fahrzeugid],AutoInfo[veh][Schaden]);
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE id= '%d'", AutoInfo[veh][Schaden],AutoInfo[veh][db_id]);
    printf("query: %s", query);
    mysql_function_query(dbhandle,query,false,"","");
    }
    return 1;
    }


    Geht's dann? Wenn nicht, poste bitte was im Server Log steht, wenn du es speichern lässt.