[Gelöst] DefCore Version

Welche Auswirkung hat die Versionsnummer in der DefCore? Bisher hat es den anschein auf mich gemacht, als wäre diese völlig egal. Aber in dem CRTool muss man diese Verpflichtend angeben. Was tippe ich da ein?

Die Version von Clonk die du benutzt. 4.9.10.7 [330] ist glaube ich die Aktuelle. Die steht immer im Startbildschirm über dem "Spiel starten" Button.

aber es hat keine negativen Auswirkungen, wenn ich bei einem alten Objekt eine neue Version reinschreibe, oder in ein neues Objekt eine alte Version?

Nicht das ich wüsste, viele Objekte aus CE funktionieren ja einwandfrei und manche GWE/CP Objekte funktionieren fast ohne Fehler.

Die Motivation von der Nummer da ist, dass Spieler eine Fehlermeldung bekommen, wenn ihre Clonk-Version älter ist als die, für die das Objekt entwickelt wurde. Ich weiß nicht, ob das CR tatsächlich noch macht. Da es aber sowieso keine neuen CR-Versionen mehr geben wird, kannst du den Eintrag völlig ignorieren.

Es gab mindestens einen Fall, in dem die Version Auswirkung auf die Aufrufreihenfolge von Callbacks hat. Bin mir nicht sicher, ob das immer noch so ist.

Mit dem Problem hatten wir in CMC schon zu kämpfen. Die ContainedControl-Callbacks wurden wenn ich mich recht erinnere erst aufgerufen, nachdem die Engine die Controls schon verarbeitet hatte, weshalb man das Öffnen der Menüs/Verlassen des Gebäudes etc. nicht über den Rückgabewert verhindern konnte.

Ich hab mal nachgeschaut:

https://git.openclonk.org/openclonk.git/blob/0f050f03439821fdf2c5e57cb6b406481c393126:/engine/src/C4Game.cpp#l113
https://git.openclonk.org/openclonk.git/blob/0f050f03439821fdf2c5e57cb6b406481c393126:/engine/src/C4Def.cpp#l1365
Wenn die Objektversion höher ist als die Engineversion dann wird eine Meldung (einfacher Logeintrag, also weder Warnung noch Fehler) ausgegeben und die Definition nicht mitgeladen.

https://git.openclonk.org/openclonk.git/blob/0f050f03439821fdf2c5e57cb6b406481c393126:/engine/src/C4Object.cpp#l3202
Bei Objektversionen unter GWE 3 (4.9.1.3) werden erst Standardkommandos und anschließend der ContainedControl-Callback ausgeführt. Die Dokumentation beschreibt übrigens immer noch das alte Verhalten: http://crdocs.clonkspot.org/de/sdk/definition/script.html

>ContainedControl: Befindet sich das direkt spielergesteuerte Objekt in einem anderen Objekt (Behälter), so werden zunächst die Standardkommandos Down (Verlassen), Throw (Ablegen), Up (Kaufen, in Basisgebäude) und Dig (Verkaufen, in Basisgebäude) ausgewertet. Anschließend wird die Steuerung als Contained-Funktion an den Behälter weitergegeben. Ausnahme: die Spezialkommandos ControlSpecial, ControlSpecial2 und ControlWheelUp/Down sind nur für die direkte Steuerung gedacht und werden nicht an den Behälter umgeleitet.


https://git.openclonk.org/openclonk.git/blob/0f050f03439821fdf2c5e57cb6b406481c393126:/engine/src/C4Object.cpp#l3465
Wenn die Objektversion kleiner als 4.9.5 (Endeavour) ist dann werden die Control*-Funktionen beim Anfassen eines Objekts erst nach den Standardkommandos ausgeführt.