Posts by chazz

    Tell me how to get the value of the maximum durability of an item in the inventory? I found that in zBag addon get this value by using Sol library.
    The wiki even has a mention of the Sol.data.items.GetBagItemData function from that library and I found an example of use there, but it doesn't work when I try to apply it.


    Code
    1. get_item_dura = function(slot)
    2. return tonumber("0x"..GetBagItemLink(GetBagItemInfo(slot), false):match(":%x+ %d %x+(%x%x) "))
    3. end

    Das von tarkan447 genannte Beispiel bezog sich nicht auf das AutoLogin-Addon an sich, sondern auf den dortigen Beitrag mit einer Hilfestellung zur allgemeinen Fehlersuche.


    Code
    1. /run for _, v in pairs({pcall(loadfile, Dateipfad)}) do DEFAULT_CHAT_FRAME:AddMessage(tostring(v)) end


    Hier muss Dateipfad durch den Pfad zu einer Lua-Datei ersetzt werden. Damit kann dann im Spiel getestet werden, ob die Datei korrekt geladen werden kann oder ob ein Fehler dabei auftritt (z. B. dass sie gar nicht erst gefunden wird).

    Darum auch seine Frage nach einer Liste der installierten Addons, damit entsprechende Befehle vorbereitet werden können :)


    Für dich wäre z. B. das hier einen Versuch wert (gegebenenfalls die genaue Schreibweise an deine Ordnerstruktur anpassen):

    Code
    1. /run for _, v in pairs({pcall(loadfile, "Interface\\Addons\\SaveUIPos\\SaveUIPos.lua")}) do DEFAULT_CHAT_FRAME:AddMessage(tostring(v)) end

    Leider muss man hier beachten, dass das Spiel eine kleine Zeitspanne braucht, bis ein Befehl wie das Verschieben von Spielern wirklich umgesetzt wird. Man könnte also jedes Mal darauf warten bis das entsprechende Event ausgelöst wurde und dann die Funktion fortsetzen, oder man macht sich das Leben durch einen kleinen Kniff etwas leichter, indem man die Sortierfunktion einfach zweimal hintereinander mit einer kurzen Pause dazwischen ausführt.


    In einem Standardmakro reicht der Platz dafür leider nicht aus, darum hier nur die einzelnen Funktionen und der grobe Aufbau.


    Folgender Code kommt in ein kleines Addon:


    Der Aufruf im Spiel erfolgt dann so:

    Code
    1. /run set_raid_position()
    2. /wait 1
    3. /run set_raid_position()
    4. /wait 1
    5. /run set_raid_attacker()


    Natürlich kann man das Ganze je nach persönlichem Geschmack noch in einen eigenen Namespace packen und die Positionierungsdaten als Argument an die jeweiligen Funktionen übergeben, aber ich wollte hier nur die prinzipielle Idee zeigen.

    Für den Angreifer (SpielerName durch den gewünschten Namen ersetzen):

    Code
    1. /run if not (UnitIsRaidAssistant("player") or UnitIsRaidLeader("player")) then return nil end for i = 1, 36 do if UnitName("raid" .. i) == "SpielerName" then if not UnitIsRaidMainAttacker("raid" .. i) then SwithRaidMainAttacker(i, true) end end end


    Die Abfrage ob ein Spieler der Hauptangreifer ist, kann dann mit einer weiteren Schleife und UnitIsRaidMainAttacker(index) abgefragt werden. Der passende Wert für index wird analog dem obigen Beispiel festgelegt.




    Itemcooldown (Item1 und Item2 durch die jeweiligen Items ersetzen):


    Code
    1. /run local item_cd = function(item) for i = 1, 180 do local s, _, name = GetBagItemInfo(i) if name == item then print(string.format("%s: %.1f", item, ({GetBagItemCooldown(s)})[2])) break end end end item_cd("Item1") item_cd("Item2")
    Code
    1. /run if not (UnitIsRaidAssistant("player") or UnitIsRaidLeader("player")) then return nil end local list = {Char1 = pos1, Char2 = pos2} for i = 1, 36 do local pos = list[UnitName("raid" .. i)] if pos then MoveRaidMember(i, pos) end end


    Anstelle von Char1 und pos1 dann den Spielernamen und die gewünschte Position eintragen. Analog für Char2 und pos2.

    Kann auch, je nach Platz im Makro, beliebig erweitert werden.

    Bei mir funktioniert dein Makro ohne Probleme (run statt script kommt aufs Gleiche raus).

    Code
    1. /run CastSpellByName("Saces' Knackzauber")




    Die allgemeine Abfrage für Psi sieht so aus:

    Code
    1. local psi_punkte, status = GetSoulPoint() -- status = 0, 1, 2 (Normal / Willenskraftklinge / Willenskraftkonstrukt)


    Mit dem Knackzauber habe ich auch hin und wieder Probleme, hauptsächlich weil er keinen CD hat und der Buff etwas Zeit braucht, bis er auf dem Boss ist, sodass zu schnelles Auslösen ohne weitere Schutzmaßnahmen (z. B. einen kurzen Timer) gerne mal zu viel Psi verbrauchen würde.

    Meistens löse ich den tatsächlich von Hand aus.


    Für deine zweite Frage:

    Code
    1. /run if GetSoulPoint() == 6 then SendChatMessage("Ich habe 6 Psi", "party") end

    Hatte für Skinsuchen mal ein Miniaddon gebastelt - trotz des Names auch für Rüstungsteile.

    War es evtl das, was du meintest?

    Files

    The effect of Natural Spring does heal the own character. The healing received also depends on the weapon you use - haven't tested heal bonus in general but it does not seem that good using regular chain gear.



    I don't think this skill will keep you alive by itself, however as a Warden you also have Vitality Explosion which heals up to 30% of your life every 20 seconds if used correctly.


    If you plan to play Warden/Druid you'll have the Druid's healing skills, too. That should be more than enough for solo play.

    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?

    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)


    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.

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


    Das ist der Umhang der Kühnheit von Aoth. Den gibts im Albtraum von Varanas.


    Auch wenn ich keinen Champ spiele... eigentlich sollten die durch ihren Buff mit Whitehits genügend Zorn aufbauen können. Lasse mich da aber auch gern eines Besseren belehren.

    Was gerade so in ein Standardmakro passt:

    Code
    1. /run for _,v in pairs({{1,1,240181},{2,1,242443},{1,2,201545},{3,1,203944},{3,3,"SC_DUELIST_REWARD"},{3,4,244215}}) do local n,c,m=TEXT(tonumber(v[3]) and "Sys"..v[3].."_name" or v[3]),GetPlayerPointInfo(v[1],v[2],"") print(n..": "..c.." | "..m) end


    Wenn man längere Makros zur Verfügung hat:

    Code
    1. /run for _,v in pairs({{1,1,240181},{2,1,242443},{1,2,201545},{3,1,203944},{3,3,"SC_DUELIST_REWARD"},{3,4,244215}}) do local n,c,m=TEXT(tonumber(v[3]) and "Sys"..v[3].."_name" or v[3]),GetPlayerPointInfo(v[1],v[2],"") local f=(m>0 and c>=m) and "ff0000" or "00ff00" print(n..": |cff"..f..c.." ("..m..")|r") end

    Im Makroeditor steht dir die gesamte Bandbreite der API zur Verfügung.


    PlaySoundByPath funktioniert dort auch, allerdings darf in den Audioeinstellungen der "Interface"-Regler nicht auf 0 stehen.

    Try increasing the waiting duration between each step. Especially .2 after the title change might be too short sometimes.

    I personally use 1.2 most of the time just to be safe.