Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: errazzor am 16. Mai 2019, 13:47:01
-
Hallo,
ich hoffe hier liest überhaupt noch jemand mit, das Forum sieht leider irgendwie tot aus :o ???
Ich bin absoluter Anfänger und habe mal eine Frage bzw. ein Problem.
Ich möchte erreichen, dass beim anschauen eines Inventory-Items ein Objekt im Raum sichtbar wird.
Mein problem ist jetzt - die Definition "Look" des Inventory-Items befindet sich ja im Globalscript.
Und von da schaffe ich es nicht, ein Objekt des Raums anzusprechen.
Geht das überhaupt? Wenn ja, wie?
Also das hier steht im Globalscript:
unction iZettel2_Look()
{
player.FaceDirection(eDirectionDown);
player.Say("Hier steht:");
Wait(5);
PlayMusic(5);
player.Say("Herzlichen Glückwunsch!");
...und jetzt soll im Raum10 ein Objekt sichtbar werden ( oSchriftzug.Visible = True) .. aber ich weiss nicht, wie.
Vielen Dank.
-
Hallo, es wird zwar wenig gepostet in letzter Zeit, aber ich z.B. schau regelmäßig rein :)
Aus einem globalen Kontext können Objekte über object[x] angesprochen werden.
if (player.Room == 10) object[1].Visible = true;
Der Vollständigkeit halber: man kann Raum-Code auch so ausführen:
CallRoomScript(1);
Im Raumskript muss eine entsprechende Funktion existieren:
function on_call(int p) {
if (p == 1) {
oSchriftzug.Visible = true;
}
}
-
Da bin ich ja froh, dass so schnell eine Antwort kam :)
Dankeschön! Das hat geklappt!
Eine Frage - das geht aber nur, wenn man sich IN dem Raum befindet, wo das ganze passieren soll. Wenn man aus dem Raum raus und wieder reingeht, ist die Änderung weg.
Geht das auch:
- für andere Räume, in denen man sich aktuell nicht befindet?
- und dauerhaft?
Grüße!
-
Hierfür würde ich im Raum eine Variable für den Zustand des Objekts anlegen und in dieser Funktion entsprechend setzen. Beim room-before-enter das Objekt je nach Zustand sichtbar schalten.
-
1. ein Raum merkt sich seinen Zustand, d.h. das Objekt sollte eigentlich von Haus aus dauerhaft sichtbar bleiben. Da es das nicht tut, vermute ich mal, dass Du es nicht im Editor unsichtbar gemacht hast, sondern z.B. in room_Load?
Dadurch wird es jedesmal wieder unsichtbar gemacht, wenn Du den Raum betrittst.
2. etwas in anderen Räumen ändern ist auf direktem Weg nicht möglich; dazu muss man eine globale Variable anlegen. Das geht über den Projektbaum -> Global variables.
Erstell eine Neue (Rechtsklick auf die leere Liste)
name: schriftzug_sichtbar
typ: bool
default value: false
Anstatt das Objekt nun direkt sichtbar zu machen, machst Du folgendes:
schriftzug_sichtbar = true;
if (player.Room == 10) object[id].Visible = true; // id = Nummer des Objekts
In der room_Load von Raum 10 schreibst Du:
oSchriftzug.Visible = schriftzug_sichtbar;
-
Erstmal danke für die Antworten, das mit den Variablen teste ich gleich mal aus.
Anstatt das Objekt nun direkt sichtbar zu machen, machst Du folgendes:
schriftzug_sichtbar = true;
if (player.Room == 10) oSchriftzug.Visible = true;
Wo muss dieser Teil vom Code hin?
Im Globalscript kann ich ja nicht das Objekt ansprechen, das ist dort nicht bekannt.
-
Sorry, richtig, das hatten wir ja schon :D
Es muss natürlich object[id] heißen.
-
Vielen Dank, hat jetzt alles soweit geklappt.
Auch die Variablen haben mich ein großes Stück weiter gebracht, damit geht vieles sehr viel besser und einfacher, als ich es bisher umgesetzt habe.
Danke für die Erklärung !