Hallo,
Leider gibt es für die ingame API kein eigenes Diskussionsforum, lediglich für die neue Online-API. Daher versuche ich es mal hier.
Ich programmiere seit einer Weile schon Addons und immer wenn ich mit Makros arbeite, stoße ich auf Probleme, die hauptsächlich durch ambivalente Interface-Methoden auftreten.
Das kann ich direkt an einem konkreten Beispiel zeigen: Die Methode PickupMacro(id or name) nimmt entweder einen Makro-Namen oder eine Makro-ID (Position in der Makro-Liste in alphabetischer Reihenfolge) als Argument und legt das Makro in den Cursor, um damit dann ggf. weitere Aktionen auszuführen. Das erste Problem fällt sofort auf: Wenn der Makro-Name rein numerisch ist - zum Beispiel „13“ -, wird die Methode versuchen, das Makro an Position 13 zu finden.
Nun könnte man ja auf die Idee kommen, die ID zur Identifikation der Makros zu nutzen. Allerdings ist die ID eines Makros, wie eingangs schon erwähnt, zwar einzigartig (Position in alphabetischer Reihenfolge), aber leider nicht persistent, d.h. sobald man Makros hinzufügt oder umbenennt, ändert sich die Reihenfolge und somit auch die ID. Die ID ist also generell ungeeignet zur Bestimmung eines Makros.
Recherchiert man ein wenig, könnte man meinen, das Problem ließe sich mitigieren, indem man GetMacroIndexByName(name) vorschaltet, sodass der Name in eine ID umgewandelt wird. So kann man statt der sich potentiell ständig ändernden ID den Namen verwenden - einmal vorausgesetzt der Nutzer ändert ihn nicht. Ambivalenz ausgeräumt… oder?
Nein. Denn wer aufgepasst hat, stellt schnell fest: Gibt es zwei Makros mit identischem Namen, werden beide der bereits genannten Methoden zu einem unvorhersehbaren Ergebnis führen.
Mal ganz abgesehen davon, dass der Makroname im Normalfall wahrscheinlich auch hier und da mal geändert wird, nachdem er vielleicht vom Addon für irgend eine weitere Verwendung gespeichert wurde. Für diesen Fall habe ich eine sehr aufwendige Methode entwickelt, um die Nutzung des Makro-Fensters zu tracken und die Erstellung/Umbenennung eines Makros zu tracken und dementsprechend die ganze Addon-Datenbank anzupassen. Das sollte eigentlich nicht notwendig sein und das räumt auch immer noch nicht das Problem mit doppelten oder mehrfachen Makro-Namen aus dem Weg.
Was möchte ich erreichen, bzw. warum mache ich mir hier die Mühe?
- Ich programmiere gerne Addons und würde meine Addons gerne in bester Qualität abliefern.
- Vielleicht habe ich etwas übersehen und man kann mich in die richtige Richtung weisen.
- Sollte das nicht der Fall sein und ich habe die API-Situation so korrekt erfasst, wünsche ich mir eine Verbesserung der entsprechenden API-Funktionen oder wenigstens einen Bluepost mit einem vernünftigen Kommentar dazu (kein „vielen Dank, wir geben das weiter“ und dann hört man nie wieder davon), denn
- ich bin wahrscheinlich nicht der einzige, der vielleicht schon mal darüber gestolpert ist und sich entweder durch die Diskussion hier oder durch eine Verbesserung der API bereichert fühlt.
Grüße und ich wünsche schon mal ein schönes Wochenende.
Saruun
