Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  FAQFAQ  SuchenSuchen  AnmeldenAnmelden  MitgliederMitglieder  LoginLogin  

Austausch | 
 

 GetDefinition funktioniert nicht mit C4D_Select[x]?

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: 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);
     
  AddMenuItem("Zurück","KonstruktionsMenu",BA6Z);
  return(1);
}

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?
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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;

Die Kategorien kannst auch hier nachschauen.
Nach oben Nach unten
Benutzerprofil anzeigen
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: 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;

Die Kategorien kannst auch hier nachschauen.
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.
Nach oben Nach unten
Benutzerprofil anzeigen
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: 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());

  AddMenuItem("Zurück","KonstruktionsMenu",BA6Z);
  return(1);
}

Und am Anfang die statics:
Code:
static C4D_SelectBuilding;
static C4D_SelectVehicle;
static C4D_SelectMaterial;
static C4D_SelectHomebase;
static C4D_SelectAnimal;
static C4D_SelectNest;
static C4D_SelectInEarth;
static C4D_SelectVegetation;

C4D_SelectBuilding  =  128;
C4D_SelectVehicle    =  256;
C4D_SelectMaterial  =  512;
C4D_SelectHomebase  =  2048;
C4D_SelectAnimal    =  4096;
C4D_SelectNest      =  8192;
C4D_SelectInEarth    = 16384;
C4D_SelectVegetation = 32768;

Warum werden alle Objekte aufgelistet und nicht nur die des richtigen Typs?
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: 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:
Zitat :
static const C4D_SelectBuilding = 128,
C4D_SelectVehicle = 256,
C4D_SelectMaterial = 512,
...
(achja, das Forum löscht ja Leerzeichen und Tabs automatisch -.-... Einrücken zur besseren Übersicht)
Nach oben Nach unten
Benutzerprofil anzeigen
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]?   So Aug 08, 2010 12:13 am

Nochmal danke. Es lag wirklich nur an den Variablen. Jetzt geht alles wie gewollt.
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: GetDefinition funktioniert nicht mit C4D_Select[x]?   

Nach oben Nach unten
 
GetDefinition funktioniert nicht mit C4D_Select[x]?
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Anmeldung funktioniert nicht mehr
» Forumieren funktioniert nicht
» Link einfügen mit einem Umlaut in der web-Adresse funktioniert nicht
» Wahlschalter funktioniert nicht richtig
» Maus Courser ändern funktioniert nicht.

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Sonstiges :: Scripthilfe-
Gehe zu: