Kann Spielstand mit aktivem Wunden-Effekt nicht laden

#1
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.
Zuletzt geändert von Yuan DeLazar am 09. Nov 2015, 12:26, insgesamt 1-mal geändert.
Dateianhänge
output_log_Wunden.txt
(80.57 KiB) 384-mal heruntergeladen

#2
hmmm, vielleicht kann er dann im geladenen Spielstand irgendwie nciht auf die Variablen zugreifen, wenn die nicht innerhalb der function definiert sind.

#3
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.
Zuletzt geändert von Yuan DeLazar am 09. Nov 2015, 14:52, insgesamt 4-mal geändert.

#4
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?

#5
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.

#6
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?
Gesperrt

Zurück zu „Fixed Mod Bugs“