Kopfgeld Geht nicht richtig

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
  • hallo wenn ich /contract mache kommt immer Nicht weniger als €10.000 oder mehr als €100.000! aber ich verstehe nicht warum....

    if(strcmp(cmd, "/contract", true) == 0)
    {
    /*new playermoney;
    new tmp[256];
    new Preis, idx;*/
    if(IsPlayerConnectedEx(playerid))
    {
    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }



    if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
    Preis = strval(tmp);
    if(Preis < 10000 || Preis > 100000) { SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); return 1; }
    if (IsPlayerConnectedEx(giveplayerid))
    {

    if(giveplayerid != INVALID_PLAYER_ID)
    {

    if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
    if(giveplayerid == playerid) { SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); return 1; }

    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername2, sizeof(sendername2));
    playermoney = PlayerMoney[playerid];
    if (Preis > 0 && playermoney >= Preis)
    {
    PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis);
    PlayerInfo[giveplayerid][pKopfgeld]+=Preis;
    format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis);
    SendFamilyMessage(18, COLOR_YELLOW, string);
    format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis);
    SCM(playerid, COLOR_LIGHTBLUE, string);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
    }
    else
    {
    SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag.");
    }
    }
    }
    else
    {
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);
    }
    }
    return 1;
    }

  • Beitrag von N1co ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Denkfeher ().
  • | | = oder
    && und


    Du willst sicherlich abfragen, ob der Preis über 10.000$ ist UND unter 100.000$, oder?



    Richtiger Code, wenn ich mich nicht Irre:

    Code
    if(Preis < 10000 && Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!");
  • Das steht jetzt 65355 ist kein Aktiver Spieler

    2 Mal editiert, zuletzt von TimeLine () aus folgendem Grund: //edit

  • Das steht jetzt 65355 ist kein Aktiver Spieler

    Erstmal räumen wir mal auf:


    Code
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);


    durch



    Code
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(giveplayerid, spielername, sizeof(spielername));
    format(string, sizeof(string), "%s ist kein Aktiver Spieler.", spielername);
    SCM(playerid, COLOR_GRAD1, string);

    ersetzen.

  • Erstmal räumen wir mal auf:

    Code
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);

    durch



    Code
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(giveplayerid, spielername, sizeof(spielername));
    format(string, sizeof(string), "%s ist kein Aktiver Spieler.", spielername);
    SCM(playerid, COLOR_GRAD1, string);

    ersetzen.

    Pn mich lieber ^^ dass kann glaub ich dauern ^^

  • GetPlayerName kann auch keinen Wert haben woher auch wenn der Spieler nicht Ingame ist. Nachdem ich den Code etwas ausgebessert habe sollte es nun funktionieren. Beachte die Kommentare die ich in einigen Zeilen gesetzt habe. Ausserdem rate ich zu einem command processor ala zcmd oder ocmd mit sscanf da dir das einiges an Arbeit abnimmt und sogar noch schneller als die ganze Sache mit den strcmp ist


    if(strcmp(cmd, "/contract", true) == 0)
    {
    new playermoney;
    new tmp[256];
    new Preis, idx;

    // Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf.
    if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");

    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    // Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler
    // Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat.
    if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!");

    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }
    Preis = strval(tmp);
    if(Preis < 10000 || Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!");
    if (IsPlayerConnected(giveplayerid))
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername2, sizeof(sendername2));
    playermoney = PlayerMoney[playerid];
    // Hat der Spieler genug Geld ? Hier brauchen wir nicht prüfen ob der Preis > 0 ist da es oben bereits limitiert wurde auf minimal 10k und maximal 100k
    if (playermoney >= Preis)
    {
    PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis);
    PlayerInfo[giveplayerid][pKopfgeld]+=Preis;
    format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis);
    SendFamilyMessage(18, COLOR_YELLOW, string);
    format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis);
    SCM(playerid, COLOR_LIGHTBLUE, string);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
    }
    else
    {
    SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag.");
    }
    }
    else
    {
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);
    }
    return 1;
    }

  • GetPlayerName kann auch keinen Wert haben woher auch wenn der Spieler nicht Ingame ist. Nachdem ich den Code etwas ausgebessert habe sollte es nun funktionieren. Beachte die Kommentare die ich in einigen Zeilen gesetzt habe. Ausserdem rate ich zu einem command processor ala zcmd oder ocmd mit sscanf da dir das einiges an Arbeit abnimmt und sogar noch schneller als die ganze Sache mit den strcmp ist


    if(strcmp(cmd, "/contract", true) == 0){ new playermoney; new tmp[256]; new Preis, idx; // Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf. if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } giveplayerid = ReturnUser(tmp); // Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler // Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat. if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } Preis = strval(tmp); if(Preis < 10000 || Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); if (IsPlayerConnected(giveplayerid)) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername2, sizeof(sendername2)); playermoney = PlayerMoney[playerid]; // Hat der Spieler genug Geld ? Hier brauchen wir nicht prüfen ob der Preis > 0 ist da es oben bereits limitiert wurde auf minimal 10k und maximal 100k if (playermoney >= Preis) { PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis); PlayerInfo[giveplayerid][pKopfgeld]+=Preis; format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis); SendFamilyMessage(18, COLOR_YELLOW, string); format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis); SCM(playerid, COLOR_LIGHTBLUE, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); } else { SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag."); } } else { format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid); SCM(playerid, COLOR_GRAD1, string); } return 1;}

    Ohh gott, stimmt ja :D

    immer noch €10.000 oder mehr als €100.000! egall was ich eintippe

  • ich mache /contract 12 20000 also contract id preis


    dann kommt im log 12 | 12


    Und was genau tippst du ein?


    Denn wenn du 12 eingibst, ehh dann ist das vollkommen korrekt...

    Setze mal nach dem Preis = strval(tmp) ein printf("Preis: %d | %s",Preis,tmp); und guck mal in der server log oder konsole nach was dort geprintet wird.

    Einmal editiert, zuletzt von TimeLine ()