Beiträge von Jeffry

    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }


    Die Funktion hat eigentlich jeder... ;)

    for(new i = 0; i < sizeof(TaxiVeh); i++)
    {
    if(IsPlayerInVehicle(playerid,TaxiVeh[i]))
    {
    CODE
    return 1;
    }
    }
    return SendClientMessage(playerid,COLOR_RED,"Du bist in keinem Taxi.");


    Ein return in der Schleife, auch im "else-Zweig" führt zur sofortigen Beendigung der Schleife.



    EDIT: Zusatzinfo:

    Spoiler anzeigen

    Falls nach der Schleife noch code folgen würde, sähe das Ganze so aus:

    Spoiler anzeigen
    new bool:intaxi = false;
    for(new i = 0; i < sizeof(TaxiVeh); i++)
    {
    if(IsPlayerInVehicle(playerid,TaxiVeh[i]))
    {
    CODE
    intaxi = true;
    }
    }
    if(!intaxi) return SendClientMessage(playerid,COLOR_RED,"Du bist in keinem Taxi.");
    MEHR CODE, WIRD NUR AUFGERUFEN WENN IN TAXI

    if(strcmp(cmdtext,"/spawn",true,6) == 0)
    {
    if(!strlen(cmdtext[6])) return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /spawn [playerid]");
    if(cmdtext[6] == ' ')
    {
    if(PlayerInfo[playerid][pAdmin] < 1 && PlayerInfo[playerid][pSupporter] < 1) return SendClientMessage(playerid, COLOR_GRAD1, " Du darfst diesen Befehl nicht benutzen!!");
    if(!strlen(cmdtext[7])) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /spawn [Name]");
    new para1 = ReturnUser(cmdtext[7]);
    if(!IsPlayerConnected(para1)) return SendClientMessage(playerid, 0xFF0000FF, "Spieler nicht connected.");
    SetPlayerSpawn(para1);
    SendClientMessage(playerid, COLOR_GREEN, "Spieler erfolgreich gespawnt!");
    new str[144];
    format(str, sizeof(str), "Server: %s (ID: %d) hat %s (ID: %d) gespawnt.", SpielerName(playerid), playerid, SpielerName(para1), para1);
    return SendClientMessageToAll(COLOR_GREEN, str);
    }
    }


    1) Auf strtok verzichtet, da nur 1 Parameter, strtok wäre hier unnötig.
    2) Die vielen Klammern weg gemacht, viel übersichtlicher so (meiner Meinung nach).
    3) Den check auf INVALID_PLAYER_ID weg gemacht, da unnötig, weil IsPlayerConnected dies schon prüft.
    4) Formatierte (gwünschte) Ausgabe.
    5) Ich darf davon ausgehen, dass ReturnUser nur anhand des Namens eine ID zurück gibt.

    Der 0. Bug ist nur auf Public-Sources vorhanden.


    Das ist völlig falsch, auf was für Quellen und Beweise stützt sich denn diese Aussage? Ich hatte das in einem anderen Thread bereits erklärt, lies dir das mal durch: ID 0 Bug.


    Zum Thema: Was H4rd_B4se gesagt hat ist natürlich völlig richtig, jedoch musste obiges gesagt werden, da einige noch immer davon ausgehen dass ein ID 0 Bug "etwas bestimmtes" ist.

    Nö.
    Du fragst genau das Gegenteil ab...


    Meins:
    if(Spieler[i][geld] < GetPlayerMoney(i))
    Das Große wird vom Krokodil gefressen.


    Übersetzt: WENN Spieler[ i][geld] KLEINER GetPlayerMoney(i) DANN BAN


    a > b und b < a ist das Selbe. Beides mal ist a GRÖßER b, bzw. b KLEINER a.

    Timer passt schon. Ruf die Funktion zudem noch bei SpielerSpeichern() auf, dann bist du auf der sicheren Seite.
    ABER:


    if(Spieler[i][geld] > GetPlayerMoney(i))
    !!!
    Das wäre ja ein ban wenn er sich Geld weg-cheated.
    Muss so sein:
    if(Spieler[i][geld] < GetPlayerMoney(i))


    Zudem solltest du Folgendes beachten:

    • Es fehlt dir jeglicher Ausschluss von Desynchronisation. Was ist das? Geh mal in einen Server, und dann lade eine größere Datei hoch, je nach Internetverbindung bist du danach im Server nicht mehr synchronisiert, was folglich zu einem Ban führt, sobald sich dein Geld per Aufruf ändert.
    • Es fehlen sämtliche Ausschlüsse, dazu zählen:

      • Snack Maschinen
      • Ammu Nation
      • Stunt Bonus
      • Tune Garagen
      • Pay'n'Spray
      • Casino
      • (...)


      Da du abfragst ob GetPlayerMoney nicht der Variable entspricht, wirst du sofort gebannt. Das ist sehr schlecht.

    new Float:distance=floatsqroot(((x1-x)*(x1-x))+((y1-y)*(y1-y))+((z1-z)*(z1-z)));


    Oder wenn du einen stock willst:
    stock Float:GetDistanceBetweenPoints(Float:x, Float:y, Float:z, Float:x1, Float:y1, Float:z1)
    {
    return floatsqroot(((x1-x)*(x1-x))+((y1-y)*(y1-y))+((z1-z)*(z1-z)));
    }

    new SchimpfWoerter[][] =


    public OnPlayerText(playerid, text[])
    {
    for(new i=0; i<sizeof(SchimpfWoerter); i++)
    {
    if(strfind(text,SchimpfWoerter[i],true)!=1)
    {
    //Beleidigung, Nachricht wird nicht gesendet (return 0).
    return 0;
    }
    }
    return 1;
    }