[CheckPoints] Falsch erstellt?

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 Liebe Leute!
    Ich habe paar Probleme mit meinen Checkpoints, also der Erste Funktioniert richtig aber wenn ich einen 2ten erstellen möchte Funktioniert der garnicht. Das heißt, dass Man 15 Sekunden gefreezt wird, nach den 15 Sekunden enfreezt jedoch wird dann kein Checkpoint mehr angezeigt....


    Code:



    public OnPlayerEnterCheckpoint(playerid)
    {
    if (job[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 2;
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 3;
    }
    if (job[playerid] == 3)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 4;
    }
    return 1;
    }


    Public:
    public mission(playerid)
    {
    if (job[playerid] == 1)
    {


    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2101.1719,-1648.6266,13.4075, 5.0 );
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2067.3662,-1652.4037,13.5469, 5.0 );
    }
    if (job[playerid] == 2)
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2045.3193,-1635.7162,13.5469, 5.0 );
    return 1;
    }

  • Wenn einer einen Checkpoint Betritt muss dieser auch wieder gelöscht werden ;) Also bei public OnPlayerEnterCheckpoint(playerid)


    DisablePlayerCheckpoint(playerid);


    Sollte Helfen:

    public OnPlayerEnterCheckpoint(playerid)
    {
    if (job[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 2;
    DisablePlayerCheckpoint(playerid);
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 3;
    DisablePlayerCheckpoint(playerid);
    }
    if (job[playerid] == 3)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 4;
    DisablePlayerCheckpoint(playerid);
    }
    return 1;
    }

  • Nein. Das Stimmt doch nicht ganz. :D.
    Wenn er bei OnPlayerEnterCheckpoint doch erstmal 15 Sec. warten muss :D
    Das müsste doch theoretisch dann hier drunter.

    if (job[playerid] == 1)
    {


    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2101.1719,-1648.6266,13.4075, 5.0 );
    //hier
    }

  • Nein, ich zeige es dir an ein teil deines codes als beispiel.


    Das Script macht das so:


    Spieler Betritt Checkpoint, was dann passiert:

    if (job[playerid] == 1)//Hier wird Überprüft ob der job 1 ist wenn ja passiert folgendes:
    {
    TogglePlayerControllable(playerid, 0);//Er wird gefreezt
    SetTimerEx("mission",15000, false,"i",playerid);der timer wird gestartet und sobald 15 Sekunden vorbei sind wird der Public "mission" aufgerufen.
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!"); //die nachricht wird gesendet
    job[playerid] = 2;//Der Job wird auf 2 erhöht
    DisablePlayerCheckpoint(playerid);//Der Checkpoint wird zerstört und der neue der im public steht wird dann erschaffen!
    }
    //Hier dein Public "Mission":
    if (job[playerid] == 1)//Abfrage wenn job 1 ist sollte er 1 sein passiert folgendes
    {


    TogglePlayerControllable(playerid, 1); //Er wird wieder entfreezt
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");//Nachricht wird gesendet
    SetPlayerCheckpoint(playerid,2101.1719,-1648.6266,13.4075, 5.0 ); //Neuer Checkpoint wird erstellt
    //Würdest du nun hier das DisablePlayerCheckpoint(playerid); hin machen würde der Checkpoint hier drüber Zerstört werden und dann passiert nichts....
    }


    //E: Das alles geschieht so schnell das du nichts davon merkst^^ alles innerhalb von ein paar millisekunden ... und du willst ja das der alte checkpoint zerstört wird und der neue aufgerufen wird^^

  • Also wäre das so richtig? :


    public OnPlayerEnterCheckpoint(playerid)
    {
    if (job[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 2;
    DisablePlayerCheckpoint(playerid);
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 3;
    }
    return 1;
    }


    Public:



    public mission(playerid)
    {
    if (job[playerid] == 1)//Abfrage wenn job 1 ist sollte er 1 sein passiert folgendes
    {


    TogglePlayerControllable(playerid, 1); //Er wird wieder entfreezt
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");//Nachricht wird gesendet
    SetPlayerCheckpoint(playerid,2067.3662,-1652.4037,13.5469, 5.0 ); //Neuer Checkpoint wird erstellt
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,Orange,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2045.3193,-1635.7162,13.5469, 5.0 );
    }
    return 1;
    }

  • Du musst das immer machen! Sonst macht er das nur wenn der Job 1 ist... aber du willst das er das dann immer löscht ;) Also:
    So sollte es richtig sein:

    public OnPlayerEnterCheckpoint(playerid)
    {
    if (job[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 2;
    DisablePlayerCheckpoint(playerid);
    }
    if (job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 3;
    DisablePlayerCheckpoint(playerid);
    }
    if (job[playerid] == 3)
    {
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("mission",15000, false,"i",playerid);
    SendClientMessage(playerid,0xFF6400FF,"Bitte warte 15 Sekunden!");
    job[playerid] = 4;
    DisablePlayerCheckpoint(playerid);
    }
    return 1;
    }


    public mission(playerid)
    {
    if(job[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2101.1719,-1648.6266,13.4075, 5.0 );
    }
    if(job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2067.3662,-1652.4037,13.5469, 5.0 );
    }
    if(job[playerid] == 2)
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid,0xFF6400FF,"15 Sekunden sind nun um!");
    SetPlayerCheckpoint(playerid,2045.3193,-1635.7162,13.5469, 5.0 );
    }
    return 1;
    }

  • Wo soll ich die Else if genau setzten.
    Gerade Getstet, und er Springt wirklich von 1 auf 3.
    Und wenn ich halt dann zum "2" Checkpoint fahre (ist der 3te) Erscheint der Checkpoint immer d.H. Wiederholt sich dauerhaft und ich muss 15 Sekunden immer warten..