GetDefinition funktioniert nicht mit C4D_Select[x]?
2 verfasser
Autor
Nachricht
Wipfmagus Konteradmiral
Alter : 28 Anmeldedatum : 06.03.10
Thema: GetDefinition funktioniert nicht mit C4D_Select[x]? Sa Aug 07, 2010 7:25 pm
Ich versuche gerade (für eine Privatrunde), eine Neuauflage des Studentenclonks zu machen - hauptsächlich wegen des "100mal duplizieren"-Liedes.
Ich will den hardgecodeten Scriptballast aus dem Original, in dem alle IDs der betreffenden Objektart einzeln ins Menü gesteckt werden, durch einen allgemeinen Script ersetzen, der ähnlich der aus dem Bausatz alle Objekte einer Kategorie nacheinander in ein Menü packt.
Als Beispiel der Script fürs Tiermenü:
Code:
func Tiere() { CreateMenu(DDDD, this(), this(), 1, "$TxtNoObjectsAvailable$"); var idNum = 0; var i = 0; while (idNum = GetDefinition(idNum++, C4D_SelectAnimal)) AddMenuItem("$TxtCreate$", "MachMirDas", idType, pClonk);
Allerdings scheint C4D_SelectAnimal (wie C4D_SelectVehicle und so auch) nicht im Script als Kategorie erkannt zu werden... es wird ein "Error:unknown identifier" im Log ausgegeben und die Funktion wird nicht ausgeführt, das Menü bleibt leer.
Kann mir jemand helfen? Habe ich anderweitig einen Fehler gemacht? Wenn nein: Wie kann ich das Problem mit den Kategorien ohne Hardcoding umgehen?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]? Sa Aug 07, 2010 8:01 pm
Oo, this- und return-Klammern.
Zuerst: Du hast nirgends idType definiert und pClonk auch nicht. Das dürfte danach auch nen Fehler geben. Außerdem setzt du idNum in der Schleife auf eine ID, erhöhst sie aber mit ++ - geht nicht. Sollte wohl idType = ... sein.
C4D_SelectAnimal ist nicht definiert. Du kannst sie aber einfach selber definieren, indem du eine globale Variable mit deren Wert erstellst (oder einfach direkt den Wert eingibst, ist aber nicht so übersichtlich): static const C4D_SelectAnimal = 4096;
Thema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]? Sa Aug 07, 2010 8:22 pm
Limeox schrieb:
Oo, this- und return-Klammern.
Ich konnte es leider nicht #strict 2 machen, da sich schon zu viel Prä-strict2-Syntax festgefressen hatte und das Updaten auf #strict schon genug Arbeit ist.
Limeox schrieb:
Zuerst: Du hast nirgends idType definiert und pClonk auch nicht. Das dürfte danach auch nen Fehler geben. Außerdem setzt du idNum in der Schleife auf eine ID, erhöhst sie aber mit ++ - geht nicht. Sollte wohl idType = ... sein.
D: da war mir wohl die Zeile, in der pClonk definiert worden war, weggebröckelt, und idType hatte ich ausversehen bei einer nach hinten losgegegangenen "Verstrictung" überall durch idNum ersetzt. Das gibt sicherlich auch Typ-Errors, wenn ich es nicht fixe.
Limeox schrieb:
C4D_SelectAnimal ist nicht definiert. Du kannst sie aber einfach selber definieren, indem du eine globale Variable mit deren Wert erstellst (oder einfach direkt den Wert eingibst, ist aber nicht so übersichtlich): static const C4D_SelectAnimal = 4096;
Achso? Ich dachte bisher, dass alles, was in der DefCore unter Category steht, auch von den Scriptfunktionen unterstützt wird... na ja. Man lernt eben nie aus. Danke für die Klärung.
Wipfmagus Konteradmiral
Alter : 28 Anmeldedatum : 06.03.10
Thema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]? Sa Aug 07, 2010 11:15 pm
So... Jetzt funktioniert es.
Theoretisch.
Aber praktisch werden alle Objekte in den Menüs "Materialien erzeugen", "Vegetation erzeugen", "Tiere erzeugen" und "Clonk erzeugen" aufgeführt.
Hier noch einmal beispielhaft der Script "Vegetation erzeugen":
Code:
func Pflanzen() { CreateMenu(AC5A, this(), this(), 1, "$TxtNoObjectsAvailable$"); var idType; var idNum = 0; var i = 0; while (idType = GetDefinition(idNum++, C4D_SelectVegetation)) AddMenuItem("$TxtCreate$", "MachMirDas2", idType, this());
Warum werden alle Objekte aufgelistet und nicht nur die des richtigen Typs?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]? Sa Aug 07, 2010 11:25 pm
Hm, also bei mir geht das. Da werden wirklich nur "Pflanzen", also C4D_SelectVegetation angezeigt (worunter aber auch zB Muscheln und Statuen fallen). Hast du die Statics wirklich so definiert? Das sollte erstmal Errors geben (Scriptzeilen außerhalb von Funktionen funktionieren nicht) und jede Variable hat dann den Wert 0, wodurch wieder alles gefunden wird.
Am besten definierst du sie so wie oben gezeigt: static const C4D_SelectAnimal = 4096; Das "const" bedeutet einfach, dass die Variable nicht verändert werden kann, also konstant ist. Du kannst auch direkt alle in einem Rutsch angeben, nämlich: