setinterior Befehl klappt nicht Ganz

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 Community,


    Ich bin's mal wieder


    Ich habe ein Problem mit einem Command der nicht ganz klappt
    hab alles versucht entweder bin ich zu blöd oder ich bin einfach nur Blind von der Sonnenfinsternis ^^


    ocmd:setinterior(playerid,params[])
    {
    if(!isAdmin(playerid,4))return SendClientMessage(playerid,COLOR_RED,"Dein Adminrang ist zu niedrig.");
    new tmp_interior;
    if(sscanf(params, "fffi",tmp_interior))return SendClientMessage(playerid, COLOR_GREY, "{00A5FF}/setinterior {B3B3B3}[InteriorKoords] [InteriorID]");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5,hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    hInfo[i][h_interior] = tmp_interior;
    saveHaus(i);
    updateHaus(i);
    SendClientMessage(playerid,COLOR_DGREEN,"* Erfolgreich das Interior vom Haus geändert. *");
    return 1;
    }
    return 1;
    }


    Hoffe mir kann da einer Helfen


    MfG
    Jonny

  • if(sscanf(params, "fffi",tmp_interior))return SendClientMessage(playerid, COLOR_GREY, "{00A5FF}/setinterior {B3B3B3}[InteriorKoords] [InteriorID]");
    zu:
    if(sscanf(params, "i",tmp_interior))return SendClientMessage(playerid, COLOR_GREY, "{00A5FF}/setinterior {B3B3B3}[InteriorID]");

  • Dann muss es so aussehen:
    ocmd:setinterior(playerid,params[])
    {
    if(!isAdmin(playerid,4))return SendClientMessage(playerid,COLOR_RED,"Dein Adminrang ist zu niedrig.");
    new tmp_interior, Float:x, Float:y, Float:z;
    if(sscanf(params, "fffi",x,y,z,tmp_interior))return SendClientMessage(playerid, COLOR_GREY, "{00A5FF}/setinterior {B3B3B3}[InteriorKoords] [InteriorID]");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5,hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    hInfo[i][h_interior] = tmp_interior;
    hInfo[i][h_x] = x;
    hInfo[i][h_y] = y;
    hInfo[i][h_z] = z;
    saveHaus(i);
    updateHaus(i);
    SendClientMessage(playerid,COLOR_DGREEN,"* Erfolgreich das Interior vom Haus geändert. *");
    return 1;
    }
    return 1;
    }

  • Klappt aber er speichert nicht in der DB O.o ?


    Vergiss was ich gesagt habe xD bin heut verpeilt wegen der Sonnenfinsternis habe vergessen h_interior in saveHaus einzutragen


    Danke


    //Edit


    saveHaus(id)
    {
    new query[128];
    format(query, sizeof(query), "UPDATE haus SET besitzer='%s', h_preis='%i',ih_x='%f',ih_y='%f',ih_z='%f',h_interior='%i' WHERE id='%i'", hInfo[id][h_besitzer], hInfo[id][h_preis], hInfo[id][ih_x], hInfo[id][ih_y], hInfo[id][ih_z], hInfo[id][h_interior], hInfo[id][h_id]);
    mysql_function_query(dbhandle, query, false, "", "");
    return 1;
    }


    Glaub nicht das es so richtig ist

    Einmal editiert, zuletzt von JOK3R ()

  • SQL
    [18:21:07] [ERROR] CMySQLQuery::Execute[()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1
    [18:21:11] [ERROR] CMySQLQuery::Execute[()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''5' at line 1
  • Teste mal, ob es so geht:
    saveHaus(id)
    {
    new query[256];
    mysql_real_escape_string(hInfo[id][h_besitzer], query);
    format(query, sizeof(query), "UPDATE haus SET besitzer='%s', h_preis='%i',ih_x='%f',ih_y='%f',ih_z='%f',h_interior='%i' WHERE id='%i'", query, hInfo[id][h_preis], hInfo[id][ih_x], hInfo[id][ih_y], hInfo[id][ih_z], hInfo[id][h_interior], hInfo[id][h_id]);
    mysql_function_query(dbhandle, query, false, "", "");
    return 1;
    }


    Oder mysql_escape_string falls das andere nicht existiert.

  • Klappt immer noch nicht und wie ich schon vorher gesagt habe aus irgend einem grund wird das pickup entfernter :/


    //Edit
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup])
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][h_text])
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "{FFFFFF}.:{FF9600}Haus Information{FFFFFF}:.\nZum Verkauf\n{FF9600}Kosten: {FFFFFF}%i€\n{FF9600}/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_WHITE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "{FFFFFF}.:{FF9600}Haus Information{FFFFFF}:.\nBesitzer: {FFFFFF}%s\n{FF9600}/enter", hInfo[id][h_besitzer]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_WHITE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }

    Einmal editiert, zuletzt von JOK3R ()

  • Füge das bei OnGameModeInit ein:
    for(new i=0; i<sizeof(hInfo); i++)
    {
    hInfo[i][h_pickup] = -1;
    hInfo[i][htext] = Text3D:-1;
    }


    Und schreibe die Funktion so:
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup] != -1)
    {
    DestroyPickup(hInfo[id][h_pickup]);
    hInfo[id][h_pickup] = -1;
    }
    if(hInfo[id][h_text] != Text3D:-1)
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    hInfo[id][h_text] = Text3D:-1;
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "{FFFFFF}.:{FF9600}Haus Information{FFFFFF}:.\nZum Verkauf\n{FF9600}Kosten: {FFFFFF}%i€\n{FF9600}/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_WHITE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "{FFFFFF}.:{FF9600}Haus Information{FFFFFF}:.\nBesitzer: {FFFFFF}%s\n{FF9600}/enter", hInfo[id][h_besitzer]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_WHITE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }


    Das Pickup wird, bzw. sollte, an der Position erstellt werden, die du eingibst.



    Wenn es noch immer nicht in der Datenbank aktualisiert, dann schreibe die Funktion so:
    saveHaus(id)
    {
    new query[256];
    mysql_real_escape_string(hInfo[id][h_besitzer], query);
    format(query, sizeof(query), "UPDATE haus SET besitzer='%s', h_preis='%i',ih_x='%f',ih_y='%f',ih_z='%f',h_interior='%i' WHERE id='%i'", query, hInfo[id][h_preis], hInfo[id][ih_x], hInfo[id][ih_y], hInfo[id][ih_z], hInfo[id][h_interior], hInfo[id][h_id]);
    printf("query: %s", query);
    mysql_function_query(dbhandle, query, false, "", "");
    return 1;
    }


    Dann poste was im MySQL Log steht, und was im server_log.txt steht (beides!).

  • Na wirklich nichts kann nicht passieren, denn einen Log bekommst du ja mindestens, den hattest du auch vorhin bereits.
    Außerdem sollte in der server_log.txt eine Zeile geprintet werden, die mit "query: " anfängt.


    Per TeamViewer kann ich dir nicht helfen, da ich das zum einen nicht mache, außer in besonderen Fällen, und zum anderen bis Sonntag nicht zu Hause am PC bin.
    Schau bitte nach den Logs, solange das noch geht sehe ich keinen Grund dazu TeamViewer zu verwenden.

  • [22:24:00] query: UPDATE haus SET besitzer='Jonny_Miller', h_preis='250000',ih_x='0.000000',ih_y='0.000000',ih_z='0.000000',h_interior='6' WHERE id='1'
    [22:38:19] query: UPDATE haus SET besitzer='', h_preis='150000',ih_x='0.000000',ih_y='0.000000',ih_z='0.000000',h_interior='6' WHERE id='2'
    das ist das einzige was kommt

  • Das ist doch schonmal nicht nichts.


    Ich weiß zwar nicht wie dein neum aussieht, aber versuch es mal so:
    ocmd:setinterior(playerid,params[])
    {
    if(!isAdmin(playerid,4))return SendClientMessage(playerid,COLOR_RED,"Dein Adminrang ist zu niedrig.");
    new tmp_interior, Float:x, Float:y, Float:z;
    if(sscanf(params, "fffi",x,y,z,tmp_interior))return SendClientMessage(playerid, COLOR_GREY, "{00A5FF}/setinterior {B3B3B3}[InteriorKoords] [InteriorID]");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5,hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    hInfo[i][h_interior] = tmp_interior;
    hInfo[i][ih_x] = x;
    hInfo[i][ih_y] = y;
    hInfo[i][ih_z] = z;
    saveHaus(i);
    updateHaus(i);
    SendClientMessage(playerid,COLOR_DGREEN,"* Erfolgreich das Interior vom Haus geändert. *");
    return 1;
    }
    return 1;
    }


    Wenn das Fehler gibt, oder nicht geht, poste bitte das enum zu hInfo und wieder den Log.