Not logged inOpenClonk Forum
Up Topic Community / German / Änderungen an OCScript?
- - By ClonkGeist [de] Date 2012-03-10 19:51
Ich hatte heute nach einiger Zeit wieder angefangen, in OpenClonk weiterzuscripten und habe direkt den neuen Snapshot runtergeladen. Nur wie ich jetzt bemerke, scheint sich an OCScript ein wenig geändert zu haben? Ich habe bisher nicht wirklich eine Überschaubare "Auflistung" an Änderungen bei OCScript gefunden, deshalb frag ich hier.
Und zwar ists folgendes: Die Engine scheint WARNING-Meldungen auszugeben, wegen Effekten. Ich vermute mal, FxFoo* ist nicht mehr so richtig und das geht nun irgendwie anders? Wie  funktioniert es denn nun?
Zweite Sache: Globale Funktionen in einem Objektscript, sind die nun auch "verboten"? Oder muss man da nun anders vorgehen?
Reply
Parent - - By boni [at] Date 2012-03-10 21:17
Effecte bekommen sich selbst als Proplist übergeben. Das verursacht vermutlich den Fehler bei den Effekten. Am besten du informierst dich über Proplists und siehst dir dann die geupdatete Effekte-Doku an.
Parent - By ClonkGeist [de] Date 2012-03-10 22:59 Edited 2012-03-10 23:10
Ich hatte mich schon lange darüber informiert und weiß wie das mit den Effekten funktioniert. Vor knapp 'nem Monat, wo ich zuletzt was getan hatte, war das ja schon so. Aber der Warning kommt immer eine Zeile vor:
global func FxFooStart(object target, proplist effect)
Gilt aber auch für Fx*Timer und Fx*Stop.
Reply
Parent - - By Günther [de] Date 2012-03-10 21:27
Die Warnungen der Engine sind eher wörtlich zu verstehen. "global func in appendto/included script" heißt, dass eine globale Funktion in einem Script auftaucht, das per #include oder #appendto in einem anderen Script verwendet wird. Der Grund für diese Warnung ist, dass bei einer solchen Funktion inherited einmal die vorige Kopie und einmal, so vorhanden, eine Engine-Funktion aufruft. Oder vielleicht auch nicht, ich kann mich nicht mehr erinnern was genau der Fall ist obwohl ich den Code erst vor wenigen Monaten geschrieben habe. Und dies kann sich auch leicht nochmal ändern.

Falls du mehr Fragen zu Warnungen hast, kopiere bitte die Warnung wortwörtlich anstatt sie zu umschreiben. Ich habe versucht zu raten, was du meinst, bin mir aber nicht sicher ob ich richtig geraten habe.

Die jüngsten Änderungen an C4Script sind die Einführung von Funktionspointern. Es fehlen aber noch ein paar Verbesserungen an der C4Script-Syntax und eingebauten Funktionen, um diese wirklich nützlich zu machen. Bis dahin sollte das allermeiste so funktionieren wie gewohnt.
Reply
Parent - By Günther [de] Date 2012-03-10 21:48

> Der Grund für diese Warnung ist, dass bei einer solchen Funktion inherited einmal die vorige Kopie und einmal, so vorhanden, eine Engine-Funktion aufruft. Oder vielleicht auch nicht, ich kann mich nicht mehr erinnern was genau der Fall ist obwohl ich den Code erst vor wenigen Monaten geschrieben habe.


Sven2 hat mich dazu gebracht*, den Quelltext zu lesen. Globale Funktionen werden durch #include/#appendto nicht kopiert. Und die Warnung ist dazu da, globale Funktionen aus #appendto-Scripten zu verjagen, damit die Engine aufhören kann, diese alleinstehend zu kompilieren - denn das führt in den meisten Fällen nur zu Fehlermeldungen, dass Funktionen aus dem appendto-Ziel nicht vorhanden sind.

*#openclonk-dev Auszug:
<Sven2> Btw, Guenther: It seems that every #appendto script is also parsed "standalone" without being appended
<Guenther> Sven2: That's always been the case
<Sven2> So it generates parser errors for every function that is used from the script it is appended to
<Guenther> Maybe the silence-the-errors-for-those hack broke
<Sven2> Yes, I remember. We had a workaround hack :)
<Sven2> Why did you keep that behavious then?
<Sven2> *behaviour
<Guenther> So that global functions in those scripts worked as before?
<Sven2> Why would global functions not work if they are parsed only once? (when appended)
<Guenther> I think I considered changing that, but then opted not to think through whether it would break something and do something more important
<Guenther> ah, yes, reading the code, global functions are only generated when they are parsed as part of their origin script
<Guenther> not when they appear due to include/appendto
<Guenther> I think because that maintains the invariant that the code for all functions is in their origin script
<Guenther> er, owner script
<Guenther> normal functions are copied for every script they appear in
<Guenther> global functions aren't
<Sven2> Makes sense
<Guenther> So, the "vielleicht auch nicht" option from my forum answer is the correct one :-)
<Guenther> I think it'd make more sense to keep the bytecodes in the functions itself
<Sven2> We'll think about it during dinner :-)
<Guenther> But that's yet another change
Reply
Parent - By ClonkGeist [de] Date 2012-03-10 23:08

>Falls du mehr Fragen zu Warnungen hast, kopiere bitte die Warnung wortwörtlich anstatt sie zu umschreiben. Ich habe versucht zu raten, was du meinst, bin mir aber nicht sicher ob ich richtig geraten habe.


Entschuldige, das hatte ich aus irgendeinen Grund nicht beachtet oder einfach vergessen, ich hatte es eigentlich ja vorgehabt, aber nun gut.

Okay, gut, danke, es scheint wohl daran zu liegen.

Edit: Und okay, die Sache mit den Effekten ist damit auch gelöst. War ein globaler Effekt.
Reply
Up Topic Community / German / Änderungen an OCScript?

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill