Makro "Wait" von variable abgreifen

Wilkommen im Forum von Runes of Magic DE

Regeln und Richtlinien: Spielregeln - Community-Richtlinien - Allgemeine Nutzungsbedingungen - RoM Servers Status

Kontaktmöglichkeiten: Support System - Discord
  • Hallo zusammen,


    ich benutze folgendes Makro für meinen Alpi-Umhang:





    Ist es möglich, dass ich CurrentCD i-wie abgreife und er eine Ausgabe ala "/script SendSystemMsg(TEXT("Damage-Cape READY"))"" macht?

    Gruß

  • Viele Addons beinhalten Timerfunktionen, die man für sowas benutzen kann.


  • okay, pylib ist ein extra addon wenn ich des jetzt richtig im kopf hab? Was muss ich denn dann damit machen?


    Ich hab mir des addon gerade mal geladen und versteh da tatsächlich gar nichts :D

    Edited once, last by Spook ().

  • Es sollte reichen, wenn du es in deinen Addonordner packst. Daran ändern musst du nichts.

    Wenn alles funktioniert, dann stellt es für andere Zwecke bestimmte Funktionen bereit.


    Den enthaltenen Timer kannst du z. B. so testen:


    Code
    1. /run local _, py_timer = pylib.GetLibraries() py_timer.Add(5, function() DEFAULT_CHAT_FRAME:AddMessage("Nachricht nach 5 Sekunden") end, "Timer Test", 1)


    Es gib natürlich auch noch andere Addons, die solche Funktionen bereitstellen, aber das ist evtl. eines der häufigeren Addons.

  • Die frage ist jetzt nur, was muss ich mit deinem ersten Teil denn da jetzt machen?

    Hab die funktionsweise des addons nicht so ganz verstanden. Also wie ich des für Makros dann gut nutzen kann.

  • Sobald CurrentCD abgefragt wurde, kannst du das als Dauer für einen Timer benutzen. Sobald der abgelaufen ist, wird eine bestimmte Funktion aufgerufen, in dem Fall die Nachricht, dass der CD vorbei ist:


    Code
    1. ({pylib.GetLibraries()})[2].Add(CurrentCD, function() ChatFrame1:AddMessage("Umhang bereit!", 0, 1, 0) end, "UmhangCD", 1)


    Allgemein ist das Schema das hier (egal ob im Makro oder Addon):


    Code
    1. -- Die benötigten Module importieren. In dem Fall wäre die ausführliche Version
    2. local _, py_timer = pylib.GetLibraries()
    3. -- Die gewünschte Funktion des Moduls aufrufen. Hier äquivalent zu
    4. py_timer.Add(Dauer, Funktion, TimerID, Wiederholungen)


    Edited once, last by chazz ().

  • Hi,


    GetBagItemCooldown ist (anscheinend) so nicht (mehr) nutzbar. Kann man prüfen per:


    Code
    1. /run itm="Umhang der Kühnheit von Aoth";for i=1,240,1 do _,un,_,_=GetGoodsItemInfo(i);if un==itm then MCD, CCD = GetBagItemCooldown(GetBagItemInfo(i)) DEFAULT_CHAT_FRAME:AddMessage(i .. MCD .. CCD .. un) break end end


    Rückgabe Slot,00 == MCD =0 und CCD =0, Item-Name in Slot.



    Der cooldown des Umhangs ist bekannt mit 120 Sekunden, das folgende Makro funktioniert mit der festen Sekundenangabe und Sytem-Meldung in gelb.



    Code
    1. /run itm="Umhang der Kühnheit von Aoth";for i=1,240,1 do _,un,_,_=GetGoodsItemInfo(i);if un==itm then uid=i;break end end
    2. /run UseItemByName(itm);
    3. /wait 0.3
    4. /run UseEquipmentItem(5);
    5. /wait 0.4
    6. /run UseBagItem(uid);
    7. /run local _, py_timer = pylib.GetLibraries() py_timer.Add(120, function() SendSystemMsg("Zorn-Umhang wieder frei") end, "UmhangCD", 1)

    Viel Spass weiterhin,

    Zwergtarkan, Asteria

  • GetBagItemCooldown ist (anscheinend) so nicht (mehr) nutzbar. Kann man prüfen per:

    Das stimmt nicht. GetGoodsItemInfo benutzt andere Indizes als GetBagItemInfo und GetBagItemCooldown und kann deshalb nicht für diese Abfrage verwendet werden.


    Spook möchtest du uns evtl. deinen Makrocode zeigen (evtl. auch als PM). In meinen Tests hat es funktioniert; vllt. hat sich also irgendwo ein Tippfehler eingeschlichen?

  • Da war doch was .... Okay, ich hab den Umhang im Arkanen liegen.


    Das folgende Makro funktioniert, wenn das Item im Beutel ist UND ExtendedMacroIcons (Makrotext maximal 767 Zeichen) installiert ist.


    Code
    1. /run itm="Umhang der Kühnheit von Aoth";for i=1,240,1 do _,un,_,_=GetGoodsItemInfo(i);if un==itm then uid=i;break end end
    2. /run UseItemByName(itm);
    3. /wait 0.3
    4. /run UseEquipmentItem(5);
    5. /wait 0.4
    6. /run UseBagItem(uid);
    7. /wait 0.3
    8. /run itm="Umhang der Kühnheit von Aoth" for i=1,180 do local _,_,name,_,_,_=GetBagItemInfo(i) if name==itm then maxCD, CurrentCD = GetBagItemCooldown(GetBagItemInfo(i)) break end end _, py_timer = pylib.GetLibraries() py_timer.Add(CurrentCD, function() SendSystemMsg("Zorn-Umhang wieder frei") end, "UmhangCD", 1)

    Der Trick ist das zusätzliche "/wait 0.3" - ohne, bekomme ich eine "0" als CurrentCD zurück. Makro-Länge ist 533.


    Viel Spaß,

    Zwergtarkan, Asteria

  • Warum so kompliziert?



    Die Loops durch den Rucksack mit If-Abfragen sind unnötige Zeitfresser.

    Der CD der Umhänge ist fest 120, muss für die WAITs leider in 2*60 gesplittet werden mit einem dummy-Command dazwischen.

    Wenn man es mit Addon macht, könnte man auch nach dem Anziehen/Auslösen des Zornumhangs mit diesem Code dynamisch den CD abfragen:

    Code
    1. /run _,remaining = GetEquipItemCooldown(5)
    2. /wait .3
    3. /script ChatFrame1:AddMessage(remaining)


    Achja, das '/setcooldown' entspricht dem Setzen des CD auf dem Makroslot wie es im OP das '/script MakroCooldown(..)' macht (wird ermöglicht durch das Addon MacroCooldowns).

  • Brachialys:


    Du lässt den Umhang an, und das Makro sucht den Umhang von Aoth, zieht ihn an und equipped wieder den zuvor benutzten , besseren Umhang. Die letzte Abfrage sucht den Umhang (ja, wieder) und gibt nach Ende des Cooldown's die Meldung aus "wieder frei."


    Diese Abfrage ist durch einfaches Ändern des "itm=..." auch standalone für jedes mögliche Teil im Beutel mit Cooldown benutzbar (BK-Handschuhe zum Beispiel), ohne den genauen Cooldown zu kennen.


    Zwergtarkan, Asteria

  • GetBagItemCooldown ist (anscheinend) so nicht (mehr) nutzbar. Kann man prüfen per:

    Das stimmt nicht. GetGoodsItemInfo benutzt andere Indizes als GetBagItemInfo und GetBagItemCooldown und kann deshalb nicht für diese Abfrage verwendet werden.


    Spook möchtest du uns evtl. deinen Makrocode zeigen (evtl. auch als PM). In meinen Tests hat es funktioniert; vllt. hat sich also irgendwo ein Tippfehler eingeschlichen?



    Öhm, hab ich doch ganz oben gepostet, meinst du den?

    Bin etwas überfordert was ihr da alles macht xD

  • ja das ist mir klar aber der Code tut einem ja beim Anschauen in den Augen weh ;)

    Wenn man in Zeile 1 schon die Umhangposition mit uid ausliest und dann einmal hin und her-tauscht, dann kann man in Zeile 8 auch einfach uid benutzen, anstatt erneut danach zu suchen, m.a.W. Zeile 8 kannste in jedem Fall kürzen zu

    Code
    1. /run maxCD,CurrentCD = GetBagItemCooldown(uid); _,py_timer = pylib.GetLibraries() py_timer.Add(CurrentCD, function() SendSystemMsg("Zorn-Umhang wieder frei") end, "UmhangCD", 1)

    oder du holst dir den CD wie beschrieben halt per GetEquipItemCooldown(5), dann muss man sich nichtmal auf die Rucksackposition verlassen (dem Spiel ist wie gesagt bei UseItemByName egal, ob ers ausm Rucksack oder ausm Umwandler nimmt, warum also künstlich schlechteren Code schreiben):

    *UPDATE: läuft so nicht, siehe folgende Postings für laufendes Makro dieser Art*


    Gruß

  • Er gibt mir aber jetzt instant nach dem benutzen die SysMsg aus. Wenn ich nochmal auf des Makro drück, während der CD läuft macht ers erst später. Kann vielleicht sein, dass des letzte wait höher gesetzt werden muss?!?


    Was macht eigentlich des end, "UmhangCD", 1) UmhangCD hier?

    Edit:

    Ein längeres Wait verändert aktuell nichts, er gibt es immernoch direkt aus

  • ich habs nicht auf Sauberkeit getestet, kann ich aber mal machen.

    Die Zeile muss man in etwa so lesen:

    Code
    1. /run
    2. _,py_timer = pylib.GetLibraries()
    3. py_timer.Add(
    4. CurrentCD,
    5. function() SendSystemMsg("Zorn-Umhang wieder frei") end,
    6. "UmhangCD",
    7. 1
    8. )

    das END gehört zu der kleinen Inline-function, die wiederum einer der 4 Parameter des Aufrufs der timer-Funktion ist (das hab ich selbst nicht geprüft, da verlass ich mich auf die Vorposter.


    Gruß

  • ok, habs getestet, und so funktoniert es bei mir. :thumbup:

    Lag also entweder an dem 'local', das ich vergessen hatte oder an einem der WAITs. Welches man da noch verkürzen kann, musste mal selbst testen.

  • hmm,


    einfach mal die Waits zählen. bis das Makro fertig ist.


    Also

    a) die waits jedesmal um 0,1 Reduzieren, bis es nicht mehr geht.

    b) die Zeilen 7 und 8 löschen und - auch wenn es dir nicht gefällt - den "getCooldown-time" durch den search ersetzen


    Code
    1. /run itm="Umhang der Kühnheit von Aoth" _,_,cape=GetInventoryItemDurable("player",5)
    2. /wait .3
    3. /run UseItemByName(itm)
    4. /wait .3
    5. /run UseEquipmentItem(5)
    6. /wait .4
    7. /run UseItemByName(cape)
    8. /wait .3
    9. /run itm="Umhang der Kühnheit von Aoth" for i=1,240 do local _,_,name,_,_,_=GetBagItemInfo(i) if name==itm then maxCD, CurrentCD = GetBagItemCooldown(GetBagItemInfo(i)) break end end _, py_timer = pylib.GetLibraries() py_timer.Add(CurrentCD, function() SendSystemMsg("Zorn-Umhang wieder frei") end, "UmhangCD", 1)


    Warum? Das spart vorneweg 1,4 Sekunden, bzw mit meinen (getesteten) Werten über 2 Sekunden, bis er den alten Umhang wieder anhat.


    btw aus der pylib: "me.Add = function(delay, script, key, num, noOverride, ...)"


    delay = CurrentCD

    script = function() SendSystemMsg("Zorn-Umhang wieder frei") end^

    key = "UmhangCD"

    num = 1

    noOverride = undefined, aktiv


    Da "noOverride" = aktiv und wenn der delay noch gültig ist, bringt ein zweiter Lauf keine neue Meldung, da der Eintrag nicht überschrieben wird.

    Ohne das zusätzliche wait vor der Cooldown-Abfrage, ist aber das Makro einfach zu schnell und das Spiel hat diese Information noch nicht.


    Und weil der delay 0 war, war der timer sofort fertig und die "zweite" Benutzung des Makro's brachte eine Meldung.


    Wenn du meine beiden waits (0.4 + 0.3) hierzu addierst, kommst du auf den wait 0.7 bei Dir, um die CooldownTime auslesen zu können, nur daß der alte Umhang 1,4 Sekunden früher wieder an ist.


    Da ich von 1 bis 240 suche, kann der Umhang auch im Arkanen liegen.


    Viel Spass beim Ausprobieren.


    Zwergtarkan, Asteria

    Edited 3 times, last by tarkan447 ().

  • Unsinn, du gewinnst so natürlich keine Zeit, ist aber auch egal, ist ja kein Wettbewerb.

    Die Infos sind jedenfalls vorhanden, kann sich jeder sein Lieblingsmakro zusammenbasteln und seine WAITs so minimieren, dass es bei ihm noch läuft.

    Mir war nur wichtig, zu klären, dass man bestimmte Dinge auch besser coden kann. Soll jeder IFs LOOPen wie er möchte, wenns ihm Spaß macht ;P