[3.1.3] [Info] Getting Spell Cooldowns menu

User Tag List

Page 2 of 3 FirstFirst 123 LastLast
Results 16 to 30 of 38
  1. #16
    Oowafas's Avatar Member
    Reputation
    14
    Join Date
    Jan 2009
    Posts
    31
    Thanks G/R
    0/0
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Do the spells you're testing with only have a global cooldown?

    [3.1.3] [Info] Getting Spell Cooldowns
  2. #17
    ~Unknown~'s Avatar Contributor
    Reputation
    193
    Join Date
    Jan 2009
    Posts
    211
    Thanks G/R
    0/5
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Oowafas View Post
    Do the spells you're testing with only have a global cooldown?
    Well I had it output to a log all the spells in the cooldown list and all of them were 0 and their cooldowns ranged from a few seconds to 5 minutes.

  3. #18
    ~Unknown~'s Avatar Contributor
    Reputation
    193
    Join Date
    Jan 2009
    Posts
    211
    Thanks G/R
    0/5
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Code:
    uint currentListObject = Memory.ReadUInt(0x13256C8 + 0x8);
    This appears to be the new address for this function and the offsets in the first post seem to still be the same as well. However, I still keep getting 0 for all my spells' cooldowns with 0x14. I must be doing something wrong.

  4. #19
    Gorzul's Avatar Member
    Reputation
    8
    Join Date
    May 2009
    Posts
    19
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    For spells without gcd the cooldown length is at listObject + 0x20.
    Quick and dirty solution:
    Code:
    public bool IsSpellReady(String sSpellName)
    {           
        long frequency;
        long perfCount;
        Kernel32.QueryPerformanceFrequency(out frequency);
        Kernel32.QueryPerformanceCounter(out perfCount);
    
        //Current time in ms
        long currentTime = (perfCount * 1000) / frequency;
    
        //Get first list object
        uint currentListObject = Memory.Read<uint>(0x013256C8 + 0x8);
    
        while ((currentListObject != 0) && ((currentListObject & 1) == 0))
        {
            uint spellId = Memory.Read<uint>(currentListObject + 0x8);
                        
            if (GetSpellName(spellId) == sSpellName)
            {              
    	    //Start time of the spell cooldown in ms        
                uint startTime = Memory.Read<uint>(currentListObject + 0x10);     
    
    	    //Cooldown of spells with gcd
                int cooldown1 = Memory.Read<int>(currentListObject + 0x14);
    			
    	    //Cooldown of spells without gcd
                int cooldown2 = Memory.Read<int>(currentListObject + 0x20);
    
                int cooldownLength = Math.Max(cooldown1, cooldown2);
                         
                if ((startTime + cooldownLength) > currentTime)
                {
                    return false;
                }
            }
    		
            currentListObject = Memory.Read<uint>(currentListObject + 4);
        }
    	
        return true;          
    }

  5. #20
    ~Unknown~'s Avatar Contributor
    Reputation
    193
    Join Date
    Jan 2009
    Posts
    211
    Thanks G/R
    0/5
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks a bunch Gorzul. That was exactly what I was looking for. I knew the 0x20 was in there for some reason I just never tested it lol.

  6. #21
    mordok's Avatar Member
    Reputation
    11
    Join Date
    Oct 2007
    Posts
    103
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hi I was wondering if this method got obsolete since
    uint cd = Memory.ReadUInt(currentListObject + 0x2C);
    always returns 0.

    Im trying to make a method that would return true if the spell is currently in cooldown.

    here is what im trying:
    Code:
    public Boolean IsSpellReady(uint spellid)
            {
                //Get first list object
                uint currentListObject = Memory.ReadUInt(hProcess, (spellsOnCooldown + 0x8));
    
                while ((currentListObject != 0) && ((currentListObject & 1) == 0))
                {
    
                    uint currentSpellId = Memory.ReadUInt(hProcess, currentListObject + 8);
    
                    if (currentSpellId == spellid)
                    {
                     uint cd = Memory.ReadUInt(hProcess, (currentListObject + 0x2C));
                     
    
                     if (cd!=0)
                     {
                         return false;
                     }
                     else
                     {
                         return true;
                     }
                    }
                    
    
                    //Get next list object
                    currentListObject = Memory.ReadUInt(hProcess, currentListObject + 4);
                }
    
                return true;
    
            }
    The problem of using time is that im not sure if the start time stored in the list would match the start time that you get by using
    Code:
      long frequency;
        long perfCount;
        Kernel32.QueryPerformanceFrequency(out frequency);
        Kernel32.QueryPerformanceCounter(out perfCount);
    
        //Current time in ms
        long currentTime = (perfCount * 1000) / frequency;
    And if they do match what if the cooldown increases by an external factor eg. u get silenced or if using a Death knight you use both of u runes(that increases the cd of all spells in the same talent tree).

    I searched a lot to try to find more nfo about spell cooldowns or action bar cooldows but I didnt had any luck.

    I really prefere not to use time counters nor inyection (not that im scared about it :P its just that my reading class does only reading no inyection at all)

    any ideas?
    Last edited by mordok; 10-25-2009 at 12:27 AM.
    "I'm not going to expose my methods for time bending, as i don't want to do get nerfed!"-Kynox

  7. #22
    Nesox's Avatar ★ Elder ★
    Reputation
    1280
    Join Date
    Mar 2007
    Posts
    1,238
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Some of the offsets changed afaik just use Spell_C__GetCooldown

  8. #23
    Kryso's Avatar Active Member
    Reputation
    40
    Join Date
    Jul 2009
    Posts
    97
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    List starts at 0x0133B7C0
    First item [list + 0x8]
    Next item [item + 0x4]

    Code:
    spellId = process.Read<int>( address.Offset( 0x8 ) );
    start = process.Read<int>( address.Offset( 0x10 ) );
    length = process.Read<int>( address.Offset( 0x14 ) ) + process.Read<int>( address.Offset( 0x20 ) );
    isEnabled = process.Read<byte>( address.Offset( 0x24 ) ) == 1;
    globalLength  = process.Read<int>( address.Offset( 0x2c ) );

    And for calculation of remaining time (in seconds):

    Code:
    Math.Max( Math.Max( length, globalLength ) - ( Environment.TickCount - start ), 0 ) / 1000f;
    Note that length needs 2 values. Sometimes there is negative value at 0x14 (for example Penance with glyph and talent) and you need to add value at 0x20. However if the cooldown on spell is negated completely by talents (for example Power Word: Shield) you will still get negative value even after adding value at 0x20.

  9. #24
    Robske's Avatar Contributor
    Reputation
    305
    Join Date
    May 2007
    Posts
    1,062
    Thanks G/R
    3/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Nesox View Post
    Some of the offsets changed afaik just use Spell_C__GetCooldown
    They're trying to be passive Nesox!
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding
    "I cried a little earlier when I had to poop" - Sku

  10. #25
    mordok's Avatar Member
    Reputation
    11
    Join Date
    Oct 2007
    Posts
    103
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This always returns 0 : (
    Code:
    Math.Max( Math.Max( length, globalLength ) - ( Environment.TickCount - start ), 0 ) / 1000f;
    Last edited by mordok; 10-25-2009 at 10:13 AM.
    "I'm not going to expose my methods for time bending, as i don't want to do get nerfed!"-Kynox

  11. #26
    Kryso's Avatar Active Member
    Reputation
    40
    Join Date
    Jul 2009
    Posts
    97
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    It's working fine for me http://dl.getdropbox.com/u/1799304/cooldowns.png

    Check your offsets and values you are getting from item + 0x14 and item + 0x20. I think I've read somewhere they can be different depending on CVars, but I'm not sure.

  12. #27
    mordok's Avatar Member
    Reputation
    11
    Join Date
    Oct 2007
    Posts
    103
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Well I did further testing for a Death Knight and realized the following:

    uint spellsOnCooldown = 0x0133B7C0;

    //Death Knight
    public static uint Icy_Touch_3 = 49903;
    public static uint Rune_Tap = 48982;

    When I test Icy_Touch_3 ill get the correct cooldown time but just the first time I throw the spell, once I throw it once no matter what it always return 0. (until wow decides its time to remove it from the list ^^)

    Then I tested Rune_Tap, and no matter what I do it always return 0.

    here is the method im using to test it, -1 represents not in list.

    Code:
    public float IsSpellReady2(uint spellid)
            {
    
                //Get first list object
                uint currentListObject = Memory.ReadUInt(hProcess, (spellsOnCooldown + 0x8));
    
                while ((currentListObject != 0) && ((currentListObject & 1) == 0))
                {
    
                    uint currentSpellId = Memory.ReadUInt(hProcess, currentListObject + 8);
    
                    if (currentSpellId == spellid)
                    {
                        int start = Memory.ReadInt(hProcess, (currentListObject + 0x10));
    
                        int cd1 = Memory.ReadInt(hProcess, (currentListObject + 0x14));
                        int cd2 = Memory.ReadInt(hProcess, (currentListObject + 0x20));
    
                        int length = cd1 + cd2;
                        int globalLength = Memory.ReadInt(hProcess, (currentListObject + 0x2C));
    
                        float cdleft = Math.Max(Math.Max(length, globalLength) - (Environment.TickCount - start), 0);
    
    
                        return cdleft;
                        
                    }
    
    
                    //Get next list object
                    currentListObject = Memory.ReadUInt(hProcess, currentListObject + 4);
                }
    
                return -1;
    
            }
    My guess is im messing somthing with spellIDs maby they change if spells ready and theres all ready one spell of the kind in the current list. (that would explain Gurzul used
    GetSpellName(spellId) to find it but wouldnt explain why rune tap alawys return 0)
    Last edited by mordok; 10-25-2009 at 12:01 PM.
    "I'm not going to expose my methods for time bending, as i don't want to do get nerfed!"-Kynox

  13. #28
    Kryso's Avatar Active Member
    Reputation
    40
    Join Date
    Jul 2009
    Posts
    97
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You must read the whole list. There are duplicates in the list.

    1) there can be 2 items for each spell - one for normal cooldown, one for global cooldown
    2) when the cooldown is over, wow doesn't remove it from the list immediately and IIRC it will always add new item, so for example you can have for one spell 2 entries for normal cooldown - one expired, one active

  14. #29
    mordok's Avatar Member
    Reputation
    11
    Join Date
    Oct 2007
    Posts
    103
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ill try that now, many thanks kryso you did take a lot of time to help ^^ (+rep).
    --------------------------------------------------------------------------------------------

    Allright so now I can see Ice Touch works all the time, but if I spend 2 frost runes the cd increases and thats ignored by the calculations. I guess I could check rune cds in some sort of way and add that to the method logic but thats a pitty coz it would make the method death knights only.

    Also no matter what Rune_Tap still remain always 0.

    Here is the method maby other classes can use it.
    Code:
     public float IsSpellReady2(uint spellid)
            {
    
                //Get first list object
                uint currentListObject = Memory.ReadUInt(hProcess, (spellsOnCooldown + 0x8));
    
                while ((currentListObject != 0) && ((currentListObject & 1) == 0))
                {
    
                    uint currentSpellId = Memory.ReadUInt(hProcess, currentListObject + 8);
    
                    if (currentSpellId == spellid)
                    {
                        int start = Memory.ReadInt(hProcess, (currentListObject + 0x10));
    
                        int cd1 = Memory.ReadInt(hProcess, (currentListObject + 0x14));
                        int cd2 = Memory.ReadInt(hProcess, (currentListObject + 0x20));
    
                        int length = cd1 + cd2;
                        int globalLength = Memory.ReadInt(hProcess, (currentListObject + 0x2C));
    
                        float cdleft = Math.Max(Math.Max(length, globalLength) - (Environment.TickCount - start), 0);
    
    
                        if (cdleft != 0)
                        {
                            return cdleft;
                        }
                        
    
                    }
    
    
                    //Get next list object
                    currentListObject = Memory.ReadUInt(hProcess, currentListObject + 4);
                }
    
                return -1;
    
            }
    Does anyone now what game client versions this offsets where, so I can find them in 3.2.2 binary.???
    Originally Posted by g3gg0 View Post
    start, duration, runeReady = GetRuneCooldown(id)


    0x011786b0:

    +0x00 blood rune 1 start
    +0x04 blood rune 2 start
    +0x08 unholy rune 1 start
    +0x0C unholy rune 2 start
    +0x10 frost rune 1 start
    +0x14 frost rune 2 start

    0x011786D4 rune ready states


    Anyway I wish there was a way to read cd directly from action bars coz this method is usless for death knights. If there was a way of reading action bars cd I could ignore rune calculations, and therefore make a game class independent cooldown method(no inyectional :P).
    Last edited by mordok; 10-25-2009 at 01:45 PM.
    "I'm not going to expose my methods for time bending, as i don't want to do get nerfed!"-Kynox

  15. #30
    Tanaris4's Avatar Contributor Authenticator enabled
    Reputation
    148
    Join Date
    Oct 2008
    Posts
    646
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Also worth noting that if you do:
    [initialOffset+0x4] you will get a pointer to the LAST object in the list, good for making sure you're actually at the end

Page 2 of 3 FirstFirst 123 LastLast

Similar Threads

  1. spell.cooldown how to get it to work?
    By classdog in forum PE Support forum
    Replies: 1
    Last Post: 07-22-2015, 06:41 PM
  2. Spell Cooldown how to get recovery time
    By iceblockman in forum WoW Memory Editing
    Replies: 4
    Last Post: 10-27-2012, 01:07 AM
  3. Spell Cooldown-List
    By rafalsk in forum WoW Memory Editing
    Replies: 1
    Last Post: 08-06-2010, 02:12 PM
  4. Spell cooldowns and Spell.dbc edititng
    By RYUchan in forum WoW EMU Questions & Requests
    Replies: 1
    Last Post: 06-11-2009, 11:53 AM
  5. Remove all spell cooldowns faster after a duel
    By falarious in forum World of Warcraft Exploits
    Replies: 17
    Last Post: 07-20-2008, 08:58 AM
All times are GMT -5. The time now is 10:59 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search