MySQL R5 Speichert meine Häuser nicht mehr, seit neuem Speichersystem.

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, es handelt sich diesmal um ein anderes Script !!!
    Ich habe versucht, das Haussystem ein bisschen besser Speichern zu lassen, jedoch klappt es nicht so gut, wie ich mir das Vorgestellt habe,
    warum und wodran das liegt weiß ich nicht, ich habe nur versucht einen Query ausführen zu lassen, anstatt soviele.
    Es wird nichts in die Datenbank gesetzt, nur die ID, alles ist dann auf 0.

    Variable oben im Script (Global)
    new bigsql[1024];


    So sieht das alte Haussystem aus (Funktionsfähige):
    stock SaveHaus(id)
    {
    if(Hausplaces[id][active]==0)return 1;
    format(query,sizeof(query),"UPDATE haus SET besitzer='%s',kosten='%i',haus_x='%f',haus_y='%f',haus_z='%f',e_haus_x='%f',e_haus_y='%f',e_haus_z='%f',verschlossen='%i' WHERE id='%i'",Hausplaces[id][besitzer],Hausplaces[id][kosten],Hausplaces[id][haus_x],Hausplaces[id][haus_y],Hausplaces[id][haus_z],Hausplaces[id][e_haus_x],Hausplaces[id][e_haus_y],Hausplaces[id][e_haus_z],Hausplaces[id][verschlossen],id);
    mysql_query(query);
    format(query,sizeof(query),"UPDATE haus SET player_spawn='%i',interior='%i',world='%i',miete='%i',money='%i',heal='%i' WHERE id='%i'",Hausplaces[id][player_spawn],Hausplaces[id][inter],Hausplaces[id][world],Hausplaces[id][miete],Hausplaces[id][money],Hausplaces[id][heal],id);
    mysql_query(query);
    format(query,sizeof(query),"UPDATE haus SET lmittel='%i',beds='%i',maxbeds='%i',trash='%i' WHERE id='%i'",Hausplaces[id][lmittel],Hausplaces[id][beds],Hausplaces[id][maxbeds],Hausplaces[id][trash],id);
    mysql_query(query);
    return 1;
    }


    So sieht das verbesserte System aus. (Fehlerhafte):
    stock SaveHaus(id)
    {
    if(Hausplaces[id][active]==0)return 1;
    format(bigsql,sizeof(bigsql),"UPDATE `haus` SET `besitzer`='%s',`kosten`='%i',`haus_x`='%f',`haus_y`='%f',`haus_z`='%f',`e_haus_x`='%f',`e_haus_y`='%f',`e_haus_z`='%f',`verschlossen`='%i',",Hausplaces[id][besitzer],Hausplaces[id][kosten],Hausplaces[id][haus_x],Hausplaces[id][haus_y],Hausplaces[id][haus_z],Hausplaces[id][e_haus_x],Hausplaces[id][e_haus_y],Hausplaces[id][e_haus_z],Hausplaces[id][verschlossen]);
    format(bigsql,sizeof(bigsql),"%s`player_spawn`='%i',`interior`='%i',`world`='%i',`miete`='%i',`money`='%i',`heal`='%i',",bigsql,Hausplaces[id][player_spawn],Hausplaces[id][inter],Hausplaces[id][world],Hausplaces[id][miete],Hausplaces[id][money],Hausplaces[id][heal]);
    format(bigsql,sizeof(bigsql),"%s`lmittel`='%i',`beds`='%i',`maxbeds`='%i',`trash`='%i',`hkoks`='%i',`hlsd`='%i',`hhanf`='%i',",bigsql,Hausplaces[id][lmittel],Hausplaces[id][beds],Hausplaces[id][maxbeds],Hausplaces[id][trash],Hausplaces[id][hkoks],Hausplaces[id][hlsd],Hausplaces[id][hhanf]);
    format(bigsql,sizeof(bigsql),"%s`hc4`='%i',`hmats`='%i' WHERE `id`='%i'",bigsql,Hausplaces[id][hc4],Hausplaces[id][hmats],id);
    mysql_query(bigsql);
    return 1;
    }


    Könnt ihr mir helfen, wie ich das vielleicht verbessern könnte und mir sagen was ich falsch gemacht habe ?
    Lg Dr.Brummer


    ps. Screens kann ich bei Bedarf anhängen !!!

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • Naja da er es immer wieder Formatiert wird letztes ende nur diese Zeile ausgeführt (In mysql_query)


    Nein, schau dir doch mal seinen Code an, der ist so aufgebaut:
    new string[128];
    format(string, sizeof(string), "Hallo");
    format(string, sizeof(string), "%s Welt!", string);
    print(string);
    //print gibt aus: "Hallo Welt!"


    Du kannst zwar auch strcat verwenden, aber das würde hier nichts ändern.


  • Ok das habe ich natürlich nicht gesehen.


    @Dr.Brummer


    Printe das Ende vom Query mal,


    Und zeige mal die mysql_debug.txt

  • Hallo CIBERKILLER: Danke für deine Antwort und für deine Hilfe, ich habe es diesmal mit strcat gemacht, dies funktioniert leider auch nicht so wie ich es gerne wollte, es ist immernoch das selbe Problem, es ist sogar noch viel schlimmer geworden.
    Hier mein gescripteter Code.


    stock SaveHaus(id)
    {
    new mainquery[2500];
    if(Hausplaces[id][active]==0)return 1;
    format(bigsql,sizeof(bigsql),"UPDATE `haus` SET `besitzer`='%s',`kosten`='%i',`haus_x`='%f',`haus_y`='%f',`haus_z`='%f',`e_haus_x`='%f',`e_haus_y`='%f',`e_haus_z`='%f',`verschlossen`='%i',",Hausplaces[id][besitzer],Hausplaces[id][kosten],Hausplaces[id][haus_x],Hausplaces[id][haus_y],Hausplaces[id][haus_z],Hausplaces[id][e_haus_x],Hausplaces[id][e_haus_y],Hausplaces[id][e_haus_z],Hausplaces[id][verschlossen]);
    strcat(mainquery,bigsql);
    format(bigsql,sizeof(bigsql),"`player_spawn`='%i',`interior`='%i',`world`='%i',`miete`='%i',`money`='%i',`heal`='%i',",Hausplaces[id][player_spawn],Hausplaces[id][inter],Hausplaces[id][world],Hausplaces[id][miete],Hausplaces[id][money],Hausplaces[id][heal]);
    strcat(mainquery,bigsql);
    format(bigsql,sizeof(bigsql),"`lmittel`='%i',`beds`='%i',`maxbeds`='%i',`trash`='%i',`hkoks`='%i',`hlsd`='%i',`hhanf`='%i',",bigsql,Hausplaces[id][lmittel],Hausplaces[id][beds],Hausplaces[id][maxbeds],Hausplaces[id][trash],Hausplaces[id][hkoks],Hausplaces[id][hlsd],Hausplaces[id][hhanf]);
    strcat(mainquery,bigsql);
    format(bigsql,sizeof(bigsql),"`hc4`='%i',`hmats`='%i' WHERE `id`='%i'",bigsql,Hausplaces[id][hc4],Hausplaces[id][hmats],id);
    strcat(mainquery,bigsql);
    mysql_query(mainquery);
    strdel(mainquery,0,sizeof(mainquery));
    strdel(bigsql,0,sizeof(bigsql));
    return 1;
    }


    ------------------------------------------------------------------------------------------------------------------------------------


    Hallo Jeffry: Danke auch für deine Hilfe und Antwort, ich habe hier 2 MySQL-Logs für dich, die erste ist vom ersten stock und die zweite ist vom zweiten
    Stock mit strcat.


    Ohne Strcat:

    SQL
    [Tue Aug 19 14:21:22 2014] Error (0): Failed to exeute query. Unknown column 'hc4' in 'field list'.


    Mit Strcat:

    SQL
    Gibt keine Fehler. (Nichts in der MySQL-Log)


    ------------------------------------------------------------------------------------------------------------------------------------------


    An beide: Ich habe das Problem lösen können, ich habe zwei Spalten nicht in der Datenbank eingebaut, nun geht es ohne Strcat.
    Und CIBERKILLER, es wird alles geupdatet, nicht nur die Zeile die du gegeben hast, es gibt keine weiteren Fehler.
    Nun lautet die Frage aber, soll ich strcat nehmen ? Oder mein erstes ? Welches ist besser ?
    Ich verstehe auch nicht warum es wegen 2 Spalten nicht geht. Ich dachte die werden übersprungen, naja.
    LG Dr.Brummer

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • Na @Dr.Brummer:


    ich rate dir bei strcat zu bleiben da es in meinen Augen übersichtlicher ist.
    Und meines Wissens auch besser, aber ich würde kein Geld auf mein Wissen setzen ;D


    Letztendlich solltest du danach gehen was du davon selbst besser kannst und besser findest.


    Mit freundlichen Grüßen
    PermanenT

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • strcat ist von dem Ressourcenverbrauch her besser als format.


    ABER:
    Da du hier nur 3 Zusammenfügungen hast, macht das für dich keinen Unterschied. Den merkst du erst, wenn du 1000 oder 10000 oder noch mehr Zusammenfügungen auf einmal machst. Bei deinen 3'en macht das ein paar Mikrosekunden aus, das ist praktisch nicht messbar. Es ist also relativ egal welches der beiden du hier verwendest.

  • Hallo, ich habe eine neue Definierung gemacht, für strcat.
    Die sieht jetzt genau so aus.


    new mainquery[2500];


    Nun ist der Heapspace voll, ich denke mit einen kleineren Array geht es nicht.
    Was kann man tun und ist das schlimm ? Es ist nur ungewohnt, jetzt beim Compilen zusätzlich noch die zeilen zu nutzen.
    query ist bei mir global definiert mit der Arraygröße 265.


    Hier die Heapspace-Zeilen.
    Header size: 23596 bytes
    Code size: 3688548 bytes
    Data size: 8338748 bytes
    Stack/heap size: 16384 bytes; estimated max. usage: unknown, due to recursion
    Total requirements:12067276 bytes

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • #pragma dynamic 100000


    Füge das oben mal ein.
    Wenn es immer noch nicht klappt, erhöhe die Zahl davon.

  • Jo, jetzt gehts wieder, danke, kannst du mir eventuell erklären, was das
    #pragma dynamic 100000


    Bewirkt hat ? Was diese Funktion macht ?

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • Jo, jetzt gehts wieder, danke, kannst du mir eventuell erklären, was das
    #pragma dynamic 100000


    Bewirkt hat ? Was diese Funktion macht ?


    Damit kannst du "die größe des zu verwendeten Heap und Stack festlegen", letztendlich bewirkst du nur das diese Meldung verschwindet:


    estimated max. usage: unknown, due to recursion

  • Da mehr Speicher reserviert wird, verbraucht es hinsichtlich der Größe des Skripts mehr Arbeitsspeicher.
    Aber ich kann dich beruhigen, das merkst du bei heutigen Maschinen nicht mehr, denn ob dein Server 100 MB RAM oder 500 MB RAM verbraucht ist relativ egal, da die meisten Server 8, 16, oder mehr GB haben. Wenn du bei einem Host einen Gameserver gemietet hast, dann vielleicht eher, aber auch da sollte das kein Problem sein, da ein Verbrauch von 300-500 MB eigentlich völlig ok ist, mehr zu schaffen ist schon relativ schwer.