Tür geöffnet --> Besser nicht

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Kirby2805
Frischling
Frischling
Beiträge: 7
Registriert: 21.09.2005, 21:58
Wohnort: Herzogenaurach

Tür geöffnet --> Besser nicht

Beitrag von Kirby2805 »

Tach mal wieder.

Ich habe folgendes Problem:

Wenn ich eine Tür mit einem Schlüssel öffne dann geht die Tür korrekt auf doch der Charakter sagt den Standardsatz: "Besser nicht."
Der Rest des Prozesses läuft normal ab. Also man kann die Tür nicht ohne den Schlüssel öffnen. Der Übergang in den anderen Raum funktioniert auch wunderbar.
Aber dieses Problem bekomme ich einfach nicht gebacken.

MfG Sandra
"Lasst den chönen Pernhart frei!"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Du musst das Script für die Tür so verändern, dass Unhandled_Event(); nicht mehr aufgerufen wird, wenn die Tür aufgeschlossen wird.
Unhandled_event() hat den Sinn, einen Standard-"es geht nicht"-Satz rauszuhauen, wenn die Aktion nichts bringt.

Code: Alles auswählen

else if (UsedAction(USE_INV)) {
  if (UsedItem==key) {
    // bla
  }
  else
    DisplaySpeech(EGO, "Warum soll ich das mit der Tür verwenden?");
}
else Unhandled_event();
Use gopher repellent on funny little man
Benutzeravatar
Kirby2805
Frischling
Frischling
Beiträge: 7
Registriert: 21.09.2005, 21:58
Wohnort: Herzogenaurach

Beitrag von Kirby2805 »

Das funktioniert bei mir nicht.
Meiner kennt weder USE_INV noch Unhandled_event.

Hier ist das Script wie es im Moment aussieht:

Bei "Any click on Hotspot":

Code: Alles auswählen

if (UsedAction (A_LOOK_AT)) {
if (MovePlayer (457, 124)) {
FaceLocation (GetPlayerCharacter (), 457, 123);
Wait (5);
DisplaySpeech(GetPlayerCharacter (),  "Tür.");
}
}

else if (UsedAction (A_WALK_TO)) {
if (MovePlayer (457, 124)) {
FaceLocation (GetPlayerCharacter (), 457, 123);
}
}

else if (UsedAction (A_OPEN)) {
if (MovePlayer (457, 124)) {
FaceLocation (GetPlayerCharacter (), 457, 123);
Wait (5);
DisplaySpeech(GetPlayerCharacter (),  "Sie ist verschlossen.");
}
} 


else Unhandled ();

Und bei "Use inventory on Hotspot":

Code: Alles auswählen

if (player.ActiveInventory == inventory[8]) {
  if (MovePlayer (457, 124)) {
FaceLocation (GetPlayerCharacter (), 457, 123);
Wait (5);
object[2].Visible = true;
}
}


else if (player.ActiveInventory != inventory[8]) {
   if (MovePlayer (457, 124)) {
FaceLocation (GetPlayerCharacter (), 457, 123);
Wait (5);
DisplaySpeech(GetPlayerCharacter (),  "Das funktioniert so nicht.");
}
}

else Unhandled ();
"Lasst den chönen Pernhart frei!"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Sorry, ich hab das aus dem Gedächtnis hingeschrieben.

Aber Du darfst nicht "Use inventory on Hotspot" benutzen.
Ein Beispiel aus meiner Episode:

Code: Alles auswählen

...
...
  else if (UsedAction(A_USE_INV) && player.activeinv==7)
  {
    if (MovePlayer (90, 130))
    {
      FaceLocation (GetPlayerCharacter (), 90, 129);
      Wait(5);
      if (GetGlobalInt(21)==0 || GetGlobalInt(25)==1)
      {
        Say("Ich könnte hier was bestellen.");
        FaceDirection(BERNARD, 0);
        Say("Die Frage ist nur: was?");
      }
      else
      {
        SetGlobalInt(25,1);
        Say("Ich bestelle eben die Gasmaske.");
        Say("Sofort-Lieferservice? Hört sich gut an.");
        Say("So...");
        FaceDirection(BERNARD, 0);
        Say("Das wars!");
        int oid=CreateTextOverlay(20,20,150,2,0,"DING-DONG");
        Wait(40);
        RemoveOverlay(oid);
        Say("Das ging wirklich schnell!");
      }
    }
  }

  else Unhandled ();
Bei Deinem Script gibt es noch ein kleines Problem:

Code: Alles auswählen

if (player.ActiveInventory == inventory[8]) {...}
else if (player.ActiveInventory != inventory[8]) {...}
else Unhandled ();
Das Unhandled wird nie aufgerufen werden, da die beiden if- und else if-Zeilen bereits alle Möglichkeiten abdecken (Entweder ist es item 8 oder nicht).
Use gopher repellent on funny little man
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Info zu MMM allgemein:
Im gesamten MMM sollte NIE eine andere Interaction als "Any click on ..." verwendet werden.

Verschlossene Türen:
Für eine verschlossene Tür, die sich mit einem Inventory item öffnen lässt, ist folgender kurzer Code in "Any click on Hotspot" zu verwenden.:

Code: Alles auswählen

SetDoorStrings ("Tür.", "Sie ist verschlossen.", "Das funktioniert so nicht.");
if (any_click_on_door_special (GI, 2, 457, 124, DIR_UP, nr_room, nr_x, nr_y, nr_dir, 2, 3, 8, 2) == 0) Unhandled ();
Leider gehen aus dem Script manche Angaben nicht hervor:
GI = GlobalInt, in der der Zustand (zu, offen, verschlossen) der Tür gespeichert wird.
nr_room = Raum, in den die Tür führt.
nr_x, nr_y = Koordinaten im neuen Raum
nr_dir = Blickrichtung im neuen Raum

Bitte auch im folgenden Tutorial den Abschnitt „Ein neuer Raum“ beachten:
http://www.adventure-treff.de/fanadv/tu ... gs_mmm.php
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Nanu, wo warst du denn so lange? :D
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Geld verdienen ;-)

Bin auch jetzt nicht wirklich wieder in dem Umfang zurück wie früher. Aber ich möchte doch öfter mal wieder herein schauen.

So wie es aussieht, ist es nötig, den Episodenschreibern die tollen Funktionen von MMM besser zu erklären, so dass diese auch benutzt werden. Sonst erfindet jeder Episodenschreiber bspw. das Tür-Script wieder neu, obwohl schon lange einfache Funktionen für normale und spezielle Türen (oder ähnliche Raumwechsel) existieren.

Zwei Zeilen anstelle von zig Zeilen sollte doch ein überzeugendes Argument sein.
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Och, das haben khrismuc und ich eigentlich während deiner Abwesendheit gemacht :mrgreen:

Aber wenn man sich von jemandem beraten lässt, der bei MMD mitgewirkt hat, ist das natürlich noch besser :D
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Eine ausführliche Dokumentation der Starterpackfeatures und -funktionen wäre aber echt nicht schlecht.

Es gibt immer wieder threads, in denen Leute wissen wollen, warum GIVE_TO nicht richtig funktioniert, wie sie eine neue Tür einbauen sollen bzw. wie sie diese mit einem Schlüssel abschließbar machen können, usw.

Das coole ist ja, dass das alles mehr oder weniger bereits enthalten ist, allerdings muss man dazu immer das global script durchforsten (& verstehen).
Use gopher repellent on funny little man
Benutzeravatar
Kirby2805
Frischling
Frischling
Beiträge: 7
Registriert: 21.09.2005, 21:58
Wohnort: Herzogenaurach

Beitrag von Kirby2805 »

Ja, das mit dem verstehen ist wirklich ein Ding.
Hab mir ja auch das Starterpack von MMM geholt mache aber ein anderes Spiel (also nicht was mit MMM zu tun hat).
Und die ganzen Fehlermeldungen die ganze Zeit und man hat doch keine Ahnung was der eigentlich will.
Das mit den Türen funktioniert jetzt übrigens.

Ich hab aber schon wieder ne andere Frage:
(Seitdem ich dieses Forum kenne knobele ich höchstens 1-2 Stunden an einem Problem und stell dann gleich die Frage als wie ich vorher länger geknobelt habe und es dann aber auch funktioniert hat... :) (Wollte ich mal gesagt haben))

So, nun aber:

Also, eigentlich isses ja ganz simpel aber es funzt irgendwie nicht.
Ich möchte einem anderen (nicht spielbaren) Charkter etwas geben. Es funktioniert das ich mit ihm reden kann usw. aber das mit dem geben geht irgendwie nicht.
Ich hab das bei "Any click on hotspot" mit A_USE_INV und active.Inventory und dem ganzen Zeug eingebaut.
Er zeigt keinen Fehler im Script sondern die Person tut einfach gar nichts wenn man den Befehl gibt ihm das zu geben.
"Lasst den chönen Pernhart frei!"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Benutzen und Geben ist in diesem Fall ein gewaltiger Unterschied.
Benutze Baseballschläger mit Bernard -> Bernard kriegt eins übergebraten.
Gib Baseballschläger an Bernard -> Bernard nimmt den Baseballschläger ins Inventory auf.

Da Du A_USE_INV benutzt, musst Du im Spiel auch Benutze benutzen :)
Warum beim Geben nichts passiert, liegt am Starterpack bzw. am ursprünglichen Zweck dieses Verbs in Maniac Mansion Deluxe. Give war nur zum Austauschen von Gegenständen gedacht, d.h. das Item wechselt lediglich den Besitzer, allerdings nur, wenn der Empfänger einer der Charaktere 1-6 ist.
Dieses Problem ist schon öfter aufgetaucht, die Suche hier im AGS-Forum sollte Dir weiterhelfen.
Use gopher repellent on funny little man
Benutzeravatar
Kirby2805
Frischling
Frischling
Beiträge: 7
Registriert: 21.09.2005, 21:58
Wohnort: Herzogenaurach

Beitrag von Kirby2805 »

Oh, ok.
Das ich nicht gleich auf "Geben" gekommen bin... *andenkopfhau*


:lol:
"Lasst den chönen Pernhart frei!"
Benutzeravatar
DernetteEddy
Süßwasserpirat
Süßwasserpirat
Beiträge: 298
Registriert: 30.06.2004, 00:31

Beitrag von DernetteEddy »

a-v-o hat geschrieben:Geld verdienen ;-)
Das macht man doch so zwischendurch.... :lol:

Die script function mit den verschlossenen Türen hättest Du ruhig mal etwas eher raushauen können. ich habe mir an einer Stelle erstmal einen abgebrochen. Aber lassen wir das :wink: :lol:
Mit * markierte Felder sind erforderlich
PsychoF82
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 140
Registriert: 22.09.2005, 23:44
Wohnort: NRW
Kontaktdaten:

Beitrag von PsychoF82 »

Sorry, aber ich muss diesen alten Threat nochmal hervor kramen weil ich absolut nicht dahinter steige :oops:
SetDoorStrings ("Tür.", "Sie ist verschlossen.", "Das funktioniert so nicht.");
if (any_click_on_door_special (GI, 2, 457, 124, DIR_UP, nr_room, nr_x, nr_y, nr_dir, 2, 3, 8, 2) == 0) Unhandled ();
Wofür stehen die letzten Zahlen 2,3,8,2 in diesem Code?


Wahrscheinlich ist die Antwort etwas total Logisches und ich werde mir für den Rest des Abends selbst in den Arsch treten :lol:

EDIT: Ich hau mir mal selber ein paar in den Nacken...
http://www.adventure-treff.de/forum/vie ... php?t=7529
Benutzeravatar
PhanTomAs
Adventure-Gott
Adventure-Gott
Beiträge: 3349
Registriert: 14.08.2003, 18:11
Wohnort: Auf'm Mars

Re: Tür geöffnet --> Besser nicht

Beitrag von PhanTomAs »

Ich krieg die Kriese. Heute klappt aber auch gar nichts. Dabei will ich doch nur eine verschlossene Tür haben, die einen Schlüssel verlangt. Einmal hatte ich es fast, dann kam auch immer noch ein Besser nicht hinterher.
Dann hab ich den Tipp gelesen, dass man sowas lieber mit den SetDoorStrings machen soll. Ich habe es dann hiermit probiert:

SetDoorStrings („Dies ist eine Tür.“, „Die Tür ist verschlossen.“, „Damit geht die Tür nicht auf.“);
if (any_click_on_door_special (6, 4, x, y, dir, 5, nr_x, nr_y, nr_dir, opensound, closesound, key, closevalue) == 0) Unhandled ();

Bei mir sieht das dann so aus:

function hTuerKeller_AnyClick()
{
SetDoorStrings("Die Kellertür.", "Verschlossen.", "Damit klappt das nicht.");
if ( any_click_on_door_special(2, oTuerKeller, 80, 130, eDirUp, 7, 70, 30, eDirDown, 31, 32, 8, 0) == 0 ) Unhandled();
SetDoorStrings("", "", ""); // strings leeren, um beim Vergessen keinen falschen Satz sagen zu lassen.
}
Die Tür ist nur leider immer noch unverschlossen. Ich kann sie ganz normal ohne Schlüssel öffnen. Das einzige was anders ist, ist dass die Tür beim Öffnen jetzt statt des Öffnungssounds den Aufschließsound abspielt.


edit:
Hat das was vielleicht was damit zu tun, dass ich mit 3.1.2 einen Starterpack für 3.0 (MMM) benutze? Neuere gab es aber keine.
Antworten