Beiträge von XeroX

    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;
    }

    Alternativ kannst du auch mit dem FileManager Plugin automatisch täglich erstellte ordner anlegen lassen. Somit sind deine dateien am Ende nicht unendlich groß und man kann schneller nachgucken wann was wie wo passiert ist.

    Du Benutzt strval um den Namen zu übergeben. strval gibt aber nur den integer wert eines strings zurück. Entweder direkt in die Variable namen lesen lassen oder mit strcat arbeiten.

    Problem sehe ich darin das die ganzen Plugins wieder übern Haufen geworfen werden. Zumal WCF 2 / WBB4 sowieso schon einen Probleme bereitet was die Plugin Entwicklung angeht. (Fehlende / Unzureichende Dokumentation)

    Du prüfst beim connecten ob der Spieler gebannt ist, was nicht sein, kann da davor kein query gesendet wird somit ist pBanned immer 0. Du müsstest erst Abfragen ob ban == 1 ist, sollte das der Fall sein wird der Spieler gekickt. Anderenfalls mit einem zweiten Query prüfen ob der Account existiert und danach je nach ergebnis login / register anzeigen lassen.

    Bedingt geht es mit dem Ternary Operator:
    Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]=0] == 1 ? CarName[PlayerCar[playerid][Dtc_PlayerKey[playerid] = 0][CarModel]-400] : "Freier Slot"


    Musst dann halt statt dem Namen immer die Abfrage machen.