Brauche hilfe bei Checkpoints.

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, ich bräuchte nochmal eure hilfe. Bei meinem Busfahrer Job ist es so das man in einem Checkpoint steht und 10 Sekunden warten muss. Man wird aber nicht gefrezzet. Aber wen man den Checkpoint verlässt soll da stehen "Du hast die Haltestelle verpasst!" und der Checkpoint soll nicht weiter gehen. Ich weiß jetzt aber nicht genau wie man das macht.


    Ich denke mal ich muss es hier mit machen nur das es unter OnPlayerLeaveCheckpoint kommt. Aber ich weiß nicht wie genau ich das machen soll.



    if(Spieler[playerid][Job] == 2)
    {
    new vehicle = GetPlayerVehicleID(playerid);
    for(new i; i != sizeof(buscars); i++)
    {
    if(vehicle == buscars[i])
    {
    if(pCP[playerid] == CHECKPOINT_BUSBERUF && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown[playerid] = SetTimerEx("BusCountdownTimer", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF2 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown2[playerid] = SetTimerEx("BusCountdownTimer2", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF3 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown3[playerid] = SetTimerEx("BusCountdownTimer3", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF4 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown4[playerid] = SetTimerEx("BusCountdownTimer4", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF5 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown5[playerid] = SetTimerEx("BusCountdownTimer5", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF6 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown6[playerid] = SetTimerEx("BusCountdownTimer6", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF7 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown7[playerid] = SetTimerEx("BusCountdownTimer7", 1000, false, "d", playerid);
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF8 && BusCP[playerid] > 0)
    {
    //TogglePlayerControllable(playerid, 0);
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~haltestelle...~n~~b~10", 1000, 4);
    BusCountdown8[playerid] = SetTimerEx("BusCountdownTimer8", 1000, false, "d", playerid);
    return 1;
    }
    }
    }
    }


    Und hier sind noch die Checkpoints.


    new Float:BusCoordinates[][3] = {
    {1173.1357,-1824.9971,13.8454},
    {1428.5259,-1734.7346,13.8296},
    {1824.1589,-1656.9386,13.8302},
    {2259.4243,-1661.7031,15.7094},
    {1547.1584,-1297.1689,16.7127},
    {1461.6752,-1031.2505,24.1032},
    {1189.0717,-935.9313,43.1936},
    {794.7014,-1368.4231,13.8384},
    {354.6964,-1648.4730,33.3069},
    {1172.7273,-1825.7487,13.8454}
    };


    SetPlayerCheckpoint(playerid, BusCoordinates[0][0], BusCoordinates[0][1], BusCoordinates[0][2], 3);

  • Danke aber jetzt habe ich das problem. Er zeigt die Nachricht sofort an wen ich im Checkpoint bin. Ich wollte es aber gerne so machen das wen ich ja einmal im Checkpoint fahre kommt der Text mit den 10 Sekunden aber wen ich schon aus dem Checkpoint rausfahre bevor die 10 Sekunden vorbei sind soll dann die nachricht kommen und der Checkpoint soll bleiben. Und wen ich die 10 Sekunden im Checkpoint bleibe soll es normal weiter gehen. Und ich wollte fragen wie man das macht wen der 10 Sekunden Countdown läuft und ich mich ein stück bewege oder so wie der Countdown dann neu anfängt.

  • Okay danke den Code habe ich da hingetan. Kannst du mir das bitte auch mit dem KillTimer zeigen.


    public OnPlayerLeaveCheckpoint(playerid)
    {
    if(BusCP[playerid] > 0 && buscd[playerid] > 0)
    {
    SendClientMessage(playerid, ROT, "Du hast die Haltestelle verpasst.");
    }
    return 1;
    }

  • Passt das soweit?


    Was ich nicht verstehe ist, warum du BusCountdown8[playerid] machst, und das für 8 Timer (1,2,3,...8). Es würde reichen, eine Variable und einen Timer zu nutzen, dann könnte man den Timer einfach mit:
    KillTimer(BusCountdown[playerid]);
    beenden.

  • Habe das 8 mal. Weil ich 8 Linien habe.


    public BusCountdownTimer(playerid)
    {
    if(buscd[playerid] > 1)
    {
    new str[45];
    buscd[playerid]--;
    format(str, sizeof(str), "~w~haltestelle...~n~~b~%i", buscd[playerid]);
    GameTextForPlayer(playerid, str, 1000, 4);
    BusCountdown[playerid] = SetTimerEx("BusCountdownTimer", 1000, false, "d", playerid);
    }
    else
    {
    TogglePlayerControllable(playerid, 1);
    new msg[128];
    if(BusCP[playerid] < 11)
    {
    format(msg, sizeof(msg), "Die nächste Haltestelle wurde dir Makiert!");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
    SetPlayerCheckpoint(playerid, BusCoordinates[BusCP[playerid]-1][0], BusCoordinates[BusCP[playerid]-1][1], BusCoordinates[BusCP[playerid]-1][2], 3);
    BusCP[playerid]++;
    }
    else
    {
    Delete3DTextLabel(Bankporter);
    new exp = random(2)+1;
    format(msg, sizeof(msg), "Die Fahrt ist nun zuende. Dir werden 2900$ am nächsten PayDay hinzugefügt. Erhaltende EXP: %d",exp);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
    Spieler[playerid][PayDayCash] += 2900;
    DisablePlayerCheckpoint(playerid);
    Spieler[playerid][BusExp] += exp;
    Spieler[playerid][BusLinie1] = 0;
    BusCP[playerid] = 0;
    if(Spieler[playerid][BusExp] >= Spieler[playerid][BusMaxExp])
    {
    Spieler[playerid][BusExp] = 0;
    Spieler[playerid][BusMaxExp] *=2;
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du bist um 1 Bus Skill aufgestiegen");
    Spieler[playerid][BusSkill] += 1;
    }
    }
    }
    }


    public BusCountdownTimer2(playerid)
    {
    if(buscd[playerid] > 1)
    {
    new str[45];
    buscd[playerid]--;
    format(str, sizeof(str), "~w~haltestelle...~n~~b~%i", buscd[playerid]);
    GameTextForPlayer(playerid, str, 1000, 4);
    BusCountdown2[playerid] = SetTimerEx("BusCountdownTimer2", 1000, false, "d", playerid);
    }
    else
    {
    TogglePlayerControllable(playerid, 1);
    new msg[128];
    if(BusCP[playerid] < 11)
    {
    format(msg, sizeof(msg), "Die nächste Haltestelle wurde dir Makiert!");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
    SetPlayerCheckpoint(playerid, BusCoordinates2[BusCP[playerid]-1][0], BusCoordinates2[BusCP[playerid]-1][1], BusCoordinates2[BusCP[playerid]-1][2], 3);
    BusCP[playerid]++;
    }
    else
    {
    Delete3DTextLabel(Bankporter2);
    new exp = random(3)+1;
    format(msg, sizeof(msg), "Die Fahrt ist nun zuende. Dir werden 3100$ am nächsten PayDay hinzugefügt. Erhaltende EXP: %d",exp);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
    Spieler[playerid][PayDayCash] += 3100;
    DisablePlayerCheckpoint(playerid);
    Spieler[playerid][BusExp] += exp;
    Spieler[playerid][BusLinie2] = 0;
    BusCP[playerid] = 0;
    if(Spieler[playerid][BusExp] >= Spieler[playerid][BusMaxExp])
    {
    Spieler[playerid][BusExp] = 0;
    Spieler[playerid][BusMaxExp] *=2;
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du bist um 1 Bus Skill aufgestiegen");
    Spieler[playerid][BusSkill] += 1;
    }
    }
    }
    }

  • Oh, gut da spiele ich jetzt nicht drin rum.
    Mache es bei OnPlayerLeaveCheckpoint so:
    if(Spieler[playerid][Job] == 2)
    {
    new vehicle = GetPlayerVehicleID(playerid);
    for(new i; i != sizeof(buscars); i++)
    {
    if(vehicle == buscars[i])
    {
    SendClientMessage(playerid, ROT, "Du hast die Haltestelle verpasst.");
    if(pCP[playerid] == CHECKPOINT_BUSBERUF && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown[playerid]);
    BusCountdown[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF2 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown2[playerid]);
    BusCountdown2[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF3 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown3[playerid]);
    BusCountdown3[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF4 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown4[playerid]);
    BusCountdown4[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF5 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown5[playerid]);
    BusCountdown5[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF6 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown6[playerid]);
    BusCountdown6[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF7 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown7[playerid]);
    BusCountdown7[playerid] = -1;
    return 1;
    }
    else if(pCP[playerid] == CHECKPOINT_BUSBERUF8 && BusCP[playerid] > 0)
    {
    KillTimer(BusCountdown8[playerid]);
    BusCountdown8[playerid] = -1;
    return 1;
    }
    }
    }
    }