2 Star 1 Fork 0

agiknight/d2bs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
D2Structs.h 22.57 KB
一键复制 编辑 原始数据 按行查看 历史
noah- 提交于 2018-11-16 23:30 . Removed msg loop intercept
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
#pragma once
#ifndef _D2STRUCTS_H
#define _D2STRUCTS_H
#include <windows.h>
#pragma warning(push)
#pragma warning(disable : 4201)
#pragma optimize("", off)
struct UnitAny;
struct Room1;
struct Room2;
struct Level;
struct Act;
struct ActMisc;
struct RosterUnit;
struct OverheadMsg;
struct Skill;
struct SplitText {
wchar_t* lpwszText;
SplitText* lpsNext;
};
struct InventoryInfo {
int nLocation;
int nMaxXCells;
int nMaxYCells;
};
struct GameStructInfo {
BYTE _1[0x1F]; // 0x00 // was 0x1B
char szGameName[0x18]; // 0x1F
char szGameServerIp[0x56]; // 0x37
char szAccountName[0x30]; // 0x8D
char szCharName[0x18]; // 0xBD
char szRealmName[0x18]; // 0xD5
BYTE _2[0x158]; // 0xED
char szGamePassword[0x18]; // 0x245
};
struct AutomapCell {
DWORD fSaved; // 0x00
WORD nCellNo; // 0x04
WORD xPixel; // 0x06
WORD yPixel; // 0x08
WORD wWeight; // 0x0A
AutomapCell* pLess; // 0x0C
AutomapCell* pMore; // 0x10
};
struct GfxCell {
DWORD flags; // 0x00
DWORD width; // 0x04
DWORD height; // 0x08
DWORD xoffs; // 0x0C
DWORD yoffs; // 0x10
DWORD _2; // 0x14
DWORD lpParent; // 0x18
DWORD length; // 0x1C
BYTE cols; // 0x20
};
struct UnitInteraction {
DWORD dwMoveType; // 0x00
UnitAny* lpPlayerUnit; // 0x04
UnitAny* lpTargetUnit; // 0x08
DWORD dwTargetX; // 0x0C
DWORD dwTargetY; // 0x10
DWORD _1; // 0x14
DWORD _2; // 0x18
Skill* pSkill;
};
struct CellFile {
DWORD dwVersion; // 0x00
struct {
WORD dwFlags;
BYTE mylastcol;
BYTE mytabno : 1;
}; // 0x04
DWORD eFormat; // 0x08
DWORD termination; // 0x0C
DWORD numdirs; // 0x10
DWORD numcells; // 0x14
GfxCell* cells[255]; // 0x18
};
struct CellContext {
DWORD _1[13]; // 0x00
CellFile* pCellFile; // 0x34
DWORD _2[4]; // 0x38
};
struct AutomapLayer {
DWORD nLayerNo; // 0x00
DWORD fSaved; // 0x04
AutomapCell* pFloors; // 0x08
AutomapCell* pWalls; // 0x0C
AutomapCell* pObjects; // 0x10
AutomapCell* pExtras; // 0x14
AutomapLayer* pNextLayer; // 0x18
};
struct AutomapLayer2 {
DWORD _1[2]; // 0x00
DWORD nLayerNo; // 0x08
};
struct LevelTxt {
DWORD dwLevelNo; // 0x00
DWORD _1[60]; // 0x04
BYTE _2; // 0xF4
char szName[40]; // 0xF5
char szEntranceText[40]; // 0x11D
char szLevelDesc[41]; // 0x145
wchar_t wName[40]; // 0x16E
wchar_t wEntranceText[40]; // 0x1BE
BYTE nObjGroup[8]; // 0x196
BYTE nObjPrb[8]; // 0x19E
};
struct ControlText // size = 0x20
{
wchar_t* wText[5]; // 0x00 for each field
DWORD dwColor; // 0x14
DWORD dwAlign; // 0x18
ControlText* pNext; // 0x1C
};
struct Control {
DWORD dwType; // 0x00
DWORD* _1; // 0x04 // unsure? definitely a ptr but not obvious, usually points to 6 when dwType is 6 I think
DWORD dwDisabled; // 0x08
DWORD dwPosX; // 0x0C
DWORD dwPosY; // 0x10
DWORD dwSizeX; // 0x14
DWORD dwSizeY; // 0x18
// I think _2 thru _9 are a handler table of some sort
DWORD* _2; // 0x1C // some sort of function (maybe click?)
DWORD _3; // 0x20
DWORD* _4; // 0x24 // some sort of function
DWORD* _5; // 0x28
DWORD _6; // 0x2C
DWORD* _7; // 0x30 // ptr to something...
DWORD* _8; // 0x34 // another random ptr... mostly dead ends when I examined them
DWORD _9; // 0x38
Control* pNext; // 0x3C
DWORD _10; // 0x40
DWORD unkState; // 0x44 _11 0 when button avail to be clicked 1 when greyed - still need to look at this more
ControlText* pFirstText; // 0x48
ControlText* pLastText; // 0x4C
ControlText* pSelectedText; // 0x50
DWORD dwSelectEnd; // 0x54
DWORD dwSelectStart; // 0x58
union {
struct { // Textboxes
wchar_t wText[256]; // 0x5C
DWORD dwCursorPos;
DWORD dwIsCloaked;
};
struct { // Buttons
DWORD _12[2]; // 0x5C
wchar_t wText2[256]; // 0x6C
};
};
};
#pragma pack(push)
#pragma pack(1)
struct BnetData {
DWORD dwId; // 0x00
DWORD dwId2; // 0x04
BYTE _1[0x10]; // 0x08
DWORD dwId3; // 0x18
WORD Unk3; // 0x1C
BYTE _2; // 0x1E
char szGameName[0x16]; // 0x1F
WORD _3; // 0x35
char szGameIP[0x10]; // 0x37
BYTE _5[0x42]; // 0x47
DWORD dwId4; // 0x89
char szAccountName[0x30]; // 0x8D
char szPlayerName[0x18]; // 0xBD
char szRealmName[0x08]; // 0xD5
BYTE _8[0x111]; // 0xDD
BYTE nCharClass; // 0x1EE
BYTE nCharFlags; // 0x1EF
BYTE nMaxDiff; // 0x1F0
BYTE _9[0x1F]; // 0x1F1
BYTE CreatedGameDifficulty; // 0x210
void* _10; // 0x211
BYTE _11[0x15]; // 0x215
WORD _12; // 0x22A
BYTE _13; // 0x22C
char szRealmName2[0x18]; // 0x22D
char szGamePass[0x18]; // 0x245
char szGameDesc[0x104]; // 0x25D
char channelname[0x20]; //+0x35f
BYTE _14[0x40]; //+0x37f
BYTE charlevel; //+0x3bf
BYTE ladderflag; //+0x3c0
DWORD passhash; //+0x3c1
BYTE passlength; //+0x3c5
};
struct RoomTile {
Room2* pRoom2; // 0x00
RoomTile* pNext; // 0x04
DWORD _2[2]; // 0x08
DWORD* nNum; // 0x10
};
struct RosterUnit {
char szName[16]; // 0x00
DWORD dwUnitId; // 0x10
DWORD dwPartyLife; // 0x14
DWORD _1; // 0x18
DWORD dwClassId; // 0x1C
WORD wLevel; // 0x20
WORD wPartyId; // 0x22
DWORD dwLevelId; // 0x24
DWORD Xpos; // 0x28
DWORD Ypos; // 0x2C
DWORD dwPartyFlags; // 0x30
BYTE* _5; // 0x34
DWORD _6[11]; // 0x38
WORD _7; // 0x64
char szName2[16]; // 0x66
WORD _8; // 0x76
DWORD _9[2]; // 0x78
RosterUnit* pNext; // 0x80
};
struct QuestInfo {
void* pBuffer; // 0x00
DWORD _1; // 0x04
};
struct Waypoint {
BYTE flags; // 0x00
};
struct PlayerData {
char szName[0x10]; // 0x00
QuestInfo* pNormalQuest; // 0x10
QuestInfo* pNightmareQuest; // 0x14
QuestInfo* pHellQuest; // 0x18
Waypoint* pNormalWaypoint; // 0x1c
Waypoint* pNightmareWaypoint; // 0x20
Waypoint* pHellWaypoint; // 0x24
};
struct CollMap {
DWORD dwPosGameX; // 0x00
DWORD dwPosGameY; // 0x04
DWORD dwSizeGameX; // 0x08
DWORD dwSizeGameY; // 0x0C
DWORD dwPosRoomX; // 0x10
DWORD dwPosRoomY; // 0x14
DWORD dwSizeRoomX; // 0x18
DWORD dwSizeRoomY; // 0x1C
WORD* pMapStart; // 0x20
WORD* pMapEnd; // 0x22
};
struct PresetUnit {
DWORD _1; // 0x00
DWORD dwTxtFileNo; // 0x04
DWORD dwPosX; // 0x08
PresetUnit* pPresetNext; // 0x0C
DWORD _3; // 0x10
DWORD dwType; // 0x14
DWORD dwPosY; // 0x18
};
struct Level {
DWORD _1[4]; // 0x00
Room2* pRoom2First; // 0x10
DWORD _2[2]; // 0x14
DWORD dwPosX; // 0x1C
DWORD dwPosY; // 0x20
DWORD dwSizeX; // 0x24
DWORD dwSizeY; // 0x28
DWORD _3[96]; // 0x2C
Level* pNextLevel; // 0x1AC
DWORD _4; // 0x1B0
ActMisc* pMisc; // 0x1B4
DWORD _5[6]; // 0x1BC
DWORD dwLevelNo; // 0x1D0
DWORD _6[3]; // 0x1D4
union {
DWORD RoomCenterX[9];
DWORD WarpX[9];
}; // 0x1E0
union {
DWORD RoomCenterY[9];
DWORD WarpY[9];
}; // 0x204
DWORD dwRoomEntries; // 0x228
};
struct Room2 {
DWORD _1[2]; // 0x00
Room2** pRoom2Near; // 0x08
DWORD _2[5]; // 0x0C
struct {
DWORD dwRoomNumber; // 0x00
DWORD _1; // 0x04
DWORD* pdwSubNumber; // 0x08
} * pType2Info; // 0x20
Room2* pRoom2Next; // 0x24
DWORD dwRoomFlags; // 0x28
DWORD dwRoomsNear; // 0x2C
Room1* pRoom1; // 0x30
DWORD dwPosX; // 0x34
DWORD dwPosY; // 0x38
DWORD dwSizeX; // 0x3C
DWORD dwSizeY; // 0x40
DWORD _3; // 0x44
DWORD dwPresetType; // 0x48
RoomTile* pRoomTiles; // 0x4C
DWORD _4[2]; // 0x50
Level* pLevel; // 0x58
PresetUnit* pPreset; // 0x5C
};
#pragma pack(pop)
struct Room1 {
Room1** pRoomsNear; // 0x00
DWORD _1[3]; // 0x04
Room2* pRoom2; // 0x10
DWORD _2[3]; // 0x14
CollMap* Coll; // 0x20
DWORD dwRoomsNear; // 0x24
DWORD _3[9]; // 0x28
DWORD dwXStart; // 0x4C
DWORD dwYStart; // 0x50
DWORD dwXSize; // 0x54
DWORD dwYSize; // 0x58
DWORD _4[6]; // 0x5C
UnitAny* pUnitFirst; // 0x74
DWORD _5; // 0x78
Room1* pRoomNext; // 0x7C
};
struct ActMisc {
DWORD _1[37]; // 0x00
DWORD dwStaffTombLevel; // 0x94
DWORD _2[245]; // 0x98
Act* pAct; // 0x46C
DWORD _3[3]; // 0x470
Level* pLevelFirst; // 0x47C
};
struct Act {
DWORD _1[3]; // 0x00
DWORD dwMapSeed; // 0x0C
Room1* pRoom1; // 0x10
DWORD dwAct; // 0x14
DWORD _2[12]; // 0x18
ActMisc* pMisc; // 0x48
};
struct Path {
WORD xOffset; // 0x00
WORD xPos; // 0x02
WORD yOffset; // 0x04
WORD yPos; // 0x06
DWORD _1[2]; // 0x08
WORD xTarget; // 0x10
WORD yTarget; // 0x12
DWORD _2[2]; // 0x14
Room1* pRoom1; // 0x1C
Room1* pRoomUnk; // 0x20
DWORD _3[3]; // 0x24
UnitAny* pUnit; // 0x30
DWORD dwFlags; // 0x34
DWORD _4; // 0x38
DWORD dwPathType; // 0x3C
DWORD dwPrevPathType; // 0x40
DWORD dwUnitSize; // 0x44
DWORD _5[4]; // 0x48
UnitAny* pTargetUnit; // 0x58
DWORD dwTargetType; // 0x5C
DWORD dwTargetId; // 0x60
BYTE bDirection; // 0x64
};
struct ItemPath {
DWORD _1[3]; // 0x00
DWORD dwPosX; // 0x0C
DWORD dwPosY; // 0x10
// Use Path for the rest
};
struct Stat {
WORD wSubIndex; // 0x00
WORD wStatIndex; // 0x02
DWORD dwStatValue; // 0x04
};
struct StatVector {
Stat* pStats;
WORD wCount;
WORD wSize;
};
// Credits to SVR, http://phrozenkeep.hugelaser.com/forum/viewtopic.php?f=8&t=31458&p=224066
struct StatList {
DWORD _1; // 0x00
UnitAny* pUnit; // 0x04
DWORD dwUnitType; // 0x08
DWORD dwUnitId; // 0x0C
DWORD dwFlags; // 0x10
DWORD _2[4]; // 0x14
StatVector StatVec; // 0x24
StatList* pPrevLink; // 0x2C
DWORD _3; // 0x30
StatList* pPrev; // 0x34
DWORD _4; // 0x38
StatList* pNext; // 0x3C
StatList* pSetList; // 0x40
DWORD _5; // 0x44
StatVector SetStatVec; // 0x48
DWORD _6[2]; // 0x50
DWORD StateBits[6]; // 0x58
};
struct Inventory {
DWORD dwSignature; // 0x00
BYTE* bGame1C; // 0x04
UnitAny* pOwner; // 0x08
UnitAny* pFirstItem; // 0x0C
UnitAny* pLastItem; // 0x10
DWORD _1[2]; // 0x14
DWORD dwLeftItemUid; // 0x1C
UnitAny* pCursorItem; // 0x20
DWORD dwOwnerId; // 0x24
DWORD dwItemCount; // 0x28
};
struct Light {
DWORD _1[3]; // 0x00
DWORD dwType; // 0x0C
DWORD _2[7]; // 0x10
DWORD dwStaticValid; // 0x2C
int* pnStaticMap; // 0x30
};
struct SkillInfo {
WORD wSkillId; // 0x00
};
struct Skill {
SkillInfo* pSkillInfo; // 0x00
Skill* pNextSkill; // 0x04
DWORD _1[8]; // 0x08
DWORD dwSkillLevel; // 0x28
DWORD _2[2]; // 0x2C
DWORD ItemId; // 0x34 0xFFFFFFFF if not a charge
DWORD ChargesLeft; // 0x38
DWORD IsCharge; // 0x3C 1 for charge, else 0
}; // size = 0x40
struct Info {
BYTE* pGame1C; // 0x00
Skill* pFirstSkill; // 0x04
Skill* pLeftSkill; // 0x08
Skill* pRightSkill; // 0x0C
};
struct ItemData {
DWORD dwQuality; // 0x00
DWORD dwSeed[2]; // 0x04
DWORD dwItemFlags; // 0x0C 1 = Owned by player, 0xFFFFFFFF = Not owned
DWORD dwFingerPrint; // 0x10 Initial seed
DWORD _1; // 0x14 CommandFlags?
DWORD dwFlags; // 0x18
DWORD _2[2]; // 0x1C
DWORD dwActionStamp; // 0x24 Changes when an item is changed
DWORD dwFileIndex; // 0x28 Data file index UniqueItems.txt etc.
DWORD dwItemLevel; // 0x2C
WORD wItemFormat; // 0x30
WORD wRarePrefix; // 0x32
WORD wRareSuffix; // 0x34
WORD wAutoPrefix; // 0x36
WORD wMagicPrefix[3]; // 0x38
WORD wMagicSuffix[3]; // 0x3E
BYTE BodyLocation; // 0x44 Not always cleared
BYTE ItemLocation; // 0x45 Non-body/belt location (Body/Belt == 0xFF)
WORD _4; // 0x46
BYTE bEarLevel; // 0x48
BYTE bInvGfxIdx; // 0x49
char szPlayerName[16]; // 0x4A Personalized / Ear name
Inventory* pOwnerInventory; // 0x5C Socketed Items owner Inv
DWORD _10; // 0x60
UnitAny* pNextInvItem; // 0x64 Next item in socketed item if OwnerInventory is set
BYTE GameLocation; // 0x68 Location per docs.d2bs.org (unit.location)
BYTE NodePage; // 0x69 Actual location, this is the most reliable by far
WORD _12; // 0x6A
WORD _13[12]; // 0x6C
UnitAny* pOwner; // 0x84
};
struct ItemTxt {
wchar_t szName2[0x40]; // 0x00
union {
DWORD dwCode;
char szCode[4];
}; // 0x40
BYTE _2[0x70]; // 0x84
WORD nLocaleTxtNo; // 0xF4
BYTE _2a[0x19]; // 0xF7
BYTE xSize; // 0xFC
BYTE ySize; // 0xFD
BYTE _2b[13]; // 0xFE
BYTE nType; // 0x11E
BYTE _3[0x0d]; // 0x11F
BYTE fQuest; // 0x12A
};
struct MonsterTxt {
BYTE _1[0x6]; // 0x00
WORD nLocaleTxtNo; // 0x06
WORD flag; // 0x08
WORD _1a; // 0x0A
union {
DWORD flag1; // 0x0C
struct {
BYTE flag1a; // 0x0C
BYTE flag1b; // 0x0D
BYTE flag1c[2]; // 0x0E
};
};
BYTE _2[0x22]; // 0x10
WORD velocity; // 0x32
BYTE _2a[0x52]; // 0x34
WORD tcs[3][4]; // 0x86
BYTE _2b[0x52]; // 0x9E
wchar_t szDescriptor[0x3c]; // 0xF0
BYTE _3[0x1a0]; // 0x12C
};
struct MonsterData {
BYTE _1[22]; // 0x00
struct {
BYTE fUnk : 1;
BYTE fNormal : 1;
BYTE fChamp : 1;
BYTE fBoss : 1;
BYTE fMinion : 1;
}; // 0x16
BYTE _2[5];
BYTE anEnchants[9]; // 0x1C
WORD wUniqueNo; // 0x26
DWORD _5; // 0x28
struct {
wchar_t wName[28];
}; // 0x2C
};
struct ObjectTxt {
char szName[0x40]; // 0x00
wchar_t wszName[0x40]; // 0x40
BYTE _1[4]; // 0xC0
BYTE nSelectable0; // 0xC4
BYTE _2[0x87]; // 0xC5
BYTE nOrientation; // 0x14C
BYTE _2b[0x19]; // 0x14D
BYTE nSubClass; // 0x166
BYTE _3[0x11]; // 0x167
BYTE nParm0; // 0x178
BYTE _4[0x39]; // 0x179
BYTE nPopulateFn; // 0x1B2
BYTE nOperateFn; // 0x1B3
BYTE _5[8]; // 0x1B4
DWORD nAutoMap; // 0x1BB
};
struct ObjectData {
ObjectTxt* pTxt; // 0x00
union {
BYTE Type; // 0x04 (0x0F would be a Exp Shrine)
struct {
BYTE _1 : 7;
BYTE ChestLocked : 1;
};
};
DWORD _2[8]; // 0x08
char szOwner[0x10]; // 0x28
};
struct ObjectPath {
Room1* pRoom1; // 0x00
DWORD _1[2]; // 0x04
DWORD dwPosX; // 0x0C
DWORD dwPosY; // 0x10
// Leaving rest undefined, use Path
};
struct UnitAny {
DWORD dwType; // 0x00
DWORD dwTxtFileNo; // 0x04
DWORD _1; // 0x08
DWORD dwUnitId; // 0x0C
DWORD dwMode; // 0x10
union {
PlayerData* pPlayerData;
ItemData* pItemData;
MonsterData* pMonsterData;
ObjectData* pObjectData;
// TileData *pTileData doesn't appear to exist anymore
}; // 0x14
DWORD dwAct; // 0x18
Act* pAct; // 0x1C
DWORD dwSeed[2]; // 0x20
DWORD _2; // 0x28
union {
Path* pPath;
ItemPath* pItemPath;
ObjectPath* pObjectPath;
}; // 0x2C
DWORD _3[5]; // 0x30
DWORD dwGfxFrame; // 0x44
DWORD dwFrameRemain; // 0x48
WORD wFrameRate; // 0x4C
WORD _4; // 0x4E
BYTE* pGfxUnk; // 0x50
DWORD* pGfxInfo; // 0x54
DWORD _5; // 0x58
StatList* pStats; // 0x5C
Inventory* pInventory; // 0x60
Light* ptLight; // 0x64
DWORD dwStartLightRadius; // 0x68
WORD nPl2ShiftIdx; // 0x6C
WORD nUpdateType; // 0x6E
UnitAny* pUpdateUnit; // 0x70 - Used when updating unit.
DWORD* pQuestRecord; // 0x74
DWORD bSparklyChest; // 0x78 bool
DWORD* pTimerArgs; // 0x7C
DWORD dwSoundSync; // 0x80
DWORD _6[2]; // 0x84
WORD wX; // 0x8C
WORD wY; // 0x8E
DWORD _7; // 0x90
DWORD dwOwnerType; // 0x94
DWORD dwOwnerId; // 0x98
DWORD _8[2]; // 0x9C
OverheadMsg* pOMsg; // 0xA4
Info* pInfo; // 0xA8
DWORD _9[6]; // 0xAC
DWORD dwFlags; // 0xC4
DWORD dwFlags2; // 0xC8
DWORD _10[5]; // 0xCC
UnitAny* pChangedNext; // 0xE0
UnitAny* pListNext; // 0xE4 -> 0xD8
UnitAny* pRoomNext; // 0xE8
};
struct UnitHashTable {
UnitAny* table[128];
};
struct WardenClientRegion_t {
DWORD cbAllocSize; //+00
DWORD offsetFunc1; //+04
DWORD offsetRelocAddressTable; //+08
DWORD nRelocCount; //+0c
DWORD offsetWardenSetup; //+10
DWORD _2[2];
DWORD offsetImportAddressTable; //+1c
DWORD nImportDllCount; //+20
DWORD nSectionCount; //+24
};
struct SMemBlock_t {
DWORD _1[6];
DWORD cbSize; //+18
DWORD _2[31];
BYTE data[1]; //+98
};
struct WardenClient_t {
WardenClientRegion_t* pWardenRegion; //+00
DWORD cbSize; //+04
DWORD nModuleCount; //+08
DWORD param; //+0c
DWORD fnSetupWarden; //+10
};
struct WardenIATInfo_t {
DWORD offsetModuleName;
DWORD offsetImportTable;
};
#pragma pack(push)
#pragma pack(1)
struct NPCMenu {
DWORD dwNPCClassId;
DWORD dwEntryAmount;
WORD wEntryId1;
WORD wEntryId2;
WORD wEntryId3;
WORD wEntryId4;
WORD _1;
DWORD dwEntryFunc1;
DWORD dwEntryFunc2;
DWORD dwEntryFunc3;
DWORD dwEntryFunc4;
BYTE _2[5];
};
struct OverheadMsg {
DWORD _1;
DWORD dwTrigger;
DWORD _2[2];
char Msg[232];
};
#pragma pack(pop)
struct D2MSG {
HWND myHWND;
char lpBuf[256];
};
struct InventoryLayout {
BYTE SlotWidth;
BYTE SlotHeight;
BYTE unk1;
BYTE unk2;
DWORD Left;
DWORD Right;
DWORD Top;
DWORD Bottom;
BYTE SlotPixelWidth;
BYTE SlotPixelHeight;
};
struct MpqTable;
struct sgptDataTable {
MpqTable* pPlayerClass;
DWORD dwPlayerClassRecords;
MpqTable* pBodyLocs;
DWORD dwBodyLocsRecords;
MpqTable* pStorePage;
DWORD dwStorePageRecords;
MpqTable* pElemTypes;
};
struct MessageHandlerList {
DWORD message;
DWORD unk_4;
DWORD(__stdcall* handler)(void*);
struct MessageHandlerList* next;
};
struct MessageHandlerHashTable {
struct MessageHandlerList** table;
DWORD length;
};
struct WindowHandlerHashTable {
struct WindowHandlerList** table;
DWORD length;
};
struct WindowHandlerList {
DWORD unk_0;
HWND hWnd;
DWORD unk_8;
struct MessageHandlerHashTable* msgHandlers;
struct WindowHandlerList* next;
};
// Not sure of the location of handler and this struct inside Info.
// Could be this struct is later and handler is earlier, but this is the safest
// for now.
struct TransactionDialogsLine_t {
wchar_t text[120]; // 0x000
DWORD unk[6]; // 0x0F0
void(__stdcall* handler)(); // 0x108
DWORD bMaybeSelectable; // 0x10C
};
struct TransactionDialogsInfo_t {
DWORD unk[0x14]; // 0x000
DWORD numLines; // 0x050
DWORD unk_2[0x5]; // 0x054
TransactionDialogsLine_t dialogLines[10]; // 0x068
void* something; // 0xB08
};
#pragma warning(pop)
#pragma optimize("", on)
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sylar_game_dev/d2bs.git
git@gitee.com:sylar_game_dev/d2bs.git
sylar_game_dev
d2bs
d2bs
master

搜索帮助