Fragen zum Busfahrer Job

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 kurz eine Frage,


    Wie kann ich abfragen wieviele Leute auf einer Linie fahren?
    & wie kann ich es machen das z.b auf einer Linie nur z,b 10 Fahren können?


    Wie mache ich wen er /linie nochmal eingibt das die Tour automatisch dann abgebrochen wird.


    //E:


    Habe das Mit den Checkpoint selber hin bekommen!

  • Schöner wäre es, wenn du es gleich als Array machst:



    new linie[7];

    Wenn jemand beim Dialog auf ein listitem drückt ->

    linie[listitem]++;

    (wobei ich mir nicht sicher bin, ob die erste Auswahl listitem -> 1 oder 0 ist...)
    und später beim Beenden der Fahrt -> linie[xyz]--;


    Wie mache ich wen er /linie nochmal eingibt das die Tour automatisch dann abgebrochen wird.

    Checkpoint resetten und die Variable zurücksetzen, falls du das so umgesetzt wurde.
    Musst die Linie halt nur in einer Variable zwischenspeichern.


    LG

  • Die frage ist ja,


    Ich setze den Busfahrer per Spieler[playerid][pBusLinie] = 2; Die Linie.
    Sobald er die gestartet hat.


    Hat der Spieler Sie fertig setze ich die Natürlich wieder auf 0

  • Bei den listitems folgendes hinzufügen:
    linie[listitem]++;


    Wenn er wieder /linie eingibt fragst du ab:

    if(Spieler[playerid][pBusLinie] != 0) {
    linie[Spieler[playerid][pBusLinie]-1]--;
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid, 0xFFFFFFFF, "Du hast die Busfahrt abgebrochen!");
    }


    linie[Spieler[playerid][pBusLinie]-1]--;

    Und das da auch dort einfügen, wo er die Linie beendet.


    Ganz oben musst du nur noch das hinzufügen und es sollte funktionieren:
    new linie[7];


    Wenn du die Fahrer abfragen willst -> unter listitem die Abfrage hinzufügen:
    if(linie[listitem] == 10) { xyz;}
    Wobei ich hierbei doch die Anzahl der Fahrer von Zeit zu Zeit per for Schleife aktualisieren würde!


    LG

  • Klar, wenn du NUR wissen willst, ob schon 10 Leute die Linie fahren machst du das:
    new count;for(new i; i <= GetPlayerPoolSize(); i++){if((Spieler[i][pBusLinie]-1) != listitem) continue;count++;}if(count == 10)return SendClientMessage(playerid, 0xFFFFFFFF, "Blabla schon 10 Leute");


    Meine vorherige Variante könntest du halt noch in ein Dialog einbauen. ^^

  • Klar, wenn du NUR wissen willst, ob schon 10 Leute die Linie fahren machst du das:
    new count;for(new i; i <= GetPlayerPoolSize(); i++){if((Spieler[i][pBusLinie]-1) != listitem) continue;count++;}if(count == 10)return SendClientMessage(playerid, 0xFFFFFFFF, "Blabla schon 10 Leute");


    Meine vorherige Variante könntest du halt noch in ein Dialog einbauen. ^^

    Wie benutze ich deine variable in mein Dialog?

  • Wie benutze ich deine variable in mein Dialog?


    CMD:linie(playerid)
    {
    if(!IsLoggedIn(playerid))return 1;
    new vehicleid = GetPlayerVehicleID(playerid);
    if(Spieler[playerid][pJob] == 1) // Busfahrer
    {
    if(IsVehicleABus(vehicleid))
    {
    if(GetPlayerVehicleSeat(playerid) != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht auf dem Fahrersitz.");
    //strdel(DialogString, 0, sizeof(DialogString));
    //strcat(DialogString, "Linie 1: LS Stadtlinie 1, ab Skill 0\nLinie 2: LS Stadtlinie 2, ab Skill 2\nLinie 3: LS Stadtlinie (East), ab Skill 3\nLinie 4: LS-SF, ab Skill 4\nSF-LS, ab Skill 4\nLinie 6: SF Stadtlinie 1, ab SKill 6\nLinie 7: SF Stadtlinie 2, ab Skill 7");
    format(DialogString, sizeof(DialogString), "Linie 1: LS Stadtlinie 1, ab Skill 0 (%d/10)\n\
    Linie 2: LS Stadtlinie 2, ab Skill 2 (%d/10)\n\
    Linie 3: LS Stadtlinie (East), ab Skill 3 (%d/10)\n\
    Linie 4: LS-SF, ab Skill 4 (%d/10)\n\
    Linie 5:SF-LS, ab Skill 4 (%d/10)\n\
    Linie 6: SF Stadtlinie 1, ab Skill 6 (%d/10)\n\
    Linie 7: SF Stadtlinie 2, ab Skill 7 (%d/10)", linie[0], linie[1], linie[2], linie[3], linie[4], linie[5], linie[6]);
    //Beachte hierbei, dass er die Linie auch mit dem Tod oder Disconnecten abbrechen könnte. Kenne dein Script nicht und kenne die anderen Alternativen nicht
    //somit musst du bei jeder Wahrscheinlichkeit linie[Spieler[playerid][pBusLinie]-1]--; setzen!!!!
    ShowPlayerDialog(playerid, DIALOG_BUSFAHRER, DIALOG_STYLE_LIST, "Linien Auswahl", DialogString, "Starten", "Abbrechen");
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Der Busbahnhof wurde Rot markiert.");
    SetPlayerCheckpointEx(playerid, 1212.3547,-1729.5112,13.5721, 3.0, CP_GPS_BUSBAHNHOF, CP_TYPE_GPS);
    }
    }
    return 1;
    }


  • Aktueller Code.


    Habe das So eingefügt wie du gesagt hast. hoffentlich habe ich nichts falsch gemacht.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Funktioniert Super!


    Habe das nun nochmal abgeändert da es nicht gezählt hat das jemand fährt.
    Nun habe ich das so gemacht.


    Wen der Spieler die Linie genommen hat und er "Eine" falsche genommen hat und er /linie eingibt wird die Linie abgebrochen aber der Dialog wird ihm wieder gezeigt das soll nicht sein warum?


  • Nur noch das Problem wen er die Linie abgebrochen hat kann er den Dialog nicht mehr öffnen warum? :/

  • Code
    format(DialogString, sizeof(DialogString), "{FFFFFF}Linie 1: LS Stadtlinie 1 {33AA33}(%d){FFFFFF}, ab Skill 0\n\
    														{FFFFFF}Linie 2: LS Stadtlinie 2 {33AA33}(%d){FFFFFF}, ab Skill 2\n\
    														{FFFFFF}Linie 3: LS Stadtlinie 3 (East) {33AA33}(%d){FFFFFF}, ab Skill 3\n\
    														{FFFFFF}Linie 4: LS-SF {33AA33}(%d/5){FFFFFF}, ab Skill 4\n\
    														{FFFFFF}Linie 5: SF-LS {33AA33}(%d/5){FFFFFF}, ab Skill 4\n\
    														{FFFFFF}Linie 6: SF Stadtlinie 1 {33AA33}(%d/5){FFFFFF}, ab Skill 6\n\ //11284
    														{FFFFFF}Linie 7: SF Stadtlinie 2 {33AA33}(%d/5){FFFFFF}, ab Skill 7\n\
    //11285
    														{FFFFFF}Linie 8: SF-LV {33AA33}(%d/5){FFFFFF}, ab Skill 8\n", linie[0], linie[1], linie[2], linie[3], linie[4], linie[5], linie[6], linie[7]);
    			ShowPlayerDialog(playerid, DIALOG_BUSFAHRER, DIALOG_STYLE_LIST, "Linien Auswahl", DialogString, "Starten", "Abbrechen");


    Habe noch eine frage wie ich das ganze in einen Dialog bekomme.




    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11284) : error 075: input line too long (after substitutions)
    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11285) : error 037: invalid string (possibly non-terminated string)
    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11285) : error 017: undefined symbol "FFFFFF"
    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11285) : warning 217: loose indentation
    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11285) : error 017: undefined symbol "Linie"
    C:\Users\ASUS\Desktop\GFR\gamemodes\GFR.pwn(11285) : fatal error 107: too many error messages on one line

  • versuch es so

    new DialogString[1500],string1[250],string2[250];
    format(string1, sizeof(string1), "{FFFFFF}Linie 1: LS Stadtlinie 1 {33AA33}(%d){FFFFFF}, ab Skill 0\n{FFFFFF}Linie 2: LS Stadtlinie 2 {33AA33}(%d){FFFFFF}, ab Skill 2\n{FFFFFF}Linie 3: LS Stadtlinie 3 (East) {33AA33}(%d){FFFFFF}, ab Skill 3\n{FFFFFF}Linie 4: LS-SF {33AA33}(%d/5){FFFFFF}, ab Skill 4",
    linie[0], linie[1], linie[2], linie[3]);
    format(string2, sizeof(string2), "{FFFFFF}Linie 5: SF-LS {33AA33}(%d/5){FFFFFF}, ab Skill 4\n{FFFFFF}Linie 6: SF Stadtlinie 1 {33AA33}(%d/5){FFFFFF}, ab Skill 6\n{FFFFFF}Linie 7: SF Stadtlinie 2 {33AA33}(%d/5){FFFFFF}, ab Skill 7\n{FFFFFF}Linie 8: SF-LV {33AA33}(%d/5){FFFFFF}, ab Skill 8",
    linie[4], linie[5], linie[6], linie[7]);
    format(DialogString, sizeof(DialogString), "%s\n%s",string1,string2);
    ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST, "Linien Auswahl", DialogString, "Starten", "Abbrechen");

  • versuch es so

    Du hast hier einen string quasi, der 2000 Indizes belegt.
    Das entspricht 2000 * 4 Byte = 8.000 Byte = 8kb die du da allozierst.
    Das geht aber auch mit 600. Somit würdest du (600 * 4 Byte = 2.400 Byte = 2.4kb) 5.6kb sparen.
    Das kann schon performanz technisch was aus machen.


    Dann kann man hier noch strcat nutzen, welches den String befüllt und zwar sehr schnell und effizient und am Ende nur ein format macht.


    So sieht das dann ordentlich aus:


    C
    new DialogString[600];
    strcat(DialogString,"{FFFFFF}Linie 1: LS Stadtlinie 1 {33AA33}(%d){FFFFFF}, ab Skill 0\n");
    strcat(DialogString,"{FFFFFF}Linie 2: LS Stadtlinie 2 {33AA33}(%d){FFFFFF}, ab Skill 2\n");
    strcat(DialogString,"{FFFFFF}Linie 3: LS Stadtlinie 3 (East) {33AA33}(%d){FFFFFF}, ab Skill 3\n");
    strcat(DialogString,"{FFFFFF}Linie 4: LS-SF {33AA33}(%d/5){FFFFFF}, ab Skill 4\n");
    strcat(DialogString,"{FFFFFF}Linie 5: SF-LS {33AA33}(%d/5){FFFFFF}, ab Skill 4\n");
    strcat(DialogString,"{FFFFFF}Linie 6: SF Stadtlinie 1 {33AA33}(%d/5){FFFFFF}, ab Skill 6\n");
    strcat(DialogString,"{FFFFFF}Linie 7: SF Stadtlinie 2 {33AA33}(%d/5){FFFFFF}, ab Skill 7\n");
    strcat(DialogString,"{FFFFFF}Linie 8: SF-LV {33AA33}(%d/5){FFFFFF}, ab Skill 8\n");
    format(DialogString,sizeof(DialogString),DialogString, linie[0], linie[1], linie[2], linie[3], linie[4], linie[5], linie[6], linie[7]);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen