Anfänger Fragen :D

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,
    ich bin blutiger Anfänger und hab mich hier im Forum neu angemeldet!
    Und ich suche gute und verständliche Tutorials ... leider hab ich noch nichts gutes gefunden :/
    Also die normalen Tutorials wo das GANZ einfachste und Grundlegendste erzählt wird hab ich natürlich schon gesehen.
    Mein größtes Problem liegt grad bei den Befehlen/Commands ^^


    Bei mir stehen folgende Fragen total offen:
    - wie kann ich ein Befehl erstellen der wie folgt aussehen soll /cmd [id] [text]
    z.b. soll ein Text zu einem bestimmten Spieler geschickt werden...
    - oder wie mach ich /kick bzw. /ban?
    - wie setz ich sowas um? /skin [skinid]


    ich hab mir ma ein Tutorial hier angesehen wie ich ein /me befehl erstelle jedoch klappt das überhaupt nicht :/
    if (strcmp(cmdtext, "/me", true) == 0)
    {
    new str[256];
    format(str, sizeof(str), "* %s %s", playername, cmdtext[4]);
    SendClientMessageToAll(WEISS, str);
    return 1;
    }


    Und wozu brauch ich überhaupt Filterscripts? Was Filtern die den? ^^


    Hoffe um hilfe :D

  • Du musst dcmd benutzen. Schaue dich hier im Forum nach den Tutorials um. Gibt einige davon. Kann dcmd nur empfehlen :)

  • if (strcmp(cmdtext, "/me", true) == 0)
    {
    new str[256];
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, sizeof(playername));
    format(str, sizeof(str), "* %s %s", playername, cmdtext[4]);
    SendClientMessageToAll(WEISS, str);
    return 1;
    }



    So sollte es gehen :D wenn nicht schick uns mal die Erros :)



    //E: PWN eingefügt
    //E2:Er muss kein dcmd nutzen erzähl doch kein mist :/

  • Für Skin machst du das :
    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;
    }

    Und unter dem Public OnPlayerCommandText den Befehl :
    if(!strcmp(strget(cmdtext, 0), "/skin")) //Was man eingeben muss in diesem fall /skin
    {
    new skinx = strval(strget(cmdtext, 1)); // Legt skinx als parameter fest
    if(skinx < 0 || skinx > 299) // Legt fest welche Zahlen man als Skin nutzen kann in diesem Fall alle Zahlen von 0 bis 299
    SetPlayerSkin(playerid, skinx); // Der Skin des Befehlsgeber´s wird auf "skinx" gesetzt :)
    return 1;
    }
    Kann noch Optimiert werden das da z.b steht wenn man nur /skin macht ohne ne Zahl anzugeben das dann kommt "Keine Gültige ID angegeben" o.ä
    Zeilen reinrücken kann man auch noch, muss man aber nicht.

  • Wenn du Blutiger Anfänger bist, wäre der erste Schritt sich mit Variablen aller Art vertraut zu machen, wie man diese schreibt, wie man sie einsetzt, wie man sie erstellt, wie man sie auslesen kann etc.


    Trotzdem, um auf deine Frage zurückzukommen..das sind alles Befehle mit Parametern. Hierfür gibt es verschiedene Methoden.


    Strtok
    Strget (Alternative von Strtok)
    Sscanf


    Ich persönlich schreibe meine Befehle mit Sscanf. Viele Wege führen nach Rom wie du weisst ^^

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • genau so hab ichs ja auch aber bei mir steht wenn ich was eingebe z.B. /me hallo das es ein unbekannter befehl ist und wenn ich einfach nur /me schreibe steht oben * VaTeR325 1
    PS: Du bist doch nicht der ToniMakkaroni den ich kenn? xDD


    @ Keymaster:
    OMFG !! Für mich sieht das aus wie Matrix X(
    wozu ist strget? was macht das den? :/


    Ich will doch nur z.B. /skin 285 eingeben und dann sollt ich ja ein SWAT Skin bekommen ^^


    Könnt ihr mir vllt paar Links posten, da ich nichtmal weiß wie und wonach ich suchen sollte xD


    Strtok
    Strget (Alternative von Strtok)
    Sscanf


    was bringt das? ^^ wann brauch ich das den? ^^


    PS: Momentan bin ich immer noch so schlau vom scripten her wie zuvor xD
    Und ich entschuldige mich für meine vielen Fragen :D
    Hoffe diese lösen sich im laufe dieses Threads auf :thumbup:

  • if (strcmp(cmdtext, "/me", true) == 0)
    {
    new str[256]; // Erstellt eine Variable vom Typ String
    new playername[MAX_PLAYER_NAME]; // Erstellt eine Variable, dessen Inhalt später der Spielername sein soll
    GetPlayerName(playerid, playername, sizeof(playername)); // GetPlayerName ist eine Funktion, in den Klammern sind die benötigen Angaben die die Funktion braucht um zu funktionieren.
    format(str, sizeof(str), "* %s %s", playername, cmdtext[4]); // Diese Zeile formatiert den String.
    SendClientMessageToAll(WEISS, str); // Hier wird der formatierte String gesendet.
    return 1;
    }


    Ist ja auch logisch, weil durch den Befehl einfach nur der Name des Spielers angezeigt wird. Ein Parameter wird hierbei nie übertragen.


    Was für dich wichtig wäre, wie schon gesagt, erstmal dich mit den ganzen Basic zu beschäftigen.


    Was sind Strings?
    Was sind Variablen?
    Was für Variablen Typen gibt es?
    Wann benutzt man welche Variablen Typen?
    Was sind Bedingungen und wie man benutzt man sie.


    Edit: Ich weiss das der Text nicht mit dem übereinstimmt was du hören willst, aber was bringt es dir wenn wir die Befehle posten die für dich nichtssagend sind.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

    2 Mal editiert, zuletzt von Addickted ()

  • Das hier ganz oben in OnPlayerCommandText:


    new
    index,
    cmd[20];
    cmd = strtok(cmdtext, index);


    Das hier irgendwo hin außerhalb eines Publics:

    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }



    Und hier der Command:



    if (strcmp(cmdtext, "/me", true) == 0)
    {
    new str[128], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    return SendClientMessage(playerid, WEISS, "/Me [Text]");
    }
    format(str, sizeof(str), "* %s %s", pname, tmp);
    SendClientMessageToAll(WEISS, str);
    return 1;
    }


    So, dass muss funktionieren.


    //Edit: Tutorial dazu: Klick

  • War ja nicht mein Befehl, der ist von wem anders geschrieben. 128 ist trotzdem richtig.
    Dennoch meint er glaube ich folgendes:


    Man gibt /me geht jetzt in die Bar zum trinken.


    Im Spiel soll dann stehen:


    MeinName geht jetzt in die Bar zum trinken. Ein Command mit Parameter halt und dafür gibt es ja mehrere Methoden, wie von mir oben erwähnt mit Strtok, Strget oder sscanf.


    Da dir diese Begriffe aber so ziemlich nichtssagend sind, solltest du dir wie von mir beschrieben erstmal Grundkenntnisse aneignen.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche