[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
  • Beitrag von Exqoolz ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Drück mal F5 wenn du im Spiel bist. Was steht da bei den erstellten/angezeigten Objekten? Möglicherweise hast du das Limit fast erreicht. Dann darfst du (nicht wie im pastebin) die Objekte mit CreateObject erstellen, sondern musst diese auch mit dem Streamer erstellen.

  • format(string, sizeof(string), "Administrator %s(ID:%d) hat allen Spielern Level "%d\ gegeben"", pName(playerid), playerid, id);
    zu:
    format(string, sizeof(string), "Administrator %s(ID:%d) hat allen Spielern Level %d gegeben.", pName(playerid), playerid, id);

  • Jedes mal wenn jemand stirbt, kommt dieser Debug.
    [16:30:10] [debug] Run time error 4: "Array index out of bounds"
    [16:30:10] [debug] Accessing element at index 65535 past array upper bound 999
    [16:30:10] [debug] AMX backtrace:
    [16:30:10] [debug] #0 0003ca84 in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at D:\Server SVT\gamemodes\selfmade.pwn:2053


    Zeile 2052: SendDeathMessage(killerid,playerid,reason);
    Zeile 2053: killstreak[killerid]++;
    Zeile 2054: killstreak[playerid] = 0;

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Weder noch. Es wird nur das Endzeichen an erste Stelle gesetzt, sodass bei String-Ausgaben nichts mehr angezeigt wird. An sich völlig nutzlos.


    new string[10];
    string = "abcdefgh";
    printf("%c | %s", string[3], string);
    string[0] = '\0';
    printf("%c | %s", string[3], string);

    Zitat

    [28/05/2015 16:50:20] d | abcdefgh
    [28/05/2015 16:50:20] d |

  • Also ich brauche nur das für die Tabelle , da bei INT nicht mehr als 3 Stellen angezeigt werden obwohl es 16 STellig ist.


    ...Eine Ip ist ein String, da du ja auch . drinnen hast ;)


    Jeffry:


    Das ist nicht nutzlos, das ist so als würdest du den String löschen (schnellere Alternative zu strdel) :)


    new x[] = "Hallo";
    x[0] = '\0';
    strcat(x,"Noob");
    print(x); //-> Noob

    ast2ufdyxkb1.png


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

  • das ist so als würdest du den String löschen


    Nur, weil du ein EOS da hinsetzt, ist der String nicht gelöscht.


    Pawn liest nur nicht weiter und hält ihn deswegen für leer, das ist nicht so als würde man ihn löschen.
    Man nutzt nur einen Fehler in der stringlibary,.
    Die eigentliche Version, von PAWn die SA:MP nutzt kann eigentlich gar nicht mit strings arbeiten.
    Das wurde nur von SA:MP Team eingepflegt.


    new x[] = "Hallo";
    x[0] = '\0';
    print(x[1]); // -> allo
    strcat(x,"Noob");
    print(x); //-> Noob

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

    Margarete Stokowski

  • Nur, weil du ein EOS da hinsetzt, ist der String nicht gelöscht.


    Du...das ist mir auch klar und das hat doch schon Jeffry in seinem Post geschrieben.


    Ich wollte damit nur sagen, dass man dadurch strcat nutzen kann oder auch alle anderen String-Funktionen und die behandeln das dann so, als ob der String "gelöscht" wurde...

    ast2ufdyxkb1.png


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

  • Wäre der String gelöscht, wäre das "u" nicht mehr da.


    ...zum 3.x ja ich denke jetzt hat es jeder verstanden, da aber das EOS verschoben wird, existiert das "u" zwar im Speicher, aber gehört nicht direkt mehr zu dem String :rolleyes:


    ...es war nur eine Ergänzung, dass man so strings für die Funktionen quasi "leeren" kann...

    ast2ufdyxkb1.png


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

  • ...es war nur eine Ergänzung, dass man so strings für die Funktionen quasi "leeren" kann...


    Die Variable ist auch nicht "quasi" leer, sie ist gar nicht leer. Man nutzt nur einen Fehler, wie BlackAce sagte. Jetzt stell dir mal vor (die Vorstellung ist bei SA-MP zwar etwas absurd, aber generell) du hast in der Variable sensible Daten, von mir aus eine Kontonummer. Du "leerst" nun die Variable nach deiner Methode, es folgt etwas Code und dann übergibst du den Wert der Variable (wohlgemerkt den neuen) an eine andere Variable und nehmen wir mal an das läuft über eine Schnittstelle in ein anderes System, vielleicht extern. Derjenige Programmierer bekommt dadurch dann möglicherweise Zugriff auf die Kontonummer, wenn du Pech hast, sie steht ja schließlich (wie das "u") noch in der Variable drin. Ich denke ich muss das nicht weiterführen, es ist klar auf was das hinauslaufen kann, wenn man sich solcher vermeintlich nützlichen Dinge betätigt.


    Außerdem wäre eine direkte Zuweisung (x = "Noob";) wesentlich performanter und hat das gleiche Ergebnis (mal von obiger Hypothese abgesehen, da das Problem dort auch existiert).
    Willst du das Problem wirklich umgehen und den Speicher wirksam leeren (sodass kein sinnvoller Zugriff mehr darauf besteht), musst du ihn entweder überschreiben oder memcpy verwenden (was übrigens gleich schnell ist aber nur eine Zeile Code benötigt).