Attribute IDs menu

User Tag List

Results 1 to 10 of 10
  1. #1
    TKG's Avatar Member
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Attribute IDs

    I wonder if somebody could share some light on how to determine the attribute IDs, which define the respective attributes of an actor/acd asset.

    If you want to determine the attribute of an asset you call either GetInt / GetFloat with the parameters FagID and attributeID. The system then
    a) gets the attribute container by a simple hash from the list of attribute groups:
    Code:
    [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
    internal struct FAGStruc
    {	[FieldOffset(0)]	public int FAGID;
    	[FieldOffset(0x10)]	public UInt32 ptrFormula;     // attribute table 1
    	[FieldOffset(0x38)]	public UInt32 ptrMap;	      // attribute table 2 normally empty
    	[FieldOffset(0xc8)]	public int Mask;
    }
    b) searches the attribute table 2 (normally empty)
    c) searches the attribute table 1 with a hash from the attribute ID (WordHI XOR WordLO)
    d) if it finds the attributeID it returns the value
    e) if it doesnt find the ID it returns the default value from the default list at 0x157D518

    Easy enough, but has anybody a list of valid IDs ?

    Its obvious that the default list is just a subset of the possible attributes: f.e. Lightning resistance is not in there (its value is normally ox2052)

    Referencing back from the string list you get to the function D3AttribInit (0x013150F8 ) , which fills a list harcoded with 98 string hashes / attribute ids.

    I tried combining this list with the default list: it now reveals the resistances but still leaves open more questions:
    - health attribute ID is normally FFFFF067, doesnt turn up anywhere
    - item lvl requirement normally is x3B12A, no luck here either

    I would be grateful if anybody could give a hint: I am out of ideas and probably thinking too much inside the box.

    ... and too stubborn to just let it lie ...
    Last edited by TKG; 07-11-2012 at 05:09 PM.

    Attribute IDs
  2. #2
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Fire up IDA an in the string view search for a known attribute, for example Magic_Find.
    Go to the references where this string is used and bam.. you end up in a huge list of attributes. (these values need to be masked with 0xFFFF000 to be correct..
    For example Hitpoints_Cur = 0xFFFFF000 | 0x67

    Have I understood your question correctly?

  3. #3
    TKG's Avatar Member
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by xzidez View Post
    Fire up IDA an in the string view search for a known attribute, for example Magic_Find.
    Go to the references where this string is used and bam.. you end up in a huge list of attributes. (these values need to be masked with 0xFFFF000 to be correct..
    For example Hitpoints_Cur = 0xFFFFF000 | 0x67

    Have I understood your question correctly?
    TY xzidez for the reply, I already feared this forum had dried up completely.

    Let me check your remark: you probably refer to the list of 98 attributes currently at 0x162c850 , which is created by a HUGE function ( see above D3AttribInit @ 0x013150F8 ) and some 3-4 minor ones directly adjacent. They indeed give you hashes and attrib ids, which I parsed from code and joined with the attrib default list.

    If I just loop the FAG container and compare with (ID & FFFF) I am fine (mostly).

    But if I call GetInt/GetFloat or my cloned OOP version it needs the EXACT attribute ID to access the value in the hashtable. F.e. FFFFF067 will return the value for HITPOINTS_Cur , whereas 0x00000067 will not. This way you access the attribute direct without looping the whole table.

    Hope I explained myself better this time.
    Last edited by TKG; 07-12-2012 at 05:28 AM.

  4. #4
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by TKG View Post
    TY xzidez for the reply, I already feared this forum had dried up completely.

    Let me check your remark: you probably refer to the list of 98 attributes currently at 0x162c850 , which is created by a HUGE function ( see above D3AttribInit @ 0x013150F8 ) and some 3-4 minor ones directly adjacent. They indeed give you hashes and attrib ids, which I parsed from code and joined with the attrib default list.

    If I just loop the FAG container and compare with (ID & FFFF) I am fine (mostly).

    But if I call GetInt/GetFloat or my cloned OOP version it needs the EXACT attribute ID to access the value in the hashtable. F.e. FFFFF067 will return the value for HITPOINTS_Cur , whereas 0x00000067 will not. This way you access the attribute direct without looping the whole table.

    Hope I explained myself better this time.
    Im at work so I cant confirm its at 0x162c850 . But it should be quite more than 98 attributes there.. So what Ive done is just copied this thing into a textdoc. Then written a parser that will print out an enum with all the attributes masked with FFFF, and they all works perfectly fine with getfloat / getint looking ling this..

    public enum D3Attribute : uint
    {
    Attribute_Timer = 0xFFFFF000 | 0x1,

    all the way down to

    Projectile_Detonate_Time = 0xFFFFF000 | 0x339,
    }

    Then my getfloat and getint use my own D3Attribute from here. ´..

  5. #5
    Kagaamine's Avatar Private
    Reputation
    11
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You can find a complete list of the Game Attributes here: https://github.com/DarkLotus/mooege/...ribute.List.cs . There's also a tool somewhere in the distribution that'll allow you to extract Game Attributes yourself (I assume it's the same method xzidez uses)

    I think all of a character's attributes can be accessed via 0xFFFFF000 | attribute_id, but I definitely haven't tried it.

  6. #6
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Kagaamine View Post
    I think all of a character's attributes can be accessed via 0xFFFFF000 | attribute_id, but I definitely haven't tried it.
    You are correct sir. Or at least all the ones Ive tried : P

  7. #7
    TKG's Avatar Member
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by xzidez View Post
    Im at work so I cant confirm its at 0x162c850 . But it should be quite more than 98 attributes there
    Just got home: you're correct , dont know why this number 98 stuck in my head, it's actually a list of 233 attributes

    But we're talking about the same list, which I sampled more or less the same way you did: c&p'ed the code from IDA into a text file, corrected some shortened strings and regexed the whole thing.

    And yes, you can use these as they are , you shouldnt even mask them. Resistance#Lightning = 0x00004052 would loose some information otherwise.

    Still, even combined with the default list I am missing some , like Item-Requirement = 0x3B12a. You will not find it on an item searching with 0x12a or FFFFF12A. But it seems I am on the right track and can live with some minor inconsistencies.

    Thank you for your effort and some +rep for you.

    Originally Posted by Kagaamine View Post
    You can find a complete list of the Game Attributes here: https://github.com/DarkLotus/mooege/...ribute.List.cs
    Took a quick look at the list: it seems to be the list of STATIC attribute defaults, which is missing all the attributes from the list we were talking about. Try Resistance#Lighning or other ...

    But didnt know there still are some Mooege tidbits left, thought all of them had been deleted .

    Edit: here is what we're talking about, look for yourself
    Last edited by TKG; 07-12-2012 at 12:09 PM.

  8. #8
    Kagaamine's Avatar Private
    Reputation
    11
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by TKG View Post
    Took a quick look at the list: it seems to be the list of STATIC attribute defaults, which is missing all the attributes from the list we were talking about. Try Resistance#Lighning or other ...

    But didnt know there still are some Mooege tidbits left, thought all of them had been deleted .

    Edit: here is what we're talking about, look for yourself
    Unfortunately, I never looked much into reading those attributes from D3's ingame structures, most of my knowledge is on the more "static" side of the attributes I guess. However this is my understanding:

    Things like "00002052 E93C6498 Resistance#Lightning", are parameterized attributes. That is they are calculated in the same way as the base attribute ("Resistance" 0x52 in this situation), but are specified by an additional parameter. In the case of resistances, the parameters are describes as follows (as per https://github.com/DarkLotus/mooege/...GameBalance.cs)

    Code:
        public enum Resistance
        {
            Physical = 0,
            Fire,
            Lightning,
            Cold,
            Poison,
            Arcane,
            Holy,
        }
    In this case lightning is parameter 2 of resistance. Looking through your list, I also see 00003052 809872F6 Resistance#Cold, which seems to be parameter 3 of attribute ID 0x52. So maybe the hash is just (parameter << 12) | attribute_id, with a parameter of -1 for unparameterized attributes?

  9. #9
    TKG's Avatar Member
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Kagaamine View Post
    Things like "00002052 E93C6498 Resistance#Lightning", are parameterized attributes. That is they are calculated in the same way as the base attribute ("Resistance" 0x52 in this situation), but are specified by an additional parameter. In the case of resistances, the parameters are describes as follows (as per https://github.com/DarkLotus/mooege/...GameBalance.cs)

    Code:
        public enum Resistance
        {
            Physical = 0,
            Fire,
            Lightning,
            Cold,
            Poison,
            Arcane,
            Holy,
        }
    In this case lightning is parameter 2 of resistance. Looking through your list, I also see 00003052 809872F6 Resistance#Cold, which seems to be parameter 3 of attribute ID 0x52. So maybe the hash is just (parameter << 12) | attribute_id, with a parameter of -1 for unparameterized attributes?
    Ty for the feedback, that definitely makes sense. All the attributes in the list deviate from the common scheme by bits > 0xfff and are all based on the same base attribute found in the default list.

    Interesting link too ...

  10. #10
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    For example the resource (Resource_Cur = 0x78 ) you mask with the corresponding mask to that resource instead of 0xFFFFF000.

    None = 0x0000,
    ArcanePower = 0x1000,
    Rage = 0x2000,
    Spirit = 0x3000,
    Mana = 0x4000,
    Hatred = 0x5000,
    Discipline = 0x6000,

    Guess its same for resistance..or?

Similar Threads

  1. How to find item, weapon, and armor ids from model viewer
    By J-A-K-E in forum World of Warcraft Guides
    Replies: 9
    Last Post: 03-09-2016, 10:10 PM
  2. Druid Form IDs
    By Dragon[Sky] in forum WoW ME Questions and Requests
    Replies: 3
    Last Post: 08-17-2007, 11:40 AM
  3. Patch 2.1 Tier 6 item ids for WDB (cache) editing
    By perilousbanana in forum World of Warcraft Model Editing
    Replies: 14
    Last Post: 06-22-2007, 04:33 AM
  4. Warglaive's of azzinoth ids for WDB (cache) editing
    By chaimdasilva in forum WoW ME Questions and Requests
    Replies: 0
    Last Post: 06-11-2007, 02:31 PM
  5. tier 5 weapon IDs
    By viruzz in forum WoW ME Questions and Requests
    Replies: 4
    Last Post: 05-24-2007, 09:21 PM
All times are GMT -5. The time now is 12:25 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search