Stats display refactor using ini file done.

This commit is contained in:
Hash Borgir
2024-05-02 21:43:43 -06:00
parent f8349e6ba1
commit 7fd617abd7
176 changed files with 1731 additions and 1866 deletions

View File

@@ -4,7 +4,7 @@
// "CIni" is a simple API wrap class used for ini file access.
// The purpose of this class is to make ini file access more
// convenient than direct API calls.
//
//
// This file is distributed "as is" and without any expressed or implied
// warranties. The author holds no responsibilities for any possible damages
// or loss of data that are caused by use of this file. The user must assume
@@ -42,7 +42,7 @@
// If MFC is linked, we will use CStringArray for great convenience
#ifdef __AFXWIN_H__
#include <afxtempl.h>
#include <afxtempl.h>
#endif
// Number bases
@@ -59,11 +59,11 @@
// string, the 2nd parameter is a 32-bit user defined data, this parameter can
// be NULL. The parsing will terminate if this function returns zero. To use
// the callback, function pointer needs to be passed to "CIni::ParseDNTString".
typedef BOOL (CALLBACK *SUBSTRPROC)(LPCTSTR, LPVOID);
typedef BOOL(CALLBACK* SUBSTRPROC)(LPCTSTR, LPVOID);
class CIni
{
public:
public:
//-----------------------------------------------------------
// Constructors & Destructor
@@ -80,10 +80,10 @@ public:
#ifdef __AFXWIN_H__
CString GetPathName() const;
#endif
//------------------------------------------------------------
// String Access
//------------------------------------------------------------
//------------------------------------------------------------
DWORD GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dwBufSize, LPCTSTR lpDefault = NULL) const;
#ifdef __AFXWIN_H__
CString GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault = NULL) const;
@@ -93,32 +93,32 @@ public:
// Read a string from the ini file, append it with another string then write it
// back to the ini file.
BOOL AppendString(LPCTSTR Section, LPCTSTR lpKey, LPCTSTR lpString) const;
//------------------------------------------------------------
// Ini File String Array Access
//------------------------------------------------------------
//------------------------------------------------------------
// Parse the string retrieved from the ini file and split it into a set of sub strings.
DWORD GetArray(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dwBufSize, LPCTSTR lpDelimiter = NULL, BOOL bTrimString = TRUE) const;
#ifdef __AFXWIN_H__
void GetArray(LPCTSTR lpSection, LPCTSTR lpKey, CStringArray* pArray, LPCTSTR lpDelimiter = NULL, BOOL bTrimString = TRUE) const;
BOOL WriteArray(LPCTSTR lpSection, LPCTSTR lpKey, const CStringArray* pArray, int nWriteCount = -1, LPCTSTR lpDelimiter = NULL) const;
#endif
#endif
//------------------------------------------------------------
// Primitive Data Type Access
//------------------------------------------------------------
int GetInt(LPCTSTR lpSection, LPCTSTR lpKey, int nDefault, int nBase = BASE_DECIMAL) const;
BOOL WriteInt(LPCTSTR lpSection, LPCTSTR lpKey, int nValue, int nBase = BASE_DECIMAL) const;
BOOL IncreaseInt(LPCTSTR lpSection, LPCTSTR lpKey, int nIncrease = 1, int nBase = BASE_DECIMAL) const;
UINT GetUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nDefault, int nBase = BASE_DECIMAL) const;
BOOL WriteUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nValue, int nBase = BASE_DECIMAL) const;
BOOL IncreaseUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nIncrease = 1, int nBase = BASE_DECIMAL) const;
BOOL GetBool(LPCTSTR lpSection, LPCTSTR lpKey, BOOL bDefault) const;
BOOL WriteBool(LPCTSTR lpSection, LPCTSTR lpKey, BOOL bValue) const;
BOOL InvertBool(LPCTSTR lpSection, LPCTSTR lpKey) const;
double GetDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fDefault) const;
BOOL WriteDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fValue, int nPrecision = -1) const;
BOOL IncreaseDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fIncrease, int nPrecision = -1) const;
@@ -131,14 +131,14 @@ public:
//------------------------------------------------------------
POINT GetPoint(LPCTSTR lpSection, LPCTSTR lpKey, POINT ptDefault) const;
BOOL WritePoint(LPCTSTR lpSection, LPCTSTR lpKey, POINT pt) const;
RECT GetRect(LPCTSTR lpSection, LPCTSTR lpKey, RECT rcDefault) const;
BOOL WriteRect(LPCTSTR lpSection, LPCTSTR lpKey, RECT rc) const;
DWORD GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset = 0) const;
BOOL WriteDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWORD dwDataSize) const;
BOOL AppendDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWORD dwDataSize) const;
//------------------------------------------------------------
// Section Operations
//------------------------------------------------------------
@@ -150,17 +150,17 @@ public:
BOOL CopySection(LPCTSTR lpSrcSection, LPCTSTR lpDestSection, BOOL bFailIfExist) const;
BOOL MoveSection(LPCTSTR lpSrcSection, LPCTSTR lpDestSection, BOOL bFailIfExist = TRUE) const;
BOOL DeleteSection(LPCTSTR lpSection) const;
//------------------------------------------------------------
// Key Operations
//------------------------------------------------------------
BOOL IsKeyExist(LPCTSTR lpSection, LPCTSTR lpKey) const;
BOOL IsKeyExist(LPCTSTR lpSection, LPCTSTR lpKey) const;
DWORD GetKeyLines(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) const;
#ifdef __AFXWIN_H__
void GetKeyLines(LPCTSTR lpSection, CStringArray* pArray) const;
#endif
DWORD GetKeyNames(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) const;
#ifdef __AFXWIN_H__
#ifdef __AFXWIN_H__
void GetKeyNames(LPCTSTR lpSection, CStringArray* pArray) const;
#endif
BOOL CopyKey(LPCTSTR lpSrcSection, LPCTSTR lpSrcKey, LPCTSTR lpDestSection, LPCTSTR lpDestKey, BOOL bFailIfExist) const;
@@ -176,8 +176,8 @@ public:
// Check for Whether a String Representing TRUE or FALSE
//------------------------------------------------------------
static BOOL StringToBool(LPCTSTR lpString, BOOL bDefault = FALSE);
protected:
protected:
//------------------------------------------------------------
// Helper Functions
@@ -191,7 +191,7 @@ protected:
static void __IntToString(int nNumber, LPTSTR lpBuffer, int nBase);
static void __UIntToString(UINT nNumber, LPTSTR lpBuffer, int nBase);
static BOOL CALLBACK __SubStrCompare(LPCTSTR lpString1, LPVOID lpParam);
static BOOL CALLBACK __KeyPairProc(LPCTSTR lpString, LPVOID lpParam);
static BOOL CALLBACK __KeyPairProc(LPCTSTR lpString, LPVOID lpParam);
#ifdef __AFXWIN_H__
static BOOL CALLBACK __SubStrAdd(LPCTSTR lpString, LPVOID lpParam);
#endif

