[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • @Schwabbel:
    Entweder wird es ein Memoryleak werden, wo von ich eher wenig ausgehe, da wenn ein string gepusht wird, auch wieder released wird
    oder er wird wohl einfach verpuffen.


    Ja, das mit dem verpuffen hat mich jetzt halt verwirrt...aber lustig, dass sowas auch geht ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Wir sind doch schon viel weiter :rolleyes:


    @Schwabbel:
    Entweder wird es ein Memoryleak werden, wo von ich eher wenig ausgehe, da wenn ein string gepusht wird, auch wieder released wird
    oder er wird wohl einfach verpuffen.


    Ich geh einfach mal davon aus das dieser wert verpufft es wird eine Funktion aufgerufen mit den angegebenen werten beispiel
    CallLocalFunction


    CallLocalFunction("Test","sdf","Hallo",1,12.134);


    public Test(string[],val1,Float:flo)return printf("siehe %s %d %f",string,val1,flo);


    Output "Hallo",1,12.134


    CallLocalFunction("Test","sdf","Hallo");


    Output "Hallo", 0, 0.0000


    Es geht ja dabei nur legendlich um den aufruf einer Funktion an die die demenstsprechenden wert übermittelt werden, wie schon oben genannt.
    Daher kommt es auch nur darauf an das der String letztendlich nicht leer sein darf sonst sehe ich dabei kein Problem damit rum zu "spielen".

  • Es geht ja dabei nur legendlich um den aufruf einer Funktion an die die demenstsprechenden wert übermittelt werden, wie schon oben genannt.


    Wenn ich keinen Wert übergebe ist dieser in der Funktion logischerweise leer, ok in PAWN 0(NULL) aber seis drum :P

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Wenn ich keinen Wert übergebe ist dieser in der Funktion logischerweise leer, ok in PAWN 0(NULL) aber seis drum :P

    Eigentlich war es eine anspielung auf das Wort "Speicherleck"
    Denoch frag ich mich ob sowas überhaupt möglich ist generel mit Pawn ^^ hab zumindestens noch nie von solch einem Problem gehört.
    Außer jetzt die Probleme mit dem MySQL R7 plugin und paar generelle MySQL probleme.

  • Eigentlich war es eine anspielung auf das Wort "Speicherleck"
    Denoch frag ich mich ob sowas überhaupt möglich ist generel mit Pawn hab zumindestens noch nie von solch einem Problem gehört.
    Außer jetzt die Probleme mit dem MySQL R7 plugin und paar generelle MySQL probleme.


    Oh doch nach BlackAce gibt es die, wenn du z.B. sowas machst:


    string = "";


    //oder einen string returnst


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • string = "";


    Davon hab ich nie gesprochen, du hast dort nur das Problem, dass PAWN an einigen Stellen mehr speicher benötigt,
    deswegen ist es unsinnig so strings zuzuweisen.


    Das mit dem returnen von Strings ist nunmal so, da du Speicher verlangst, diesen aber nicht wieder freigibst, bzw freigeben kannst.


    Da dieser eigentlich nicht vorhanden ist

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • string = "";


    Was soll daran so böse sein als du kannst das auch mit variabeln machen new int = 'a' und buchstaben drin speichern je nach
    datentyp mehr oder weniger.


    @ BlackAce eigentlich werden ja nur die ganze Bytewerte weiter gegeben ? Ist ja bei Variabeln/Werten ja auch nicht anders die schwirren doch bestimmt
    auch nicht einfach so rum.


    beispiel:
    stock ...(..){
    new Beispiel[5] = "Test";
    return Beispiel;
    }


  • Jajaja :rolleyes:


    Wie hieß es doch:


    Ich soll strdel verwenden, weil ich so nicht das Lösche sondern nur Memory Leaks verursache... ^^


    was mit dem inhalt genau passiert kann ich dir beim neu definieren auch nicht sagen oder mit dem setzen der stringlänge auf 0.
    Ob dabei der inhalt wirklich weg ist hab ich noch nice getestet es gibt ja die funktion heapspace();
    könnte man ja mal rum probieren ^^.
    Ich geh dennoch mal davon aus das die bytewerte gelöscht oder überschrieben werden von dem string(array)


    //edit Ich arbeite persönlich dennoch gerne mit strdel um die string auch wirklich zu leeren und nix neu zu definieren.
    so wie auch beim zusammenfügen von string entweder
    strcat oder mempcy kommt natürlich auf die größe an des strings

  • Ich geh dennoch mal davon aus das die bytewerte gelöscht oder überschrieben werden von dem string(array)


    Davon ging ich auch aus...teste es mal ;)


    //Edit:


    Habe es getestet, bei beiden Fällen immer 15 kb:


    Fall1

    new string[6];
    string = "Hallo";
    string = "";
    printf("Heapspace: %d", heapspace() /1024);


    Fall2

    new string[6];
    string = "Hallo";
    strdel(string,0,6);
    printf("Heapspace: %d", heapspace() /1024);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Davon ging ich auch aus...teste es mal ;)


    Wie es immer heißt probieren geht über studieren ^^
    und wenn BlackAce recht hat hat man auch wieder was neues dazu gelernt und wenn ich Recht habe und dein vermutung haben auch wieder
    alle Seiten profitiert.
    --------------------------------


    Naja mit einem string kann man nicht viel sagen und vorallem wenn du dir das auch noch in kb ausgegeben lässt

  • Neuer Test:


    Test1

    new string[6],string2[5];
    string = "Hallo";
    string2 = "Test";
    string2 = "";
    string = "";
    printf("Heapspace: %d", heapspace());


    Test2

    new string[6],string2[5];
    string = "Hallo";
    string2 = "Test";
    strdel(string2,0,5);
    strdel(string,0,6);
    printf("Heapspace: %d", heapspace());


    Beides mal: 16320 Bytes...


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Ja ich glaub es dir hab das ganze mit 11 string 11 mal 200 Zeichen getestet


  • Beim returnen von string passiert auch nix also bei mir hat sich auch nix verändert es danach genau so viel memory verfügbar wie zuvor.
    Jedoch kann es auch sein das die funktion ungenau ist ^^.
    Leider kann man nicht mit amx_Allot arbeiten

  • Hast du denn das ganze auch mal mit, strings probiert die global sind und nicht mit welchen die später wieder befreit werden?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Hallo Leute,
    Unzwar wollte ich ebend ein paar sachen machen auf dem Server und mir viel auf das ich keine Bizzs mehr erstellen kann. Da ich MySQL Debug an hab habe ich mal nach geschaut und ich bekomme den Error:

    Code
    An error has occured. (Error ID: 1062, Duplicate entry '0' for key 'PRIMARY')


    Query:

    SQL
    INSERT INTO `bizz` (bName, bEnterX, bEnterY, bEnterZ, bLevelNeeded, bPreis, bMaxProds, bPriceProd) VALUES ('Neues Business', '1368.756225', '-1279.852294', '13.546875', '7', '250000', '250', '17')


    Tabellen Struktur:


    Kann mir jemand da weiter Helfen? :s Ich glaube aber das es am Code im Script liegt:
    stock mysql_CheckBizz(id)
    {
    new Query[128],count;
    format(Query, sizeof(Query), "SELECT * FROM `bizz` WHERE `bID` = '%i'", id);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    stock CreateBizz(Float:x,Float:y,Float:z,preis,lvl,maxprod,prodp)
    {
    for(new b = 0;b != MAX_BIZZ; b++)
    {
    if(mysql_CheckBizz(b) == 0){
    new query[512],string[256];
    format(query, sizeof(query), "INSERT INTO `bizz` (bName, bEnterX, bEnterY, bEnterZ, bLevelNeeded, bPreis, bMaxProds, bPriceProd) VALUES ('Neues Business', '%f', '%f', '%f', '%i', '%i', '%i', '%i')", x, y, z, lvl, preis, maxprod, prodp);
    mysql_query(query);
    LoadBizz(b);
    CreatePickup(1239, 1, BizzInfo[b][bEnterX], BizzInfo[b][bEnterY], BizzInfo[b][bEnterZ],-1);
    format(string, sizeof(string), "Zum Verkauf\n Preis: %d $\nLevel: %d\n",BizzInfo[b][bPreis], BizzInfo[b][bLevelNeeded]);
    BizzInfo[b][bLabelID] = Create3DTextLabel(string,COLOR_LIGHTBLUE,BizzInfo[b][bEnterX], BizzInfo[b][bEnterY], BizzInfo[b][bEnterZ]+1,22.0,0,0);
    return 1;
    } else continue;
    }
    return 0;
    }


    Danke
    Adrian


    /edit: Code ausm Script geaddet

  • public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/faq", true))
    {
    SendClientMessage(playerid,TUERKIS, "FAQ: Mit /motor startest du den Motor");
    return 1;
    }
    return 0;
    }
    Warum geht der Befehl nicht ?


  • Das kommt davon das der wert schoneinmal vorhanden ist daher setze auch die jeweilige spalte auf AUTO_INCREMENT

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen