if-de :: Forum Foren-Übersicht
Autor Nachricht
<  Wie lege ich den Spieler beim Start des Spieles ins Bett?
binzl
BeitragVerfasst am: Fr, 20 Feb 2004 - 13:44  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg

Ich habe ein Problem, ich möchte das Spiel im Schlafzimmer beginnen und ich soll schon bei Beginn des Spiels im Bett liegen (und nicht sinnlos im Raum herumstehen obwohl ein sehr gemütliches Bett vorhanden ist). Ich habe jede Menge ausprobiert, aber ich stehe mir beim Start des Spiels immer noch die Beine in den Bauch.
_________________
http://www.bier.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TST
BeitragVerfasst am: Fr, 20 Feb 2004 - 18:31  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 07.10.2003
Beiträge: 15
Wohnort: Verden

Hi,
bei deinem Problem kann ich dir helfen, denk ich.
Code:
Aktion Anfang
Ausf
Text 'bla bla'
...
GeheZu eins
Ausf liegen_auf bett        !! die lösung
EndeAusf

Raum  eins
Name  'eins'
Besch 'Testareal 1'

Obj    bett
Name  'bett' n
Subst 'bett' n
Ort    eins
Attr   liege
Besch 'Ein flauschiges Bettchen.'

So das wars. Damit kann dein Spieler frisch gestärkt den Spieletag beginnen. :-)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Martin
BeitragVerfasst am: Fr, 20 Feb 2004 - 19:37  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Das Liegen birgt einige Tücken. Man kann zwar gehezu mit Objekten benutzen, dann bleibt aber die Variable bSitz undefiniert. Da gehezu auch die Raumbeschreibung ausgibt, muss man bSitz vorher setzen:

Code:

#DAT 'normal.adv'

Aktion Anfang
Ausf
    Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]


    [f]D A S   E R W A C H E N[n]
    [x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'

    sei bSitz %liegen
    geheZu in dein_Bett
EndeAusf

Raum dein_Zimmer
Name 'Dein Zimmer in der IF-de-WG'
raus dort_lauert_der_Tod
Besch 'Dies ist dein Zimmer, das du vor einem Jahr in
    der IF-de-WG bezogen habe. Es ist das "Curses!"-Zimmer,
    weil du immer so laut fluchen musst, wenn du über das
    Kabel der Stehlampe stolperst. Das zweite Möbelstück
    neben der Stehlampe ist dein Bett, das in der Mitte des
    Zimmers steht, um den Raum größer wirken zu lassen. Es
    ist nicht das schönste Zimmer, etwas schlampig in Inform
    impementiert, aber besser als nichts.

    [[*** Programming Error: Tried to read entry 5 from array
    "bewohner" which has entries from 0 up to 2. ***]]'

Obj dein_Bett
Name 'Bett' n
Subst 'bett' n, 'heia' f
Besch 'Das Bett hast du von deinem Vormieter, Christoph,
    übernommen.'
Ort dein_Zimmer
Attr Sitz Liege fest Ablage in_Obj

Weg dort_lauert_der_Tod
Ausf
    Text '[[***Programming Error: Tried to move "wg" into
        "flur" which is a child of "wg" thus creating an
        infinite loop. ***]]'
    gestorben
EndeAusf


Torstens Lösung funktioniert auch, allerdings muss der Spieler bereits im richtigen Raum sein und es wird dann "Du liegst nun in dem Bett" ausgegeben. Daher muss man das Liegen still ausführen, und dann die Raumbeschreibung explizit anfordern:

Code:

