MySQL Frage R41

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,


    ich habe nun mal geschaut das ich von R39 - 3 auf R41 update. Das ganze hat soweit geklappt bis auf bei einem Befehl wo ich nicht weiter weiß.


    saveCarToDB(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_function_query(handle,query,true,"carSavedToDB","i",carid);
    return 1;
    }


    mysql_function_query sei nicht definiert.


    mysql_format


    habe ich ausprobiert da wirft mir die MySQL Log aber folgendes aus


    Code
    [19:05:20] [ERROR] mysql_format: destination size '1' is too small
  • Nutze mysql_pquery.
    saveCarToDB(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_pquery(handle,query,"carSavedToDB","i",carid);
    return 1;
    }

  • Nutze mysql_pquery.
    saveCarToDB(playerid,carid){ new query[128]; format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); mysql_pquery(handle,query,"carSavedToDB","i",carid); return 1;}

    Das klappte soweit.


    Nun zum nächsten Befehl xD.


    forward carSavedToDB(carid);
    public carSavedToDB(carid)
    {
    cInfo[carid][db_id]=cache_insert_id(handle);
    return 1;
    }



    Code
    warning 202: number of arguments does not match definition

    ist dort cache_insert_id durch das Update wieder ungültig ?

  • Ich scheine nicht wirklich für die neuen Funktion gemacht zusein.


    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,handle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id = getFreeCarID();
    cInfo[id][model] = cache_get_field_content_int(i,"model",handle);
    cInfo[id][besitzer] = cache_get_field_content_int(i,"besitzer",handle);
    cInfo[id][c_x] = cache_get_field_content_float(i,"x",handle);
    cInfo[id][c_y] = cache_get_field_content_float(i,"y",handle);
    cInfo[id][c_z] = cache_get_field_content_float(i,"z",handle);
    cInfo[id][c_r] = cache_get_field_content_float(i,"r",handle);
    cInfo[id][c_gespeert] = cache_get_field_content_int(i,"gespeert",handle);
    cInfo[id][db_id] = cache_get_field_content_int(i,"id",handle);
    if(cInfo[id][c_gespeert] == 0)
    {
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],-1,-1,-1);
    }
    }
    return 1;
    }


    Die ganzen caches können nicht verwendet werden.

  • zum Thema mysql_format hierbei ist der erste parameter der connectionHandler welcher gerne vergessen wird diesen anzugeben

    Code
    new query[128];
    mysql_format(MySQL, query, sizeof(query), "SELECT * FROM `%s` WHERE `bar` = '%e' AND `foobar` = '%f' LIMIT %d", "foobar", "escape'me\"please", 1.2345, 1337);
    // the variable 'query' contains now the formatted query (including the escaped string)
    mysql_tquery(MySQL, query, "OnStuffSelected");
  • Problem erledigt


    Nächstes Problem folgt leider *heul*



    loadPlayerCars(playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM autos WHERE besitzer='%i'",PlayerInfo[playerid][p_id]);
    mysql_pquery(handle,query,"OnPlayerCarsLoad","i",playerid);
    return 1;
    }
    forward OnPlayerCarsLoad(playerid);
    public OnPlayerCarsLoad(playerid)
    {
    new num_rows;
    for(new i=0; i<num_rows; i++)
    {
    new id = getFreeCarID();
    cache_get_value_name_int(i, "model", cInfo[id][model]);
    cache_get_value_name_int(i, "besitzer", cInfo[id][besitzer]);
    cache_get_value_name_float(i, "x", cInfo[id][c_x]);
    cache_get_value_name_float(i, "y", cInfo[id][c_y]);
    cache_get_value_name_float(i, "z", cInfo[id][c_z]);
    cache_get_value_name_float(i, "r", cInfo[id][c_r]);
    cache_get_value_name_int(i, "gespeert", cInfo[id][c_gespeert] );
    cache_get_value_name_int(i, "id", cInfo[id][db_id] );
    if(cInfo[id][c_gespeert] == 0)
    {
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],001,001,-1);
    }
    }
    }
    getFreeCarID()
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0)return i;
    }
    return 0;


    }


    Das Fahrzeug wird nach einem Server neustart nicht mehr gespawnt.



    Hinzu weiß ich nicht wie ich den PayTimer speichern soll.



    forward Update();
    public Update()
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(IsPlayerNPC(i))continue;
    if(!PlayerInfo[i][pLoggedIn])continue;


    //Payday
    PayDayTimer[i]++;
    if(PayDayTimer[i] >= 60)
    {
    PlayerInfo[i][pPaytime]++;
    PayDayTimer[i] = 0;


    }



    if(PlayerInfo[i][pPaytime] >= 60)
    {
    PayDay(i);
    PlayerInfo[i][pPaytime] = 0;


    }


    }
    return 1;
    }

    2 Mal editiert, zuletzt von robbi2304 ()

  • Stimmen auch die Koordinaten in der Datenbank zu der location wo das Fahrzeug gespawnt wird ?
    Wird das Callback OnPlayerCarsLoad überhaupt aufgerufen und wird auch die Funktion aufgerufen und stimmt der SQL Befehl ?



    Zum Thema PayDay-Timer entweder du speicherst sowas auch in der Datenbank oder in einer Datei , wenn OnGameModeExit aufgerufen wird oder nach einem gewissen interval.

  • Zum Thema PayDay-Timer entweder du speicherst sowas auch in der Datenbank oder in einer Datei , wenn OnGameModeExit aufgerufen wird oder nach einem gewissen interval.

    Wie genau meinst du das ? Ich speicher meine PayDay Zeit in einer Datenbank. Bzw er soll es eigentich in einer Datenbank abspeichern.
    Ich verwende zum speichern folgenden Befehl


    SaveUserStats(playerid);



    hier einmal die Funktion


    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    //Ansonsten speichere sie
    new query[512];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET banreason = '%s',banned = '%i',banner = '%s',alevel = '%d',jobk = '%d', paytime = '%d',prpg = '%d',jobmoney = '%d',konto = '%d',respektpunkte = '%d',paytime= '%d',perso = '%d',dunger = '%d',drogensamen = '%d',job = '%d',matskauf = '%d',drogens = '%d',drogen = '%d',matss = '%d',mats = '%d',level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pBanreason],PlayerInfo[playerid][pBanned],PlayerInfo[playerid][pBanner],PlayerInfo[playerid][admin_level],PlayerInfo[playerid][pJobk],PlayerInfo[playerid][pPaytime],PlayerInfo[playerid][pRPg],PlayerInfo[playerid][pJobMoney],PlayerInfo[playerid][pKonto],PlayerInfo[playerid][pRespektpunkte],PlayerInfo[playerid][pPayTime],PlayerInfo[playerid][pPerso],PlayerInfo[playerid][pddunger],PlayerInfo[playerid][pDrogensamen],
    PlayerInfo[playerid][pJob],PlayerInfo[playerid][pMatskauf],PlayerInfo[playerid][pDrogens],PlayerInfo[playerid][pDrogen],PlayerInfo[playerid][pMatss],PlayerInfo[playerid][pMats],PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths],
    PlayerInfo[playerid][p_id]);
    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }


    Weiter nochmal zum Autohaus, ich habe ein falsches Format in der Datenbank verwendet so das dass Auto eigentlich ganz woanders spawnt. Nun denke ich aber, das ich noch ein Ladeproblem der Autos habe.


    Hier einmal nochmal der Code vom OnPlayerCarsLoad


    forward OnPlayerCarsLoad(playerid);
    public OnPlayerCarsLoad(playerid)
    {
    new num_rows;
    for(new i=0; i<num_rows; i++)
    {
    new id = getFreeCarID();
    cache_get_value_name_int(i, "model", cInfo[id][model]);//Integer
    cache_get_value_name_int(i, "besitzer", cInfo[id][besitzer]);//Integer
    cache_get_value_name_float(i, "x", cInfo[id][c_x]); //Float
    cache_get_value_name_float(i, "y", cInfo[id][c_y]);//Float
    cache_get_value_name_float(i, "z", cInfo[id][c_z]);//Float
    cache_get_value_name_float(i, "r", cInfo[id][c_r]);//Float
    cache_get_value_name_int(i, "gespeert", cInfo[id][c_gespeert] );//Integer
    cache_get_value_name_int(i, "id", cInfo[id][db_id] );//Integer
    if(cInfo[id][c_gespeert] == 0)
    {
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],001,001,-1);
    }
    }
    }


    //Edit Code verbessert


    Beim erstellen kriege ich schon Fehler in der MySQL Log womit aber wohl nie jemand was mit anfangen kann


    hier erstmal der Code zum erstellen des Fahrzeugs



    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {


    if(cInfo[i][id_x]!=0)continue;
    GetPlayerName(playerid,PlayerInfo[p_id][pName],MAX_PLAYER_NAME);
    cInfo[i][besitzer]=PlayerInfo[playerid][p_id];
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"Das Auto %i wurde erstellt.",GetVehicleFriendlyName(cInfo[i][id_x]));
    SendClientMessage(playerid,COLOR_RED,string);
    saveCarToDB(playerid,i);
    SaveUserStats(playerid);
    return 1;
    }
    return 1;
    }



    saveCarToDB(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_pquery(handle,query,"carSavedToDB","i",carid);
    return 1;
    }

    3 Mal editiert, zuletzt von robbi2304 ()