Seite 1 von 1

Kann Spielstand mit aktivem Wunden-Effekt nicht laden

Verfasst: 09. Nov 2015, 12:15
von Yuan DeLazar
Explizit noch mal getestet: Vertrimmen lassen, Wunden kassiert, gespeichert. Anschließend Wunden geheilt, neu gespeichert. Spielstand 1 lässt sich nicht laden, Spielstand 2 schon. Output_log angehängt. Das Problem scheint da zu liegen:

NullReferenceException: Object reference not set to an instance of an object

Die Fehlermeldung ist mir in letzter Zeit öfter über den Weg gelaufen und vorher noch nie aufgefallen.

Wundeneffekte 1-5, hier nur der erste, die anderen analog:

Code: Alles auswählen

	
		other
		negative
		 LE) wundLE1 = LE;
registerGlobal( "wundLE1" );
	function OnAdd() {
	activateInterval( "healing", 1 );
	healing();
} function healing() {
	var cLE = getCharAttribute("cLE");
	if (cLE >= wundLE1) addEffect( {"which":"Wundeheilen"} );
	}]]>
		-2
		-2
		-2
		-2
		-2
		-1
	
[/size]

Aha. Lässt sich laden, wenn man die ersten Zeilen in die function OnAdd reinzieht. Muss mal sehen, ob die Wunden sich dann noch immer so verhalten, wie sie sollen.

Verfasst: 09. Nov 2015, 13:12
von Mordbrenner
hmmm, vielleicht kann er dann im geladenen Spielstand irgendwie nciht auf die Variablen zugreifen, wenn die nicht innerhalb der function definiert sind.

Verfasst: 09. Nov 2015, 13:21
von Yuan DeLazar
Hat was von getCharAttribute erzählt in der output_log. Deswegen habe ich den Teil mal in die Funktion reingezogen. Jetzt kann man es wieder laden. Aber nicht mehr speichern m(
Die Datei wird dann nicht vollständig geschrieben, sondern endet unerwartet. Bei







vom betroffenen Char. Also kurz bevor die durableEffects losgehen.

EDIT: der Grund ist eine undefinierte Variable. Das Problem gestaltet sich zusammengefasst folgendermaßen:
registerGlobal kann zwar aus einer Funktion heraus aufgerufen werden, nimmt die zu registrierende Variable aber nicht aus dieser, sondern aus CDATA. Von dort kann aber aus dem Spielstand laden heraus kein getCharAttribute aufgerufen werden. Wenn es also keine Möglichkeit gibt, den aus der OnAdd-Funktion bekommenen Wert an CDATA zu übergeben odere registerGlobal dazu zu bewegen, einen Wert aus der Funktion zu schreiben, schließen sich registerGlobal und getCharAttribute praktisch gegenseitig aus.

den registrierten Wert abzufragen, bevor getCharAtt aufgerufen wird, geht auch nicht. Aus irgend einem Grund ist der undefiniert, obwohl er dann später ordnungsgemäß verwendet wird.

Verfasst: 09. Nov 2015, 14:47
von Mordbrenner
hmmm, funktioniert es eventuell das registerGlobal ("Variable") am Anfang zu setzen und dann in der function die Variable auf den entsprechenden Wert zu setzen? Oder bleibt dann der alte Wert global gesetzt?

Verfasst: 09. Nov 2015, 15:30
von Yuan DeLazar
Ich habe es jetzt so gelöst:

Code: Alles auswählen

		 LE) wundLE = LE;
	showMessage("a "+wundLE );
}
	var cLE = getCharAttribute("cLE");
	if (cLE >= wundLE) addEffect( {"which":"Wundeheilen"} );
	}]]>
Also ja, man kann den Wert der Variable in einer Funktion ändern. Es darf nur nicht die OnAdd-Funktion sein und auch nicht direkt CDATA, warum auch immer.

Verfasst: 10. Nov 2015, 10:27
von Lares
Yuan, bei deiner Waffenmod hast du folgendes bei v1.4 geschrieben:

- "Kann keinen Spielstand mit Wunde laden" gefixt

Kann dann dieses Thema jetzt noch "Fixed Mod Bugs" verschoben werden?

Verfasst: 10. Nov 2015, 10:30
von Yuan DeLazar
Ja, im Grunde schon. Obwohl ich natürlich noch nicht verstehe, was da passiert. Aber das werde ich wohl auch nicht erfahren.