Busslinie Checkpoints werden übersprungen.

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,
    Ich habe eben den Job Bussfahrer gescriptet (nur eine linie für einen FunServer also nicht viel Extras).
    Ich bin gerade mit einem die Linie gefahren und irgendwie wurden immer wieder Checkpoints übersprungen.
    Das ganze geschiet über eine Abfrage der einer Variable über switch und case.
    Ist es möglich die Variable so zu gestalten, dass sie für jeden spieler einzelnd da ist?
    Weil ich denke es liegt daran das sich das überschnitten hat.
    Hier mal ein Teil vom Code weil ich nicht denke das alles hier rein muss.

    public OnPlayerEnterCheckpoint(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    switch(busl1)
    {
    case 0:
    {
    if(GetVehicleModel(vehicleid) == 437)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,824.7072,-1051.4197,24.7785,10);
    busl1 = 1;
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Du sitzt nicht mehr im Bus.(Linie Abgebrochen!)");
    DisablePlayerCheckpoint(playerid);
    }
    }
    case 1:
    {
    if(GetVehicleModel(vehicleid) == 437)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1237.6943,-943.4542,42.1660,10);
    busl1 = 2;
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Du sitzt nicht mehr im Bus.(Linie Abgebrochen!)");
    DisablePlayerCheckpoint(playerid);
    }
    }
    case 2:
    {
    if(GetVehicleModel(vehicleid) == 437)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1433.2676,-1037.2535,23.3188,10);
    busl1 = 3;
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Du sitzt nicht mehr im Bus.(Linie Abgebrochen!)");
    DisablePlayerCheckpoint(playerid);
    }
    }

    ...

    case 15:
    {
    if(GetVehicleModel(vehicleid) == 437)
    {
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,BLAU,"Du hast die Linie beendet und erhälst 15000$.");
    GivePlayerMoney(playerid,15000);
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Du sitzt nicht mehr im Bus.(Linie Abgebrochen!)");
    DisablePlayerCheckpoint(playerid);
    }
    }
    }
    return 1;
    }


    Und hier der Command mit der die Linie anfängt:

    ocmd:buslinie1(playerid,params[])
    {
    busl1 = 0;
    SetPlayerCheckpoint(playerid,894.9324,-1316.7056,13.0776,10);
    return 1;
    }


    Die Variable ist oben im script difinirt:

    new busl1;

  • vewende ein array ... also new busl1[MAX_PLAYERS];
    und dann eben busl1[playerid];


    da du aber sicher mehrere jobs machst, ist es besser, jeder buslinie, bzw jedem job eine id zu geben.
    dann erstellst du 2 arrays, einmal eines, dass die id des bisherigen jobs angibt, das andere den derzeitigen checkpoint...
    dann sparst du dir am ende viele nutzlose arrays

  • vewende ein array ... also new busl1[MAX_PLAYERS];
    und dann eben busl1[playerid];


    da du aber sicher mehrere jobs machst, ist es besser, jeder buslinie, bzw jedem job eine id zu geben.
    dann erstellst du 2 arrays, einmal eines, dass die id des bisherigen jobs angibt, das andere den derzeitigen checkpoint...
    dann sparst du dir am ende viele nutzlose arrays

    ALso das 2. Verstehe ich jetzt nicht ganz wie müste das den aussehen? new busl1[MAX_PLAYERS]] 1; oderwi? wen ich mehrere jobs mache kann ich doch auch mehrere Arrays machen.

  • naya ich finde es sinnlos zu machen
    new busl1[MAX_PLAYERS];
    new busl2[MAX_PLAYERS];
    new busl3[MAX_PLAYERS];


    da man ja immer nur eine buslinie fährt und nie mehrere gleichzeitig, ist folgendes um einiges sinnvoller.


    new tempLine[MAX_PLAYERS];
    new tempCP[MAX_PLAYERS];


    wenn der spieler also den checkpoint betritt frägst du erst ab welche linie er fährt bei der ersten linie zB:
    if(tempLine[playerid]==1) switch(tempCP[playerid]) {
    case 0 : SetCp;
    case 1 : SetCp;
    }


    verstanden ?