Der Tachometer funktioniert nicht

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
  • Hey Leute,


    mein Tacho (die Geschwindigkeitsanzeige) funktioniert bei mir nicht. Ich bin den kompletten Code durchgegangen und prinzipell solte es funktionieren.


    [pwn=221]new Text:KMH[MAX_PLAYERS];[/pwn]


    [pwn=2460]KMH[playerid] = TextDrawCreate(291.000000, 386.000000, "0KM/H");
    TextDrawBackgroundColor(KMH[playerid], 255);
    TextDrawFont(KMH[playerid], 1);
    TextDrawLetterSize(KMH[playerid], 0.450000, 2.000000);
    TextDrawColor(KMH[playerid], -1);
    TextDrawSetOutline(KMH[playerid], 0);
    TextDrawSetProportional(KMH[playerid], 1);
    TextDrawSetShadow(KMH[playerid], 1);[/pwn]


    [pwn=2618]public OnPlayerDeath(playerid, killerid, reason)
    {
    TextDrawHideForPlayer(playerid,HintergrundTacho);
    TextDrawHideForPlayer(playerid,Geschwindigkeit);
    TextDrawHideForPlayer(playerid,KMH[playerid]);
    TextDrawHideForPlayer(playerid,StrichTacho);
    TextDrawHideForPlayer(playerid,BoxStrichTacho);[/pwn]


    [pwn=5469]public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    TextDrawShowForPlayer(playerid,HintergrundTacho);
    TextDrawShowForPlayer(playerid,Geschwindigkeit);
    TextDrawShowForPlayer(playerid,KMH[playerid]);
    TextDrawShowForPlayer(playerid,StrichTacho);
    TextDrawShowForPlayer(playerid,BoxStrichTacho);[/pwn]


    [pwn=5479] if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT)
    {
    TextDrawHideForPlayer(playerid,HintergrundTacho);
    TextDrawHideForPlayer(playerid,Geschwindigkeit);
    TextDrawHideForPlayer(playerid,KMH[playerid]);
    TextDrawHideForPlayer(playerid,StrichTacho);
    TextDrawHideForPlayer(playerid,BoxStrichTacho);[/pwn]


    [pwn=5508] if(oldstate == PLAYER_STATE_PASSENGER && newstate == PLAYER_STATE_ONFOOT)
    {
    TextDrawHideForPlayer(playerid,HintergrundTacho);
    TextDrawHideForPlayer(playerid,Geschwindigkeit);
    TextDrawHideForPlayer(playerid,KMH[playerid]);
    TextDrawHideForPlayer(playerid,StrichTacho);
    TextDrawHideForPlayer(playerid,BoxStrichTacho);[/pwn]


    [pwn=7366]stock getKmh(playerid,bool:kmh)
    {
    new Float:x,Float:y,Float:z,Float:rtn;
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); else GetPlayerVelocity(playerid,x,y,z);
    rtn = floatsqroot(x*x+y*y+z*z);
    return kmh?floatround(rtn * 50 * 2.51):floatround(rtn * 50);
    //return kmh?floatround(rtn * 50 * 1.61):floatround(rtn * 50);
    }[/pwn]


    [pwn=8001]public UpdateTacho(playerid)
    {
    new string[128];
    format(string, sizeof(string), "%d KM/H",getKmh(playerid, true));
    TextDrawSetString(KMH[playerid], string);
    return 1;
    }[/pwn]


    [pwn=266]forward UpdateTacho(playerid);[/pwn]


    //Bei OnPlayerConnect
    SetTimerEx("UpdateTacho", 500, true, "u", playerid);


    Es wird nur der Default-Wert 0KM/H angezeigt. Warum funktioniert es nicht? Hab ich was übersehen? :evil: ?(

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Daran liegt es leider nicht , geht immer noch nicht :/

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Lass dir den Timer mal ausgeben:
    public UpdateTacho(playerid)
    {
    printf("UpdateTacho für ID %d aufgerufen.", playerid);
    new string[128];
    format(string, sizeof(string), "%d KM/H",getKmh(playerid, true));
    print(string);
    TextDrawSetString(KMH[playerid], string);
    return 1;
    }


    Wird das im Server Log geprintet? Wenn ja, was?
    Wenn nein, poste bitte dein OnPlayerConnect.

  • So hab es abgeprint damit es in der ServerLog speichert. Ich habe gemerkt das der UpdateTacho immer an den einen Bot im Server zugewiesen wird.


    UpdateTacho für Spieler Wurzel_Sepp (ID 0) aufgerufen und ist im Fahrzeug.


    Gerade spinnt die Server-Log, man sieht die Angaben nur im samp_server.exe CMD-Fenster und nur der Server Start wird in der server-log.txt geprint.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Kann es sein, dass dein OnPlayerConnect nicht bis zum Timer für normale Spieler durchgeführt wird?
    Setze den SetTimer mal ganz als erste Zeile in OnPlayerConnect und teste ob es dann geht.


    Ansonsten debugge mal den OnPlayerConnect, ob dies überhaupt aufgerufen wird. Wenn das nicht aufgerufen wird, dann hast du vielleicht einen Filterscript im Server, der die Ausführung im Gamemode verhindert.


    Ansonsten könntest du auch einen einzigen Timer bei OnGameModeInit erstellen, und dann eben im public einen Loop durch alle Spieler machen (for...). Dann hättest du keine X Timer am laufen.

  • Ich hab mir schon überlegt ob ich einfach eine Abfrage rein mache ob es NPC ist oder nicht und wenn nicht wird SetTimer ausgeführt.


    Nur der allererste Bot mit der Playerid 0 bekommt die Ehre ein Teil des SetTimers UpdateTacho zu sein :)

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Dann versuche bitte mal die beiden Vorschläge die ich dir gegeben habe:


    1.) Debugge dein OnPlayerConnect und schaue nach warum nur die ID 0 die Ehre hat aktualisiert werden zu dürfen.
    2.) Erstelle einen Timer für alle Spieler, anstatt einen Timer für jeden Spieler.



    Bei Fragen zum Code einfach nachfragen und das posten was du bis dahin hast.

  • Danke Jeffry! :love: Hat funktioniert und funktioniert wieder :)


    Ich hab den UpdateTacho so umgeschrieben wie du es dir vorgestellt hast.


    public UpdateTacho()
    {


    new bug[200];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerNPC(i)) continue;
    if(!IsPlayerConnected(i)) continue;
    if(!IsPlayerInAnyVehicle(i)) continue;

    new string[128];
    format(string, sizeof(string), "%d KM/H",getKmh(i, true));
    TextDrawSetString(KMH[i], string);
    format(bug, sizeof(bug), "UpdateTacho() für Spieler %s (ID %i) aufgerufen und ist im Fahrzeug!", GetName(i), i);
    print(bug);


    }
    return 1;
    }

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.