Mehrfache nutzung eines Befehls

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
  • Guten Tag Freunde,


    meine Frage ist wieso zeigt er mir die Benutzung des Blitzer nicht an ?



    ocmd:blitzer(playerid, params[])
    {
    if(strcmp(params, "add", true) == 0)
    {
    if(!strlen(params)) return SendClientMessage(playerid, Grau, "[BENUTZUNG:] /blitzer [add] [Geschwindigkeit]");
    if(sscanf(params, "i", speed))return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit]");
    SendClientMessage(playerid, Gelb, "Moin 1");
    return 1;
    }
    else if(strcmp(params, "remove", true) == 0)
    {
    SendClientMessage(playerid, Gelb, "Moin 2");
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Es gibt nur add oder remove.");
    }


    Es müsste mir doch die [Benutzung] anzeigen ?

  • Ich hätte den Befehl anders aufgebaut, nur ein Vorschlag:



    ocmd:blitzer(playerid, params[])
    {
    new speed, method[12];
    if(sscanf(params, "si", method, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit]");
    if(method == "add") return SendClientMessage(playerid, Gelb, "Moin 1");
    else if(method == "remove") return SendClientMessage(playerid, Gelb, "Moin 2");
    return SendClientMessage(playerid, Rot, "Es gibt nur add oder remove.");
    }


    Ungetestet

  • Ich habe die Klammern nur weggelassen weil ich dachte dann sparst du dir Zeilen.
    Aber wenn du dich damit nicht so gut zurecht findest hier bitte mit klammern:



    ocmd:blitzer(playerid, params[])
    {
    new speed, method[12];
    if(sscanf(params, "s[12]i", method, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit]");
    if(method == "add") return
    {
    SendClientMessage(playerid, Gelb, "Moin 1");
    if(speed > 29 && speed < 151)
    {
    AddBlitzer(playerid, speed, 25);
    }
    }
    else if(method == "remove")
    {
    return SendClientMessage(playerid, Gelb, "Moin 2");
    }
    return SendClientMessage(playerid, Rot, "Es gibt nur add oder remove.");
    }

  • Danke für die Korrektur, stimmt sind ja auch nur Arrays^^
    Aber bei den ganzen Programmiersprachen kommt man auch mal durcheinander :D



    ocmd:blitzer(playerid, params[])
    {
    new speed, method[12];
    if(sscanf(params, "s[12]i", method, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit]");
    if(!strcmp(method, "add", true))
    {
    SendClientMessage(playerid, Gelb, "Moin 1");
    if(speed > 29 && speed < 151)
    {
    AddBlitzer(playerid, speed, 25);
    }
    }
    else if(!strcmp(method, "remove", true))
    {
    return SendClientMessage(playerid, Gelb, "Moin 2");
    }
    return SendClientMessage(playerid, Rot, "Es gibt nur add oder remove.");
    }

  • Leider funktioniert es aber nicht:



    ocmd:blitzer(playerid, params[])
    {
    if(isPlayerInFrakt(playerid, 2))
    {
    if(isPlayerFRang(playerid, 3))
    {
    new speed, funktion[16];
    new string[64], string1[128];
    if(sscanf(params, "si", funktion, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit] / [remove] / [removeall]");
    if(!strcmp(funktion, "add", true))
    {
    if(speed > 29 && speed < 151)
    {
    AddBlitzer(playerid, speed, 25);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(isPlayerInFrakt(i, 1) || isPlayerInFrakt(i, 2))
    {
    format(string, sizeof(string), "HQ: An alle Einheiten: Das System meldet:");
    format(string1, sizeof(string1), "HQ: Ordnungshüter %s hat einen Blitzer aufgebaut. Geschwindigkeit: %dkm/h.", SpielerName(playerid), speed);
    SendClientMessage(i, Meldung, string);
    SendClientMessage(i, Meldung, string1);
    }
    }
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Die Geschwindigkeit muss zwischen 30 und 150 km/h sein.");
    }
    else if(!strcmp(funktion, "remove", true))
    {
    SendClientMessage(playerid, Gelb, "Moin hier alle");
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Die Funktionen für den Blitzer sind [add] / [remove] / [removeall]");
    }
    return SendClientMessage(playerid, Rot, "Du musst mindestens Geselle sein um einen Blitzer aufzubauen.");
    }
    return SendClientMessage(playerid, Rot, "Du bist nicht berechtigt einen Blitzer aufzubauen.");
    }


    sobald ich /blitzer add 50 mache muss ich auch dan bei /blitzer remove 50 machen und es soll ja so sein:
    /blitzer add [Geschwindigkeit] und /blitzer remove

  • ocmd:blitzer(playerid, params[])
    {
    if(!isPlayerInFrakt(playerid, 2))return SendClientMessage(playerid, Rot, "Du bist nicht berechtigt einen Blitzer aufzubauen.");
    if(isPlayerFRang(playerid, 3))return SendClientMessage(playerid, Rot, "Du musst mindestens Geselle sein um einen Blitzer aufzubauen.");
    new speed, funktion[16], string[128];
    if(sscanf(params, "s", funktion)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit] / [remove] / [removeall]");
    if(!strcmp(funktion, "add", true))
    {
    if(sscanf(params, "si", funktion, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit]");
    if(speed > 29 && speed < 151)
    {
    AddBlitzer(playerid, speed, 25);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(isPlayerInFrakt(i, 1) || isPlayerInFrakt(i, 2))
    {
    format(string, sizeof(string), "HQ: An alle Einheiten: Das System meldet:");
    SendClientMessage(i, Meldung, string);
    format(string, sizeof(string), "HQ: Ordnungshüter %s hat einen Blitzer aufgebaut. Geschwindigkeit: %dkm/h.", SpielerName(playerid), speed);
    SendClientMessage(i, Meldung, string);
    }
    }
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Die Geschwindigkeit muss zwischen 30 und 150 km/h sein.");
    }
    else if(!strcmp(funktion, "remove", true))
    {
    SendClientMessage(playerid, Gelb, "Moin hier alle");
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Die Funktionen für den Blitzer sind [add] / [remove] / [removeall]");
    }


    Versuch es mal so

  • Schreib das mal so:


    ocmd:blitzer(playerid, params[])
    {
    if(!isPlayerInFrakt(playerid, 2)) return SendClientMessage(playerid, Rot, "Du bist nicht berechtigt einen Blitzer aufzubauen.");
    if(isPlayerFRang(playerid, 3)) return SendClientMessage(playerid, Rot, "Du musst mindestens Geselle sein um einen Blitzer aufzubauen.");
    new speed, funktion[16];
    if(sscanf(params, "s[16]D(0)", funktion, speed)) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit] / [remove] / [removeall]");
    if(!strcmp(funktion, "add", true))
    {
    if(!speed) return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [add] [Geschwindigkeit] / [remove] / [removeall]");
    if(speed <= 29 || speed > 151) return SendClientMessage(playerid, Rot, "Die Geschwindigkeit muss zwischen 30 und 150 km/h sein.");
    AddBlitzer(playerid, speed, 25);
    new string[64],string1[128];
    format(string1, sizeof(string1), "HQ: Ordnungshüter %s hat einen Blitzer aufgebaut. Geschwindigkeit: %dkm/h.", SpielerName(playerid), speed);
    format(string, sizeof(string), "HQ: An alle Einheiten: Das System meldet:");
    for(new i; i < MAX_PLAYERS; i++) {
    if(isPlayerInFrakt(i, 1) || isPlayerInFrakt(i, 2)) {
    SendClientMessage(i, Meldung, string),SendClientMessage(i, Meldung, string1);
    }
    }
    return 1;
    } else if(!strcmp(funktion, "remove", true)) {
    SendClientMessage(playerid, Gelb, "Moin hier alle");
    return 1;
    }
    return SendClientMessage(playerid, Rot, "Die Funktionen für den Blitzer sind [add] / [remove] / [removeall]");
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • [BE]axi92: Das ist ein optionaler Integer Parameter mit dem default Wert 0.

    Wie kennzeichnet man das, dass er optional ist? Großbuchstabe?


    Lösung:
    War mit der Annahme richtig unterwegs hier zu finden in der Doku: https://github.com/Y-Less/sscanf/wiki/Optional-Specifiers