View File

@@ -9,7 +9,7 @@ class config : public singleton<config> {
bool m_unlock_fps;
bool m_prevent_minimize;
uint32_t m_gold_pickup_range;
public:
explicit config(token);
};

View File

@@ -62,7 +62,7 @@ namespace hooking {
template<size_t TOrdinal, typename TOrig>
mh_status_t hook(void* base, void* detour, TOrig** original) {
auto fn = GetProcAddress(reinterpret_cast<HMODULE>(base),
reinterpret_cast<LPCSTR>(TOrdinal));
reinterpret_cast<LPCSTR>(TOrdinal));
return hook(fn, detour, original);
}

View File

@@ -45,7 +45,7 @@ namespace details {
TRet operator()(Args... args) {
if (!m_function_ptr) {
m_function_ptr = reinterpret_cast<decltype(m_function_ptr)>(GetProcAddress(reinterpret_cast<HMODULE>(m_base),
reinterpret_cast<LPCSTR>(m_ordinal)));
reinterpret_cast<LPCSTR>(m_ordinal)));
}
return reinterpret_cast<TRet(__cdecl*)(Args...)>(m_function_ptr)(args...);
@@ -67,7 +67,7 @@ namespace details {
TRet operator()(Args... args) {
if (!m_function_ptr) {
m_function_ptr = reinterpret_cast<decltype(m_function_ptr)>(GetProcAddress(reinterpret_cast<HMODULE>(m_base),
reinterpret_cast<LPCSTR>(m_ordinal)));
reinterpret_cast<LPCSTR>(m_ordinal)));
}
return reinterpret_cast<TRet(__stdcall*)(Args...)>(m_function_ptr)(args...);
@@ -89,7 +89,7 @@ namespace details {
TRet operator()(Args... args) {
if (!m_function_ptr) {
m_function_ptr = reinterpret_cast<decltype(m_function_ptr)>(GetProcAddress(reinterpret_cast<HMODULE>(m_base),
reinterpret_cast<LPCSTR>(m_ordinal)));
reinterpret_cast<LPCSTR>(m_ordinal)));
}
return reinterpret_cast<TRet(__fastcall*)(Args...)>(m_function_ptr)(args...);

