Mein Vorschlag:
Der Hintergrund enthält das Behältnis ohne Tür. (Hotspot 1, Name "Schrank")
Davor ist der Gegenstand. (Objekt 1, baseline auf Höhe des Gegenstands.)
Davor ist die geschlossene Tür. (Objekt 2, baseline unterhalb des Gegenstands, Name "Schranktür")
Zusätzlich ist im SpriteManager ein Bild der offenen Tür.
Skript für die Tür:
Code: Alles auswählen
int tuer_zu=301; // Spritenummer aus dem Spritemanager
int tuer_offen=302;
... // MovePlayer etc.
if (UsedAction (A_OPEN)) {
if (oTuer.Graphic==301) { // oder object[2].Graphic
PlaySound(x);
oTuer.Graphic=302;
}
else
player.Say("Das ist schon offen.");
}
else if (UsedAction (A_CLOSE)) {
if (oTuer.Graphic==302) {
PlaySound(y);
oTuer.Graphic=301;
}
else
player.Say("Das ist schon zu.");
}
... // der Rest bzw. Unhandled_Event();
Das Skript für den Gegenstand im Behältnis schreibst Du wie immer.
(Player nimmt es -> Objekt ausschalten, zum Inventar hinzufügen)
Was noch fehlt, ist der Hotspot.
Hier schreibst Du bei A_OPEN und A_CLOSE einfach genau das gleiche wie bei der Tür.
Du könntest auch versuchen, die entsprechende Funktion aufzurufen, um dir Arbeit zu sparen. Wenn Du Dir das komplette room script anschaust, siehst Du ja, dass die
Any click on Tuer-funktion eine Funktion wie jede andere ist, mit Namen object2_a() beispielsweise.
Im Skript des Hotspots schreibst Du:
Code: Alles auswählen
...
else if (UsedAction(A_OPEN) || UsedAction(A_CLOSE)) {
object2_a();
}
...
Meine Methode basiert einfach darauf, dass das Objekt im Schrank nicht zu sehen und somit nicht anklickbar ist, solange die Tür zu ist. Und das ganze ohne irgendwelche Zustandsvariablen.
Sag Bescheid, ob es funktioniert hat.
EDIT:
Nachtrag: Man sollte NIE das Inventar abfragen, um rauszufinden, ob ein Gegenstand schon genommen wurde. Das ist einfach eine zu große Fehlerquelle.
Vor allem muss man dann nicht den Code ändern, wenn man an anderer Stelle was umschreibt.
Die beiden Bilder von der offenen und geschlossenen Tür müssen natürlich so in AGS importiert worden sein, dass es reicht, das Sprite zu verändern. Außerdem muss bei den General settings "Pixel-perfect click detection" aktiviert sein, damit man bei klick auf den transparenten Teil des offene-Tür-Sprites den Gegenstand anklickt.