Hilfe mit n paar Befehlen

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
  • Hi


    Ich benötige mal wieder eure hilfe bei ein paar Befehlen.


    Also zum ersten hab ich sowas heir. Ein admin gravitations Script.
    if(strcmp(cmd, "/gravity", true) == 0) {
    new tmp[256];
    tmp = strtok(cmdtext, idx);


    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_WHITE, "USAGE: /gravity [Wert]");
    return 1;
    }


    SendRconCommand("gravity tmp");


    format(string, sizeof(string), "Der Admin hat die Schwerkraft in %s geändert", tmp);
    SendClientMessageToAll(COLOR_YELLOW, string);




    return 1;
    }


    Leider funktioniert es nur Teilweise die Schwerkraft wird zwar geändert, wenn ich 0 nehme, wenn ich aber wieder 0.008 mache, schweben die Leute immer noch.



    ______________


    Der zweite Befehl ist ein /me Befehl. Ich habe über die SuFu ein Tutorial gefunden, das aber nur halb funktioniert.

    if(strcmp(cmdtext, "/me", true)==0)
    {
    new str[256], sname[256];
    GetPlayerName(playerid, sname, 256);
    format(str, 256, "%s %s", sname, cmdtext[4]);
    SendClientMessageToAll(0x33CCFFAA, str);
    return 1;
    }
    Ich muss aber immer erst "/me hat hunger" machen, und dann kommt Unknown Command. Wenn ich danach nur "/me" schreibe, wird die Nachricht gezeigt.


    Ich hoffe ihr könnt mir da einen hinweis geben, was ich falsch mache.

    Einmal editiert, zuletzt von M@tz3 ()

  • 1.) Solltest du auf deine Stringgrößen achten, 256 ist für normale strings viel zu hoch, für Namen erst recht (normale strings zum Nachricht senden max. 128, bei Namen gibts extra MAX_PLAYER_NAME)
    2.) Kann du nicht einfach "gravity tmp" als rcon senden. Du musst deinen string (in deinem Fall tmp) erst in eine Zahl umwandeln und diese dann per Rcon senden. Als Besipiel:
    // string erstellen (auf Stringgröße achten) -> in meinem Beispiel string
    string = strtok(cmdtext, idx);
    if(string[0] == 0) return SendClientMessage(playerid, FARBE, "Falsche Eingabe"); // ist der string leer?
    new
    Float:value = floatstr(string);; // string zu Float -> Float in neu erstelltem "value" speichern
    /*
    für Integer:
    new
    value = strval(string); // String in normale Zahl -> Zahl in "value" speichern


    */


    // Da es ein Float sein muss (z.B. 0,008) musst du hier zum Formatieren %f anstatt %d (Integer) oder %s (Strings) benutzen
    format(string, sizeof(string), "gravity %f", value); // String formatieren, du kannst den gleichen string hierfür nehmen, den anderen brauchts nimmer !
    SendRconCommand(string); // Rcon Command absenden mit formatiertem string
    3.) /me ist 3 Zeichen lang
    Der "/" hat den Index 0, "m" die 1 und "e" die 2.
    Ein funktionierender /me Befehl findest du hier, vergleich mal mit deinem und du weisst, was ich damit meine. Die EIngabe des Spielers solltest du auch Überprüfen..
    http://wiki.sa-mp.com/wiki/Using_strcmp%28%29

  • Danke es funktioniert jetzt alles.


    Ein Danke an "Mann im Mond" und an "Sampkiller", der mir beim oberen Befehl geholfen hat.


    Ich hätte da jetzt noch ne Frage:


    Wie kann ich einen Befehl mit Variable für verschiedene Funktionen nutzen?
    also z.b.
    wenn ich "/officer papiere" schreibe, dass dann ein Gametext erscheint.
    und wenn ich "/officer strafe" mache, das n andrer gametext erscheint.


    Geht das?
    Oder kann ich einen normalen Command mit leerzeilen verwenden?

  • Na ja Matze hatte schon auf eine gewisse Art Recht, dein eigentlicher Befehl lautet /officer und an den hängst du Parameter an, wie in deinem Beispiel einen string. Hier mal ein kleines Beispiel
    // OnPlayerCommandText
    new
    string[128];
    string = strtok(cmdtext, idx);
    if(strcmp(string, "/officer", true) == 0)
    {
    // Spieler hat /officer eingeben
    string = strtok(cmdtext, idx);
    if(strcmp(string, "strafe", true) == 0)
    {
    // Spieler hat "/officer strafe" eingeben
    string = strtok(cmdtext, idx);
    if(string[0] == 0) return 1; // Falsche Eingabe
    new
    value = strval(string);
    format(string, sizeof(string), "Du hast /officer strafe %d eingeben", value);
    SendClientMessage(playerid, FARBE, string);
    // usw.
    }
    else if(strcmp(string, "Papiere", true) == 0)
    {
    // Spieler hat "/officer papiere" eingeben
    string = strtok(cmdtext, idx);
    if(strcmp(string, "führerschein", true) == 0)
    {
    // Spieler hat /officer papiere führerschein eingeben
    // usw.
    }
    // usw.
    }
    // usw.
    }
    return 1;