Autor |
Nachricht |
< BeiMir und andere |
|
Verfasst am:
Di, 22 Aug 2006 - 17:37
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Als Ortsbedingungen fuer Objekte gibt es zB 'beimir', 'hier' und 'angezogen'.
'beimir' scheint aber Objekte in einem Behaelter, den ich bei mir trage, nicht zu erfassen.
Muss ich alle Behaelter per Schleife auslesen oder gibt es eine weitere Bedingung, die ich nicht kenne? |
|
|
|
|
|
Verfasst am:
Mi, 23 Aug 2006 - 21:50
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Mit der Anweisung StammObj (T.A.G.-Handbuch Kapitel 5.2.4.) kannst du leicht feststellen, ob sich ein Objekt indirekt beim Spieler befindet. Wenn das Stammobjekt eines Objekts beiMir ist, dann muss das Objekt auch irgendwo in den Tiefen des Inventars zu finden sein. Ähh... ein kleines Beispiel:
Code: | Obj Vase
Name 'Blumenvase' f
Vor 'blumen'
Subst 'vase' f
Attr Behälter transparent
Vol 10
Ort beiMir
Obj Bernstein
Name 'Bernstein' m
Vor 'bern'
Subst 'stein' m
Attr Behälter transparent
Vol 2
Ort in Vase
ObjVar xObj ! in der normal.adv schon vordefiniert
Obj Fliege
Name 'Fliege im Bernstein' f
Adj 'tot'
Subst 'fliege' f 'insekt' n
Ort in Bernstein
VorAusf
(untersuchen)
StammObj xObj selbst
! Der Objekt-Variablen xObj wird das
! Stammobjekt der Fliege (selbst) zugewiesen.
! (Hier: die Vase)
Wenn (xObj beiMir) dann
Stop 'Die Fliege ist indirekt bei dir.'
Ende
(nehmen herausnehmen)
Stop 'Die Fliege ist schon vor Jahrmillionen im
Harz gefangen worden.'
EndeAusf |
|
|
|
|
|
|
Verfasst am:
Fr, 25 Aug 2006 - 18:37
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Mir scheint der Befehl InhListe geeignet, das Spiel auf Gegenstaende in einem Behaelter reagieren zu lassen. ZB eine Waffe in einem Koffer.
InhListe OVar Flg
Schreibt den Inhalt des Objekts OVar heraus. Je nach Flg wird eine Meldung herausgegeben, wenn OVar leer ist, und es werden darunterliegende mitbetrachtet (Rekursion). Um Sachen darin zu zeigen, muß das Objekt ein Behälter sein, um Sachen darauf zu zeigen, eine Ablage.
Dieser Befehl schreibt aber nur den Inhalt eines Behaelters, wenn der Behaelter geoeffnet oder transparent ist. Solange der Behaelter geschlossen ist, gibt das Spiel als Inhalt 'nichts' aus. Das Spiel soll in meinem Fall aber auch Gegenstaende in geschlossenen Behaeltern als sich beim Spieler befindlich erkennen. |
|
|
|
|
|
Verfasst am:
Fr, 25 Aug 2006 - 18:52
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Ich hab's! Der Code unten macht was ich brauche. Danke fuer den Tipp, ChristianB!
N bisschen laestig ist nur, dass ich BeiMir und Angezogen (fuer Rucksaecke etc) abpruefen muss.
Code: | ObjVar iteststamm
ObjVar itestobj
Bef Itest
Name 'Itest'
Verb 'itest'
Ausf
Schleife itestobj
StammObj iteststamm itestobj
Wenn (iteststamm beimir)
Text '[itestobj] ist bei dir.'
Wenn (iteststamm angezogen)
Text '[itestobj] ist bei dir.'
Ende
EndeAusf |
|
|
|
|
|
|
Verfasst am:
Fr, 25 Aug 2006 - 21:51
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
beiMir und angezogen kannst du in einer Bedingung benutzen (entspricht "oder"):
Code: | Wenn (iteststamm beimir angezogen) ! beimir ODER angezogen
Text '[itestobj] ist bei dir.' |
So lästig ist's doch nicht. |
|
|
|
|
|
Verfasst am:
Sa, 26 Aug 2006 - 5:45
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Ach, das heisst ODER? Ich dachte, die Aufzaehlung bedeutet UND. Danke.
Ich habe noch eine Bedingung, die ich mit UND verbinde. Ergebnis soll sein, dass die Pistole bei mir entdeckt wird, egal, ob ich sie in einem Rucksack, einer Jackentasche oder einem Koffer verstecke.
Code: | Wenn (itestobj = Pistole) und (istammobjekt beiMir) oder (istammobjekt angezogen) dann |
und
Code: | Wenn (itestobj = Pistole) und (istammobjekt beiMir angezogen) dann |
haben beide nicht so funktioniert wie erwartet. Mit dem eingangs gezeigten Code geht's aber. Egal, hauptsache es laeuft. |
|
|
|
|
|