Autor |
Nachricht |
< Unerreichbares - Geloest! |
|
Verfasst am:
So, 16 Jul 2006 - 17:29
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
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.
1. Das wuerde ich gerne unterdruecken.
2. Moechte ich sicher gehen, dass man auch sonst nicht mit der Hose interagieren kann.
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.
Zuletzt bearbeitet von RobinOsaka am Sa, 5 Aug 2006 - 4:38, insgesamt 2-mal bearbeitet |
|
|
|
|
|
Verfasst am:
So, 16 Jul 2006 - 17:32
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Habe jetzt erst gesehen, dass unter "VorAusf Anziehen" die eigentlich gleiche Frage gestellt wurde. Da gibt es aber auch noch keine Antwort. |
|
|
|
|
|
Verfasst am:
Mo, 17 Jul 2006 - 16:10
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
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:
Code: | […]
ObjAttr zuweitweg
Obj Hose
Name 'Hose' f
Subst 'hose' f 'jeans' f
Attr Kleidung zuweitweg
Ort in Baumwipfel
Besch 'Ja, das ist deine Hose, eine dunkelblaue Jeans.'
VorAusf
(nehmen)
Wenn (Hose in Baumwipfel)
Stop 'Du streckst dich und du reckst dich, aber
du kommst nicht annähernd an die Hose heran.
Sie hängt einfach zu hoch. Wie sie dorthin
gekommen ist, ist dir ein Rätsel.'
EndeAusf
Bef anziehen_spezial
Verb 'ziehe an' 'ziehe dir an' 'ziehe mir an'
! usw., der Original-Befehl "anziehen"
! hat eigentlich noch mehr Verben
Syntax dasObj (Kleidung)
! BeiMir wurde im Gegensatz zum Original-Anziehen
! weggelassen, um das
! implizite Nehmen zu unterdrücken
Ausf
Wenn (aObj zuweitweg) dann
Ausf nehmen aObj
sonst
Ausf anziehen aObj
Ende
EndeAusf |
Wenn man die Hose irgendwann mal hat, muss ihr natürlich das Attribut [zuweitweg] genommen werden, klar. Nicht die allerhübscheste Lösung, aber vielleicht bringt dich das weiter.
Viele Grüße, C. |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 3:49
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
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! |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 7:49
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
RobinOsaka hat folgendes geschrieben: | 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. |
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:
Code: |
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
|
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:
Code: |
NachAusf
(anziehen)
Text 'Du ziehst hastig deine Hose an. Puh, nicht mehr
in Unterhosen, so fuehlst du dich etwas wohler.'
Punkte 1 1
Ende
EndeAusf
|
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:
Code: |
Aktion mein_entfernt
Ausf
Wenn (iObj = Hose)
Stop 'Du streckst dich und du reckst dich...'
Text 'Du kommst nicht an [den iObj] heran.'
EndeAusf
|
Und dann in 'hose.std':
Code: |
...
30 'Du siehst [den iObj] hier nicht.'
31 '[Der iObj] [ist] zu weit weg.'
32 '[mein_entfernt]'
...
|
Das ist etwas umständlich, aber es funktioniert. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 14:39
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
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. |
|
|
|
|
|
Verfasst am:
Mi, 19 Jul 2006 - 16:14
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
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! |
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|