Beiträge von Toastbrot

    hallo,
    ich möchte das z.b ein trucker seinen geladenen benzin für z.b. 0.2$/liter verkauft.
    Das Problem ist das er dann immer unendlich viel geld bekommt, anstatt bei z.b. 1001liter 200$.


    hier ist nen kleines scriptbsp:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/test", cmdtext, true, 10) == 0)
    {
    new liter=10000;
    new Float:preis=0.2;
    GivePlayerMoney(playerid, liter*preis); //spieler bekommt unendlich viel geld -.-
    return 1;
    }
    return 0;}Hab mal ein bisschen durchgetestet, problem ist, glaub ich, das das geld was der spieler bekommen soll als float gespeichert wird und nicht als int.
    Bei
    new liter=1001;
    new Float:preis=0.2;
    new c=liter*preis;
    printf("liter*preis int: %i, float: %.2f c int: %i, float: %.2f", liter*preis, liter*preis, c, c);

    kommt folgendes ergebniss:

    Code
    liter*preis int:1128805171, float: 200.19 c int: 1128805171, float: 200.19


    obwohl die variable c kein float ist wird das ergebniss in float gespeichert?
    gibt es in pawn eine möglichkeit für typenumwandlung, also z.b. c = (int)(a*b); bzw c = (new) (a*b); bei diesen beispielen gibt pawn immer den error: "error 029: invalid expression, assumed zero"
    ich hoffe es kann mir jemand helfen
    Toastbrot
    edit:
    hab mich nun an das englische forum gewandt, und auch gleich eine anwort bekommen,
    GivePlayerMoney(playerid,floatround(float(liter)*preis));
    habs getested und funktioniert :)

    Du hast einen ";" vergessen, nach jeder anweisung gehört ein strichpunkt, also a=b+c;
    und immer wenn du eine variable verwendest musst du diese zuerst mit new T; definieren.

    bei:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/test", cmdtext, true, 10) == 0)
    {
    //was bei dem command passieren soll, also z.b.
    SendClientMessage(playerid, 0xFFFFFFAA, "Teleports: ...");
    return 1;
    }
    return 0;
    }