zug linie sehr sehr sehr buggy

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 zurzeit an einer von 3 zuglienen. die eine startet in ls, die 2. ins sf und die 3. in lv. ich bin nun bei der 1. in ls angefangen und es treten schon bugs auf, obwohl ich erst 2 stationen drinne habe. und zwar läuft alles perfekt wenn ein spieler /zug macht, bei 2en werden die timer iwie vermischt und nichts klappt mehr:


    new zuglinie[MAX_PLAYERS];//welche zugliene er nimmt, muss abgefragt werden um zu wissen welcher checkpoint als nächstes kommt
    new zugcheck[MAX_PLAYERS]; //checkpoint, jeder checkpoint hat seine id, bsp: hbf ls ist: checkpoint[playerid] = 1;
    new countdown[MAX_PLAYERS]; //countdown, der von 10 runter läugt, wenn er abgelaufen ist fragt er linie und checkpoint ab. jenachdem wird dann der nächste checkpoint gesetzt
    new zugstart[MAX_PLAYERS];//man kann in ls,sf,und ls starten, wenn man einma rum ist und wieder in ls ankommt dann soll die linie vorüber sein, hier wird abgefragt ob er das 2. mal diese haltestelle ls/sf/lv durchquerrt.


    new zugauto[10];//die züge


    public OnGameModeInit()
    {
    zugauto[0] = AddStaticVehicle(538,-1946.7235,172.2434,25.7186,355.8037,0,0);//sf zug 1
    zugauto[1] = AddStaticVehicle(538,-1946.7235,172.2434,25.7186,355.8037,0,0);//sf zug 2
    zugauto[2] = AddStaticVehicle(538,1700.4728,-1953.6523,14.8756,269.8264,126,126); //ls zug 1
    zugauto[3] = AddStaticVehicle(538,1700.4728,-1953.6523,14.8756,269.8264,126,126); //ls zug 2
    zugauto[4] = AddStaticVehicle(538,1443.5802,2632.6489,10.8203,268.6442,7,7); //lv zug 1
    zugauto[5] = AddStaticVehicle(538,1443.5802,2632.6489,10.8203,268.6442,7,7); //lv zug 2
    zugauto[6] = AddStaticVehicle(538,132.6992,1272.2493,23.4863,251.4290,86,86); //zug fort carson
    zugauto[7] = AddStaticVehicle(538,2864.4336,1270.4689,10.8203,183.4454,1,1); // zug east lv
    zugauto[8] = AddStaticVehicle(538,2284.9429,-1316.2509,24.0000,181.2755,3,3); //zug east ls
    zugauto[9] = AddStaticVehicle(538,2096.9131,-1953.7500,15.1256,270.0000,5,5); //zug willowfield
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp("/zug", cmdtext, true, 10) == 0)
    {
    if(gTeam[playerid] == 3) //ob er job zug hat
    {
    for(new j = 0;j<sizeof zugauto;j++)
    {
    if(IsPlayerInVehicle(playerid,zugauto[j])) //ob er in einem zugsitzt
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,1700.4728,-1953.6523,14.8756)) //ob er in ls ist, bisher nur ls linie verfügbar
    {
    zuglinie[playerid] = 1; //die zuglinie wurde gestartet, wenn er wieder ls hbf ankommt wird sie auf 0 gesetzt und die linie beendet
    zugcheck[playerid] = 0; //checkpoint id
    SendClientMessage(playerid,türkis,"Los Santos Hauptbahnhof");
    SetPlayerCheckpoint(playerid, 1702.0000,-1953.6553,14.8756,5);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"Du kannst deine Zuglinie nur am Ls, Sf oder LV HBF starten!");
    }
    }
    }
    }
    }
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(zugcheck[playerid] == 0)//wenn er durch ls hbf checkpoint fährt
    {
    countdown[playerid] = 11; //countdown auf 11 sekunden gesetzt
    countdown1(playerid); //public countdown1(playerid) wird aktiviert
    }
    if(zugcheck[playerid] == 1)//wenn er durch checkpoint nummer 1(2. checkpoint >> market station) fährt.
    {
    countdown[playerid] = 11; //das selbe wie oben, mit einer nachricht
    SendClientMessage(playerid,türkis,"Market Station Los Santos, Ausstieg: Rechts!");
    countdown1(playerid);
    }
    return 1;
    }


    public countdown1(playerid)
    {
    if(countdown[playerid] >= 2) //wenn countdown zeit über 2 ist, das heißt die letzte sekunde ist 1, bei 0 wird nächster marker gesetzt
    {
    new str1[256];
    countdown[playerid]--; //countdown wird um 1 veringert, also beim 1. mal auf 10
    format(str1,sizeof(str1),"~r~%d",countdown[playerid]); //die zeit läuft ab, von 10-1 und bei 0 ist nächster checkpoint da
    GameTextForPlayer(playerid,str1,1000,6);
    SetTimer("countdown1",1000,0); //nach einer sekunde wird selbes public aktiviert, countdown wird wiede rum eine sekunde verringert und ist nun auf 9, usw..
    }
    else //nach 10 sekunden etwa:
    {
    if(zugcheck[playerid] == 0)//wenn checkpoint in ls hbf ist
    {
    if(IsPlayerInRangeOfPoint(playerid,6.5,1702.0000,-1953.6553,14.8756)) // wenn er immernoch im bereich des checkpoints ist
    {
    if(zugstart[playerid] == 0) //zugliene beginnt, also wird sie gleich auf 1 gesetzt, damit beim nächsten antreffen am ls hbf die linie beendet wird
    {
    SetPlayerCheckpoint(playerid,787.3265,-1341.9502,-0.1244,5);
    SendClientMessage(playerid,türkis,"Nächster halt: Market Station (Los Santos)!");
    zugcheck[playerid] = 1;
    }
    if(zugstart[playerid] == 1) //wenn sie nun ,1 ist und es die linie "LS" ist wird die linie beendet
    {
    SendClientMessage(playerid,0x00FF00FF,"Du hast die Linie erfolgreich beendet!");
    zugstart[playerid] = 0;
    }
    }
    else //falls er net mehr im bereich des checkpoints ist
    {
    SendClientMessage(playerid,0xFF0000FF,"Haltestelle verpasst!");
    }
    }
    }
    return 1;
    }



    bisher nur 1 line von 3, und in dieser einen linie auch nur 2 checkpoints, die anfangs: ls hbf und die darauffolgende market station..
    und buggy wie sau, habs bestimmt viel zu kompliziert undresaurcen verschwenderisch gemacht, war nun das 1. mal das ich das gemacht habe.


    bug nochmal erklärt: Die timer spielen verück und somit auch die checkpoints wenn bereits 2 Spieler zur selben zeit zugfahren.


    Könntet ihr mir bitte helfen, wäre echt nett, danke:D


    MfG
    Simon