Beiträge von Campbell

    Warum so umständlich, wenn die Lösung schon gegeben wurde?



    stock GetCashResult(betrag)
    {
    new idx[20], part;
    format(idx, sizeof(idx), "%i", betrag);
    part = strlen(idx)-3;
    while(part > 0)
    {
    strins(idx, ".", part);
    part -= 3;
    }
    return idx;
    }

    Du erstellst einen PlayerTextDraw und setzt eben jedes mal, wenn sich der Score ändert den String des TextDraws erneut. Wichtig ist, dass du einen PlayerTextDraw erstellst und nicht einen, da sonst jeder den gleichen Score sehen würde.

    In welchem Callback benutzt du denn AddStaticPickup? Sie sollte definitiv in OnGameModeInit() verwendet werden, da du ein static-object hinzufügst.

    Lass die ganzen return's weg und benutz ganz einfach 'else' wenn du schon 'if' benutzt. Und benutz bitte eine if-Schleife um zu testen, ob jemand in einer bestimmten Gegend ist.



    ocmd:startbonus(playerid)
    {
    if(GetPVarInt(playerid,"StartBonus") < 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,4,1734.9404,-1943.8406,13.5688))
    {
    GivePlayerMoney(playerid,10000);
    SendClientMessage(playerid,GELB,"Herzlicht Glückwunsch Schmeiß das Geld nicht gleich ausem Fenster");
    SetPlayerScore(playerid,1);
    SetPVarInt(playerid,"StartBonus",1);
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast dein Bonus schon eingelöst.");
    }
    return 1;
    }

    Wie bereits gesagt, dir fehlt eine geschweifte Klammer:



    if(GetVehicleModel(vehicleid) == 448 || GetVehicleModel(vehicleid) == 461 || GetVehicleModel(vehicleid) == 462 || GetVehicleModel(vehicleid) == 463 || GetVehicleModel(vehicleid) == 468 || GetVehicleModel(vehicleid) == 471 || GetVehicleModel(vehicleid) == 521 || GetVehicleModel(vehicleid) == 522 || GetVehicleModel(vehicleid) == 523 || GetVehicleModel(vehicleid) == 581 || GetVehicleModel(vehicleid) == 586)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][BikeL] != 1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, Rot, "Du hast keinen Motorradschein");
    }
    } // <-- Diese Klammer fehlt.
    Und das Ganze muss in OnPlayerStateChange und nicht in OnPlayerEnterVehicle!

    Bei deinem Beispiel wird der Geldbetrag aber nur formatiert, wenn der Betrag zwischen 1000000 und 9999999 liegt. Schau dir mein Beispiel oben an, damit du siehst, wie es zum Beispiel mit 2500 funktioniert.

    Wenn du nur den Himmel siehst, und nicht fällst, dann bist du im flaschen Interior. Setze deinen Interior einfach mal bis hoch von 0 zu 20. Irgendwann sollten die Objekte dann angezeigt werden.

    Ich habe gedacht dass er Verstand hat und wüsste, dass man es mit dem newstate PLAYER_STATE_DRIVER und OnPlayerKeyStateChange muss.
    Ich kann Scripten, keine Sorge.


    lg :thumbup:


    OnPlayerKeyStateChange != OnPlayerStateChange.


    An EliteBread: Schau dir nochmals an was ich in meinem vorherigen Post gesagt habe, so wie du es jetzt machst wird es nicht funktionieren. Ebenfalls musst du vor return 1 noch eine Klammer zu machen.


    Wenn du den Thread verfolgt hättest, hättest du bemerkt, dass dies unter OnPlayerEnterVehicle nicht möglich ist, da OnPlayerEnterVehicle ausgeführt wird, wenn der Spieler die Einsteigen-Taste drückt und nicht wenn er im Auto ist. Du kannst aber folgendes in OnPlayerStateChange verwenden:



    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][BikeL] != 1)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, Rot, "Du hast keinen Motorradschein");
    }

    Die Variable geld muss natürlich hier noch ergänzt werden, dennoch sollte es wie folgt funktionieren:



    new idx[20], part;
    format(idx, sizeof(idx), "%i", geld);
    part = strlen(idx)-3;
    while(part > 0)
    {
    strins(idx, ".", part);
    part -= 3;
    }

    Schau dir die Informationen im SA:MP Wiki an. Du hast deine Werte etwas durcheinandergeworfen.



    Deine jetzige Virtual World, die du angegeben hast, ist 43.1207, und daher kann es nicht stimmen, da eine Virtual World immer eine ganze Zahl sein muss (1, 2, 3, ...).

    Versuch es mal so oder verwende deinen Code unter OnPlayerStateChange mit dem newstate PLAYER_STATE_DRIVER.



    if(PlayerInfo[playerid][BikeL] != 1)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    SetPlayerPos(playerid, X, Y, Z);
    SendClientMessage(playerid, Rot, "Du hast keinen Motorradschein");
    }

    Du scheinst ja die Fraktion des Spielers mithilfe einer Player Variable zu speichern, versuch es doch damit:


    new fraktion = GetPVarInt(playerid, "Fraktion");

    Ja hab ich.


    Zitat

    Debuggen ist immer eine gute Lösung, um Probleme zu lösen. Schau doch mal eben in OnPlayerSpawn, ob dein Code überhaupt ausgeführt wird, wenn ein Spieler stirbt.


    Was ist hier dein Ergebnis, wird es ausgeführt?

    Die Zeile mit mysql_fetch_float und die Zeile, in der du printf() benutzt wäre interessant. Entweder, wird wie bereits gesagt, ein falscher Print-Operator benutzt, oder in eine falsche Variable gefetcht.