Haltestellen funktionieren nicht Richtig

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
  • Sobald ein Spieler mit der ID 1 in die Haltestelle fährt, wird der Countdown gestartet. Sobald ein 2 User mit der ID 0 in den Checkpoint fährt, wird vom Spieler der Timer scheinbar gestoppt und die Anzeigen entfernt. Wo könnte das Problem liegen ?





    for(new i = 0; i <= GetPlayerPoolSize(); i++)
    {
    if(Busfahrer[i][BusZeit] != 0)
    {
    if(IsPlayerInRangeOfPoint(i,5.0,BusfahrRouteA[Busfahrer[i][BusStand]][br_x],BusfahrRouteA[Busfahrer[i][BusStand]][br_y],BusfahrRouteA[Busfahrer[i][BusStand]][br_z]))
    {
    format(string,sizeof(string),"Nachste Haltestelle in %d Sek.",Busfahrer[i][BusZeit]);
    Busfahrer[i][BusZeit] --;
    GameTextForPlayer(playerid, string, 1000, 3);
    if(Busfahrer[i][BusZeit] == 0)
    {
    DisablePlayerCheckpoint(i);
    Busfahrer[i][BusStand] ++;
    if(Busfahrer[i][BusRoute] == 1)
    {
    SetPlayerCheckpoint(i,BusfahrRouteA[Busfahrer[i][BusStand]][br_x],BusfahrRouteA[Busfahrer[i][BusStand]][br_y],BusfahrRouteA[Busfahrer[i][BusStand]][br_z],2.5);
    }
    }
    }
    }
    }


    @Jeffry


    //edit falscher code


    //push
    //edit Code zur besseren Übersicht bearbeitet

    3 Mal editiert, zuletzt von robbi2304 ()

  • was das GetPlayerPoolSize?

    Dieser ermöglicht die ermittlung der höchsten ID eines Spieler auf dem Server



    Code
    GameTextForPlayer(playerid, string, 1000, 3);

    zu


    Code
    GameTextForPlayer(i, string, 1000, 3);

    @Mogly1:
    http://wiki.sa-mp.com/wiki/GetPlayerPoolSize

    hatte ich schon gesehen allerdings besteht der Fehler immernoch. Du hast mir sogar das Bus Script erstellt gehabt wenn du dich noch erinnern tust

  • Ok
    Beschreibe das Problem mal ganz genau nochmal

    Sobald ich als Spieler mit der playerid als 1 z.b in den Checkpoint reinfahre ist alles in Ordnung. Sobald aber ein Spieler mit der playerid 0 in den Checkpoint fährt wird meine Checkpoint Zeit ausgeblendet und der Timer auch gestoppt. Sobald der Spieler mit der playerid 0 den Checkpoint verlassen hat, läuft mein Timer dann wieder von vorne neu.

  • Hey,
    schick uns mal den gesamten Code, hier ist ja nichts mit einem Timer wo wir schauen können was flasch ist.
    Also bitte die entsprechenden Stellen rein stellen.


    MfG

    Hey, das ist der Code der alle 60 Sekunden ausgeführt wird


    SetTimer("SekundenTimer", 1000, 1);



    [list=1][*]forward SekundenTimer(playerid);
    [*]public SekundenTimer(playerid)
    [*]{
    [*]for(new i = 0; i <= GetPlayerPoolSize(); i++)
    [*] {
    [*] if(Busfahrer[i][BusZeit] != 0)
    [*] {
    [*] if(IsPlayerInRangeOfPoint(i,5.0,BusfahrRouteA[Busfahrer[i][BusStand]][br_x],BusfahrRouteA[Busfahrer[i][BusStand]][br_y],BusfahrRouteA[Busfahrer[i][BusStand]][br_z]))
    [*] {
    [*] format(string,sizeof(string),"Nachste Haltestelle in %d Sek.",Busfahrer[i][BusZeit]);
    [*] Busfahrer[i][BusZeit] --;
    [*] GameTextForPlayer(i, string, 1000, 3);
    [*] if(Busfahrer[i][BusZeit] == 0)
    [*] {
    [*] DisablePlayerCheckpoint(i);
    [*] Busfahrer[i][BusStand] ++;
    [*] if(Busfahrer[i][BusRoute] == 1)
    [*] {
    [*] SetPlayerCheckpoint(i,BusfahrRouteA[Busfahrer[i][BusStand]][br_x],BusfahrRouteA[Busfahrer[i][BusStand]][br_y],BusfahrRouteA[Busfahrer[i][BusStand]][br_z],2.5);
    [*] }
    [*] }
    [*] }
    [*]}
    [/list]


    Wenn der Spieler den Checkpoint erreicht



    if(Busfahrer[playerid][IsBusfahring] == 1)
    {
    if(IsPlayerInAnyVehicle(playerid) && Busfahrer[playerid][BusID] == GetPlayerVehicleID(playerid))
    {
    if(Busfahrer[playerid][BusRoute] == 1)
    {
    if(Busfahrer[playerid][BusStand] == sizeof(BusfahrRouteA)-1)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Bustour beendet.");
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,COLOR_BUSBLUE,"Du erhälst an deinem PayDay +2900$");
    PlayerInfo[playerid][pJobMoney]+=2900;
    Busfahrer[playerid][BusID] = 0;
    Busfahrer[playerid][IsBusfahring] = 0;
    Busfahrer[playerid][BusStand] = 0;
    Busfahrer[playerid][BusRoute] = 0;
    Busfahrer[playerid][BusZeit] = 0;
    SaveUserStats(playerid);
    new string[128];
    format(string,sizeof(string),"%s hat die Linie 100 erfolgreich beendet",getPlayerName(playerid));
    SaveToLog("Buserfolgreichlog", string);



    }
    else { Busfahrer[playerid][BusZeit] = 10; }
    }
    }

  • 1.) Erstell eine neue Variable "BusTimer"


    2.) Entfern den Timer "SetTimer("SekundenTimer", 1000, 1);"


    3.) Entferne die Schleife aus dem Public und lass den Timer beenden



    4.) Wenn der Spieler den Checkpoint erreicht startest du den Timer per SetTimerEx


  • Na das klingt mir etwas komisch. Ist doch eigentlich egal welchen Timer er nutzt ? Der Timer wird ja auch ordentlich beendet. Allerdings wird der Timer nicht bei 2 Leuten angezeigt wenn einer von denen 0 ist

  • Du kannst es auch so machen, die Variable playerid wird in deinen SekundenTimer erst garnicht genutzt.
    die Schleife machst du am besten mit MAX_PLAYERS und einer abfrage ob der Spieler Connected ist anstatt GetPlayerPoolSize dann sollte es gehen.



  • if(Busfahrer[playerid][IsBusfahring] == 1)
    {
    if(IsPlayerInAnyVehicle(playerid) && Busfahrer[playerid][BusID] == GetPlayerVehicleID(playerid))
    {
    if(Busfahrer[playerid][BusRoute] == 1)
    {
    if(Busfahrer[playerid][BusStand] == sizeof(BusfahrRouteA)-1)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Bustour beendet.");
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,COLOR_BUSBLUE,"Du erhälst an deinem PayDay +2900$");
    PlayerInfo[playerid][pJobMoney]+=2900;
    Busfahrer[playerid][BusID] = 0;
    Busfahrer[playerid][IsBusfahring] = 0;
    Busfahrer[playerid][BusStand] = 0;
    Busfahrer[playerid][BusRoute] = 0;
    Busfahrer[playerid][BusZeit] = 0;
    SaveUserStats(playerid);

    new string[128];
    format(string,sizeof(string),"%s hat die Linie 100 erfolgreich beendet",getPlayerName(playerid));
    SaveToLog("Buserfolgreichlog", string);
    }
    else
    {
    Busfahrer[playerid][BusZeit] = 10;
    }
    }
    }
    }


    auch in den timer ? Das war vorher ja in OnPlayerCheckpoint