DM-Runden Anzeige funktioniert nicht [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
  • HI


    Ich habe in OnGamemodeInit einen Timer gemacht(SetTimer), der jede Sekunde das hier aufruft, doch der Text wird nicht ausgeblendet, wenn runde_aktiv 0 wird. Ich komm nicht weiter. Kann mir bitte jemand helfen?


    public Rundeal()
    {
    new i = 0;
    new Text:textid = TextDrawCreate(100.0, 300.0, "DM-Runde");
    for(;i < GetMaxPlayers(); i++)
    {
    new i = 0;
    for(;i < GetMaxPlayers(); i++)
    {
    if(runde_aktiv==1)
    {
    TextDrawShowForAll(textid);
    }
    else if(runde_aktiv==0)
    {
    TextDrawHideForAll(textid);
    }
    }
    }
    return 1;
    }Danke im Voraus, schönen Abend noch unf schönes Wochenende :rolleyes:

    Meine Klasse treibt mich irgendwann noch in den Wahnsinn :dash: :peng:

  • Beitrag von Kinimod ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Wofür die zwei Schleifen?
    Du brauchst sie garnicht, da du ja TextDrawShowForAll() und TextDrawHideForAll() verwendest und sie somit auf alle und nicht auf bestimmte Spieler anwendest.


    Mach es mal folgendermaßen:


    public Rundeal()
    {
    new Text:textid = TextDrawCreate(100.0, 300.0, "DM-Runde");


    if(runde_aktiv==1)
    {
    TextDrawShowForAll(textid);
    }
    else if(runde_aktiv==0)
    {
    TextDrawHideForAll(textid);
    }
    return 1;
    }

  • Blendet den Text immernoch nicht aus.



    Timer:


    SetTimer("Rundeal",1000,1);



    Funktion im Timer:


    forward Rundeal();
    public Rundeal()
    {
    new n = 0;
    new Text:textid = TextDrawCreate(100.0, 300.0, "DM-Runde");
    if(runde_aktiv==1)
    {
    TextDrawShowForAll(textid);
    }
    else if(runde_aktiv==0)
    {
    TextDrawHideForAll(textid);
    }
    return 1;
    }


    mit dem Befehl sollte es eigentlich ausgeblendet werden:


    ocmd:crunde(playerid,params[])
    {
    new grund[100];
    if(sscanf(params,"s",grund))return 0;
    KillTimer(rundentimer);
    runde_aktiv=0; //<=
    SendClientMessageToAll(COLOR_SERVER,"DM-Runde frühzeitig beendet.");
    SendClientMessageToAll(COLOR_SERVER,"Es wird keine Endauswertung geben.");
    SendClientMessageToAll(COLOR_SERVER,"Gib /spielstand ein, um das Ergebnis zu sehen.");
    SendClientMessageToAll(COLOR_SERVER,grund);
    return 1;
    }

    Meine Klasse treibt mich irgendwann noch in den Wahnsinn :dash: :peng:

  • Ja, stimmt. Habe ich eben übersehen.


    Stell es dir folgendermaßen vor: Du erstellst jede Sekunde ein neues Textdraw, da der Create Befehl im Timer ist, der jede Sekunde aufgerufen wird.
    Du hast dann also nach 10 Sekunden schon 10 Textdraws, die genau übereinander sind.


    Dadurch überlappt es sich und am Ende wird nur das Oberste ausgeblendet, die anderen bleiben allerdings bestehen. Daher entsteht der Eindruck, dass das Textdraw bleibt.


    Lösen kannst du das, indem du die Variable textid global (oben im Script) definierst und die TextDrawCreate() Zeile unter OnGameModeInit() packst, allerdings mit einer kleinen Abänderung:


    textid = TextDrawCreate(100.0, 300.0, "DM-Runde");

  • Jetzt wird mir der Text nicht mehr angezeigt. (jetzt zeigt sich nicht ein mal die Zeit oben rechts)


    Befehl zum Starten:


    ocmd:srunde(playerid,params[])
    {
    SendClientMessage(playerid,COLOR_ADMIN,"Runde gestartet.");
    textid = TextDrawCreate(100.0, 300.0, "DM-Runde");
    rundentimer=SetTimerEx("Rundenende", 600000, false, "i", playerid);
    runde_aktiv=1; <=
    team1_kills=0;
    team2_kills=0;
    return 1;
    }


    Textvariable:


    new textid;


    Funktion:


    forward rundeal();
    public Rundeal()
    {
    if(runde_aktiv==0)
    {
    TextDrawHideForAll(textid);
    }
    return 1;
    }


    Timer in gamemodeinit:


    SetTimer("Rundeal",1000,true);

    Meine Klasse treibt mich irgendwann noch in den Wahnsinn :dash: :peng:

    Einmal editiert, zuletzt von BenTheBecker ()

  • Du sollst das so schreiben, hast du das?
    new Text:textid; //Oben ins Script


    textid = TextDrawCreate(100.0, 300.0, "DM-Runde");//OnGameModeInit


    ocmd:srunde(playerid,params[])
    {
    SendClientMessage(playerid,COLOR_ADMIN,"Runde gestartet.");
    rundentimer=SetTimerEx("Rundenende", 600000, false, "i", playerid);
    runde_aktiv=1;
    team1_kills=0;
    team2_kills=0;
    return 1;
    }