And again spell Cooldowns question menu

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 15 of 21
  1. #1
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    And again spell Cooldowns question

    Please help with finding blue (or red) pill
    I will describe what I have tryed already:

    Was looking inside Spell_C::GetSpellCooldown
    trying to make working code

    uint spellsOnCooldown = 0x998600; // according g_SpellDB was trying both this
    // uint spellsOnCooldown = 0x998360; // according g_SpellCooldownsDB and this also

    uint currentListObject = ReadUInt(spellsOnCooldown + 0x8 );
    // uint currentListObject = ReadUInt(spellsOnCooldown); // such variant was tryed also

    while ((currentListObject != 0) /* && ((currentListObject & 1) == 0) */) {
    int currentSpellId = ReadInt(currentListObject + 0x8 );
    int start = ReadInt(currentListObject + 0x10);
    int cd1 = ReadInt(currentListObject + 0x14);
    int cd2 = ReadInt(currentListObject + 0x20);

    //Get next list object
    currentListObject = ReadUInt(currentListObject + 4);
    }

    Even currentListObject looking like wrong value and not right value.

    This method of getting cooldowns is depricated? Or? What is right way to get cooldowns?

    Thanks a lot
    Last edited by HexNeo; 04-15-2012 at 03:37 PM.

    And again spell Cooldowns question
  2. #2
    Bananenbrot's Avatar Contributor
    Reputation
    153
    Join Date
    Nov 2009
    Posts
    384
    Thanks G/R
    1/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Assuming that you took TOM_RUS' IDA database which does no dynamic relocation of the address space (google aslr at msdn if unknown) and you didn't disable ASLR for yourself, you have to substract a static 0x400000 (WoW's standard image base) from your offset and add that offset to WoW's actual base address, obtainable via Process.MainModule.BaseAddress. e.g.
    Code:
    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown + 0x8 );
    May be only one of several other errors.

  3. #3
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I am using

    uint spellsOnCooldown = 0x998600; // according g_SpellDB TOM_RUS one is 0xD98600 was trying both this
    // uint spellsOnCooldown = 0x998360; // according g_SpellCooldownsDB TOM_RUS one is 0xD98360 and this also

    already rebased by 0x400000



    and my ReadUInt adding wowProcess.MainModule.BaseAddress also

    any ideas ?

  4. #4
    _Mike's Avatar Contributor
    Reputation
    310
    Join Date
    Apr 2008
    Posts
    531
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by HexNeo View Post
    and my ReadUInt adding wowProcess.MainModule.BaseAddress also
    Don't do that. Only add the module address for static offsets. Any pointers you read are already "rebased".

  5. #5
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by _Mike View Post
    Don't do that. Only add the module address for static offsets. Any pointers you read are already "rebased".
    what do you mean under module address? wowProcess.MainModule.BaseAddress?

    took so, long to reply because tried all variants

    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown + 0x8 ); // returns 9902 strange number not like offset
    uint currentListObject = ReadUInt(spellsOnCooldown + 0x8 ); // returns 0
    uint currentListObject = ReadUInt(spellsOnCooldown); // returns 0

    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown ); // returns 27034656, better, but next move
    int currentSpellId = ReadInt(wowProcess.MainModule.BaseAddress + currentListObject + 0x8 ); // returned bytes that can not be translated as int
    and
    int currentSpellId = ReadInt(currentListObject + 0x8 ); // returned 19640384 not spell_ID

    still not understand, what is right way? why?

    thnx all who reading this post.

  6. #6
    matamore's Avatar Member
    Reputation
    6
    Join Date
    Dec 2008
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown + 0x8 );
    should be right.

    but uint spellsOnCooldown = 0x998600; is wrong

    look for "this" in function: sub_4AD6A0

    btw - your arent looking for g_SpellCooldownsDB

  7. #7
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by matamore View Post
    look for "this" in function: sub_4AD6A0
    Are you sure you gived me right name?

    I did not found such even using alt+t

  8. #8
    _Mike's Avatar Contributor
    Reputation
    310
    Join Date
    Apr 2008
    Posts
    531
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by HexNeo View Post
    what do you mean under module address? wowProcess.MainModule.BaseAddress?
    I mean that you shouldn't explicitly add the base address in your read function. Do it when it's needed, not all the time.

    Are you sure you gived me right name?

    I did not found such even using alt+t
    The address is right, but also wrong, depending on if your database is rebased or not.

  9. #9
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    brr now I am totally confused?

    How can I find is it rebased or not? May be some good post here on forum?

    search -> reabsed not helped

    As I understand under database you mean g_SpellCooldownsDB? or?

  10. #10
    _Mike's Avatar Contributor
    Reputation
    310
    Join Date
    Apr 2008
    Posts
    531
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by HexNeo View Post
    brr now I am totally confused?

    How can I find is it rebased or not? May be some good post here on forum?

    search -> reabsed not helped

    As I understand under database you mean g_SpellCooldownsDB? or?
    I mean your IDA database.
    Go to the top of the disassembly listing. If it says "Imagebase: 400000" it's not rebased. Any other number (but usually 0, any other base wouldn't make much sense) and it is.
    matamore posted a rebased offset, so add (whatever your image base is) to it to get the correct address.
    As for how to know if an address is rebased or not.. Try jumping to it (hotkey 'g' in ida, you can enter either an address or a name) and if it doesn't exist or if it doesn't make any sense then there's a high chance that you have to recalculate it. Sometimes it can be hard to tell if an address "makes sense" or not, but in this case he gave the name "sub_4AD6A0" so we know that it should be the start of a function.

  11. #11
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I am trying and trying

    my Imagebase is 400000 because I am loking to TOM_RUS WoW_15354.idb

    I do not have sub_AD6A0 (substract 400000) and I do not have sub_8AD6A0 (add 400000).

    I understand that sub_4AD6A0 is function but, can not find it.

    I used some post from here ([3.1.3] [Info] Getting Spell Cooldowns) to get cooldowns, so code was taken from it.


    uint spellsOnCooldown = 0x998360; // according g_SpellCooldownsDB
    uint currentListObject = ReadUInt(spellsOnCooldown + 0x8 );
    while ((currentListObject != 0) /* && ((currentListObject & 1) == 0) */) {
    int currentSpellId = ReadInt(currentListObject + 0x8 );
    int start = ReadInt(currentListObject + 0x10);
    int cd1 = ReadInt(currentListObject + 0x14);
    int cd2 = ReadInt(currentListObject + 0x20);

    //Get next list object
    currentListObject = ReadUInt(currentListObject + 4);
    }

    Somebody please help :confused: I am so confused already.

  12. #12
    TOM_RUS's Avatar Legendary
    Reputation
    914
    Join Date
    May 2008
    Posts
    699
    Thanks G/R
    0/52
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Code:
    .text:008AD6A0                   Spell_C::GetSpellCooldown
    in my IDB

    Code:
    int __cdecl Spell_C::GetSpellCooldown_Proxy(int spellid, int type, int *a3, int *a4, int *a5, int *a6)
    {
      // type 0 - player?
      // type 1 - pet?
      return Spell_C::GetSpellCooldown(&dword_ECB924[6 * type], spellid, 0, a3, a4, a5, a6);
    }
    I guess dword_ECB924 is what you looking for?
    Last edited by TOM_RUS; 04-16-2012 at 01:51 PM.

  13. #13
    HexNeo's Avatar Member
    Reputation
    1
    Join Date
    Oct 2008
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    first of all TOM_RUS is za best! and my favorite here
    TOM I was in Spell_C::GetSpellCooldow million times in this week and more than 1 000 times today

    so the whole idea is to get v8 from g_SpellDB and that why I asking how to read it

    I see that right place is v8 (v8 = *((_DWORD *)g_SpellDB.Rows + spell_ID - g_SpellDB.minIndex), (v48 = v8 ) == 0) , but did not understand how to get g_SpellDB

    I know that g_SpellDB is WoWClientDB and accordiing to your IDB it must be at 0x998600 (rebased from D98600 by 400000) pointer to db but I was ReadUInt from this address by diffrent ways (rebased not rebase and so on) and got nothing


    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown + 0x8 ); // returns 9902 strange number not like offset
    uint currentListObject = ReadUInt(spellsOnCooldown + 0x8 ); // returns 0
    uint currentListObject = ReadUInt(spellsOnCooldown); // returns 0

    uint currentListObject = ReadUInt(wowProcess.MainModule.BaseAddress + spellsOnCooldown ); // returns 27034656, better, but next move
    int currentSpellId = ReadInt(wowProcess.MainModule.BaseAddress + currentListObject + 0x8 ); // returned bytes that can not be translated as int
    and
    int currentSpellId = ReadInt(currentListObject + 0x8 ); // returned 19640384 not spell_ID


    so where is my mistake?
    Last edited by HexNeo; 04-16-2012 at 02:01 PM.

  14. #14
    TOM_RUS's Avatar Legendary
    Reputation
    914
    Join Date
    May 2008
    Posts
    699
    Thanks G/R
    0/52
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    You don't need g_SpellDB, it stores only static spell data. Read my previous post again.

  15. #15
    _Mike's Avatar Contributor
    Reputation
    310
    Join Date
    Apr 2008
    Posts
    531
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Just a little FYI: (I've got an OCD for naming things correctly )

    dword_ECB924 is s_spellHistory
    sub_8AD6A0 is SpellHistory::GetCooldown
    sub_8AF370 is Spell_C_GetSpellCooldown (not a class method)

    Based on the 4.1.0 debug build. (the names that is, offsets are from 15354)
    Last edited by _Mike; 04-16-2012 at 11:57 PM.

Page 1 of 2 12 LastLast

Similar Threads

  1. Need Help - Spell Cooldown and Out of Process Targeting
    By Evansbee in forum WoW Memory Editing
    Replies: 6
    Last Post: 07-11-2015, 04:37 PM
  2. Spell cooldowns and Spell.dbc edititng
    By RYUchan in forum WoW EMU Questions & Requests
    Replies: 1
    Last Post: 06-11-2009, 11:53 AM
  3. [Question]Swapping Sounds and finding spell sounds
    By Akgis in forum WoW ME Questions and Requests
    Replies: 1
    Last Post: 05-23-2009, 09:15 PM
  4. Mobs and their spells , got a question!
    By Arugos in forum World of Warcraft Emulator Servers
    Replies: 7
    Last Post: 12-27-2007, 01:06 AM
  5. Rogue Spell Pack 2.0 Mutilate fixed and more spells added!!!
    By l0ksley in forum World of Warcraft Model Editing
    Replies: 9
    Last Post: 06-12-2007, 01:36 PM
All times are GMT -5. The time now is 06:19 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