Forum moved to if-forum.org
Autor Nachricht
<  Unerreichbares - Geloest!
RobinOsaka
BeitragVerfasst am: So, 16 Jul 2006 - 17:29  Antworten mit Zitat
Wasserträger
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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RobinOsaka
BeitragVerfasst am: So, 16 Jul 2006 - 17:32  Antworten mit Zitat
Wasserträger
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Mo, 17 Jul 2006 - 16:10  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RobinOsaka
BeitragVerfasst am: Mi, 19 Jul 2006 - 3:49  Antworten mit Zitat
Wasserträger
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!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 19 Jul 2006 - 7:49  Antworten mit Zitat
Experte
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:
Code:

#STD 'hose.std'

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RobinOsaka
BeitragVerfasst am: Mi, 19 Jul 2006 - 14:39  Antworten mit Zitat
Wasserträger
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RobinOsaka
BeitragVerfasst am: Mi, 19 Jul 2006 - 16:14  Antworten mit Zitat
Wasserträger
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!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
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.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05