Geschrieben um 18:29 am 16.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 28 | Ich habe folgende Situation: Wenn ich einen Baum untersuche, finde ich dort oben eine (meine!) Hose, an die ich aber nicht herankomme. Spaeter, wenn ich sie habe, gibt es fuer das Anziehen einen Punkt. Das habe ich wie folgt geschrieben: Deko Baum Name 'Baum' m Subst 'baum' m Vor 'pflaumen' Ort Garten NachAusf (untersuchen) Wenn (Hose in nirgendwo) dann ObjNach Hose in Baumwipfel Text '[x][x]Oben im Baumwipfel haengt etwas... Kleidung?' Ende EndeAusf Besch 'Der Pflaumenbaum steht in der Mitte des Gartens und ist der groesste im Garten. Er laesst sich nicht erklettern und traegt noch keine Fruechte.' Obj Baumwipfel Name 'Baumwipfel' m Subst 'wipfel' m Vor 'Baum' Attr Behaelter fest Ort Garten Vol 10 VorAusf (empfangen) Text 'Das geht nicht.' Stop EndeAusf Obj Hose Name 'Hose' f Subst 'hose' f 'jeans' f Attr Kleidung Ort nirgendwo Besch 'Ja, das ist deine Hose, eine dunkelblaue Jeans.' VorAusf (anziehen, nehmen) Wenn (Hose in Baumwipfel) dann Text 'Du streckst dich und du reckst dich, aber du kommst nicht annaehernd an die Hose heran. Sie haengt einfach zu hoch. Wie sie dorthin gekommen ist, ist dir ein Raetsel.' Stop Ende EndeAusf NachAusf (anziehen) Text 'Du ziehst hastig deine Hose an. Puh, nicht mehr in Unterhosen, so fuehlst du dich etwas wohler.[#][[Du erhaelst 1 Punkt.]]' Inkr score 1 Ende EndeAusf Die mangelhafte Formatierung bitte ich zu entschuldigen. Irgendwie laeuft das nicht wie gedacht. Wenn ich unter dem Baum stehe und die Hose sich im Baumwipfel befindet und ich sie anziehe, erhalte ich erst die Ausgabe in Klammern, dass ich die Hose nehme, dann die erwuenschte Meldung, dass sie zu hoch haengt, und dann die Meldung "Du hast die Hose nicht" - klar, weil vor Ausziehen automatisch Nehmen ausgefuehrt wird.
Mit Entfernt habe ich schon experimentiert, aber es nicht hinbekommen, dass die gewuenschte Meldung (...reckst und streckst dich, aber...) erscheint. Ist aber das erste Mal, dass ich mit Entfernt und Unerreichbar versucht habe zu arbeiten. Puh. Lange Frage, Danke fuers Lesen. |
Geschrieben um 18:32 am 16.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 28 | Habe jetzt erst gesehen, dass unter "VorAusf Anziehen" die eigentlich gleiche Frage gestellt wurde. Da gibt es aber auch noch keine Antwort. |
Geschrieben um 17:10 am 17.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | Hallo, RobinOsaka, hast du schon mit dem Objekt-Attribut [unerreichbar] (anstelle von [entfernt]) herumprobiert? Wie man allerdings das implizite Nehmen elegant abfangen kann, ohne dass der aufrufende Befehl anziehen bis zu Ende ausgeführt wird (das erzeugt die von dir unerwünschte Meldung), das habe ich auch noch nicht herausgefunden. Ich habe mir mal in einem ähnlichen Fall mit einer sehr uneleganten Lösung beholfen, unelegant deshalb, weil sie ein neues Objekt-Attribut und einen neuen Befehl benötigt nur um eine kleine Meldung zu unterdrücken. Aber es hat immerhin funktioniert. Auf dein Beispiel angewendet würde das etwa so aussehen:
|
Geschrieben um 04:49 am 19.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 28 | Danke fuer die Antwort. Ein ObjAttr zu benutzen hatte ich auch versucht, das klappt. Entfernt und Unerreichbar verstehe ich nicht gut, damit muss ich mal mehr experimentieren. Nochmal Danke! |
Geschrieben um 08:49 am 19.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | RobinOsaka:
Ja, das klappt irgendwie nicht, das muss wohl an TAG selbst liegen. Denn eigentlich sollte das Fehlschlagen des Aufhebens die einzige Meldung sein. Mit dem Attribut entfernt kannst du die Interaktion mit der Hose bereits im Voraus unterbinden, dann werden alle Aktionen, die die Erreichbarkeit der Hose erfordern, mit "Du kommst nicht an die Hose heran" abgebrochen. Der Nachteil ist hierbei, dass du die Aktion, mit der man die Hose tatsächlich erreichen kann, gesondert implementieren musst. Wenn diese Aktion nicht direkt die Hose betrifft - der Spieler stellt eine Leiter an den Baum oder schüttelt den Baum oder so - musst du einfach das Attribut entfernt löschen. Wenn die Aktion die Hose selbst betrifft - der Spieler fischt sie mit einer Stange aus dem Baum oder wirft einen Schuh auf die Hose - musst du die Aktion SichtUndRw benutzen, um genau diese Aktion für die Hose zuzulassen. In deinem Code wird die Hose im Baum nur einmal beschrieben, nämlich, wenn sie in den Baumwipfel verschoben wird. Das ist etwas unglücklich, da dem Spieler, der die Hose erst einmal links liegen gelassen hat und dann wieder in den garten kommt, beim erneuten Untersuchen des Baums gar nicht gesagt wird, dass dort die Hose hängt. Noch was:
Dieser Code gibt dem Spieler jedes Mal, wenn er die Hose anzieht einen Punkt. Es ist gewiss einfacher, das bereits vorhandene System der Punktevergabe zu verwenden:
Die erste Eins ist eine laufende Nummer. Alle Sachen, die Punkte geben, sind laufend durchnummeriert. Die zweite Eins ist die Anzahl der Punkte, die für diese Aktion vergeben wird. Der Text wird automatisch ausgegeben. Wenn du lieber "Du erhältst x Punkte" statt "Du hast gerade x Punkte bekommen" verwenden möchtest, musst du eine Kopie von tag.std, etwa hose.std anlegen, dort die entsprechenden Texte ändern und dem Programm sagen, dass es diese Texte verwenden soll. Das geht mit:
Mit den maßgeschneiderten Standatdtexten könntest du auch das "Du kommst nicht an die Hose heran" ändern, indem du eine Aktion verwendetst:
Und dann in 'hose.std':
Das ist etwas umständlich, aber es funktioniert. |
Geschrieben um 15:39 am 19.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 28 | Danke fuer die ausfuehrliche Antwort, Martin! Ich habe daraus viel lernen koennen. Besonders der std - Befehl war mir nicht bewusst. LOL, dass man jedesmal einen Punkt bekommt, wenn man die Hose auszieht, hatte ich uebersehen. Ganz am Anfang habe ich das integrierte Punktsystem benutzt, aber irgendwas ging damit nicht (Punktabzuege?), also habe ich mein eigenes genommen. Werde ich aber mal ueberdenken. Die anderen Dinge probiere ich am Wochenende mal aus. Ich habe mein erstes Abenteuer roh fertig, es muss jetzt auf Herz und Nieren getestet werden. Mir schwant, dass das die eigentliche Arbeit ist. |
Geschrieben um 17:14 am 19.07.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 28 | Ok, ich hab's. Ich habe beide Vorschlaege kombiniert. Ich habe ENTFERNT durch ein eigenes in STD ersetzt und einen eigenen ANZIEHEN Befehl geschaffen, ohne 'bei mir'. Das klappt fabelhaft. Danke! |