WoW Spellcooldown auslesen (AutoIT)

07/11/2010 18:22 mickol#1
Hallo

Ich würde gern meine Spell Cooldowns auslesen, hab dazu hab ich schon einiges gefunden, aber nur mit den alten Offsets, daher meine Frage:

Hat hier jemand die aktuellen SpellCooldown Offsets oder weiß einer ob die stimmen die ich haben?

spellsOnCooldown = 0x00D3F5A4

thx
07/11/2010 19:30 Bl@ze!#2
Du kannst auch lua_dostring benutzen und die Funktion [Only registered and activated users can see links. Click Here To Register...] benutzen.

Für welche Version ist denn dein Offset? Dann besorg ich dir das für die neue, oder reverse es eben fix, je nachdem wie schnell du antwortest.

Edit:
Dein Pointer ist richtig.

oCooldownPointer = 0x00D3F5A4

Code:
private float GetSpellCD(unsigned int aSpellID) {

   // First Object
   unsigned int currentObj = readUInt(proc(), (oCooldownPointer + 0x8);

   // Liste durchgehen
  while (.....)
  {
     unsigned int currentSpell = readUint(proc(), currentObj + 0x8);
     if (currentSpell == aSpell) {
     // wir haben den spell gefunden
     int nStart = readInt(proc(), (currentObj + 0x10)

     // ....
         

     }
  }


}
Das sollte dir einen kleinen Denkanstoß geben.

NextObject = 0x8
StartTime = 0x10
CD1 = 0x14,
CD2 = 0x20

Berechnen kannst du den Kram, genau wie auch auf der API Seite beschrieben. Ich zitiere:

Quote:
local start, duration, enabled = GetSpellCooldown("Presence of Mind");
if enabled == 0 then
DEFAULT_CHAT_FRAME:AddMessage("Presence of Mind is currently active, use it and wait " .. duration .. " seconds for the next one.");
elseif ( start > 0 and duration > 0) then
DEFAULT_CHAT_FRAME:AddMessage("Presence of Mind is cooling down, wait " .. (start + duration - GetTime()) .. " seconds for the next one.");
else
DEFAULT_CHAT_FRAME:AddMessage("Presence of Mind is ready.");
end
07/11/2010 19:44 mickol#3
ich bräuchte den offset für version 3.3.5a, wäre super wenn du helfen könntest, thx
07/11/2010 20:22 mickol#4
super, danke dir, ich werde mal schauen was ich damit machen kann!!!
07/11/2010 21:18 mickol#5
hmm, irgendwie will das nicht, hier die funktion (hab die auf AutoIt umgebaut), manches ist noch auskommentiert, da ich am testen bin, mein derzeitiges Problem ist, dass ich schon nach dem ersten _BMReadMemory nur ein "0" zurückbekomme, ist das richtig? Soll ich da einfach auf das nächste Object switchen? In einem anderen Forum wird geschrieben das man mit 0x4 das nächset Object erreicht nicht mit 0x8, bin jetzt bisserl verwirrt :(

Code:
func IsSpellReady($spellid)

$spellsOnCooldown = 0x00D3F5A4 

$currentListObject = _BMReadMemory($hProcess, $spellsOnCooldown + 0x8, "uint")

;while (($currentListObject <> 0) AND (($currentListObject & 1) = 0))
  while 1
  $currentSpellId = _BMReadMemory($hProcess, $currentListObject + 0x8, "uint");
      if ($currentSpellId == $spellid) then
           
        $start = _BMReadMemory($hProcess, $currentListObject + 0x10, "uint");

        $cd1 = _BMReadMemory($hProcess, $currentListObject + 0x14, "uint");
        $cd2 = _BMReadMemory($hProcess, $currentListObject + 0x20, "uint");

        $length = $cd1 + $cd2;
        $globalLength = _BMReadMemory($hProcess, $currentListObject + 0x2C, "uint");

        ;$cdleft = Math.Max(Math.Max(length, globalLength) - (Environment.TickCount - start), 0);
                    

        ;if ($cdleft <> 0) then
        ;return 0;
        ;endif

      endif

  $currentListObject = _BMReadMemory($hProcess, $currentListObject + 4, "uint");
  wend
  return 1;
EndFunc
07/11/2010 22:47 mickol#6
kann mir sonst noch wer helfen? bekomme hier einfach keinen Wert zurückgeliefert?

$currentListObject = _BMReadMemory($hProcess, $spellsOnCooldown + 0x8, "uint")

thx
07/12/2010 05:55 swords#7
Nice work in AutoIt there. I am an AutoItter myself, and got to say that's impressive.
07/12/2010 10:46 telcy#8
Quote:
Originally Posted by mickol View Post
kann mir sonst noch wer helfen? bekomme hier einfach keinen Wert zurückgeliefert?

$currentListObject = _BMReadMemory($hProcess, $spellsOnCooldown + 0x8, "uint")

thx
NextObject = 0x3C, // 3.3.5
FirstObject = 0xAC,
07/12/2010 11:05 Bl@ze!#9
Quote:
Originally Posted by telcy View Post
NextObject = 0x3C, // 3.3.5
FirstObject = 0xAC,
Das ist falsch, das sind die für die Objektliste der Objects und nicht der Spell liste.

Ich schau nach der Arbeit nochmal nach, kann momentan nicht. ;)
07/12/2010 18:41 mickol#10
scheinbar ist der Offset doch falsch, verwende nun folgenden und bekommen endlich die spellid zurückgeliefert

oCooldownPointer = 0x00D3F5A8

bin mal am testen, ob es nun endlich klappt!

Edit:

gut der war auch noch falsch, hab weiter probiert, der scheint jetzt richtig zu sein, gibt jetzt die cooldowns der reihenach zurück!

oCooldownPointer = 0x00D3F5AC
07/12/2010 19:58 mickol#11
derzeit funktioniert es, ich hoff das bleibt auch so :D
07/16/2010 15:54 Endecs#12
Quote:
Originally Posted by mickol View Post
derzeit funktioniert es, ich hoff das bleibt auch so :D
Bis zum nächsten wow update sollte es funktionieren.