SendClientMessage, brauche hilfe

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,
    ich habe hier dieses FS gemacht:



    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT


    #include <a_samp>




    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Car Damage, no enter");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    #endif


    forward VehHealth(playerid, vehicleid);//declariert denn timer


    public OnFilterScriptInit()
    {
    SetTimer("VehHealth", 100, 0);//Lässt den Timer starten
    return 1;
    }



    public VehHealth(playerid, vehicleid)
    {
    SetTimer("VehHealth", 100, 0);//starte denn timer erneut
    if(IsPlayerInAnyVehicle(playerid)) //checkt ob der spieler in einem Fahrzeug sitzt
    {
    new Float:health;
    new veh;
    veh = GetPlayerVehicleID(playerid);
    GetVehicleHealth(veh, health);
    if(health >350) return 0;//wenn der Motor kaputt.... !!nicht kaputt passiert nichts!!
    {
    SendClientMessage(playerid, 0xFF00FF00, "Dein Motor ist beschädigt, rufe bitte den ADAC!");
    }
    RemovePlayerFromVehicle(playerid); //...spieler rauswerfen
    }
    return 1;
    }



    Doch wenn ich einsteige kommt die Nachricht ,"Dein Motor ist beschädigt, rufe bitte den ADAC", ca 20 mal im Chat, also so lange bis er automatisch wieder aussteickt.
    Wie geht es das er das nur einmal anzeigt?


    MfG
    Mark

  • forward VehHealth();


    public OnFilterScriptInit()
    {
    SetTimer("VehHealth", 1000, 0); //Lässt den Timer starten
    return 1;
    }



    public VehHealth()
    {
    for(new playeird = 0; playerid < MAX_PLAYERS; playerid++)
    {
    if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) //checkt ob der spieler in einem Fahrzeug sitzt
    {
    new Float:health;
    GetVehicleHealth(GetPlayerVehicleID(playerid), health);
    if(health >= 350) return 1;
    else
    {
    SendClientMessage(playerid, 0xFF00FF00, "Dein Motor ist beschädigt, rufe bitte den ADAC!");
    RemovePlayerFromVehicle(playerid); //...spieler rauswerfen
    return 0;
    }
    } else continue;
    }
    return 1;
    }

  • Geht bei mir nicht, habe es wie bei dir gemacht (ausser playeird in playerid geänder) Es kommt keine Meldung aber ingame passiert nichts. Wagen health ist unter 350 nichts passiert. Keine Nachricht und kein aussteigen.

  • Du musst das playeird lassen, da es eine Variable ist die du erst erstellst ^^

  • Man sollte aufpassen mit return - Statements in Schleifen,Steam.



    if(health < 350.0) {
    SendClientMessage(playerid, 0xFF00FF00, "Dein Motor ist beschädigt, rufe bitte den ADAC!");
    RemovePlayerFromVehicle(playerid); //...spieler rauswerfen
    }

    Man könnte aber noch mehr an dem Code verbessern.


    Damit es aber funktioniert,ist folgendes noch wichtig.
    SetTimer("VehHealth", 1000, 1); // 1 statt 0 ... repeat