Command Problem

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
  • Ich habe den folgenden Command, der auch funktioniert. Dennoch kommt immer SERVER:Unknown Command, doch ich habe doch überall return 1 eingebaut wo es benötigt ist, oder?


    dcmd_f(playerid, params[])
    {
    new message[255];

    if(sscanf(params, "s[255]", message))
    {
    return SendClientMessage(playerid, COLOR_GREY, "VERWENDUNG: /f [Message]");
    }


    new name[MAX_PLAYER_NAME];
    new string[255];
    new string2[255];
    new faction;
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "/Users/%s.ini", name);
    faction = dini_Int(string, "Fraktion");
    format(string2, sizeof(string2), "(( %s: %s ))", name, message);

    if(faction == 0)
    {
    return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Member einer offiziellen Fraktion.");
    }
    else
    {
    for(new i = 0; i <= GetMaxPlayers(); i++) {

    if(gTeam[i] == gTeam[playerid]) {
    SendClientMessage(i, COLOR_BLUE, string2); }}
    return 1;
    }
    }

  • Ich habs dir ein klein wenig verbessert ;)
    dcmd_f(playerid, params[])
    {
    new message[128];
    if(sscanf(params, "s[128]", message)) return SendClientMessage(playerid, COLOR_GREY, "VERWENDUNG: /f [Message]");
    else
    {
    new name[20], string[128],faction;
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "/Users/%s.ini", name);
    faction = dini_Int(string, "Fraktion");
    format(string, sizeof(string), "(( %s: %s ))", name, message);
    // Hast du die Fraktion nicht in einer Variable gespeichert?
    if(faction == 0) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Member einer offiziellen Fraktion.");
    else
    {
    for(new i = 0; i <= GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && gTeam[i] == gTeam[playerid]) SendClientMessage(i, COLOR_BLUE, string2);
    }
    }
    }
    return 1;
    }
    2 Sachen, speicherst du die Fraktion nicht in irgendeiner Variable? :O Zweitens, hast du den Befehl definiert? Sprich
    dcmd(f,1, cmdtext);
    ?

  • Jo hab ich definiert. Und ich speichere die Fraktion in gTeam[playerid] und in einer .ini Datei um es nachher weider abzurufen. Ist doch richtig so oder?

  • Ein wenig :P
    dcmd_f(playerid, params[])
    {
    new message[128];
    if(sscanf(params, "s[128]", message)) return SendClientMessage(playerid, COLOR_GREY, "VERWENDUNG: /f [Message]");
    else
    {
    if(gTeam[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Member einer offiziellen Fraktion.");
    else
    {
    new name[20], string[128];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "(( %s: %s ))", name, message);
    for(new i = 0; i <= GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && gTeam[i] == gTeam[playerid]) SendClientMessage(i, COLOR_BLUE, string);
    }
    }
    }
    return 1;
    }
    Nochmals überarbeitet :P, wird der richtige Gamemode geladen, oder ists in nem Filterscript? Weil der Befehl ist richtig und müsste eigentlich funktionieren und nicht 0 returnen :wacko:
    /edit 2 rausgelöscht ;o

    Einmal editiert, zuletzt von ]hp[ ()

  • Na was seh ich denn da?
    Wo gibts denn bei euch einen string2?^^


    Das versteh ich jetzt garnicht mehr...


    P.S: Nein ist im Gamemode. Kannst du mir evt. Tipps geben was ich nächstes mal verbessern soll, wenn ich einen Command scripte?


    EDIT: Ich habe es mit deinem Script ersetz und nun klappt es, danke. Bitte noch meine Frage beantworten :S

    Einmal editiert, zuletzt von GiS ()

  • Statt z.B. für jede SendClientMessage einen neuen String kann man auch einfach einen String mit der Größe von 128 Bytes erstellen ( das ist das Limit was das Chatfenster ausgeben kann) und diesen für jede Message neu zu formatieren
    format(str, sizeof(str), "XYZ");
    SendClientMessage(....
    format(str, sizeof(str), "XYZ2");
    SendClientMessage(....

    Das spart Ressourcen. Bei Befehlen kann man zusätzlich noch alles an den Anfang stellen wo Variablen oder ähnliches überprüft werden wofür man keine Strings benötigt, spart auch wieder speicher, und erst wenn alle Bedingungen erfüllt sind Strings erstellen mit der geeigneten Größe und diese wiederverwenden ;)
    String Recycling sozusagen :thumbup:


    Was ich oft auch noch sehe
    new pname[MAX_PLAYER_NAME];
    4 Zeichen zuviel ;) atm unterstützt SA:MP nur Namen mit einer Länge von 20 Zeichen ( kann man nachprüfen, einfach mit einem Namen von > 20 Zeichen auf irgendeinen Server connecten), daher
    new pname[20];


  • Vielen Dank. ;)

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