Beiträge von Woozie

    Auf ein neues ^^:


    Dann lass dir mal den kompletten printf Satz anzeigen, nicht nur FData[frakid][HPposx], sondern auch FData[frakid][HPposy] und FData[frakid][HPposz].
    Am besten du baust eine Abfrage vor den Pickups ein, ob die Werte (FData[frakid][HPposx] usw.) 0.00 sind oder nicht. Falls 0.00, dann continue, ansonsten Code ausführen (Pickups und 3D Text setzen).

    Ich würde auch lieber ApplyAnimation nehmen anstelle von SetPlayerSpecialAction. Letzteres funktionierte bei mir irgendwie auch nicht wirklich.


    ApplyAnimation(playerid,"PED","SEAT_down",4.0,0,1,1,1,-1);

    Dumme Frage, aber werden alle 28 unterschiedliche Fraktionen unter 0,0,0 angezeigt oder nur wenige?


    Soll heissen; lass mal alle 28 Fraktionen per printf durchlaufen zur Kontrolle. Kann sein, daß in der DB keine 28 drin sind und er nur z.B. 20 setzt und die restlichen 8 auf 0,0,0 macht... ich hoffe du verstehst was ich meine. Einen Fehler kann ich in deinem Code nämlich nicht sehen, sorry.

    Zeile 8 mit IF und Zeile 15 mit dem ELSE; bei beinen Codeabschnitten hast du je ein RETURN 1; als letzter CMD drin. Danach kann nix mehr kommen. Und die Fehlermeldung besagt eben dies, daß der Code ab 22 unerreichbar ist ;)

    Anstelle von Zeile 5

    if(dini_Get(radiokassepfad,"Besitzer") != GetPlayerName(playerid,name,sizeof(name)))return SendClientMessage(playerid, GRAU, "Dir gehört dieses Biz nicht!");


    mach folgendes rein:



    GetPlayerName(playerid, name, sizeof(name));
    if (strcmp(dini_Get(radiokassepfad,"Besitzer"), name, false) return SendClientMessage(playerid, GRAU, "Dir gehört dieses Biz nicht!");

    1. OnPlayerEnterVehicle ist ein Callback, daß nur dann aufgerufen wird, wenn man dabei ist in ein Vehikel einzusteigen - also es noch nicht ist. ;)
    2. benutz



    public OnPlayerStateChange(playerid, oldstate, newstate)
    {
    if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    // Spieler sitzt nun am Steuer des Fahrzeuges
    }
    if (oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
    // Spieler saß am Steuer des Fahrzeuges und ist nun zu Fuss
    }
    }

    Keine Ahnung, was für eine DINI.inc du hast, aber in meiner sieht die Funktion folgendermaßen aus:


    stock dini_Get(filename[],key[]) {
    new File:fohnd;
    new tmpres[MAX_STRING];
    new tmpres2[MAX_STRING];
    tmpres[0]=0;
    fohnd=fopen(filename,io_read);
    if (!fohnd) return tmpres;
    while (fread(fohnd,tmpres)) {
    StripNewLine(tmpres);
    if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
    /* We've got what we need */
    tmpres2[0]=0;
    strcat(tmpres2,dini_PRIVATE_ExtractValue(tmpres));
    fclose(fohnd);
    return tmpres2;
    }
    }
    fclose(fohnd);
    return tmpres;
    }


    Und man sehe ein return tmpres; ;)


    PS.:
    kann sein, daß meine DINI veraltet ist. Hier mal die Sourceinfos:


    /*
    * Dini 1.5.1
    * (c) Copyright 2006 by DracoBlue
    *
    * @author : DracoBlue (http://dracoblue.com)
    * @date : 13th May 2006
    * @update : 3rd June 2007
    * @require : DUtils 1.8
    *
    * This file is provided as is (no warranties).
    *
    * Feel free to use it, a little message in
    * about box is honouring thing, isn't it?
    *
    */

    Bananenstaude
    Was soll dann sein? Er aktualisiert die Daten bzw. OnPlayerUpdate nur, wenn es was neues von mir (Client) gibt. Mach ich nix, passiert nix. Alles schon durch ;).
    Probier mal, wenn du NPC's in deinem Script hast, NPC's auszuschliessen. Also If(IsPlayerNPC(playerid)) return 0; - das Resultat ist erste Sahne xD


    @Thema
    Ich habe meine AntiCheatEngine im OnPlayerUpdate drin und funktioniert tadellos ohne Performanzprobleme. Die CPU Auslastung unter Windows 7 ist auch nicht höher, als würde ich OnPlayerUpdate draußen lassen...

    warum lädst du eigentlich den Wert erst aus der Datei und anschliessend ziehst du die Summe eh manuell ab?


    Dein Code:

    if(GetPlayerMoney(playerid) < dini_Get(radiokassepfad,"RadioPreis")) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld für das Radio!");
    SendClientMessage(playerid, WEISS, "Kosten fürs Radio hören: $70");
    GivePlayerMoney(playerid, -70);//zieht den Spieler $70 ab


    Machs doch gleich manuell:

    if (GetPlayerMoney(playerid) < 70) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld für das Radio!");
    SendClientMessage(playerid, WEISS, "Kosten fürs Radio hören: $70");


    GivePlayerMoney(playerid, -70);//zieht den Spieler $70 ab


    Ansonsten:
    dini_Get(filename[],key[]) gibt einen String/Array zurück. Siehe return tmpres;


    Wenn dein Code so lassen willst, dann:

    if(GetPlayerMoney(playerid) < dini_Int(radiokassepfad,"RadioPreis")) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld für das Radio!");
    SendClientMessage(playerid, WEISS, "Kosten fürs Radio hören: $70");
    GivePlayerMoney(playerid, -70);//zieht den Spieler $70 ab