View File

@@ -13,25 +13,16 @@
struct StatEntry {
std::wstring stat_display_string;
diablo2::ui_color_t colorStat, colorStatValue;
int x1, y1, x2, y2, is_item_stat, item_type_id, stat = 0; // x1,y1 stat_display_string | x2,y2 statValue
int x1, y1, x2, y2, is_item_stat, item_type_id, stat, op, param = 0; // x1,y1 stat_display_string | x2,y2 statValue
};
extern std::vector<StatEntry> globalStatsVector; // Declaration of the global variable
extern diablo2::structures::gfxdata g_gfxdata; // global gfxdata
extern int randStat;
extern int randStatRangeLow;
extern int randStatRangeHigh;
extern int randStatBool;
extern bool m_stats_enabled;
extern bool m_help_enabled;
extern bool m_cube_enabled;
extern bool m_stash_enabled;
namespace diablo2 {

View File

@@ -24,7 +24,7 @@ namespace d2_tweaks {
static void save(const char* name);
static void load(const char* name);
static void remove(const char* name);
private:
loot_filter_settings() : size(sizeof(loot_filter_settings)),
alt_only(false), show_gold(true), show_runes(true), show_gems(true), reserved{}

View File

@@ -61,7 +61,6 @@ namespace d2_tweaks {
//handle hovering over item and actual click
static void __fastcall handle_dropped_items(diablo2::structures::unit* unit, void* edx);
};
}
}
}

View File

@@ -20,6 +20,7 @@ namespace d2_tweaks {
ui::controls::button* m_btn_toggle_help;
ui::controls::button* m_btn_toggle_cube;
ui::controls::button* m_btn_toggle_stash;
menu* m_filter_settings_menu;
bool m_show;
public:

View File

@@ -226,7 +226,6 @@ namespace d2_tweaks {
packet_header() : d2_packet_type(0xBB), message_type(0) {}
};
struct d2_entity_action_cs : packet_header {
uint32_t action;
uint32_t entity_id;
@@ -274,7 +273,6 @@ namespace d2_tweaks {
}
};
struct inventory_sort_sc : packet_header {
uint8_t page;
uint8_t tx;
@@ -300,7 +298,6 @@ namespace d2_tweaks {
damage_type_t damage_type;
uint32_t damage;
uint32_t currentHp; // New field for current hit points
uint32_t maxHp; // New field for maximum hit points
@@ -400,7 +397,7 @@ namespace d2_tweaks {
message_type = MESSAGE_TYPE_TRADER_UPDATE;
}
};
#pragma pack(pop)
}
}

