Where to find SNO ID for an ACD? menu

User Tag List

Results 1 to 11 of 11
  1. #1
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Where to find SNO ID for an ACD?

    I'm in process, trying to call D3::GetSnoFromSNOId:
    __thiscall (SNOGroup* this, int snoId, int flag)

    But I'm getting GPF.

    When I set a breakpoint on calls from the regular game client, I see a SNO group pointer that I recognize, but I can't recognize the snoId's being passed from anywhere. From the sources I've checked, it should be 0x90 bytes past the ACD pointer, but when I iterate all the ACD's, I don't find that snoID on any of them.

    Just in case snoID has moved from ACD + 0x90, I tried this ACD struct:

    Code:
    struct ACDStruct
    {
       int id_acd; // 0x000
       char name[128];	 // 0x004
       int val[147]; //0x84
    };
    ... and I couldn't find the debugged sno ID in any val[] from any ACD

    Where to find SNO ID for an ACD?
  2. #2
    iamclint's Avatar Master Sergeant
    Reputation
    14
    Join Date
    Aug 2012
    Posts
    84
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    hmm I believe the sno id you are looking for is at 0xb4?

  3. #3
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ahhh... if I understand some other people's code I've been looking at, it looks like that's the ACD's SNO ID for the GameBalance SNO group.

    So is the one at ACD+0x90 the SNO ID for the Actor SNO group? I thought there was one SNO ID per ACD that was used across all the SNO groups... is that wrong?

  4. #4
    iamclint's Avatar Master Sergeant
    Reputation
    14
    Join Date
    Aug 2012
    Posts
    84
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    appears to be at 0x90 based on darthons structs
    Code:
       char name[128];             // 0x004
        DWORD unk_0;                // 0x084 
        DWORD id_unk1;              // 0x088 
        DWORD id_actor;             // 0x08C 
        DWORD id_sno;               // 0x090 
        char unknown_94[28];        // 0x094 
        DWORD gb_type;              // 0x0B0
        DWORD id_gb;                // 0x0B4
    i'm just kind of shooting in the dark for you i only use the game balance id.
    Last edited by iamclint; 03-26-2013 at 07:09 PM.

  5. #5
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Here's what I'm trying:
    Code:
    //GetSNOGroup is 0xe60350 @ 1.07a
    //20 is GameBalance
    void* snoGroupPtr = GetSNOGroup(20);
    //GetSnoFromSNOId is 0xe7c400 @ 1.07a
    //ACD.id_gb is at ACD+0xb4
    void* itemGBSno = GetSnoFromSNOId(snoGroupPtr, acd->id_gb, 0);
    But I find the returned itemGBSno is identical for a minor health potion, lesser health potion, and a gem.

    There's a debug string being posted when this runs as well:
    Trying to lock an invalid SNO {acd->id_gb} which doesn't exists or is not part of the GAMEBALANCE_SNO group
    Last edited by bad6oy30; 03-26-2013 at 11:16 PM. Reason: Added debug string

  6. #6
    DarthTon's Avatar Contributor
    Reputation
    171
    Join Date
    Apr 2010
    Posts
    108
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    So is the one at ACD+0x90 the SNO ID for the Actor SNO group? I thought there was one SNO ID per ACD that was used across all the SNO groups... is that wrong?
    Yes, ACD+0x90 is an ActorSNO id. ACD+0xB4 is a hash of gamebalance entity name. GetSnoFromSNOId won't work for this value because it really isn't a valid SNO id, You can try to use D3::GetGameBalance (0x00EA7E50 build 15295), but I never used it so can't help you.
    Last edited by DarthTon; 03-27-2013 at 04:16 AM. Reason: typo

  7. #7
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Does anyone have a signature for D3::GetGameBalance? I'm having a bugger of a time figuring it out.

  8. #8
    iamclint's Avatar Master Sergeant
    Reputation
    14
    Join Date
    Aug 2012
    Posts
    84
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    So it looks like GetGameBalance function is called with 2 flags first and 3rd argument
    and the second argument seems to almost always appear to be an empty char for some reason.
    Code:
      v4 = 2;
      a1 = 1;
      v1 = sub_EA7E50(&v4, &v6, &a1);
    GetGameBalance appears that it is returning the gamebalance as a whole

    what was you trying to do again?

    Code:
    0xecf830	D3::ACD::GetGBValueByGBId
    I got lost trying to figure out what you are really after but if i'm right you want this ^ and this is how that is called ->
    Code:
    bool __cdecl sub_EE25C0(int a1, int a2)
    {
      int v2; // edi@1
      int v4; // eax@3
      signed int v5; // ebx@4
      int v6; // eax@5
    
      v2 = *(_DWORD *)(a2 + 180);
      v5 = sub_ECF830(v2, a2)
    }
    So its pretty easy to tell from here that *(_DWORD *)(a2 + 180) is the pointer to the gbid so you can deduce down what the other argument is.
    Last edited by iamclint; 03-27-2013 at 08:08 PM.

  9. #9
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I think what you've just posted is going to be what I need.

    Just in case someone wants to know the GetGameBalance signature, arg1 is an 8-byte struct

    Code:
    struct ParamPair
    {
       int gbSnoEntry;
       int gbId
    }
    Where gbSnoEntry is one of:
    Code:
    .rdata:014C4888 dword_14C4888   dd 1                    ; DATA XREF: D3__GetGameBalance+7Eo
    .rdata:014C4888                                         ; sub_EA8E70+4Eo ...
    .rdata:014C488C                 dd offset aItemTypes    ; "Item Types"
    .rdata:014C4890                 dd 2
    .rdata:014C4894                 dd offset aItems        ; "Items"
    .rdata:014C4898                 dd 3
    .rdata:014C489C                 dd offset aExperienceTabl ; "Experience Table"
    .rdata:014C48A0                 dd 18h
    .rdata:014C48A4                 dd offset aHelpCodes    ; "Help Codes"
    .rdata:014C48A8                 dd 5
    .rdata:014C48AC                 dd offset aMonsterLevels ; "Monster Levels"
    .rdata:014C48B0                 dd 7
    .rdata:014C48B4                 dd offset aHeros        ; "Heros"
    .rdata:014C48B8                 dd 8
    .rdata:014C48BC                 dd offset aAffixList    ; "Affix List"
    .rdata:014C48C0                 dd 0Ah
    .rdata:014C48C4                 dd offset aMovementStyles ; "Movement Styles"
    .rdata:014C48C8                 dd 0Bh
    .rdata:014C48CC                 dd offset aLabels       ; "Labels"
    .rdata:014C48D0                 dd 0Ch
    .rdata:014C48D4                 dd offset aLootDistributi ; "Loot Distribution"
    .rdata:014C48D8                 dd 10h
    .rdata:014C48DC                 dd offset aRareItemNames ; "Rare Item Names"
    .rdata:014C48E0                 dd 12h
    .rdata:014C48E4                 dd offset aMonsterAffixes ; "Monster Affixes"
    .rdata:014C48E8                 dd 13h
    .rdata:014C48EC                 dd offset aMonsterNames ; "Monster Names"
    .rdata:014C48F0                 dd 15h
    .rdata:014C48F4                 dd offset aSocketedEffect ; "Socketed Effects"
    .rdata:014C48F8                 dd 17h
    .rdata:014C48FC                 dd offset aItemEnhancemen ; "Item Enhancements"
    .rdata:014C4900                 dd 19h
    .rdata:014C4904                 dd offset aItemDropTable ; "Item Drop Table"
    .rdata:014C4908                 dd 1Ah
    .rdata:014C490C                 dd offset aItemLevelModif ; "Item Level Modifiers"
    .rdata:014C4910                 dd 1Bh
    .rdata:014C4914                 dd offset aQualityClasses ; "Quality Classes"
    .rdata:014C4918                 dd 1Ch
    .rdata:014C491C                 dd offset aHandicaps    ; "Handicaps"
    .rdata:014C4920                 dd 1Dh
    .rdata:014C4924                 dd offset aItemRequiredLe ; "Item Required Levels"
    .rdata:014C4928                 dd 11h
    .rdata:014C492C                 dd offset aScenery      ; "Scenery"
    .rdata:014C4930                 dd 4
    .rdata:014C4934                 dd offset aHirelings    ; "Hirelings"
    .rdata:014C4938                 dd 21h
    .rdata:014C493C                 dd offset aSetItemBonuses ; "Set Item Bonuses"
    .rdata:014C4940                 dd 22h
    .rdata:014C4944                 dd offset aEliteModifiers ; "Elite Modifiers"
    .rdata:014C4948                 dd 23h
    .rdata:014C494C                 dd offset aItemTiers    ; "Item Tiers"
    .rdata:014C4950                 dd 24h
    .rdata:014C4954                 dd offset aPowerFormulaTa ; "Power Formula Tables"
    .rdata:014C4958                 dd 20h
    .rdata:014C495C                 dd offset aRecipes      ; "Recipes"
    .rdata:014C4960                 dd 25h
    .rdata:014C4964                 dd offset aScriptedAchiev ; "Scripted Achievement Events"
    Code:
    __cdecl GetGameBalance(ParamPair*, void** snoPtrMaybe, bool* logIfNotFound)
    snoPtrMaybe is a result of some sort, it's not read.
    I don't know what the return value is, and I don't think I'll care once I study iamclint's last post

  10. #10
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Oh... I suppose the ACD structure

    Code:
    	char unknown_94[28];		// 0x094 
    	DWORD gb_type;				// 0x0B0
    	DWORD id_gb;				// 0x0B4  
    	char unknown_B8[24];		// 0x0B8

    is probably better expressed
    Code:
    	char unknown_94[28];		// 0x094 
    	ParamPair snoGbId    //0x0B0
    	char unknown_B8[24];		// 0x0B8
    So the struct can be passed directly to GetGameBalance

  11. #11
    bad6oy30's Avatar Member Authenticator enabled
    Reputation
    1
    Join Date
    Dec 2010
    Posts
    41
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ah, I see it now... GetGBValueByGBId only uses the "Items" section (2) of the GB data.

    sub_EE25C0 confused me a bit... it's two ACD's.

Similar Threads

  1. [Guide] Where to find the Dwemer Motifs for ESO Dwemer Armor Set?
    By junired in forum Elder Scrolls Online Guides
    Replies: 0
    Last Post: 11-11-2014, 04:32 AM
  2. Once again (where to find packet parse function for wsarecv call)
    By Esoserv2 in forum Elder Scrolls Online General
    Replies: 3
    Last Post: 03-01-2014, 05:44 PM
  3. [Question] where to find textures for the Bronze drake
    By oskieposkie in forum WoW ME Questions and Requests
    Replies: 0
    Last Post: 04-25-2009, 06:06 AM
  4. Where to find Striker's .blp-files?
    By Violence in forum World of Warcraft Model Editing
    Replies: 3
    Last Post: 10-04-2006, 05:56 PM
  5. Where to Find Mac auto mouse clicker
    By socaboy in forum World of Warcraft General
    Replies: 3
    Last Post: 09-13-2006, 03:04 AM
All times are GMT -5. The time now is 12:38 AM. 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