[Gelöst] get category selecthombase material

Ich habe mir von ccan das Gebäude "Handelsstation" geholt. Dadurch ist es unter anderem möglich, Verkaufsangebote auf eine mit anderen Spielern geteilte Liste zu setzen, welche dann diese Spieler kaufen können.
Das Problem dabei ist nun, wie man die mögliche Auswahl aller verkaufbaren/kaufbaren Objekte erstellt. In der Handelstation wird schlicht jedes Ding, mit der Kategory "Object" im Reiter "Objekte" aufgelistet. Das sind dann aber natürlich sehr sehr viele Dinge, die so garnicht im Spiel vorkommen, also z.b Blitze, oder Lichter und und und.

Deswegen wäre es sinnvoll dies noch weiter zu Filtern, z.b nach der Kategory "C4D_SelectHomebase". Leider gibt es das nicht für "GetCategory".
Also wie kann ich die Objekte noch zusätzlich filtern?   Mit GetDefcoreVal wüsste ich gerade nicht, wie das funktioniert, da man ja 1. eine Stelle angeben muss (wie sind die stellen bei "C4D_Object|C4D_SelectMaterial|C4D_SelectKnowledge|C4D_SelectHomebase " definiert? und 2. in der Category ja auch einfach eine Zahl stehen könnte, und ich weiß nicht, ob und wie das dann eben der speziellen Kategory C4D_SelectHomebase zugeordnet wird.

Ich hab eben auch mal im Uplink System des Star Empire Packet geschaut, wie da der Handel funktioniert. Doch dort ist es leider auch nicht gut geregelt, da dort im Script einfach die ID jedes einzelnen Objektes, das gehandelt werden können soll, einzeln aufgelistet wird… und das wäre defintiv zu viel Arbeit, das für all meine Objekte zu machen.

GetCategory()&2048

danke dir :slight_smile:

Die Funktion für Objekte sieht jetzt so aus (ich hab nur den if Befehl hinzugefügt, der Rest war vorher so und hat auch funktioiert, abgesehen davon, dass es zuviele objekte waren):

func Objects()
{
  Sound("Click");
  CreateMenu(KEOE,caller,0,0,"Keine Objekte gefunden!",0,0,0);
  var obj, num;
  while(obj = GetDefinition(num,C4D_Object()))
{if (GetCategory()&2048)
{
    AddMenuItem(Format("%s (%d) auf Verkaufsliste setzten",GetName(0,obj),GetValue(0,obj)),"AddOnList",obj,caller);
    num++;
}};
  return(1);
}

Leider sorgt das nun dafür, dass das Spiel abstürzt, sobald man die Liste aufrufen will… =/ wo ist der Fehler?  Vermutlich in der Klammerschachtelung? Wie füge ich die zweite Bedingung in den while Befehl ein?

Du erhöhst num nur, wenn die Kategorie passt. Dadurch bleibt die Schleife stecken, sobald ein anderes Objekt vorkommt.

GetCategory(0, obj) (sonst ist es immer die Kategorie des Aufrufers). Und num in der Schleife aber ausserhalb des if-Blocks erhoehen. Sonst hast du eine Endlosschleife.