Beiträge von MnX

    Sollte eig nicht daran liegen also die ersten Fehler sind aufgrund das er mehr als Vorhanden "Laden will" aber die wo er die Cache nicht lesen kann das ist aktuell mein dilema vor paar stunden ging es noch xD


    um zu testen hab ich cache_get_data auch mal rausgenommen trotzdem bleiben die fehler gleich


    EDIT: Er sagt auch ganze zeit das es kein aktiver Cache gibt dem er was übergeben kann. Verstehe das irgendwie nicht ganz :/
    EDIT2: @Jeffry

    Wie rufst du die auf?
    Du darfst nicht einfach z.b. "OnFraktionLaden();" in OnGameModeInit schreiben.


    Musst du dann so z.b. machen:


    Code
    mysql_pquery(handle, "SELECT * FROM `DEINETABELLE`", "OnFraktionLaden");

    So blöd bin ich nicht :D


    die werden mit einer mysql_tquery im OnGameModeInit aufgerufen so wie du es beschrieben hast.

    Ich habe in der mysql log nun folgende stehen



    Code denn das betreffen könnte:
    public LoadBusinesses()
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i < num_reihen; i++)
    {
    new BizName[24], string[128];
    bInfo[i][b_id] = cache_get_field_content_int(i,"ID",dbhandle);
    bInfo[i][b_preis] = cache_get_field_content_int(i,"Preis",dbhandle);
    bInfo[i][b_enterx] = cache_get_field_content_float(i,"EnterX",dbhandle);
    bInfo[i][b_entery] = cache_get_field_content_float(i,"EnterY",dbhandle);
    bInfo[i][b_enterz] = cache_get_field_content_float(i,"EnterZ",dbhandle);
    bInfo[i][b_exitx] = cache_get_field_content_float(i,"ExitX",dbhandle);
    bInfo[i][b_exity] = cache_get_field_content_float(i,"ExitY",dbhandle);
    bInfo[i][b_exitz] = cache_get_field_content_float(i,"ExitZ",dbhandle);
    bInfo[i][b_interior] = cache_get_field_content_int(i,"Interior",dbhandle);
    bInfo[i][b_world] = cache_get_field_content_int(i,"World",dbhandle);
    bInfo[i][b_minuten] = cache_get_field_content_int(i,"Minuten",dbhandle);
    bInfo[i][b_geld] = cache_get_field_content_int(i,"Geld",dbhandle);
    bInfo[i][b_job] = cache_get_field_content_int(i,"JobID",dbhandle);
    cache_get_field_content(i,"Text",bInfo[i][b_text],dbhandle,128);
    cache_get_field_content(i,"Besitzer",bInfo[i][b_besitzer],dbhandle,128);


    format(BizName, 24, "%s", bInfo[i][b_text]);
    strreplace(BizName, '_', ' ');
    if(!strcmp(bInfo[i][b_besitzer], "None", false))
    {
    format(string, sizeof string,"%s \n[Kein Besitzer]\nPreis: %i$", BizName, bInfo[i][b_preis]);
    }
    else format(string, sizeof string, "%s\n[Besitzer]: %s\nTippe /enter um die Firma zu betreten", bInfo[i][b_text], bInfo[i][b_besitzer]);
    bInfo[i][b_label] = CreateDynamic3DTextLabel(string, GRÜN, bInfo[i][b_enterx],bInfo[i][b_entery], bInfo[i][b_enterz], 12, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1);
    bInfo[i][b_pickup] = CreateDynamicPickup(1272, 1, bInfo[i][b_enterx], bInfo[i][b_entery], bInfo[i][b_enterz], 0);
    if(IsBusinessOwned(i)) printf("Firmen ID %i wurde geladen; Name: %s", i, bInfo[i][b_text]);
    }
    return 1;
    }


    public LoadJob()
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i < num_reihen; i++)
    {
    new JobName[24], string[128];
    jInfo[i][j_id] = cache_get_field_content_int(i,"ID",dbhandle);
    jInfo[i][j_gehalt] = cache_get_field_content_int(i,"Gehalt",dbhandle);
    jInfo[i][j_x] = cache_get_field_content_float(i,"X",dbhandle);
    jInfo[i][j_y] = cache_get_field_content_float(i,"Y",dbhandle);
    jInfo[i][j_z] = cache_get_field_content_float(i,"Z",dbhandle);
    cache_get_field_content(i,"Name",jInfo[i][j_name],dbhandle,90);


    format(JobName, 24, "%s", bInfo[i][b_text]);
    strreplace(JobName, '_', ' ');
    format(string, sizeof string, "Um den Job '%s' anzunehmen\nTippe /annehmen job ein", jInfo[i][j_name]);
    bInfo[i][b_label] = CreateDynamic3DTextLabel(string, HBLAU, jInfo[i][j_x],jInfo[i][j_y], jInfo[i][j_z], 40, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1);
    bInfo[i][b_pickup] = CreateDynamicPickup(1239, 1, jInfo[i][j_x], jInfo[i][j_y], jInfo[i][j_z], 0);
    printf("Job ID %i wurde geladen; Name: %s", i, jInfo[i][j_name]);
    }
    return 1;
    }
    public OnPlayerCarsLoad(playerid)
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i< num_reihen; i++)
    {
    new id = getFreeCarID();
    cInfo[id][c_modelid] = cache_get_field_content_int(i,"modelid",dbhandle);
    cInfo[id][c_besitzer] = cache_get_field_content_int(i,"besitzer",dbhandle);
    cInfo[id][c_x] = cache_get_field_content_float(i,"x",dbhandle);
    cInfo[id][c_y] = cache_get_field_content_float(i,"y",dbhandle);
    cInfo[id][c_z] = cache_get_field_content_float(i,"z",dbhandle);
    cInfo[id][c_r] = cache_get_field_content_float(i,"r",dbhandle);
    cInfo[id][db_id] = cache_get_field_content_int(i,"id",dbhandle);
    cInfo[id][c_id]=CreateVehicle(cInfo[id][c_modelid],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],-1,-1,-1);
    }
    return 1;
    }
    SpielerLaden(playerid)
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    //Laden
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][adminlevel] = cache_get_field_content_int(0,"adminlevel",dbhandle);
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    sInfo[playerid][geld] = cache_get_field_content_int(0,"geld",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][frang] = cache_get_field_content_int(0,"frang",dbhandle);
    sInfo[playerid][skin] = cache_get_field_content_int(0,"skin",dbhandle);
    sInfo[playerid][wanted] = cache_get_field_content_int(0,"wanted",dbhandle);
    sInfo[playerid][payday] = cache_get_field_content_int(0,"payday",dbhandle);
    //Umsetzen
    SetPlayerSkin(playerid,sInfo[playerid][skin]);
    SetPlayerMoney(playerid,sInfo[playerid][geld]);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    return 1;
    }
    public OnFraktionLaden()
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i< num_reihen; i++)
    {
    new des[128];
    fInfo[i][f_id] = cache_get_field_content_int(i,"id",dbhandle);
    fInfo[i][f_name] = cache_get_field_content(i,"name",des,dbhandle);
    fInfo[i][f_x] = cache_get_field_content_float(i,"x",dbhandle);
    fInfo[i][f_y] = cache_get_field_content_float(i,"y",dbhandle);
    fInfo[i][f_z] = cache_get_field_content_float(i,"z",dbhandle);
    fInfo[i][f_inter] = cache_get_field_content_int(i,"interior",dbhandle);
    fInfo[i][f_skin] = cache_get_field_content_int(i,"skin",dbhandle);
    fInfo[i][f_kasse] = cache_get_field_content_int(i,"kasse",dbhandle);
    printf("Fraktion ID: %i geladen",fInfo[i][f_id]);
    }
    return 1;
    }


    Wie kann ich solche Fehler vermeiden? wie erkennen ich sie? in der Log steht nie eine Zeile oder sonstiges

    bInfo[i][b_besitzer] = cache_get_field_content(i,"Besitzer",des,dbhandle);
    zu:
    cache_get_field_content(i,"Besitzer",bInfo[i][b_besitzer],dbhandle,32);

    Danke dir hat wunderbar geklappt


    und wieder ein kleines problem haha :D:D


    Er sagt mir wenn ich /buybiz eingebe das die Firma ein Besitzer hat obwohl in der Datenbank Besitzer "None" steht
    stock IsBusinessOwned(businessid)
    {
    new query[200];
    format(query, sizeof(query), "SELECT Besitzer FROM `firma` WHERE ID = %i", businessid);
    new Cache:result = mysql_query(dbhandle, query);
    new rows = cache_num_rows();
    cache_delete(result);
    if(!rows ) return false;
    else return true;
    }
    ocmd:buybiz(playerid,params[])
    {
    for(new i = 0; i < MAX_BUSINESSES; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, bInfo[i][b_enterx], bInfo[i][b_entery], bInfo[i][b_enterz]))
    {
    if(!IsBusinessOwned(i))
    {
    if(GetPlayerMoney(playerid) < bInfo[i][b_preis]) return SendClientMessage(playerid, ORANGE, "Du hast nicht genug Geld um diese Firma zu kaufen!");
    UpdateBusinessOwner(i, SpielerName(playerid));
    }
    else return SendClientMessage(playerid,ORANGE,"Die Firma hat schon einen Besitzer.");
    }
    else SCM(playerid, WEISS, "Du bist nicht in der Nähe einer Firma!");
    }
    return 1;
    }

    wärs da auch möglich ein eher mehr dynamisches system zu machen wie z.B. das MySQL tutorial bei Jeffry bloß als Fahrzeug?


    Kann ja nicht einfach [MAX_PLAYERS] durch MAX_VEHICLES ersetzen da das Fahrzeug ja noch gar nicht existiert, brauche nämlich Fahrzeug-Daten aus der MySQL datenbank die zum Fahrzeug verlinkt sind ingame, am besten ohne dann immer ne endlos lange zeile mit cache_get und son kram


    z.B. Fraktions-ID bzw. Besitzer, Tank, KM-Stand

    die Grenze muss im Script festgelegt sein. daran hab ich auch mal gedacht aber ich wurde des besseren belehrt :D

    Kann bitte mal jemand erklären, wie man das Gamelode local zum laufen kriegt, wenn man hamachi nutzen möchte? Hab nie mit MySQL gearbeitet.

    Google? Informieren?


    Xampp Runterladen ---> Apache Server / Phpmyadmin installieren ---> Datenbank einspielen ---> Im Script die Daten ändern ---> Server Starten


    so einfach ist die geschichte

    Habe mal vor ein kleines MySQL Datenbank Fahrzeugsystem selber zu erschaffen da ich mal sehen will was ich noch kann und wie gut es geht.



    Da habe ich aber noch ein paar Fragen bevor ich richtig Anfange:
    Wenn ich jedes Fahrzeug spawnen will, was in der Datenbank ist, wie mache ich das denn am besten? Ne Schleife machen die jede ID in der Datenbank einmal auf und ab spawnt? Wie verhindere ich dass es dieselben Fahrzeuge auf einmal spawnt?

    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i < num_reihen; i++)
    {
    }


    durch cache_get_data fragst du die reihen und felder ab uns interessieren nur die reihen die vorhanden sind und die schleife die dafür da ist die FAhrzeuge zu erstellen ruft nur solange ab bis die maximale anzahl an reihen vorhanden sind ab.


    dadurch läd er nur das was vorhanden ist aus


    konnte ich es einigermaßen verständlich rüber bringen xD?

    stock IsBusinessCreated(businessid){ new query[200]; format(query, sizeof(query), "SELECT ID FROM `firma` WHERE ID = %i", businessid); new Cache:result = mysql_query(dbhandle, query); new rows = cache_num_rows(); cache_delete(result); if(!rows) return false; else return true;}


    Analog für den anderen stock.


    Ich habe das * zu ID geändert, da es reicht, wenn ein Feld ausgelesen wird, anstatt der ganzen Zeile.

    Probiere es gleich mal aus ich danke dir :)


    EDIT: Klappt wunderbar nur eine kleine Frage wie lass ich Text Felder aus der Datenbank auslesen?


    Und zwar ist mein Problem ich frage beim laden ab ob die Firma ein Besitzer hat und wenn es None ist das er [Kein Besitzer] ins TextLabel schreibt nun ist das Problem er schreib [Besitzer]: []


    Code:
    forward LoadBusinesses();
    public LoadBusinesses()
    {
    new num_felder,num_reihen;
    cache_get_data(num_felder,num_reihen,dbhandle);
    if(!num_reihen)return 1;
    for(new i = 0; i < num_reihen; i++)
    {
    new des[128], BizName[24], string[128],string3[128];
    bInfo[i][b_id] = cache_get_field_content_int(i,"ID",dbhandle);
    bInfo[i][b_preis] = cache_get_field_content_int(i,"Preis",dbhandle);
    bInfo[i][b_enterx] = cache_get_field_content_float(i,"EnterX",dbhandle);
    bInfo[i][b_entery] = cache_get_field_content_float(i,"EnterY",dbhandle);
    bInfo[i][b_enterz] = cache_get_field_content_float(i,"EnterZ",dbhandle);
    bInfo[i][b_exitx] = cache_get_field_content_float(i,"ExitX",dbhandle);
    bInfo[i][b_exity] = cache_get_field_content_float(i,"ExitY",dbhandle);
    bInfo[i][b_exitz] = cache_get_field_content_float(i,"ExitZ",dbhandle);
    bInfo[i][b_interior] = cache_get_field_content_int(i,"Interior",dbhandle);
    bInfo[i][b_world] = cache_get_field_content_int(i,"World",dbhandle);
    bInfo[i][b_text] = cache_get_field_content(i,"Text",des,dbhandle);
    bInfo[i][b_besitzer] = cache_get_field_content(i,"Besitzer",des,dbhandle);
    bInfo[i][b_minuten] = cache_get_field_content_int(i,"Minuten",dbhandle);
    bInfo[i][b_geld] = cache_get_field_content_int(i,"Geld",dbhandle);


    format(BizName, 24, "%s", bInfo[i][b_text]);
    strreplace(BizName, '_', ' ');
    if(!strcmp(bInfo[i][b_besitzer], "None", false))
    {
    format(string, sizeof string,"%s \n[Kein Besitzer]\nPreis: %i", BizName, bInfo[i][b_preis]);
    }
    else format(string, sizeof string, "%s [Besitzer]: %s\nTippe /enter um die Firma zu betreten", bInfo[i][b_text], bInfo[i][b_besitzer]);
    bInfo[i][b_label] = CreateDynamic3DTextLabel(string, GELB, bInfo[i][b_enterx],bInfo[i][b_entery], bInfo[i][b_enterz], 12, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1);
    bInfo[i][b_pickup] = CreateDynamicPickup(1272, 1, bInfo[i][b_enterx], bInfo[i][b_entery], bInfo[i][b_enterz], 0);
    format(string3,sizeof string3,"%s",bInfo[i][b_text]);
    if(IsBusinessOwned(i)) printf("Firmen ID %i wurde geladen; Name: %s", i, string3);
    }
    return 1;
    }

    Welche MySQL Plugin Version nutzt du?
    Müssen die Abfragen in den stock's bleiben? Man kann es zwar auch mit dem neusten Plugin so machen, ist aber (auch von mir) nicht empfohlen, da der Performancevorteil an der Stelle nicht greift. Kommt aber hier auf die Verwendung drauf an, eventuell muss es so sein. Poste, falls du dir nicht sicher bist, mal den Code, der die stock's aufruft.

    Aktuelle Mysql Version: https://github.com/pBlueG/SA-MP-MySQL/releases


    Sollte schon in den Stocks bleiben da abfragen darüber gestartet werden.


    Also kurz knapp ja es soll in den stocks bleiben :)

    Bräuchte hilfe folgenden code umzuschreiben


    bedeutet dieser Abschnitt muss umgeschrieben werden


    mysql_free_result();
    new rows = mysql_num_rows();
    mysql_free_result();
    if(!rows) return false;
    else return true;
    return 1;


    das sie in den neuen mysql versionen nicht mehr unterstützt werden, leider hab ich keine ahnung wie die befehle nun im aktuellsten mysql version heißen und funktionieren.

    Hab ein Problem mit meinem Biz System und zwar in dem Abschnitt


    Bekomme ich diese Errors



    Code
    Error 017: undefined Symbol "mysql_free_result"
    Error 017: undefined Symbol "mysql_num_rows"
    Error 017: undefined Symbol "mysql_free_result"

    bräuchte hilfe beim umschreiben :D

    Hab ein Problem mit meinem Biz System und zwar in dem Abschnitt



    Bekomme ich diese Errors



    Code
    Error 017: undefined Symbol "mysql_free_result"
    Error 017: undefined Symbol "mysql_num_rows"
    Error 017: undefined Symbol "mysql_free_result"

    lass die schleife unterbrechen sobald er einen der die vorausetzungen erfüllt gefunden hat (glaube nach den SetPlayerPOs darunter break; machen