Aktion Anfang
Ausf
    Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]


    [f]D A S   E R W A C H E N[n]
    [x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'

    setze still
    gehezu dein_Zimmer
    Ausf liegen_auf dein_Bett
    lösche still
    Ausf lage
EndeAusf


P.S.: Es kann sein, das das in älteren (sprich uralten) T.A:M.s nicht funktioniert. Dann bitte die neueste T.A.M. verwenden. Danke.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
binzl
BeitragVerfasst am: Mo, 23 Feb 2004 - 11:14  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg

Klasse, hat mir geholfen Danke. Habe aber die 2 Lösungen kombinieren müssen, da bei Martins Lösung die DOS-Tam vor der Raumbeschreibung die Zahlenfolge "1, 1" ausgibt, sowie angibt daß der Spieler auf dem Bett liegt, was nicht vonnöten ist, da sich schon aus der Beschreibung des Raumes ergibt, daß der Spieler liegt. Meine Lösung im folgenden:
Code:

...
Sei bSitz %liegen
GeheZu Schlafzimmer
Ausf liegen_auf Bett
...

Diese Version bringt in der DOS-Tam sowie in der Windows-Tam das gewünschte Ergebnis.
_________________
http://www.bier.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Zensunni
BeitragVerfasst am: Mi, 10 März 2004 - 16:43  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 27.01.2004
Beiträge: 10
Wohnort: Hannover

Ich habe die Lösung von binzl übernommen, aber ich würde gerne dem Spieler weitere Aktionen verbieten bis er aufgestanden ist. Das, was ich bisher zustande gekriegt habe ist das:
Code:

aktion vorher
ausf
wenn (aRaum=krankenflügel) und (bSitz=%liegen) und
/(aBef=aufstehen lage inventar) dann
          text 'Du musst vorher aufstehen.'
          stop
     ende
endeAusf

Allerdings kommt dann immer wenn man aufstehen will die Meldung 'Wieso? Du stehst doch schon.' Wo ist der Fehler? Wenn ich die Aktion ausschalte, funktioniert alles wieder einwandfrei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 10 März 2004 - 19:07  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Hmm, tatsächlich funktioniert Binzls Ansatz. Ich hätte gedacht, dass nach der Raumbeschreibung etwas wie "Du hast dich ins Bett gelegt" kommt. Aha - kommt es auch. Nicht, wenn das Spiel anfängt, aber nach dem Neustart. Auch, wenn das eher ein Fehler der T.A.M. zu sein scheint (bzw. ist), bitte still setzen, wenn der Spieler am Anfang ins Bett gelegt wird.

Was beim Abfangen fehlschlägt, weiß ich auch nicht genau. Irgendwie wird aSitz oder etwas ähnliches verbogen, so dass der Spieler jetzt nicht mehr auf dem Bett ist. In der Statuszeile und auch bei der Raumbeschreibung taucht die Information darüber jedenfalls nicht mehr auf.

Folgendes funktioniert aber:

Code:

Aktion Vorher
Ausf
    wenn (aSitz = dein_Bett) und (bSitz = %liegen) und
    /(aBef = steigen_von aufstehen lage inventar) dann
        Text 'Du musst vorher aufstehen.'
        stop
    Ende
EndeAusf


Hier wird aSitz statt aRaum abgefangen. Damit wird das Bett, nicht das Krankenzimmer überprüft. Bei den Befehlen, die übersprungen werden, muss steigen_von hinzugefügt werden, denn aufstehen wird in steigen_von aSitz umgewandelt.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
binzl
BeitragVerfasst am: Do, 11 März 2004 - 19:33  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg

Ich selbst habe allen Objekten die der Spieler im Liegen nicht erreichen kann das Attribut 'unerreichbar' gegeben, somit war gesichert, daß der Spieler nicht alles im Liegen machen kann und quasi dazu gezwungen ist aufzustehen um weiterzukommen. Sobald der Spieler steht ist das Attribut automatisch hinfällig.
_________________
http://www.bier.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nadine
BeitragVerfasst am: So, 6 Jun 2004 - 12:17  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 04.06.2004
Beiträge: 2
Wohnort: Thüringen

Bisher hat es zwar gereicht, still und heimlich mitzulesen, aber jetzt muss ich doch auch mal ne Frage stellen.

Die Lösungen bedeuten ja, den Spieler AUF das Bett zu legen, aber nicht IN das Bett. Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe. Lässt sich das umgehen oder gibt es noch eine andere Möglichkeit, den Spieler zu Beginn in ein Objekt zu legen?

Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können?
(ist als Ablage und Behälter definiert)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Mo, 7 Jun 2004 - 12:21  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Nadine hat folgendes geschrieben:
Und lässt sich "lege auf" und "lege in" trennen?

Ich habe mir ein Bett gebaut, in das man sich hinein- oder draufLEGEN kann; man kann sich aber auch hinein- oder draufSETZEN. Ebenso können Dinge darauf abgelegt und/oder hineingelegt werden (z.B. das Tablett AUF das Bett und die Giftschlange IN das Bett!).

Code:
Obj     Bett
Name    'Bett' n
Subst   'bett' n  'poofe' f  'heia' f
Ort     Wohnzimmer
Attr    immobil Sitz Ablage Behälter Liege In_Obj
Besch   'Ein selbst gezimmertes Bett aus echtem Regenwald-Teakholz.'
VorAusf
    (sitzen_auf  liegen_auf)
        Wenn (aPräp = 'auf') dann
          AttrWeg selbst In_Obj
        Ende
        Wenn (aPräp = 'in') dann
          AttrHin selbst In_Obj
        Ende
EndeAusf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Di, 8 Jun 2004 - 16:43  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Noch mal zum ursprünglichen Thema: Wenn man den Spieler in einem Bett aufwachen lassen will, ohne dass er erkennen kann, in welchem Raum er sich befindet (und ohne dass er irgendwelche Objekte außer denen im Bett manipulieren kann), könnte man das Bett doch auch als Raum deklarieren. Nach dem Aufstehen wird dieser Raum dann nie wieder betreten, denn nach dem Aufstehen würde man sich wie gehabt in (oder auf) das Objekt "Bett“ legen. Natürlich müssen mit dem Aufstehen eventuell im Raum "Im_Bett“ zurückgelassene Objekte in (oder auf) das Objekt "Bett" gelegt werden.

Das ist vielleicht nicht ganz elegant, aber die Eleganz könnte doch auch mal dem Effekt Platz machen.

Beispiel für einen Startraum „Im_Bett“:

Code:
 Raum    Im_Bett
Name    'Im Bett'
Besch   'Du liegst in einem Bett. Wo du genau bist, kannst du nicht erkennen.'
VorAusf
    (aufstehen)
        Text 'Langsam rappelst du dich hoch. Jetzt kannst du auch
              sehen, dass du dich in deinem Wohnzimmer befindest. Warum das
              Bett in deinem Wohnzimmer steht, kannst du dir beim besten
              Willen nicht erklären.[#]'
        Schleife xObj
           Wenn (xObj hier) und /(xObj beiMir) dann
              ObjNach xObj in Bett        ! oder "auf Bett"
           Ende
        Ende
        GeheZu Wohnzimmer
        Stop
EndeAusf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Fr, 11 Jun 2004 - 12:28  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Zitat:
Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe.

Also, die DOS-T.A.M. vom 06.03.2003, die auch im aktuellen Paket enthalten ist, erzeugt bei mir kein "1, 1". Bitte aktualisieren!

Zitat:
Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können? (ist als Ablage und Behälter definiert)

Wenn ich das Spiel oben kompiliere, kann ich nur Dinge auf das Bett legen, das Hineinlegen wird mit "Das Bett ist keine Ablage" quittiert. Wenn ich zusätzlich das Attribut Ablage definiere, kann man Dinge ins Bett legen, aber der Ablage- und der Behälterteil des Betts werden getrennt: "Auf dem Bett siehst du eine alte Zeitung und drei Äpfel. In dem Bett siehst du einen Kompass."

In diesem Fall will man wohl eher, dass "lege Ball ins Bett" und "lege Ball aufs Bett" dasselbe bedeuten. Ein einfaches Umleiten von hineinlegen in darauflegen funktioniert nicht, aber mit dem folgenden Code haut's hin:

Code:

  Obj dein_Bett
  ...
  VorAusf
    (empfangen) sei aPräp 'auf'
  EndeAusf
  Attr Sitz Liege fest Ablage in_Obj

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TAG-Amateur
BeitragVerfasst am: Do, 15 Jul 2004 - 15:52  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 10.07.2004
Beiträge: 104
Wohnort: Hannover

Ich habe auch vor, den Spieler ins Bett zu legen, aber nur, wenn er einen Befehl eingibt.
Wie mache ich das denn?
Code:
Bef   Hokuspokus
Name   'zaubern'
Verb   'hokuspokus'
Ausf
 geheZu in Bett
EndeAusf

In etwa so? Oder wie? Wie ist das mit dem Liegen?
_________________
Subst 'TAG-Amateur' m
Adj 'lieb' 'nett'
Attr Person
Besch 'Er ist im Moment [selbst.Zust].'
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Do, 15 Jul 2004 - 16:08  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Zitat:
Wie mache ich das denn? ... In etwa so? Oder wie?

Ja, genau. Vermutlich so. Hast du den Code nicht ausprobiert, bevor du uns im Forum fragst? Ruhig deine Idee mal kompilieren uns sehen, ob's klappt - viel passieren kann ja nicht. (Ein hängengebliebenes DOS-Fenster ist bei mir nicht "viel". ;-)

Zitat:
Wie ist das mit dem Liegen?

Die Antwort hierzu* haben die Forums-Benutzer auf dieser Seite versteckt. Findest du sie?

________
*) sei bSitz %liegen
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TAG-Amateur
BeitragVerfasst am: Do, 15 Jul 2004 - 17:29  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 10.07.2004
Beiträge: 104
Wohnort: Hannover

Das heißt, es geht folgendermaßen?
Code:
Bef   Hokuspokus
Name   'zaubern'
Verb   'hokuspokus'
Ausf
 geheZu in Bett
 sei bSitz %liegen
EndeAusf

Wie ist es denn mit
Code:
Ausf
[...]
 Ausf   liegen_auf bett
[...]
EndeAusf

_________________
Subst 'TAG-Amateur' m
Adj 'lieb' 'nett'
Attr Person
Besch 'Er ist im Moment [selbst.Zust].'
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Do, 15 Jul 2004 - 22:43  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Zitat:
Das heißt, es geht folgendermaßen?

Nochmal: Die beste Möglichkeit, zu überprüfen, ob Code funktioniert, ist ihn tatsächlich zu erzeugen und auszuprobieren. Das geht leicht und bringt auch das ein oder andere Erfolgserlebnis, probier's aus!

Wenn dann etwas nicht klappt, kann man den Code immer noch hier posten und die Forenbenutzer um Rat fragen. (Es besser zu wissen als andere ist immer schön, den Code für andere zu schreiben, weniger. :-)

Dein Code ist fast korrekt, du musst die Variable bsitz vor der Anweisung gehezu definieren, da in dieser die Raumbeschreibung ausgegeben wird, und dann muss bekannt sein, ob der Spieler auf dem Bett liegt, sitzt oder steht.

Code:

Ausf
    sei bSitz %liegen
    geheZu in Bett
EndeAusf


Dein zweiter Code funktioniert nur, wenn das Bett zum Zeitpunkt des Zauberns sichtbar ist. Vorsicht! Da dies nicht überprüft wird, wenn du Ausf benutzt - die gesamte Überprüfung wird vom Parser vorgenommen - ist dieser Code recht gefährlich und macht eventuell das Spiel kaputt: Der Spieler kann dann auf dem Bett liegen, obwohl er immer noch im Garten ist, wo das Bett nicht steht. Die Meldung heißt dann er liege im Bett, der Spieler kann aber das Bett nicht sehen. Aus dieser Situation kommt man nicht so leicht wieder heraus, also Obacht.

Außerdem schreibt die zewite Möglichkeit etwas wie "Du hast dich ins Bett gelegt.", was bei einem Zauberspruch (oder was auch immer) sicher nicht gewünscht ist.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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