Problem mit /check Befehl

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
  • Huhu, immer wenn ich meinen Befehl (/check [ID]) ausführen möchte kommt SERVER: UNKNOWN COMMAND.
    Ich weiß leider nicht woran das liegt, zumal dieser Fehler erst seit kurzem Auftritt.


    Das ist mein Check Befehl:


    if(strcmp(cmd, "/check", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /check [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    Stats(playerid,giveplayerid);
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler wurde nicht gefunden!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht befugt!");
    }
    }
    return 1;
    }


    An der Funktion Stats(playerid,giveplayerid) kann es eigtl. nicht nur liegen, da diese Funktion auch bei /stats abgerufen wird und der /stats Befehl funktioniert einwandfrei.


    Wäre nett wenn mir jemand helfen könnte :)


    lg

  • if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    Stats(playerid,giveplayerid);
    }
    }


    zu



    if(giveplayerid != INVALID_PLAYER_ID)
    {
    Stats(playerid,giveplayerid);
    }


    Die Funktion "ReturnUser" sollte standardmäßig INVALID_PLAYER_ID zurückgeben, wenn der Spieler nicht Connected ist. Irgendwie kommt das Script dann aber nicht damit zurecht, wenn dort mittendrin eine -1 (also INVALID_PLAYER_ID) auftaucht. Zumindest war das mal bei mir so.


    Mfg,
    UncleSub

  • UncleSub Geht leider nicht, trotzdem Danke :)


    Ich habe den Befehl mal in dcmd umgeschrieben, sieht jetzt so aus:

    dcmd_check(playerid, params[])
    {
    if(PlayerInfo[playerid][pAdmin] == 0) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Admin!");
    new pID;
    if(sscanf(params, "i", pID)) return SendClientMessage(playerid, COLOR_GREY, "Befehl: /check [Player ID]");
    if(pID != INVALID_PLAYER_ID)
    {
    Stats(playerid,pID);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler wurde nicht gefunden!");
    }
    return 1;
    }


    Und wenn es von Bedeutung ist, ich hatte vorher auch ein Problem mit Stats, siehe hier, ist nun allerdings gelöst.
    Dieser Teil meiner Stats Funktion sieht nun so aus:
    new string[1220],string1[800],string2[620];
    format(string1, 800, "{00E500}======[Stats von %s auf GTA-Investigated Reallife]======\n{FF0000}*Allgemeines------------------------\n{FFFFFF} Level\t\t\t\t[%d]\n PayDay\t\t\t\t[in %d Minuten]\n Telefonnummer\t\t\t[%d]\n Verheiratet mit\t\t\t[%s]\n Spawnenergie\t\t\t[%.1f]\n Geschlecht\t\t\t[%s]\n Herkunft\t\t\t[%s]\n Alter\t\t\t\t[%d]\n Job\t\t\t\t[%s]\n{FF0000}*Fraktion/Gang---------------------{FFFFFF}\n Organisation\t\t\t[%s]\n Rang\t\t\t\t[%s]\n Familie\t\t\t\t[%s]\n",
    name,level,60-PlayerInfo[targetid][pPlayMinutes],pnumber,married,shealth+50.0,atext,otext,age,jtext,ftext,rtext,f2text);
    format(string2,620," Zuschuss\t\t\t[%d$]\n{FF0000}*Besitz------------------------------{FFFFFF}\n Premium Rang\t\t\t[%s]\n Kills & Deaths\t\t\t[%d / %d]\n Bargeld\t\t\t[%d$]\n Bankkonto\t\t\t[%d$]\n Materialien/Drogen\t\t[%d / %d]\n Verwarnungen\t\t\t[%d]\n Respektpunkte\t\t\t[%d / %d]\n Lv. Up kosten\t\t\t[%d $]\n Lotto Nr.\t\t\t[%d]",
    PlayerInfo[targetid][pGehalt],drank,kills,deaths,cash,account,mats,drugs,PlayerInfo[targetid][pWarns],exp, expamount,costlevel,lotto);
    format(string,1220,"%s%s",string1,string2);
    ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Ok","");


    //Edit Rechtschreibfehler

    Einmal editiert, zuletzt von clruler ()

  • new string[1220],string1[800],string2[620];
    format(string1, 800, "{00E500}======[Stats von %s auf GTA-Investigated Reallife]======\n{FF0000}*Allgemeines------------------------\n{FFFFFF} Level\t\t\t\t[%d]\n PayDay\t\t\t\t[in %d Minuten]\n Telefonnummer\t\t\t[%d]\n Verheiratet mit\t\t\t[%s]\n Spawnenergie\t\t\t[%.1f]\n Geschlecht\t\t\t[%s]\n Herkunft\t\t\t[%s]\n Alter\t\t\t\t[%d]\n Job\t\t\t\t[%s]\n{FF0000}*Fraktion/Gang---------------------{FFFFFF}\n Organisation\t\t\t[%s]\n Rang\t\t\t\t[%s]\n Familie\t\t\t\t[%s]\n",
    name,level,60-PlayerInfo[targetid][pPlayMinutes],pnumber,married,shealth+50.0,atext,otext,age,jtext,ftext,rtext,f2text);
    format(string2,620," Zuschuss\t\t\t[%d$]\n{FF0000}*Besitz------------------------------{FFFFFF}\n Premium Rang\t\t\t[%s]\n Kills & Deaths\t\t\t[%d / %d]\n Bargeld\t\t\t[%d$]\n Bankkonto\t\t\t[%d$]\n Materialien/Drogen\t\t[%d / %d]\n Verwarnungen\t\t\t[%d]\n Respektpunkte\t\t\t[%d / %d]\n Lv. Up kosten\t\t\t[%d $]\n Lotto Nr.\t\t\t[%d]",
    PlayerInfo[targetid][pGehalt],drank,kills,deaths,cash,account,mats,drugs,PlayerInfo[targetid][pWarns],exp, expamount,costlevel,lotto);
    format(string,1220,"%s%s",string1,string2);
    ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Ok","");


    Nuztze strcat dafür. Einfacher und Ressourcenfreundlicher. :thumbup:


    Mfg


    Edit: Außerdem sind deine strings viel zu lang, und du brauchst gar nicht so viele.

    Einmal editiert, zuletzt von UncleSub () aus folgendem Grund: Was vergessen

  • Was genau klappt denn nicht? Kommt die Message: "Spieler nicht gefunden"?
    Wenn ja mach mal einfach:


    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, COLOR_GREY, "Befehl: /check [Player ID]");


    Das u ist in sscanf eine extra Funktion, dadurch gibt er dir direkt die Spielerid aus, egal ob du einen Teil des Namens, oder den ganzen Namen eingibst.


    Danach einfach


    if(IsPlayerConnected(pID))


    Mfg

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Auch beim dcmd Command? Das war meine Frage.
    Beim dcmd sieht eig alles soweit in Ordnung aus, bis darauf, dass du eine Spielerid eingeben lassen willst, und dann prüfst ob diese id INVALID_PLAYER_ID ist. Das kann ja natürlich nicht sein, weil du eine Spielerid eingibst die eben nicht INVALID_PLAYER_ID (-1) ist. Mach dort IsPlayerConnected.


    Mfg

  • Ja auch beim dcmd, das mit IsPlayerConnected hab ich auch schon geändert, der Fehler tritt aber immernoch auf.


    //edit: Weiß niemand die Lösung?
    //edit2: Ich habe nun sogar schon Stats(playerid,giveplayerid); durch den Inhalt der Stats Funktion ersetzt, doch leider tritt der Fehler immernoch auf, weiß hier niemand die Lösung?


    @Schwabbel ?
    @Blackace ?


    lg

    2 Mal editiert, zuletzt von clruler ()


  • if(!strcmp(cmd, "/check", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /check [Spieler ID]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    Stats(playerid,giveplayerid);
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler wurde nicht gefunden!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht befugt!");
    }
    }
    return 1;
    }


    Teste mal das ;)


    MFG Arendium

  • @Arendium Entweder if(!blalal) oder if(blalal == 0)


    _______________


    Probier das mal:


    if(!strcmp(cmd, "/check", true))
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    tmp = strtok(cmdtext, idx); // Hoffentlich hast du die Variable irgendwo erstellt
    if(sscanf(tmp, "u", giveplayerid))) // Hoffentlich hast du die Variable irgendwo erstellt
    {
    return SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /check [Spieler ID]");
    }
    if(IsPlayerConnected(giveplayerid))
    {
    Stats(playerid,giveplayerid);
    }
    else
    {
    return SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler wurde nicht gefunden!");
    }
    }
    else
    {
    return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht befugt!");
    }
    }
    return 1;
    }


    Mfg,
    UncleSub

  • Hier, schreibe mal deinen Befehl so:


    if(!strcmp(cmd, "/check", true))
    {
    if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht befugt!");
    tmp = strtok(cmdtext, idx);
    if(!tmp[0]) return SendClientMessage(playerid, COLOR_GRAD1, "Benutzung: /check [Spieler ID]");
    giveplayerid = strval(tmp);
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_GRAD1, "Der Spieler wurde nicht gefunden!");
    Stats(playerid,giveplayerid);
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Ich hätte es nicht für möglich gehalten, aber auch die Lösung von @Schwabbel zeigt immernoch Unknown Command, könnte es sonst doch in irgendeiner Weise an der Stats Funktion liegen?


    Trotzdem danke für deine Bemühungen Schwabbel :) Lg

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