IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Aktion * - Problem
AntwortenNeues ThemaNeue Umfrage

Aktion * - Problem

Geschrieben um 02:06 am 19.10.2010 | Zitat | Editieren | Löschen
Thalon
Mitglied
Pupil Gumby
Beiträge: 11

Hallo, ich möchte eine unsichtbare Truhe aus dem Boden ausgraben. Die liegt im Moment im Nirwana und wird dann nach dem graben Befehl in den Raum Wald gesetzt. Soweit klappt das schon ganz gut. Die Truhe erscheint Im Wald und ich kann sie, untersuchen und öffnen, aber wenn ich jetzt nochmal den Befehl graben eingebe, dann wird die ganze Aktion * wiederholt.

Die Zeile "Wenn /(aObj = Truhe3) dann" müsste doch dafür sorgen, dass bis zum "Sonst" von dieser Aktion * nichts mehr beachtet wird. Es wird aber immer wieder der Text "'Du gräbst eine Truhe frei.'" herausgegeben. Wie kann ich das verhindern, sodas beim 2. graben der Text "'Hier hast du schon gegraben.'" erscheint?


Deko       Erde

Name      'Waldboden' m

Vor       'Wald'

Adj       'nasse' 'feuchte' 'weiche'

Subst     'Erde' f  'Boden' m

Ort        Wald

Besch     'Der Waldboden .....'     

VorAusf

 (nehmen)

  Text    'Du kannst das nicht nehmen. '

  Stop

 (hier_graben)

  Text '...'

  Stop

EndeAusf

Aktion *

Ausf     

   Wenn /(aObj = Truhe) dann

    Wenn (aRaum = Wald) dann

     Wenn (aBef = hier_graben) dann

     Text 'Du gräbst eine Truhe frei.'     

        ObjNach Truhe Wald 

        Sonst

          Wenn (aBef = hier_graben) dann

           Wenn (aObj = Truhe) dann

            Text 'Hier hast du schon gegraben.'

           Ende

          Ende

     Ende

    Ende

   Ende       

  Stop

EndeAusf

Ich bedanke mich schon mal für evtl. Hilfe :0)

Geschrieben um 07:57 am 19.10.2010 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Hmmm. Eine Aktion ist eigentlich dazu da, in jedem Zug Dinge auszuführen, die unabhängig vom Spielzug des Spielers passieren: Ein Windhauch streicht durch den Wald, NPCs bewegen sich durch die Räume, eine Straßenbahn fährt ihre Linie ab, so etwas. In einer Aktion sollten also aObj und aBef, die den Spielzug des Spielers beschreiben, nicht vorkommen.

Außerdem ist aObj ja gar nicht die Truhe. Der Befehl heiß ja vermutlich nur "grabe", und dann ist nur aBef belegt. (Oder der Befehl lautet "grabe in der erde", dann ist aBef ja die Erde.)

Außer-außerdem kann die zweite Bedingung (aBef = hier_graben), die im sonst-Ast, nie wahr sein, weil die Bedingung im anderen Ast, die auch (aBef = hier_graben) heißt, schon wahr ist. Wenn man den Code richtig einrückt, wird das klar:


Aktion *

Ausf     

    Wenn /(aObj = Truhe) dann

        Wenn (aRaum = Wald) dann

            Wenn (aBef = hier_graben) dann

                Text 'Du gräbst eine Truhe frei.'     

                ObjNach Truhe Wald

            Sonst

                Wenn (aBef = hier_graben) dann

                    Wenn (aObj = Truhe) dann

                        Text 'Hier hast du schon gegraben.'

                    Ende

                Ende

            Ende

        Ende

    Ende       

    Stop

EndeAusf

Ich würde das Finden der Truhe direkt beim Raum abfangen:


Raum    Wald

Name    'Im Wald'

Besch   'Riesige Bäume ...'     

VorAusf

    (hier_graben)

        Bed (Truhe in Nirgendwo)

            'Nach deinem Glückstreffer mit der Truhe

            findest du hier nichts Weiteres mehr.'

        ObjNach Truhe Wald

        Stop 'Du gräbst eine Truhe frei.'

    Stop

EndeAusf

Easy-peasy! :-)

(Es ist leichter, wenn man 'nirgendwo' und 'Nirwana' unterscheidet: Im Nirgendwo sind Objekte, die noch nicht im Spiel sind, im Nirwana sind Objekte, die aus dem Spiel herausgenommen wurden. So kann die Truhe später im Nirwana landen, weil sie etwa in eine Schlucht gefallen oder verbrannt ist, und trotzdem nicht wieder ausgegraben werden.)

Geschrieben um 11:47 am 19.10.2010 | Zitat | Editieren | Löschen
Thalon
Mitglied
Pupil Gumby
Beiträge: 11

Juhuuu, es funktioniert! :0)

Oh Mann, so einfach kanns sein.

Habt Dank für die Erleuchtung!

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz