Wie kann man locale Variablen löschen

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

linus_org
Posts: 149
Joined: Tue, 22. Aug 06, 01:24
x3

Wie kann man locale Variablen löschen

Post by linus_org »

Salu,
sorry für die dumme Frage, aber wie kann ich locale Variablen wirklich los werden ? bislang ging ich davon aus das ein setzen auf null die dinger auch wirklich loescht, nur leider musste ich feststellen das bei einem aufruf von get all local vari's starting with die ganzen Dinger ( mit wert null ) wieder auftauchen.
Hat jemand eine Ahnung wie ich die wriklich loswerde ?
hat jemand vielleicht etwas aehnliches auch bei globalen vari's beobachtet ?
Gruesse
Linus
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Ich würde sagen endgültig löschen kann man die mit den momentanen Scriptbefehlen nicht... der rückgabewert ist allerdigs mit dem simplen auf null setzen derselbe als wäre die Variable nicht existent.. was hast du eigentlich genau vor, dass dich das stört? wenns um ne auflistung von GVs/LVs geht -> einfach die mit dem Wert null ausklammern ;)
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
linus_org
Posts: 149
Joined: Tue, 22. Aug 06, 01:24
x3

Post by linus_org »

Salu,
was ich vorhabe ist eigentlich nur ein sauberes install/uninstall zu schreiben und ebenfalls ein wenig auf die zwischenversionen aufzupassen..
d.h. ich erweitere bei den einzelenen versionen die funktionalitaet und es kommen oder aendern sich locale/globale variablen und eigentlich moechte ich halt keinen muell hinterlassen nur weil mal jemand ein script testet :-)
Script ist das Sectortakeover 2.5 das gerade bei mir als todo ansteht.

nebenbei ist es nach mir auch einperformance problem, wenn diese dinge nicht geloescht werden, aber das nur am rande. denn es ist nach mir ein unterschied ob ich null oder 0 einem object zuweise, aber vielleicht bin ich da einfach ein wenig traditionell :-)
Gruss
Linus
User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

wenn du kein local müll hinterlassen möchtest fällt mir nur die radikal Methode ein -> destruct show no explosion.

bei der global einfach set globl variable=(die wo du eingesetzt hast) value=0 oder so. sonst fällt mir dazu nichts mehr ein.

(um dir eventuell die ganzen global befehle zu sparren kannst du sie vorher in ein arry speichern und dann eins nach dem anderen ausschalten) also anstatt 20 set global var ein arry mit 20 gespeicherten globalstrings ka ob das so funktionieren kann ist nur ein gedanke
linus_org
Posts: 149
Joined: Tue, 22. Aug 06, 01:24
x3

Post by linus_org »

Salu,
merci für die Ideen. ich werde da ich ein paar globale Arrays brauche versuchen möglichst viel auf objecte zu verlagern und diese dann beim deinstall zu killen, sollte damit recht wenig übrigbleiben.
mal schauen, ist aber eigenlich schade da sich durch ein derartiges verhalten immer mehr datenmuell im spiel ansammelt, mal nicht zu reden von mods oder groesseren scripten.
vielleicht binich einfach wirklich zu altbacken, aber irgendwie stoert mich sowas und wie gesagt null ist einfach nicht 0, ausser wir reden hier von c pointern, dann ist das resultat ziemlich das gleiche.
Gruss
Linus
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

linus_org wrote:Salu,
merci für die Ideen. ich werde da ich ein paar globale Arrays brauche versuchen möglichst viel auf objecte zu verlagern und diese dann beim deinstall zu killen, sollte damit recht wenig übrigbleiben.
mal schauen, ist aber eigenlich schade da sich durch ein derartiges verhalten immer mehr datenmuell im spiel ansammelt, mal nicht zu reden von mods oder groesseren scripten.
vielleicht binich einfach wirklich zu altbacken, aber irgendwie stoert mich sowas und wie gesagt null ist einfach nicht 0, ausser wir reden hier von c pointern, dann ist das resultat ziemlich das gleiche.
Gruss
Linus
Das Killen von Objekten wird nichts bringen, da gekillte Objekt weiter existieren. Man kann Variablen weiterhin auslesen. Das sieht man gut am Killed-Signal. Aber ich denke auch gekillte Objekte werden irgendwann fallen gelassen.

Die beste Möglichkeit ist immer noch das Schreiben von "null" in die Variablen und hoffen, dass der Speicher freigegeben wird.

Ich würde die Namen der Variablen in das T-File schreiben, wie hier beim Prospektor:

Code: Select all

		<t id="5000">5028</t>
		<t id="5001">prospector.mineral.to.work</t>
		<t id="5002">prospector.asteroid.break.amount</t>
		<t id="5003">prospector.asteroid.break.yield.max</t>
		<t id="5004">prospector.work.position</t>
		<t id="5005">prospector.work.sector</t>
		<t id="5006">prospector.work.mineral</t>
		<t id="5007">prospector.nav.beacon</t>
		<t id="5008">prospector.collected.mineral.1500</t>
		<t id="5009">prospector.collected.mineral.1501</t>
		<t id="5010">prospector.collected.mineral.1502</t>
		<t id="5011">prospector.collected.mineral.1503</t>
		<t id="5012">prospector.broken.asteroid.1500</t>
		<t id="5013">prospector.broken.asteroid.1501</t>
		<t id="5014">prospector.broken.asteroid.1502</t>
		<t id="5015">prospector.broken.asteroid.1503</t>
		<t id="5016">prospector.promotion</t>
		<t id="5017">prospector.mobile.drilling.system</t>
		<t id="5018">prospector.jump.max</t>
		<t id="5019">prospector.jump.energy</t>
		<t id="5020">prospector.payment</t>
		<t id="5021">prospector.auto.rename</t>
		<t id="5022">prospector.auto.rename.name</t>
		<t id="5023">prospector.auto.rename.number</t>
		<t id="5024">prospector.log.file</t>
		<t id="5025">prospector.message.modus</t>
		<t id="5026">prospector.message.modus.acoustic</t>
		<t id="5027">prospector.version.update</t>
		<t id="5028">prospector.install.version</t>
Ausgelesen wird's dann mit:

0 $End = read text: page=$PageID id=5000
1 $End = string $End to integer
2 $Array.Variable = read text: page id=$PageID, from 5001 to $End to array, include empty=null

Natürlich wäre auch ...

2 $Array.Variable = read text: page id=$PageID, from 5001 to 5028 to array, include empty=null

... möglich, aber so muss man nur noch das T-File ändern.

Gruß
Lucike
Image
linus_org
Posts: 149
Joined: Tue, 22. Aug 06, 01:24
x3

Post by linus_org »

Merci für den Tipp lucike
Das mit den gekillten objekten war mir nicht bewusst. Variablen benennung habe ich zum teil schon drin, da ich sichergehen wollte das meine lokalen variablen alle das gleiche "vorzeichen" in diesem fall "Sektor.Takeover." haben. ich denke die weitere benennung mache ich nach deinem schema, wenn feststeht welche auch wirklich bleibt..
Bin halt neu im scripten und muss erstmal ein richtiges gefuehl dafuer bekommen.
Gruss
Linus

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”