Beiträge von namespace

    ich brauch keine schnelle festplatte das wäre nur von Bedeutung in PCs für Videobearbeitung und hohe Festplattenbenutzung

    Schwachsinn, beim Starten von einem Spiel oder einem Programm hängt die Ladezeit, Speicherzeit, etc. von der Festplatte ab.
    Außerdem hängt die Übertragungszeit von USB Medien hängt auch von der Festplatte ab.

    Wenn der Server crashed, muss dieser zu 90% per Hand wieder hochgefahren werden (wenn man kein automatisiertes System verwendet).
    Dabei können dann auch alle IP-Files per Hand gelöscht werden.
    Natürlich wäre es hier einfacher, die Dateien in einer separaten Datei zu speichern, und diese Liste dann beim Server-Start abzuarbeiten.


    Das soll lediglich die Funktionsweise eines solchen Schutzes zeigen - Wie bereits im 1. Post erwähnt, kann man das auf jedes andere Datei- und Datenbanksystem übertragen - Durch anderweitige Tutorials für das jeweilige gewünschte System, sollte das auch ohne eine Änderung dieses Tutorials möglich sein.


    Man könnte noch einbauen, dass es eine maximale Anzahl von gleichzeitig verbundenen IP-Adressen geben darf.

    Haha, so kann man die Probleme mit dem Volltexteditor natürlich auch umgehen ;)
    Da halte ich meine Lösung doch für deutlich komfortabler.


    In spätestens einigen Tagen gibts da aber eh ein Plugin für :)

    Ich benutze das Script schon seit längerem, und habe es nun noch etwas angepasst und released.
    Ein Plugin, welches die Funktionen und Callbacks automatisch in Links zum Wiki umwandelt habe ich für das WBB Lite sogar mal geschrieben, hatte dann aber keine Lust mehr, zum Text-Parser alle Funktionen und Callbacks hinzuzufügen.


    Gesagt sei aber, dass das Userscript nur in der Schnellantwort-Box funktioniert.

    Ich dachte mir, ich schreib mal ein kleines Tutorial (eigentlich eine Erklärung bzw. Aufklärung) zum Thema Strings und wie man am besten und einfachsten mit ihnen arbeitet.
    Das Tutorial ist anfängerfreundlich geschrieben, also bitte nicht gleich weinen, wenn ihr eine Zeile findet, die man sich hätte sparen können.


    Was sind Strings?


    Strings sind Arrays und Arrays sind prinzipiell Strings.
    In Pawn werden die Buchstaben einzeln gespeichert und wie Zahlen nach dem ACII-Code behandelt.
    Sie haben immer einen Null-Terminator am Ende, der 4 Bytes an Größe benötigt, was einer Zelle entspricht.



    Beispiel:



    new string[1];


    format(string, sizeof(string), "A");


    Würde nicht funktionieren, da der String zu klein für den Null-Terminator ist.
    Richtig wäre "new string[2];".


    Einen String deklarieren


    Ein String wird wie jede andere Variable mit dem Syntax-Word "new" eingeleitet.
    Dann folgt der Name und anschließen die Größe.
    <Syntaxwort>new <Name>hanspeter<Größe>[128];


    Beispiel:



    new hanspeter[128];


    Einem String einen Wert zuweisen


    Die einfachste Form, einen String einen statischen Wert zuzuweisen, ist per "=" Operator.


    Beispiel:



    new string[5] = "Test"; // Größe besteht aus [Buchstabenanzahl] + [Null-Terminator], also 4 + 1;


    Eine andere Möglichkeit wäre, den String mittels der format-Funktion einen Wert zuzuweisen.


    Beispiel:



    new string[5];


    format(string, sizeof(string), "Test");


    Außerdem ist es auch so möglich:



    new string1[5] = {'T', 'e', 's', 't'};
    new string2[5];


    string2[0] = 'T';
    string2[1] = 'e';
    string2[2] = 's';
    string2[3] = 't';


    Die String-Funktionen und wie man sie verwendet


    Nach dem wir jetzt unseren String initialisiert haben, möchten wir eventuell auch damit arbeiten.
    Dazu gibt ist einige String-Funktionen, die meist mit dem Prefix "str" beginnen.
    Im Anhang findet ihr alle aufgelistet.


    Zwei Strings vergleichen - strcmp


    "strcmp" steht für "String-Compare" was zu deutsch für das Vergleichen von Strings heißt.
    Mit dieser Funktion kann man überprüfen, ob zwei Strings den selben Inhalt haben.
    Die Funktion gibt 0 zurück, wenn die Strings gleich sind.


    Man übergibt der Funktion folgende Parameter:

    • String 1
    • String 2
    • [Ignore Case = false] - d.h. wenn dieser Parameter auf true gesetzt wird, ist es egal ob "TeSt" oder "test" - die Variablen wären gleich.
    • [Length = 0] - Länge der zu vergleichenden Chars. Bei einer Länge von 2 und den Strings "test" würde nur "te" mit "te" verglichen werden.


    Beispiel:



    new string1[5], string2[5];


    string1 = "Test";
    string2 = "Test";


    if (strcmp(string1, string2, false, 4) == 0)
    {
    // Die Strings sind identisch
    }


    Etwas in einem String finden - strfind


    Mit der Funktion strfind kann man die Position einer bestimmten Zeichenkette in einem String feststellen.
    Die Funktion gibt die Start-Position der gesuchten Zeichenkette in dem String zurück. Falls sie nicht gefunden wurde, wird -1 zurück gegeben.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String in dem die Zeichenkette gesucht werden soll.
    • String 2 - Der String, nach dem im String gesucht werden soll.
    • [Ignore Case = false] - Wenn der Wert auf true gesetzt wird, ist es egal ob man nach "TeSt" oder "test" sucht.
    • [Position = 0] - Start-Position ab der gesucht werden soll.


    Beispiel:



    new string[19];


    string = "Ich bin ein Satz.";


    new position = strfind(string, "Satz", false, 0); // Gibt 12 zurück, da sich das "S" von "Satz" der 12. Buchstabe des Strings ist.


    Einen Teil aus einem String löschen - strdel


    Um einen Teil aus einem String zu löschen, können wir "strdel" verwenden.
    Die Funktion gibt keinen Wert zurück, sondern ändert direkt den String, den wir der Funktion übergeben.


    Man übergibt der Funktion folgende Parameter:

    • String - Der String, aus dem etwas entfernt wird.
    • Start - Die Position, an der das Löschen begonnen werden soll.
    • End - Die Position, an der das Löschen beendet werden soll.


    Beispiel:



    new string[19];


    string = "Ich bin ein Satz.";


    strdel(string, 0, 4); // Der String "string" besteht nun aus der Zeichenkette "bin ein Satz".


    Eine Zeichenkette in einen String einfügen - strins


    Mit "strins" können wir eine Zeichenkette an einer bestimmten Position in einen String einfügen.
    Die Funktion gibt wie "strdel" keinen Wert zurück, sondern ändert den übergebenen String.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String, in den eine Zeichenkette eingefügt werden soll.
    • String 2 - Der String, der in den String eingefügt werden soll.
    • Position - Die Position, an der der String eingefügt werden soll.
    • [Max. Length = Size of String 2] - Die Anzahl der Chars von String 2, die maximal eingefügt werden.


    Beispiel:



    new string1[19];
    new string2[6];

    string1 = "Ich bin ein ";
    string2 = "Text.";


    strins(string1, string2, 12, sizeof(string2)); // Der String "string1" besteht nun aus "Ich bin ein Text."


    Die Größe eines String auslesen - strlen


    Mit "strlen" können wir die Anzahl der Zeichen in einem String auslesen (Ohne Null-Terminator).
    Die Funktion gibt die Anzahl der Zeichen des Strings zurück.


    Man übergibt ihr folgenden Parameter:

    • String - Der String, von der die Länge ausgelesen werden soll.


    Beispiel:


    new string[5];


    string = "Test";


    new length = strlen(string); // "length" hat nun den Wert 4.


    Etwas aus einem String auslesen - strmid


    Mit "strmid" können wir eine Zeichenkette aus einem String an einer bestimmten Position auslesen.
    Die Funktion gibt keinen Wert zurück, sondern ändert den übergebenen String.


    Man übergibt der Funktion folgende Parameter:

    • String 1 - Der String, in dem die gefundene Zeichenkette gespeichert werden soll.
    • String 2 - Der String, in dem eine Zeichenkette ausgelesen werden soll.
    • Start - Position, an der angefangen werden soll, auszulesen.
    • End - Position, an der aufgehört werden soll, auszulesen.
    • [Max. Length = Size of String 1] - Die maximale Anzahl an Zeichen, die ausgelesen werden sollen.


    Beispiel:



    new string[6];

    strmid(string, "Das ist ein Test!", 12, 17); // Der String "string" enthält nun "Test!".


    Einen String zu einer Zahl konvertieren - strval


    Mit der Funktion "strval" können wir einen String zu einer Zahl konvertieren.
    Die Funktion gibt den String der übergeben wird als Zahl zurück.


    Man übergibt der Funktion folgenden Parameter:

    • String - Der String, der zu einer Zahl konvertiert werden soll.


    Beispiel:



    new string[2];


    string = "5";


    new number = strval(string); // "number" hat nun den Wert 5.


    Ich habe nun die gängigsten Funktionen erklärt, es gibt noch ein paar mehr, auf die ich nicht eingegangen bin.
    Die findet ihr ebenfalls im Anhang.


    Die Funktionen lassen sich jetzt prima kombinieren, bspw. mit "strfind" und "strdel" um bspw. eine Funktion zu schreiben, mit der man in einem String eine Zeichenkette durch eine andere ersetzen kann.


    Anhang


    Hier findet ihr noch alle String-Funktionen:

    Verbesserungsvorschläge werden gerne angenommen - Feedback ist natürlich gerne gesehen.


    Lg, namespace.


    Edit 1: Verbesserungen (siehe: [ SCRIPTING ] String Handling - Was Strings sind und wie man mit ihnen arbeitet).
    Edit 2: Rechtschreibfehler ausgebessert.
    Edit 3: BlackAce's Erklärung eingebunden.
    Edit 4: Rechtschreibfehler ausgebessert.
    Edit 5: Link repariert.

    Ist logisch - return 1 sendet die Message intern an alle Spieler, obwohl du die Message ja schon manuell an alle sendest.
    return 0 blockt das interne Senden, und dann sendest du nur noch manuell.


    Du könntest das ganze umgehen, indem du einfach "text" entsprechend formatierst, das manuelle Senden weg lässt und dann 1 zurück gibst.

    Du könntest fixe IDs für die Items vergeben, und die Liste dann so anzeigen:


    "Bier | ID: 1"
    "Wein | ID: 2"


    Die Sortierung ist dann egal.
    Wenn der Benutzer nun auf "Benutzen" klickt, kommt ein Input-Dialog, indem man nun die ID eingibt.


    Es ist zwar etwas umständlicher, jedoch wäre das eine Lösung.


    Lg.

    Wer dafür ist schreibt : Bin dabei.
    Wer dagegen ist schreibt: ich bin nicht wirklich schlau.

    Welch' kindisches Verhalten.
    Wenn du schon etwas bewirken willst, solltest du es wenigstens ernst meinen.


    Außerdem wäre das in der Vorschlägs-Sektion besser aufgehoben.

    %d ist auch Integer. Glaube es macht auch keinen Unterschied ob %i oder %d.


    %d kann für größere Zahlen als %i verwendet werden.
    Wie hoch das ist, weiß ich momentan nicht, allerdings sollte man, wenn man sich nicht sicher ist, %d verwenden.