Frage zu goto

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
    habe vor ein autohaus zu scripten und ich will das autos die gesperrt sind übersprungen werden.
    habe es so probiert aber leider führt er den befehl einfach weiter aus ohne wieder nach oben zu springen.



    anfang:
    autozahl[playerid]+=1;
    if(autozahl[playerid]==Fahrzeugegesperrt(autozahl[playerid])){goto anfang;}

    habe mir gedacht theoretisch wenn er wieder zum anfang springt macht er erneut +1 aber leider ist dies nicht der fall.
    kennst sich damit jemand aus? was mach ich falsch

  • Ich würde auf die Verwendung von goto hier echt verzichten, benutz von mir aus ein for oder do while, aber kein goto. Nur weil ein Compiler jump und call als Funktionsaufruf ersetzt, ist hier die Benutzung von goto nicht gerechtfertigt. goto ist bei 10 Zeilen noch nicht wirklich schlimm, aber bei sagen wir mal 1000 Zeilen kannste dir selber ins Knie schiessen (Stichwort Modularität).


    Willst Du in einer Iteration ein Item überspringen, lautet dein Keyword continue und nicht goto ;)

  • aber wie soll ich bei einem continue ein weiteres +=1 einbauen? geht nicht.. deshalb goto.
    oder wie würdest du es machen mit +1?
    edit: und ich denke eine schleife zu machen würde mehr resourcen fressen als kurz 2 zeilen nach oben zu springen oder?

  • Heute wird goto mehr oder weniger verschrien (In gewissen Hochsprachen ist es nicht mehr mal vorzufinden). Goto hatte früher eigentlich eine andere Bedeutung, als wie es heute verwendet wird. Ich würde dir ans Herz legen, Schleifen zu verwenden, da man hier einerseits eine Abstraktion zum Maschinencode (welcher für Funktionsaufrufe teilweise springt, sprich eine Art goto, aber er kann auch in andere Funktionen springen und nicht nur innerhalb der Funktion) und es andererseits lesbarer ist.


    Ich denke es geht dir darum, eine vehicleid eines weggesperrten Fahrzeuges mit einer Spielervariable zu vergleichen ? Ansonsten müsstest Du mich schnell aufklären, dann kann ich dir ein Codestück liefern

  • also bisher hab ich das hier:



    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
    if(clickedid==autohaustext[4])
    {
    anfang:
    autozahl[playerid]-=1;
    if(autozahl[playerid]<400){autozahl[playerid]=611;}
    if(autohausautos(autozahl[playerid],0)==0){goto anfang;}
    DestroyVehicle(autohausauto[playerid]);
    autohausauto[playerid]=CreateVehicle(autozahl[playerid],-1948.9185,263.9953,35.5769,180.0,-1,-1,-1);
    SetVehicleVirtualWorld(autohausauto[playerid],playerid+1);
    format(fahrzeugstring,sizeof(fahrzeugstring),"%s",FahrzeugName[autozahl[playerid]-400]);
    TextDrawSetString(autohaustext[2],fahrzeugstring);
    format(fahrzeugstring,sizeof(fahrzeugstring),"%i",FahrzeugPreis[autozahl[playerid]-400]);
    TextDrawSetString(autohaustext[3],fahrzeugstring);
    }
    if(clickedid==autohaustext[5])
    {
    anfang2:
    autozahl[playerid]+=1;
    if(autozahl[playerid]>611){autozahl[playerid]=400;}
    if(autohausautos(autozahl[playerid],0)==0){goto anfang2;}
    DestroyVehicle(autohausauto[playerid]);
    autohausauto[playerid]=CreateVehicle(autozahl[playerid],-1948.9185,263.9953,35.5769,180.0,-1,-1,-1);
    SetVehicleVirtualWorld(autohausauto[playerid],playerid+1);
    format(fahrzeugstring,sizeof(fahrzeugstring),"%s",FahrzeugName[autozahl[playerid]-400]);
    TextDrawSetString(autohaustext[2],fahrzeugstring);
    format(fahrzeugstring,sizeof(fahrzeugstring),"%i",FahrzeugPreis[autozahl[playerid]-400]);
    TextDrawSetString(autohaustext[3],fahrzeugstring);
    }
    return 1;
    }


    und der stock



    stock autohausautos(veh,ah)
    {
    switch(ah)
    {
    case 0:{switch(veh){case 480,494,503,504,506,555,545,603,475,477,562,565,587,602,402,411,415,429,434,436,439,451,559,560,541,558,401,404,405,409,410,419,421,426,442,445,458,478,479,542,546,550,551,547,549,483,492,496,507,516,517,518,526,527,529,533,534,540,580,585,589,600,561,412,466,467,474,491,535,536,566,567,575,576: return 1;}return 0;}//autohaus
    case 1:{switch(veh){case 448,461,462,463,468,471,481,509,510,521,522,581,586: return 1;}return 0;}//motorrad
    case 2:{switch(veh){case 400,422,424,489,495,500,505,543,552,554,568,573,579,470,403,413,414,418,428,431,433,437,440,443,455,456,459,482,498,499,508,514,515,524,578,609: return 1;}return 0;}//lkw
    case 3:{switch(veh){case 446,452,453,454,472,473,484,493,539,595: return 1;}return 0;}//boot
    case 4:{switch(veh){case 417,469,487,511,512,513,519,548,553,563,577,592,593: return 1;}return 0;}//flug
    }
    return 0;
    }


    theoretisch klappt auch alles ^^ aber geht vlcht besser. ist auch das erste mal das ich mit goto rumprobiere.