View File

@@ -24,11 +24,11 @@ namespace d2_tweaks {
void init() override;
bool handle_packet(diablo2::structures::game* game, diablo2::structures::unit* player,
common::packet_header* packet) override;
common::packet_header* packet) override;
private:
bool sort(diablo2::structures::game* game, diablo2::structures::unit* player, uint8_t page);
bool find_free_space(diablo2::structures::inventory* inv,
diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y, bool isCharmZone);
diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y, bool isCharmZone);
};
}
}

View File

@@ -24,7 +24,7 @@ namespace d2_tweaks {
void init() override;
bool handle_packet(diablo2::structures::game* game, diablo2::structures::unit* player,
common::packet_header* packet) override;
common::packet_header* packet) override;
void tick(diablo2::structures::game* game, diablo2::structures::unit* unit) override;
};
}

View File

@@ -24,10 +24,10 @@ namespace d2_tweaks {
void init() override;
bool handle_packet(diablo2::structures::game* game, diablo2::structures::unit* player,
common::packet_header* packet) override;
common::packet_header* packet) override;
private:
bool find_free_space(diablo2::structures::inventory* inv,
diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y);
diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y);
};
}
}

View File

@@ -22,10 +22,10 @@ namespace d2_tweaks {
void tick(diablo2::structures::game* game, diablo2::structures::unit* unit) override;
bool handle_packet(diablo2::structures::game* game, diablo2::structures::unit* player, common::packet_header* packet) override;
//private:
// bool find_free_space(diablo2::structures::inventory* inv, diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y);
// bool send_to_cube(diablo2::structures::game* game, diablo2::structures::unit* player, diablo2::structures::unit* item);
// bool move_item_to(diablo2::structures::game* game, diablo2::structures::unit* player, common::packet_header* packet);
//private:
// bool find_free_space(diablo2::structures::inventory* inv, diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y);
// bool send_to_cube(diablo2::structures::game* game, diablo2::structures::unit* player, diablo2::structures::unit* item);
// bool move_item_to(diablo2::structures::game* game, diablo2::structures::unit* player, common::packet_header* packet);
};
}
}

View File

@@ -47,7 +47,7 @@ namespace d2_tweaks {
diablo2::structures::unit* get_server_unit(diablo2::structures::game* game, uint32_t guid, diablo2::structures::unit_type_t type);
void iterate_server_units(diablo2::structures::game* game, diablo2::structures::unit_type_t type,
const std::function<bool(diablo2::structures::unit*)>& cb);
const std::function<bool(diablo2::structures::unit*)>& cb);
private:
static int32_t __fastcall net_tick(diablo2::structures::game* game, diablo2::structures::unit* unit, int32_t a3, int32_t a4);
};

View File

@@ -40,7 +40,7 @@ namespace d2_tweaks {
std::vector<respos> m_respos;
public:
button(menu* menu, const rect& rect, const std::function<void()>& onClick,
common::asset* image, int32_t frameDown, int32_t frameUp, int32_t clickSound = -1);
common::asset* image, int32_t frameDown, int32_t frameUp, int32_t clickSound = -1);
explicit button(menu* menu, const pugi::xml_node& node);
virtual ~button();

View File

@@ -35,7 +35,7 @@ namespace d2_tweaks {
std::function<void(bool)> m_on_click;
public:
explicit checkbox(menu* menu, const std::wstring& text, const rect& rect, const std::function<void()>& onClick,
common::asset* image, int32_t frameChecked, int32_t frameUnchecked, int32_t clickSound = -1);
common::asset* image, int32_t frameChecked, int32_t frameUnchecked, int32_t clickSound = -1);
explicit checkbox(menu* menu, const pugi::xml_node& node);
void set_x(int32_t value) override;

View File

