if(IsPlayerInRangeOfPoint(..)) - problem (:

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
  • Guten Tag


    ich arbeite gerade an meinen Zugsystem.
    sobald man den checkpoint erreicht, läuft eine Zeit von 10 Sekunden runter, wenn man nach diesen 10 Sekunden immernoch im checkpoint ist, gehts weiter, hat man aber den checkpoint verlassen, kommt die meldung: Haltestelle verpasst und er muss zurück zum checkpoint.


    Ist man tatsächlich nicht ich checkpoint, kommt auch diese Meldung und es geht nicht weiter bevor man die 10 Sekunden im Marker stand. Steht man nun diese 10 sekunden im Marker gehts es auch weiter, wie es soll. Nur dann kommt die Meldung: Haltestelle verpasst, obwohl es weitergeht.


    Also steht man nicht im marke rkommt Meldung: Haltestelle verpasst
    steht man im Marker kommt Meldung: Nächstehalt: blabla.. Haltestelle verpasst.


    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,1443.5889,2632.2500,12.1256))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2780.8750,1739.2742,12.1256,5.0);
    zugcheckpoint[playerid] = 2;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Yakuza Hq, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }


    wäre sehr nett wenn mir da einer helfen könnte.


    mfg Simon

  • Ich kann dein Problem leider noch nicht zu 100% nachvollziehen. Wozu gibt es diesen Checkpoint, wenn die Position des Spielers mit IsPlayerInRangeOfPoint() statt mit IsPlayerInCheckpoint() abgefragt wird?


    Wenn ich das soweit richtig verstanden hab wird immer der Code im else ausgeführt? Überprüf am besten noch einmal die Koordinaten, erstell ggf. mal eine Dummy-Abfrage (statt dem IsPlayerInRangeOfPoint einfach mal if(0==0)), um das Problem näher eingrenzen zu können.

  • mein code war echt kacke wenn ichs nu seh :D


    so ich habs nun optimiert und deine frage warum IsPlayerInRange anstatt IsInCheckpoint wenns um checkpoints geht hat sich auch erledigt.


    jedoch kommt immer noch die meldung.obwohl er im checkpoint ist kommt die meldung, das lustige dabei ist ja das es trotzdem weiter geht.


    es wird also die bediehnung if(IsPlayerInCheckpoint(playerid)) erfüllt, und gleichzeitig wird das else erfüllt. da verstehe ich nicht wieso? ich könnte die abfrage auch in if!IsPlayerInCheckpoint(playerid) umschreiben, ob es was bringt weiß ich nicht.


    was meinst du mit dummy-abfrage.


    Hier mein scriptausschnitt:


    public zugcheck(playerid)
    {
    zugchecktime[playerid]--;
    new str[10];
    format(str,sizeof(str),"~r~%d",zugchecktime[playerid]);
    GameTextForPlayer(playerid,str,1000,6);
    if(zugchecktime[playerid] >= 1)
    {
    SetTimerEx("zugcheck",1000,0,"i",playerid);
    }
    else
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2780.8750,1739.2742,12.1256,5.0);
    zugcheckpoint[playerid] = 2;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Yakuza Hq, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2864.7500,1270.7405,12.1256,5.0);
    zugcheckpoint[playerid] = 3;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Linden Station, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 3)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2284.8750,-1316.2510,25.5006,5.0);
    zugcheckpoint[playerid] = 4;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: East los Santos, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 4)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2096.9131,-1953.7500,15.1256,5.0);
    zugcheckpoint[playerid] = 5;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Willowfield Mülldeponie, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 5)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1700.4836,-1953.6525,14.8756,5.0);
    zugcheckpoint[playerid] = 6;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Los Santos HBF, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    return 1;
    }


    //edit: dummes problem muss es anders machen, zugcheckpoint wird auf 2 erhöht und direkt danahc wird abgefragt ob zugstrecke auf 2 ist :D


    //edit: problem gelößt hier nun mein aktueller script ausschnitt mit dem selben problem:


    public zugcheck(playerid)
    {
    zugchecktime[playerid]--;
    new str[10];
    format(str,sizeof(str),"~r~%d",zugchecktime[playerid]);
    GameTextForPlayer(playerid,str,1000,6);
    if(zugchecktime[playerid] >= 1)
    {
    SetTimerEx("zugcheck",1000,0,"i",playerid);
    }
    else
    {
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 1)
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2780.8750,1739.2742,12.1256,5.0);
    zugcheckpoint[playerid] = 2;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Yakuza Hq, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 2)
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2864.7500,1270.7405,12.1256,5.0);
    zugcheckpoint[playerid] = 3;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Linden Station, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 3)
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2284.8750,-1316.2510,25.5006,5.0);
    zugcheckpoint[playerid] = 4;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: East los Santos, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 4)
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2096.9131,-1953.7500,15.1256,5.0);
    zugcheckpoint[playerid] = 5;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Willowfield Mülldeponie, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    if(zuglinie[playerid] == 1 && zugcheckpoint[playerid] == 5)
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1700.4836,-1953.6525,14.8756,5.0);
    zugcheckpoint[playerid] = 6;
    zugchecktime[playerid] = 10;
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
    {
    SendClientMessage(i,türkis,"** Nächster Halt: Los Santos HBF, zu ihren Anschlussmöglichkeiten beachten sie die Lautsprecherdurchsagen am Bahnsteig! **");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Haltestelle verpasst!");
    zugchecktime[playerid] = 10;
    }
    }
    }
    return 1;
    }


    //edit: habe den fehler gefunden aber nicht die lösung


    wenn er im checkpoint ist, wird zugcheckpoint erhöht. direkt danach wird abgefragt ob der zugcheckpoint = 2 ist, was auch der fall ist. nur leider wird der checkpoint zerstört und ein neuer gemacht, deshalb ist er nicht im checkpoint und es kommt die meldung.

    3 Mal editiert, zuletzt von Simon ()