Problem mit Deal DCMD

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
  • Tag leute,
    ich hab ein Problem mit folgendem CMD:


    dcmd_deal(playerid,params[])
    {
    new pID, ddrugs, price;
    if(sscanf(params, "ud", pID,ddrugs,price))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /deal [Playerid] [Menge] [Preis]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    if(SpielerInfo[playerid][drugs]<ddrugs)
    {
    return SendClientMessage(playerid,COLOR_RED,"Soviele Drogen hast du nicht!");
    }
    if(SpielerInfo[playerid][Job]!=3)
    {
    return SendClientMessage(playerid,COLOR_RED,"Du bist kein Drogendealer!");
    }
    else
    {
    adrugs[pID]=ddrugs;
    dprice[pID]=price;
    dplayer[pID]=playerid;
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(pID, name, sizeof(name));
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, aname, sizeof(aname));
    format(string, sizeof(string), "%s hat dir %d Gramm Drogen für $%d angeboten!",aname, ddrugs, price);
    SendClientMessage(pID,COLOR_GREEN,string);
    SendClientMessage(pID,COLOR_GREEN,"Tippe /accept um das sie anzunehmen oder /cancel um das Angebot zurückzuweisen!");
    format(string, sizeof(string), "Du hast %s %d Gramm Drogen für $%d angeboten!",name, ddrugs, price);
    SendClientMessage(playerid,COLOR_GREEN,string);
    }
    return 1;
    }


    Keine Errors, keine Warnings.
    Ingame kommt allerdings folgendes:
    "Server: Unknow Command"
    Obwohl ich das abgeschaltet hatte O.o


    Hoffe jemand von euch kennt die Lösung!




    MfG Firer

  • Mach das ganze mal ohne DCMD, ich gebe offen zu das ich mit DCMD noch nichts gemacht habe. Aber eines istr sicher durch die einzelnen Funktion auf die Zugegriffen werden müssen ist DCMD nicht schneller als wenn man das Standard Mäßige nutzt.

  • Das else reagiert nur auf der if abfrage die über ihm steht.
    Bei ihm also wen diese abfrage:
    if(SpielerInfo[playerid][Job]!=3)
    Stimmt dan führe das aus was in den geschweiften klammern steht wen nicht kommt das else.


    und bei dem sscanf solltest du für pID bei params "u" benutzen das steht für User ID or Playername

  • Das else reagiert nur auf der if abfrage die über ihm steht.
    Bei ihm also wen diese abfrage:
    if(SpielerInfo[playerid][Job]!=3)
    Stimmt dan führe das aus was in den geschweiften klammern steht wen nicht kommt das else.


    und bei dem sscanf solltest du für pID bei params "u" benutzen das steht für User ID or Playername

    "u" ist für pID genutzt.
    Ausserdem funktioniert es sonst ja auch, nur halt bei diesem CMD nicht.
    Ich bin mir durchaus über die if und else abfragen bewusst^^



    MfG Firer

  • aus "ud" "udd" machen sind ja 3 parameter und nicht 2 ^^


    das else musste auch wegnehmen


    und wenn dan "SERVER: Unknown Command" kommt weißte das irgendwas von dem hier :
    adrugs[pID]=ddrugs;
    dprice[pID]=price;
    dplayer[pID]=playerid;
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(pID, name, sizeof(name));
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, aname, sizeof(aname));
    format(string, sizeof(string), "%s hat dir %d Gramm Drogen für $%d angeboten!",aname, ddrugs, price);
    SendClientMessage(pID,COLOR_GREEN,string);
    SendClientMessage(pID,COLOR_GREEN,"Tippe /accept um das sie anzunehmen oder /cancel um das Angebot zurückzuweisen!");
    format(string, sizeof(string), "Du hast %s %d Gramm Drogen für $%d angeboten!",name, ddrugs, price);
    SendClientMessage(playerid,COLOR_GREEN,string);

    vom system nicht verstanden wird...
    hast du adrugs[pID],dprice[pID], dplayer[pID] den schon definiert ?


    //außerdem kann man aus dem hier:
    new name[MAX_PLAYER_NAME], string[256];
    GetPlayerName(pID, name, sizeof(name));
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, aname, sizeof(aname));
    //das hier machen wieso 2x new
    new name[MAX_PLAYER_NAME], aname[MAX_PLAYER_NAME], string[256];
    GetPlayerName(pID, name, sizeof(name));
    GetPlayerName(playerid, aname, sizeof(aname));


    Also bei mir würde dein Befehl so hier aussehen:
    dcmd_deal(playerid,params[])
    {
    new pID, ddrugs, price;
    if(SpielerInfo[playerid][Job]!=3)
    {
    if(sscanf(params, "udd", pID,ddrugs,price))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /deal [Playerid] [Menge] [Preis]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    if(SpielerInfo[playerid][drugs]<ddrugs)
    {
    return SendClientMessage(playerid,COLOR_RED,"Soviele Drogen hast du nicht!");
    }
    {
    adrugs[pID]=ddrugs;
    dprice[pID]=price;
    dplayer[pID]=playerid;
    new name[MAX_PLAYER_NAME],aname[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, aname, sizeof(aname));
    GetPlayerName(pID, name, sizeof(name));
    format(string, sizeof(string), "%s hat dir %d Gramm Drogen für $%d angeboten!",aname, ddrugs, price);
    SendClientMessage(pID,COLOR_GREEN,string);
    SendClientMessage(pID,COLOR_GREEN,"Tippe /accept um das sie anzunehmen oder /cancel um das Angebot zurückzuweisen!");
    format(string, sizeof(string), "Du hast %s %d Gramm Drogen für $%d angeboten!",name, ddrugs, price);
    SendClientMessage(playerid,COLOR_GREEN,string);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Drogendealer!");
    }
    }
    return 1;
    }




    MfG bad_company

  • if(strcmp(cmd, "/selldrugs", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pJob] != 4 && PlayerInfo[playerid][pJob] != 14)
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist kein Drogenhändler!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /selldrugs [playerid/PartOfName] [ammount] [price]");
    return 1;
    }
    new playa;
    new money;
    new needed;
    playa = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) { return 1; }
    needed = strval(tmp);
    if(needed < 1 || needed > 99) { SendClientMessage(playerid, COLOR_GREY, " Gramms nicht niedriger als 1 oder mehr als 99!"); return 1; }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) { return 1; }
    money = strval(tmp);
    if(money < 1 || money > 99999) { SendClientMessage(playerid, COLOR_GREY, " Preis nicht niedriger als 1 oder mehr als 99999!"); return 1; }
    if(needed > PlayerInfo[playerid][pDrugs]) { SendClientMessage(playerid, COLOR_GREY, " Du hasst nicht soviel Drogen mit dir !"); return 1; }
    if(IsPlayerConnected(playa))
    {
    if(playa != INVALID_PLAYER_ID)
    {
    if (ProxDetectorS(8.0, playerid, playa))
    {
    if(playa == playerid)
    {
    SendClientMessage(playerid, COLOR_GREY, " Kann nicht zu sich selbst verkaufen!");
    return 1;
    }
    GetPlayerName(playa, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du bietest %s deine %d gramm Drogen um $%d zu kaufen .", giveplayer, needed, money);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Drogenhändler %s will seine %d gramm Drogen um $%d dir verkaufen, (schreibe /accept drugs) um zu kaufen.", sendername, needed, money);
    SendClientMessage(playa, COLOR_LIGHTBLUE, string);
    DrugOffer[playa] = playerid;
    DrugPrice[playa] = money;
    DrugGram[playa] = needed;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist nicht in deiner Nähe !");
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist offline.");
    }
    }
    return 1;
    }