Mit "strget" arbeiten [Tutorial]

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
  • Vorwort
    Hallo, ich wollte euch heute mal zeigen, wie man mit strget arbeitet!


    Als aller erstes, müsst ihr die Verkürzung von strtok scripten, alsostrget und das geht so:


    Ganz unten im Script:
    // strget
    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }


    Das alles nun zu erläutern, würde Anfänger nur durcheinander bringen, lediglich ist es einfach nur eine Abkürzung, des Komplizierten "strtok"!


    Teil 1.
    Da wir nun "strget" erstellt haben, erläutere ich mal kurz was es bringt!


    Mit strget, können wir Commands Scripten, welche mit ID´s zu tun haben z.b /skin [Skin ID] etc, zudem ist strget wesentlich einfacher als strtok, naja nicht so viel Theorie und gleich zur Sache!


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(strget(cmdtext, 0), "/skin")) // Der commando, wenn ihr ein cmd mit strget macht, müsst ihr immer (!strcmp(strget(cmdtext, 0), "/")) verwenden, da es ohne das strget und !strcmp nicht möglich ist...
    {
    if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,ROT,"Du bist kein Admin!"); //Überprüft, ob der Spieler Admin ist
    new skinx = strval(strget(cmdtext, 1)); //Beschreibt, was die erste Zahl nach /skin bedeutet, also bedeutet (cmdtext, "zahl") an welcher Stelle man z.b die Skin ID eintragen muss, im beispiel an erster Stelle nach /skin
    new giveplayeridx = strval(strget(cmdtext, 2)); //Erklärt sich ja eigentlich nun von selber, dies ist nun die playerid, welcher wir den Skin zu weisen wollen!
    if(skinx < 1 || skinx > 299) // das <1 || 299> heißt, wie Niedrig/Hoch die Zahl sein darf, bzw. hier sind nun Skin ID 1 bis 299 verfügbar, da dort < 1 (also von 1) || 299> (bis 299)
    if(giveplayeridx < 0 || giveplayeridx > 100) //Hier das selbe, nur mit der Playerid, hier jedoch nur 0 bis 100, wieso "0"? Weil der Erste player der Joint ID 0 hat :D
    {
    SendClientMessage(playerid, ROT, "Da ist was falsch, benutze /skin [SkinID] [SpielerID]"); //Wenn man vergisst eine ID zu schreiben, komm diese Fehlermeldung
    if(!IsPlayerConnected(giveplayeridx) && !IsPlayerNPC(giveplayeridx))return SendClientMessage(playerid, ROT, "Diese ID ist nicht vergeben!"); //Wenn eine Ungültige ID angegeben worden ist
    return 1;
    }
    SetPlayerSkin(giveplayeridx, skinx); //Wenn alles richtig ist, soll der skin, der angegebenen PlayerID, auf den angegebenen Skin gesetzt werden
    return 1;
    }
    return 0;
    }


    Das wars eigentlich auch schon, nur ein kleines Feines Tutorial für strget... wenn es etwas undeutlich/zu unerklärt ist, schreibt es bitte, ich werde versuchen es zu überarbeiten, da ich nicht genau wusste wie ich das jetzt formulieren sollte, aber zur Not sind ja noch die // Commends da :D


    Naja ich hoffe ihr habts verstanden ;) viel Spaß damit!

    Einmal editiert, zuletzt von Aarys ()

  • Man soll "die Verkürzung von stock scripten"? Ist doch Schwachsinn. Und ein Tutorial ist es auch nicht wirklich 0/10. BTW: Um Commands mit Parametern zu erstellen empfehle ich sscanf und nicht strget, zumal es viel einfacher und verständlicher ist.

  • Zitat

    Das alles nun zu erläutern, würde Anfänger nur durcheinander bringen, lediglich ist es einfach nur eine Abkürzung, des Komplizierten "stock"!

    Das einzige, was Anfänger durcheinander bringt, ist leider deine Erklärung X(


    Was mir aber auch sehr stört:
    Du sagst, man muss die Funktion strget scripten und forderst einen auf, sie ins Script unten einzufügen. Zwischen 'scripten' und CopyPaste sehe ich einen deutlichen Unterschied.


    Du gehst leider auch nicht darauf ein, dass strget auch für viele andere Sachen nützlich ist:
    Angenommen man möchte die Z-Koordinate in diesem String: "2151.251223|521.6123|17.241246|154.23124"
    new Float:ZZZ = floatstr(strget(coordstring,2,'|'));
    Dass man ein Trennzeichen außer dem Leerzeichen angeben kann, hast du leider nicht erwähnt.


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Also das verstehe ich jetzt nicht so ganz
    SendClientMessage(playerid, ROT, "Da ist was falsch, benutze /skin [SkinID] [SpielerID]"); //Wenn man vergisst eine ID zu schreiben, komm diese Fehlermeldung
    if(!IsPlayerConnected(giveplayeridx) && !IsPlayerNPC(giveplayeridx))return SendClientMessage(playerid, ROT, "Diese ID ist nicht vergeben!");
    return 1;

    Erst return und in der Zeile darunter return 1? Da machst nochmal überarbeiten ;)


    Ansonsten ist das Tutorial gut, ich habs mit strget verstanden jedoch bleib ich weiterhin bei sscanf 8o

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