ingame scripting?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ingame scripting?

    Hallo,

    ich wollte mal fragen ob es möglich ist, ingame selber bedingungen zu erstellen?

    zb.

    der spieler soll entscheiden, wenn gold = 100, wenn gold < 100 und/oder wenn gold > 100.

    die zeichen =<> kann ich ja nicht in einen string umwandeln wie zb:

    test = "<"

    if gold test 100
    {

    }

    das geht nicht... wie kann ich das lösen ohne bedingungen selber in case fälle zu schreiben?
  • du suchst etwas, wie die execute_string() Funktion des GM8. Diese ist jedoch unglaublich uneffizient und wurde in allen nachfolgenden (?) Versionen rausgenommen.

    Dein Vorhaben kann man viel leichter lösen:

    GML-Quellcode

    1. var spielereingabe; // string < oder >
    2. switch(spielereingabe){
    3. case "<":
    4. if(gold <= 20){ /*asdf*/ }
    5. break;
    6. case ">":
    7. if(gold >= 20{ /*asdf*/ }
    8. break;
    9. default:
    10. show_message("eingabe wiederholen");
    11. break;
    12. }
    Alles anzeigen


    EDIT: Damit der User "coden" kann, musst du einen Script-Parser basteln. Die Nutzereingaben nach gewünschten Bedingungen durchsuchen und verwerten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von domis4 ()

  • Ich hab sowas mal geschrieben, um eine Stage-Timeline für ein Shoot-em-Up in nem einigermaßen vom GM unabhängigen Format speichern zu können. Das sah ungefähr so aus (hab die tatsächlichen Daten nicht auf diesem Rechner, drum frei ausm Gedächtnis):

    Quellcode

    1. WAIT 120;
    2. single A = SPAWN enemy1 AT (ARENA.LEFT,ARENA.TOP);
    3. SET ATTACK A (script_attack01);
    4. SET PATH A (path_enemy01);
    5. WAIT 60;
    6. list B = SPAWN_MANY(
    7. enemy2 AT [...],
    8. enemy5 AT [...],
    9. [...]
    10. );
    11. # Und hier kam dann der Punkt, an dem ich zu faul wurde, um Listeniterationen einzubauen :P
    Alles anzeigen

    War nicht grad das schlauste Sprachdesign, zugegeben.

    Der Parser jedenfalls bestand im Wesentlichen aus einem Tool, das diese Dateien in Listen voller Strings zerlegt hat. Jeder String war ein einzelnes Token (z.B. "(", ")", "SPAWN" oder einzelne Wörter wie "enemy2"), und jede Liste ging bis zum nächsten Semikolon. Und dann konnte man über diese Listen drübergehen, sich angucken, was da so steht (das hing tatsächlich an einem großen switch-Statement für die verschiedenen Keywords und Klammern) und sich daraus dann die Befehle für den GM zusammenpuzzeln. z.B. übersetzt sich SPAWN foo AT (x,y) direkt in instance_create(foo,x,y).

    Das schwierigste an der ganzen Geschichte war, Werte wie diese "A ="-Zuweisung da oben zwischenzuspeichern. Was ich dafür gebaut hab, waren im Prinzip sowas wie Register auf einer CPU - und die Umsetzung weiß ich nicht mehr auswendig, aber ich erinnere mich noch, dass sie verdammtnochmal richtig kacke hässlich war, und ich lange lange Zeit im Debug-Modus verbracht hab, um sicherzustellen, dass der Parser auch einigermaßen hinter sich aufräumt.

    Das muss vielleicht nicht immer so ein Geraffel sein wie bei mir, aber nem Computer beizubringen, eine menschenlesbare Sprache zu verstehen, ist ziemliches Gefiesel. Wenn du sowas haben willst, warte damit lieber, bis das Grundgerüst deines Spiels schon steht und keine neuen Features mehr dazukommen, sondern der Rest nur noch Leveldesign ist. Ansonsten musst du die Sprache im Nachhinein auch noch ändern und da wird's dann echt ein Albtraum. Rat mal, woher ich das weiß. :P