@@ -115,7 +115,6 @@ namespace d2_tweaks {
virtual void middle_mouse(int32_t offsetX, int32_t offsetY, bool up, bool& block) {}
virtual void mouse_wheel(int32_t offsetX, int32_t offsetY, bool up, bool& block) {}
virtual void key_event(int32_t offsetX, int32_t offsetY, uint32_t key, bool up, bool& block) = 0;
};
}

View File

@@ -9,7 +9,6 @@
namespace d2_tweaks {
namespace ui {
namespace controls {
class label : public control {
std::wstring m_text;
bool m_text_owned;
@@ -19,8 +18,8 @@ namespace d2_tweaks {
std::vector<respos> m_respos;
public:
explicit label(menu* menu, const std::wstring& text, int32_t x = 0, int32_t y = 0,
diablo2::ui_color_t color = diablo2::UI_COLOR_WHITE,
diablo2::ui_font_t font = diablo2::UI_FONT_16);
diablo2::ui_color_t color = diablo2::UI_COLOR_WHITE,
diablo2::ui_font_t font = diablo2::UI_FONT_16);
explicit label(menu* menu, const pugi::xml_node& node);
void set_text(const std::wstring& text) {
@@ -31,7 +30,6 @@ namespace d2_tweaks {
return m_text;
}
diablo2::ui_color_t get_color() const {
return m_color;
}

View File

@@ -35,7 +35,6 @@ namespace d2_tweaks {
bool process_middle_mouse(bool up);
bool process_mouse_wheel(bool up);
bool process_key_event(uint32_t key, bool up);
};
}

View File

@@ -53,13 +53,12 @@ namespace diablo2 {
static int32_t get_view_offset_x();
static int32_t get_view_offset_y();
static uint32_t get_mouse_x();
static uint32_t get_mouse_y();
static bool get_ui_window_state(ui_window_t window);
static void* get_buysellbtn();
static void play_sound(uint32_t soundId, structures::unit* u, uint32_t ticks, BOOL prePick, uint32_t cache);
static structures::unit* get_unit_by_guid(int32_t type, int32_t guid);
@@ -68,14 +67,14 @@ namespace diablo2 {
static void print_chat(wchar_t* string, uint32_t color);
static bool cache_gfx_data(structures::gfxdata* gfxData,
structures::unit* unit,
structures::cellfile* cellfFile,
int32_t direction,
int32_t frame,
int32_t* outIndex,
int8_t flags,
int32_t colorTint);
structures::unit* unit,
structures::cellfile* cellfFile,
int32_t direction,
int32_t frame,
int32_t* outIndex,
int8_t flags,
int32_t colorTint);
static structures::cellfile* load_gfx_resource(char* path);
static int32_t unload_gfx_resource(structures::cellfile* handle);
static int32_t send_to_server_7(BYTE type, DWORD num, DWORD unk1, DWORD unk2);
@@ -90,6 +89,5 @@ namespace diablo2 {
static int32_t send_to_server_9(BYTE type, DWORD num, DWORD unk1);
static void set_ui_toggle(int nToggle, int nUIState, BOOL bToggle);
};
}

File diff suppressed because it is too large Load Diff

View File

@@ -43,10 +43,9 @@ namespace diablo2 {
static bool __fastcall pickup_item(structures::game* game, structures::unit* player, uint32_t guid, uint32_t* ptrItemCarried);
static structures::unit* get_unit_owner(structures::game* game, structures::unit* unit);
static void* iterate_unit_pets(structures::game* game, structures::unit* unit,
const std::function<void(structures::game*, structures::unit*, structures::unit*)>& cb);
const std::function<void(structures::game*, structures::unit*, structures::unit*)>& cb);
static void update_inventory_items(structures::game* game, structures::unit* player);
static uint32_t __fastcall diablo2::d2_game::transmogrify(diablo2::structures::game* game, diablo2::structures::unit* player);
};
}

View File

@@ -18,6 +18,5 @@ namespace diablo2 {
static int32_t get_resolution_mode();
static void draw_image(structures::gfxdata* data, uint32_t x, uint32_t y, int32_t gamma, int32_t drawType, void* palette);
static void draw_filled_rect(int left, int top, int right, int bottom, DWORD color, int transTbl);
};
}

View File

@@ -26,7 +26,7 @@ namespace diablo2 {
uint32_t dwCostAdd; //0x80
uint16_t wDropSound; //0x84
uint16_t wUseSound; //0x86
uint32_t dwDropSfxFrame; //0x88
uint32_t dwDropSfxFrame; //0x88
uint32_t dwProp1; //0x8C
uint32_t dwPar1; //0x90
uint32_t dwMin1; //0x94

View File

@@ -106,7 +106,7 @@ namespace diablo2 {
uint32_t* pHirelings; //+000001A0 055D8CD8 hirelings.txt (limit = 256)
int nHirelings; //+000001A4 00000078 # of hirelings records
int pMercFirst[256]; //+000001A8 00000000 array of 256 integers (namefirst column from hirelings.txt)
int pMercLast[256]; //+000005A8 0000000C array of 256 integers (namelast column from hirelings.txt)
int pMercLast[256]; //+000005A8 0000000C array of 256 integers (namelast column from hirelings.txt)
void* pNPCs; //+000009A8 05724F74 npcs.txt
int nNPCs; //+000009AC 00000011 # of npcs records
void* pColours; //+000009B0 01417568 colors.txt

View File

@@ -69,9 +69,9 @@ namespace diablo2 {
ITEMFLAG_FROMPLAYER = 0x01000000,
ITEMFLAG_RUNEuint16_t = 0x04000000
*/
uint32_t guid1; //+1C Global Unique ID 1
uint32_t guid2; //+20 Global Unique ID 2
uint32_t guid3; //+24 Global Unique ID 3
uint32_t guid1; //+1C Global Unique ID 1
uint32_t guid2; //+20 Global Unique ID 2
uint32_t guid3; //+24 Global Unique ID 3
uint32_t unique_id; //+28
uint8_t ilvl; //+2C
uint8_t uk1[0x03]; //+2D
@@ -108,7 +108,7 @@ namespace diablo2 {
uint8_t item_data3; //+47 //D2Common10854 D2Common10853
uint8_t p_ear_level; //+48
uint8_t var_gfx; //+49
char i_name[0x12]; //+4A //inscribed/ear get_name
char i_name[0x12]; //+4A //inscribed/ear get_name
inventory* inventory; //+5C
unit* pt_prev_item; //+60
unit* pt_next_item; //+64

View File

@@ -5,7 +5,7 @@
namespace diablo2 {
namespace structures {
struct game;
struct net_client {
uint32_t client_id; //+00
uint8_t uk1[0x06]; //+04

View File

@@ -4,52 +4,52 @@
namespace diablo2 {
namespace structures {
struct inventory;
struct inventory;
struct npc_gamble //sizeof 0xC
{
inventory* pInventory; //+00
uint32_t dwGUID; //+04 npc_gamble* pNext; //+08
};
struct npc_gamble //sizeof 0xC
{
inventory* pInventory; //+00
uint32_t dwGUID; //+04 npc_gamble* pNext; //+08
};
struct npc_record //sizeof 0x44
{
int nNPC; //+00
inventory* pInventory; //+04
npc_gamble* pGamble; //+08
bool bGambleInit; //+0C
uint32_t* pMercData; //+10 //D2MercDataStrc*
uint32_t* pEvent; //+14 //D2NPCEventStrc*
uint32_t* pVendorChain; //+18 //D2VendorChainStrc*
bool bTrading; //+1C
union
{
struct
{
union
{
bool bFlags[8]; //+20
struct
{
bool bVendorInit; //+20
bool bHireInit; //+21
uint8_t nAct; //+22
bool bTrader; //+23
bool bLevelRefresh; //+24
bool bInited; //+25
bool bForceVendor; //+26
bool bRefreshInventory; //+27
};
};
struct npc_record //sizeof 0x44
{
int nNPC; //+00
inventory* pInventory; //+04
npc_gamble* pGamble; //+08
bool bGambleInit; //+0C
uint32_t* pMercData; //+10 //D2MercDataStrc*
uint32_t* pEvent; //+14 //D2NPCEventStrc*
uint32_t* pVendorChain; //+18 //D2VendorChainStrc*
bool bTrading; //+1C
union
{
struct
{
union
{
bool bFlags[8]; //+20
struct
{
bool bVendorInit; //+20
bool bHireInit; //+21
uint8_t nAct; //+22
bool bTrader; //+23
bool bLevelRefresh; //+24
bool bInited; //+25
bool bForceVendor; //+26
bool bRefreshInventory; //+27
};
};
uint32_t dwTicks; //+28
uint32_t pProxy[4]; //+2C //D2UnitProxyStrc
uint32_t dwUnk; //+3C
uint32_t dwNPCGUID; //+40
};
uint32_t dwTicks; //+28
uint32_t pProxy[4]; //+2C //D2UnitProxyStrc
uint32_t dwUnk; //+3C
uint32_t dwNPCGUID; //+40
};
uint32_t pTrade; //+20 //D2NPCTradeStrc
};
};
}
uint32_t pTrade; //+20 //D2NPCTradeStrc
};
};
}
}

View File

@@ -5,20 +5,20 @@
namespace diablo2 {
namespace structures {
struct net_client;
struct player_data {
char name[0x10]; //+00 Player Name
void* pt_quest[3]; //+10 Quest Pointers for each difficulty
char name[0x10]; //+00 Player Name
void* pt_quest[3]; //+10 Quest Pointers for each difficulty
uint8_t uk1[0x18]; //+1C //before : 0x14
void* pt_arena_unit; //+34 ptArena for the Unit
void* pt_arena_unit; //+34 ptArena for the Unit
uint8_t uk2[0x4]; //+38 //before : 0x7
uint16_t mp_source_portal_unique_id; //+3C Source Portal Unique_ID
uint16_t mp_source_portal_unique_id; //+3C Source Portal Unique_ID
uint8_t uk3[0x2]; //+3E
uint16_t mp_dest_portal_unique_id; //+40 Destination Portal Unique_ID
uint8_t uk4[0x06]; //+42
uint8_t pt_object_un_id; //+48 Object UniqueID for TownPortals
uint8_t uk5[0x53]; //+49
net_client* net_client; //+9C ptClient
uint16_t mp_dest_portal_unique_id; //+40 Destination Portal Unique_ID
uint8_t uk4[0x06]; //+42
uint8_t pt_object_un_id; //+48 Object UniqueID for TownPortals
uint8_t uk5[0x53]; //+49
net_client* net_client; //+9C ptClient
};
}
}

View File

@@ -5,7 +5,7 @@
namespace diablo2 {
namespace structures {
struct unit;
struct room//size=0x80
{
//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units

View File

@@ -22,8 +22,6 @@ namespace diablo2 {
struct statslistex;
struct quest_record;
struct npc_record;
enum class unit_type_t : int32_t {
UNIT_TYPE_PLAYER = 0,
@@ -76,8 +74,6 @@ namespace diablo2 {
ITEMFLAG_ITEM = 0x08000000
};
struct unit {
unit_type_t type;

View File

@@ -15,7 +15,7 @@ namespace diablo2 {
public:
explicit mpq_streambuf(const std::string& path);
~mpq_streambuf();
protected:
int_type underflow() override;
};
@@ -23,8 +23,6 @@ namespace diablo2 {
mpq_streambuf m_streambuf;
public:
explicit mpq_ifstream(const std::string& path);
};
}
}