Construction Set Der Unterschied zwischen globale vaiablen und lokale variablen?

Hattu

Bürger
Weis jemand worin sich globale vaiablen und lokale variablen unterscheiden?
thx im vorraus
 
Auf lokale Variablen kann man ohne weiteres nur im Script zugreifen, wo die erschaffen wurden. Wenn man von außen auf lokale Variablen eines Scripts zugreifen will, muss man den Namen des Objektes, dem die Variablen gehören mit angeben. Ich glaube das war Objektname.Variabenname.

Globale Variablen sind global. Man kann von überall drauf zugreifen. Außerdem ist hier die Gefahr groß, dass welche doppelt deklariert werden.
Wenn Modder x ne globale Variable namens globVar verwendet und Modder y zufällig eine für sein Mod nimmt, die genauso heißt, gibt es Konflikte und damit Ärger!
 
und ich kan bei locals nicht so machen das: wen der player a macht dan wird lokale B in script C auf d gestellt. und in script E wird nach B gefragt und wen B d ist dan passiert f und B wir auf g gestellt? kan man das so machen?
 
Also das waren selbst für mich als Physiker zu viele Buchstaben. ;)

Ich erkläre noch mal ganz von Anfang:

Auf eine globale Variable kann immer und jederzeit zugegriffen werden. Das heißt, sie werden in JEDEM Frame geladen. Also sollte man möglichst sparsam mit ihnen umgehen.

Eine lokale Variable ist eine Variable, die in einem Script definiert ist. Liegt dieses Script auf einem Gegenstand, der "Reference Persistent" ist (NPCs besitzen diese Eigenschaft automatisch, wenn es nur eine Instanz von ihnen gibt), kannst du mit dem Befehl gegenstand_ID.var_name, zB. my_kiste.voll auf diese Variable auch von außerhalb des Scripts zugreifen. Leider werden nun auch Gegenstände mit Reference Persitent in JEDEM Frame geladen. Das heißt auch mit dieser Kombination sollte man sparsam umgehen.

Meine Meinung hierzu ist in etwa so:

- Hat man viele Gegenstände, die alle zu einem bestimmten Zeitpunkt das selbe machen sollen, ist eine globale Variable angebracht. Ein Beispiel: ein Schalter lässt mehrere Brückenteile erscheinen. Dann setzt der Schalter die globale Variable und auf den Brückenteilen leigt ein Script, dass die globale Variable überprüft.

- Will man eine unbekannte Anzahl von Gegenständen (zB. alle Instanzen einer Kreatur) beeinflussen, kommt man um eine globale Variable nicht herum.

- Sollen dagegen mehrere Gegestände einen anderen beeinflussen, ist es besser lokale Variablen auf dem zu beeinflussenden Gegenstand zu verwenden.

/EDIT:
Natürlich kann man deine Anfragen realisieren. Vorausgesetzt, du hast geeignete Abfragemöglichkeiten für die Aktion A bzw "wohldefinierte" Variablen b-g. Wenn du etwas genauer schreibst, was du möchtest, kann ich dir auch besser helfen.
 
Ich wollte eh nur wissen ob es jemand entschlüsseln kann. Was ich wirklich wissen will ist folgendes:

Wen ich in einem Script, die lokale variable A von 0 auf 1 stelle indem ich z.B. ein Rätsel stelle.
Kann ich dan in einem anderen script dan auf die variable A zugreifen, um zu prüfen ob das rätsel gelöst wurde? z.B. wen man eine truhe nur dan öffnen kan, wen das rätsel gelöst wurde.
 
Ich wollte eh nur wissen ob es jemand entschlüsseln kann. Was ich wirklich wissen will ist folgendes:

Wen ich in einem Script, die lokale variable A von 0 auf 1 stelle indem ich z.B. ein Rätsel stelle.
Kann ich dan in einem anderen script dan auf die variable A zugreifen, um zu prüfen ob das rätsel gelöst wurde? z.B. wen man eine truhe nur dan öffnen kan, wen das rätsel gelöst wurde.

Wenn das Script mit der Variable A auf einem persistenten Objekt oder NPC liegt, dann ja. ( über Objektname.A )

Für diesen Fall kannst du aber besser das Tagebuch verwenden.
Also z.B. das Journal "Raetsel" erstellen und den aktuellen Abschnitt
davon mit Journal Raetsel, Wert setzen und mit GetJournalIndex Raetsel abfragen.
 
und was mache ich wen ich das ganze wiederholen will? das heißt: jedewsmla wen ich die kiste aufmachen will, das rätsel lösen?
 
Also das würde ich so machen:


begin h_script_auf_truhe

if( OnActivate ) ; Wenn angewählt

; hier das Raetsel

endif

end
 
Dafür gibts Tagebücher...
z.B. an der Kiste mit dem Rätselschloss

if ( OnActivate )
; es will jemand die Kiste öffnen und klickt sie an
if ( GetJournalIndex "MeinRätseltagebuch" >= 100 )
; wäre das Rätsel schon gelöst
; also Kiste auf

Activate
else
messagebox "Ihr hab das Rätsel nicht gelöst und solange bleibt der Schatz hier drin" "OK"
endif
endif

Und am Rätsel-Script setzt Du sobald das Rästel gelöst wurde den Tagebucheintrag

...
Journal "MeinRätselTagebuch" 100
...

welcher im Tagebuchtext etwa aussagen sollte:

"Nachdem ich das Rätsel das mir der Daedra aufgegeben hat lösen konnte darf ich nun zu seiner Truhe gehen und den goldenen Pantoffel der Prinzessin Möhrenkraut herauszunehmen und zu ihr zurückzubringen blabla...."
 
Zuletzt bearbeitet: