Druide Powershift Makro

Hi,

ich habe gestern versucht ein Makro zu erstellen, welches einen Powershift ausführt, egal für welche Form. Per Google habe ich dazu dann das hier gefunden:

/cast [stance:1] !Bear Form
/cast [stance:3] !Aquatic Form
/cast [stance:2] !Cat Form
/cast [stance:3] !Travel Form
/cast [stance:5] !Moonkin Form

Das funktioniert nur leider nicht, weil man in Classic erst /cancelform machen muss um erneut in eine Tierform zu wechseln. Das Problem an der Sache ist: wenn man zuerst /cancelform macht, funktionieren die Conditions bei den /cast Befehlen nicht mehr, weil man eben nicht mehr in einer Stance ist.

Ich habe schon versucht mit einem lua Script, was dann per /run läuft, zuerst die Form herauszufinden und wollte dann die Form abbrechen und entsprechend neu casten. Dabei tauchte eine Meldung auf, dass das Makro gestoppt wurde weil es eine Funktion verwendet, die nur dem Blizzard UI vorbehalten ist. Funnktioniert also in einem lua Script nicht.

Meine Frage: gibt es bei Makros eine Möglichkeit zwei unterschiedliche Befehle auszuführen, wenn eine (wirklich nur EINE) Bedinung zutrifft?

Ich kenne die Syntax für Makros nicht wirklich. Was ich probiert habe war das hier:

/cancelform [form:1] cast Bearform
oder
/cancelform [form:1]; Bearform

Das funktioniert nur leider alles nicht, was irgendwie auch zu erwarten war.
Aktuell habe ich einfach:

/cancelform
/cast Bearform

Das funktioniert, allerdings nur für den Bär. Da müsste ich dann für jede Form ein eigenes Makro bauen und würde am Ende mindestens 4 Buttons dafür in Gebrauch haben müssen. Damit könnte ich zwar eigentlich auch leben, ist aber schon etwas umständlich.

https://us.forums.blizzard.com/en/wow/t/totally-pawesome-druid-macros-tested-in-beta-and-ready-for-classic/255251

Schau mal hier, ein wunderbare Sammlung aller möglichen Druiden-Makros für Classic. :slight_smile:

1 Like

Da ist leider auch nicht das dabei was ich suche (vermutlich ist es einfach nicht mehr möglich), aber trotzdem vielen Dank, da ist einiges dabei was man gut brauchen kann :slight_smile:

Ahhh verstehe, du möchtest also einen Button haben, mit dem du die aktuelle Form verlässt, und dann sofort wieder in die zuletzt genutzte Form zurück-shiftest?
Puh, da müsste ich auch erstmal recherchieren…

Ja, das wäre eigentlich mein Wunsch gewesen. Ich befürchte aber, dass das in Classic nicht wirklich funktioniert.

Ich habe es, wie gesagt, selbst schon mit einem lua script probiert, wo ich dann CastSpellByName() nutzen wollte um wieder in die Form zu wechseln. Diese Funktion ist aber dem Blizzard UI vorbehalten und kann von Makros oder Addons scheinbar nicht verwendet werden. Eine andere Möglichkeit das in lua zu machen kenne ich nicht und Makros alleine sind scheinbar nicht mächtig genug.

Was man so bei Google findet, hab ich weitestgehend alles ausprobiert oder ausgeschlossen, weil es entweder ohne /cancelform gemacht wurde (was nicht funktioniert), oder weil es ebenfalls CastSpellByName() nutzt.

Ich versteh nicht ganz was jetzt genau das Macro machen soll? o.O

Es soll im Grunde nur genau die Form wieder aktivieren, in der man sich gerade schon befindet. Das nennt sich dann Powershifting und wird Genutzt um bei der Katze in Verbindung mit einem Skill und/oder dem Wolfshelm Energie zu regenerieren oder generell um Bewegungseinschränkungen wie Netz zu brechen.

Wie gesagt, für jede Form einzeln ein solches Makro erstellen ist kein Problem, ich hätte aber eigentlich gerne ein Makro, welches alle Formen abdeckt, damit ich dafür nur einen Button im Interface brauch. Das scheint aber mit der aktuellen API leider nicht zu funktionieren.

Kannst du mir mal das 1.12 Macro posten? Vielleicht kann ichs übersetzen. :wink:

Findest du im Eingangspost (direkt das erste Makro dort). Würd mich freuen wenn das jemand hinbekommen kann.

Wie gesagt: das Problem am 1.12 Makro ist, dass man nicht einfach die Form casten kann, in der man sich schon befindet. Man muss vorher /cancelform machen was aber dazu führt, dass das Makro danach nicht mehr weiß, welche Form aktiv war.

Das meinst du? Das ist aber kein 1.12 Script-Macro :open_mouth:

Achso den lua Versuch meinst du.
Der hat mit 1.12 nichts zu tun. Ich hab das versucht direkt für 1.13 zu machen.

Den Schnipsel habe ich leider nicht mehr, sah aber irgendwie so aus:

/run stance = GetShapeshiftForm(); CancelShapeshiftForm(); if index == 1 then CastSpellByName(“Bearform”); end

Ich hab eben gesehen, es gibt wohl noch einen CastShapeshiftForm()… damit probier ich gleich nochmal herum.

Das wird alles nicht funktionieren, da sämtliche dieser Funktionen geschützt sind und damit nur von Blizzard genutzt werden können.
Zum Wirken von Fähigkeiten funktionieren ausschließlich die Makrobefehle, d.h./cast, /castsequence, usw.

Jup, das hatte ich ja schon gemerkt… das war nur nochmal für Legogestein :wink:

Was genau soll denn der „index“ sein? Ist dass das „stance“ von GetShapeShiftForm()? (Das funzt auf PServern übrigens auch nicht… :wink: )

Wenn ich es richtig verstehe soll das Macro sich praktisch die Form merken und dann nach Cancel wieder die gleiche Form casten? Also z.B. um bewegungseinschränkende Effekte zu clearen?

Und das geht in Retail? Das geht ja nichtmal in Vanilla! :flushed:

In Vanilla wäre das durchaus möglich gewesen, sofern man innerhalb eines Makros genügend Platz für eine umfangreiche Funktion gefunden hätte. Da das aber über 13 Jahre her ist, ist das aber ja nicht mehr relevant. :wink:

Und nein, das funktioniert in Retail auch nicht (mehr). Bis Anfang Legion war das aber sogar sehr einfach möglich, da Blizzard das speziell mit dem Ausrufezeichen vor den Fähigkeitennamen implementiert hatte.

Ok also mit Vanilla meinte ich in dem Fall die 1.12 PServer Version. Ob das früher ging künstlich ne LUA-Schleife zu erzeugen die praktisch sowas “speichert” keine Ahnung. Damals war ich zu doof, auf PServern wüsste ich nicht wie ich das umsetzen sollte.

Das dürfte auch auf P-Servern funktionieren. Ob das jetzt genau SO funktioniert, keine Ahnung. Aber auch dort dürfte es kein Problem sein Variabeln zu setzen und diese später auszuwerten. Das ist übrigens dann keine Schleife :stuck_out_tongue:

Spielt für mich aber auch keine Rolle. Auf P-Servern spiele ich eh nicht.

Das Problem besteht darin dass du speichern müsstest welche Form du VOR dem Cancel hattest (wenn ich richtig vestehe was du haben willst). Das geht auch in der 1.12 API nur über extreme Umwege und dann würde dir für dein obiges Macro wahrscheinlich die komplette Zeichenzahl aller Macros in Clasic nicht reichen.

Aber vielleicht vesteh ich dich auch falsch. :slight_smile:


Und das mit PServer ist interessant für mich weil die alte API letztlich LUA war und ich LUA kann. Die neue API kann ich zwar nutzen aber ich finde es (für mich) viel schwere aus deinem obigen Macro rauszulesen was genau du anstellen wolltest. :slight_smile:
Heißt wenn du mir das Macro in 1.12 Version gezeigt hättest hätte ich gewusst worum es geht und ob das geht. :slight_smile:

Ich muss es nur in eine Variable schreiben um diese Info nach dem Canceln der Form noch zu haben. Und das ist in lua alles andere als Umständlich.

Grundsätzlich so:

bla = 1; <-- ist eine globale Variable
local bla = 1; <-- ist eine lokale Variable, die für mein Script auch ausgereicht hätte

Das ganze hat auch nichts mit der API Version zu tun. Auch die neue API Version ist im Grunde lua. Es liegt mir fern mich hier profilieren zu wollen aber ich bin zufällig Programmierer von Beruf. Ich kenn mich mit der Materie ein wenig aus :stuck_out_tongue:

Womit ich mich leider nicht auskenne ist die API von WoW, weil die auch nirgends mal vernünftig dokumentiert ist… Aber scheinbar geht es einfach nicht mehr. Wunder mich auch nicht, denn CastSpellByName() zu erlauben würde es einfach machen komplexe Rotationen mit nur einem Button auszuführen.

Und hier liegt das Problem. Ein 1.12 Macro wird am Stück geladen. Du kannst darin nichts speichern. Es testet alle variablen, führt dann das aus was funktioniert und „verpufft“ dann im nichts. Es gibt keinen Zwischenspeicher zwischen mehrfacher Nutzung der Macros wie du ihn bräuchtest.

Und auch CastSpellByName() würde da nicht helfen, denn das ist nichts anderes als /cast XY nur im script. :wink:
Ein MAcro ist sozusagen ein abgeschlossenes Mini Programm. Du bräuchtest ein Command das sagt „SaveVariableX()“ und „LoadVariableX()“ also Macro-übergreifend. :man_shrugging:

Kann immer noch sein dass ich dich falsch verstehe, aber so wie ich denke dass du dein Macro gestalten willst geht das weder mit der alten noch der neuen Macro-API.