Probleme mitm Race.. Server Crasht aber wieso?!

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 Leute,
    also wir sind grade dabei nen Race für uns zu machen, und haben jetzt folgendes Problem:
    Wir gehen ins /rennen und starten dann das rennen, dann nachdem das Rennen beendet wurde (ob ausgeschieden oder nicht), schreibt er die ganzezeit in den Chat "Das Rennen wurde beendet!" und das die ganze Zeit (der Server Crasht davon!). Halt wenn das Rennen beendet wurde, schreibt er ja normalerweise nur 1mal in den Chat "Das Rennen wurde beendet!". Bei uns schreibt er es aber die ganze Zeit in den Chat bis der Server Crasht. Wo ist das Problem? kann mir da wer helfen?
    Hier der Pawncode
    forward RennenAbbruch();
    public RennenAbbruch()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    KillTimer(RaceKiller);
    TextDrawHideForAll(racestats[i]);
    DisablePlayerRaceCheckpoint(i);
    RennenStatus[i] = 0;
    RennenTeilnahme[i] = 0;
    RaceTicket[i] = 0;
    RennenGestartet = 0;
    SendClientMessageToAll(rot,"Das Rennen ist beendet!");
    RennenMachen();
    return 1;
    }
    return 1;
    }


    MfG PhiL

  • Ja, der schreibt dir das schön 500 Mal in die Chatbox xD
    Du musst einfach die SendClientMessageToAll außerhalb der Schleife platzieren, sonst sendet er das 500 Mal an jeden.


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • das problem ist nur, der macht das nicht nach jedem rennen sondern erst nach jedem 3ten - 4ten rennen.. er fängt erst normal an bei den ersten 2 races, und macht dann 2mal beim 3ten race und danach richtig halt sehr oft!


    Liegt das daran?

    Einmal editiert, zuletzt von PhiLeeT ()

  • ihr habt bestimmt auch irgentwo dann
    RennenBeendet = 0;
    und
    RennenBeendet = 1; ja ?

  • Was soll das denn bewirken? Wenn ihr das so in ne for schleife macht, werden diese variablen verdammt oft auf 0 gesetzt und es wird sehr oft RennenMachen() aufgerufen und der Text kommt auch sehr oft... puh :) genau 500 mal^^

  • ich glaube ich weiß woran das liegt.
    damit das rennnen automatisch beendet wird in 5 minuten, wird wenn das rennen gestartet wird ein SetTimerEx gestartet, wo repeating auf 0 ist (damit es nicht regelmäsig startet sondern nur einmal). wenn jetz das rennen gestartet wird, wird der timer gestartet und wenn das rennen früher beendet wird, also zb in 3 minuten, dann wird es ja im nächsten rennen immernoch eingesetzt. und wenn einer den ersten platz gemacht hat, dann wird das rennen beendet wieder gestartet, also wieder ein SetTimerEx, damit das rennen dann beendet werden kann und dann noch die anderen eine kurze Gelegenheit haben ins Ziel zu fahren. ja mit KillTimer geht es irgendwie nicht..

  • ich hab das ausprobiert aber es geht immernoch nicht


    forward RennenAbbruch();
    public RennenAbbruch()
    {
    KillTimer(RaceKiller);
    RennenGestartet = 0;
    SendClientMessageToAll(rot,"Das Rennen ist beendet!");
    RennenMachen();
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    TextDrawHideForAll(racestats[i]);
    DisablePlayerRaceCheckpoint(i);
    RennenStatus[i] = 0;
    RennenTeilnahme[i] = 0;
    RaceTicket[i] = 0;
    return 1;
    }
    return 1;
    }


    MfG PhiL


    EDIT: Das Problem besteht immernoch, kann mir wirklich niemand helfen

    Einmal editiert, zuletzt von PhiLeeT ()

  • ich glaube ich weiß woran das liegt.
    damit das rennnen automatisch beendet wird in 5 minuten, wird wenn das rennen gestartet wird ein SetTimerEx gestartet, wo repeating auf 0 ist (damit es nicht regelmäsig startet sondern nur einmal). wenn jetz das rennen gestartet wird, wird der timer gestartet und wenn das rennen früher beendet wird, also zb in 3 minuten, dann wird es ja im nächsten rennen immernoch eingesetzt. und wenn einer den ersten platz gemacht hat, dann wird das rennen beendet wieder gestartet, also wieder ein SetTimerEx, damit das rennen dann beendet werden kann und dann noch die anderen eine kurze Gelegenheit haben ins Ziel zu fahren. ja mit KillTimer geht es irgendwie nicht..

    Geht auch nicht habs probiert, das problem besteht dort, halt das was ich zitiert habe :P


    MfG

  • Habe ich schon probiert .......... ich weiß doch was das problem auslöst, bloß wie ich es behebn kann weiß ich nicht

  • forward RennenAbbruch();
    public RennenAbbruch()
    {
    KillTimer(RaceKiller);
    RennenGestartet = 0;
    SendClientMessageToAll(rot,"Das Rennen ist beendet!");
    RennenMachen();
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    TextDrawHideForPlayer(i,racestats[i]);
    DisablePlayerRaceCheckpoint(i);
    RennenStatus[i] = 0;
    RennenTeilnahme[i] = 0;
    RaceTicket[i] = 0;
    }
    return 1;
    }

  • ich habe viele methoden ausprobiert, das habe ich auch probiert aber ich denke der timer wird auch für das nächste rennen aktiviert da es nicht gekillt wird, denn es wird beim start auch aktiviert, dh 2 timer sind dann am laufen, wenn es rennen beendet wird und wd gestartet wird 3 timer usw. und dann kommt die message das das rennen beendet wurde und so weiter


    aber wir probieren es jetzt mal BugScripter dann schauen wir mal obs geht...

  • stimmt er wird nicht gekillt. Deshalb auch
    KillTimer(RaceKiller);
    :sleeping:?(

  • ich habe probiert:
    RaceKiller = SetTimerEx("RennenAbbruch", 1000, true, "d", i);
    sowie:
    RaceKiller = SetTimerEx("RennenAbbruch", 1000, false, "d", i);
    RaceKiller = SetTimer("RennenAbbruch",300000,1);
    RaceKiller = SetTimer("RennenAbbruch",300000,0);
    RaceKiller = SetTimer("RennenAbbruch",300000,1);


    Aber der timer wird nicht gekillt,
    sonst würde das doch nicht die ganze zeit kommen?! Bzw mitten im rennen, denn
    wenn jetzt ein rennen gestartet wird und in 3 minuten beendet wird, dann wird es
    am nächsten rennen noch die restlichen 2 minuten aktiv sein + der neue timer!
    Also einmal 5 minuten dann 2 minuten und so wird es dann mitten im rennen
    beendet!

  • RaceKiller = SetTimer("RennenAbbruch",300000,0);
    ist richtig.