Autor Thema: Aus Globalscript heraus ein Objekt sichtbar machen  (Gelesen 91 mal)

errazzor

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
    • E-Mail
Aus Globalscript heraus ein Objekt sichtbar machen
« 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.
« Letzte Änderung: 16. Mai 2019, 13:49:02 von errazzor »

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 970
    • Profil anzeigen
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #1 am: 16. Mai 2019, 14:41:50 »
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;
  }
}
« Letzte Änderung: 16. Mai 2019, 14:44:07 von KhrisMUC »

errazzor

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
    • E-Mail
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #2 am: 16. Mai 2019, 16:34:54 »
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!

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2513
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
    • Bòógieman's Halls Of Illusions
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #3 am: 16. Mai 2019, 18:28:43 »
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.
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

Visit Bòógieman's Halls Of Illusions
_________________________________

>>>> Ende der Kommunikation <<<<

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 970
    • Profil anzeigen
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #4 am: 16. Mai 2019, 22:25:25 »
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;
« Letzte Änderung: 17. Mai 2019, 01:01:57 von KhrisMUC »

errazzor

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
    • E-Mail
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #5 am: 16. Mai 2019, 23:22:06 »
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.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 970
    • Profil anzeigen
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #6 am: 17. Mai 2019, 01:01:26 »
Sorry, richtig, das hatten wir ja schon :D
Es muss natürlich object[id] heißen.

errazzor

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
    • E-Mail
Re: Aus Globalscript heraus ein Objekt sichtbar machen
« Antwort #7 am: 17. Mai 2019, 01:25:53 »
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 !