Was geht denn hier nicht??

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 wollte folgenden Befehl machen.
    Damit kann man als Admin Häuser unkaufbar machen^^


    SendClientMessage(playerid, COLOR_GRAD1, "NUTZUNG: /hauk [MIETE] [NAME]");
    erscheint
    aber wenn ich was hinter hauk was eingebe kommt, dieser Befehl existiert nicht^^
    warum?


    if(strcmp(cmdtext,"/hauk",true) == 0)
    {
    if(IstAdmin(playerid,1999))
    {
    new miete;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "NUTZUNG: /hauk [MIETE] [NAME]");
    return 1;
    }
    miete = strval(tmp);
    for(new i = 0; i<MAX_HOUSES; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, HouseInfo[i][hEntrx], HouseInfo[i][hEntry], HouseInfo[i][hEntrz]))
    {
    if(!HouseInfo[i][hOwned])
    {
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[66];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(!strlen(result))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /HAUK [Miete] [Name]");
    return 1;
    }
    format(HouseInfo[i][hOwner], 24, (result));
    HouseInfo[i][hOwned] = 1;
    HouseInfo[i][hRentable] = 1;
    HouseInfo[i][hRent] = miete;
    UpdateHouseLabel(i);
    SendClientMessage(playerid, Grun, "Haus ist nun verkauft");
    SaveHouses();
    return 1;
    }
    }
    }
    }
    return 1;
    }

  • Ich habs so gemacht
    new miete;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "NUTZUNG: /hauk [MIETE] [NAME]");
    return 1;
    printf("D 0");
    }
    printf("D 1");
    miete = strval(tmp);


    D 0 kommt
    D 1 Nicht

  • Mal versucht das Ergebnis zu interpretieren ? Denn darum geht es eigentlich,ohne kommst auch nicht weit.
    Das bedeutet ja,dass er in diese Bedingung "if(!strlen(tmp))" wahr ist und sowieso durch das "return 1;" die Funktion beendet.

  • Ja.Würde dir jetzt sowieso direkt lieber zu sscanf + ZCMD raten,da läuft es viel einfacher ab.
    Lass dir doch per Debugnachrichten noch mehr ausgeben.
    zB cmdtext , tmp , länge_von( tmp ) .


    Außerdem bezweifel ich,dass "printf("D 0");" wirklich kommt. Denn nach einem return wird die Funktion beendet, dass printf wäre nie aufgerufen worden. Zusätzlich hättest auch noch einen Warnung vom Compiler bekommen ;).

  • Sry nein, hatte es ja vor dem return 1; ^^
    /e ich teste es mal so^^


    Gut mit zcmd gehts :D
    Nur alle anderen Befehle gehen dann nicht mehr :thumbdown:
    Es heißt Unknown Command ?(


    /e² ah ok, OnPlayerCommandReceived(playerid, cmdtext[])^^