mirror of
https://gitlab.com/hashborgir/d2tweaks-rnd2k.git
synced 2025-09-18 17:42:08 +00:00
Compare commits
39 Commits
main
...
c0f1e91e4a
Author | SHA1 | Date | |
---|---|---|---|
|
c0f1e91e4a | ||
|
cce65db976 | ||
|
b4b85425aa | ||
|
6cc15930ca | ||
|
106bef4f85 | ||
|
4d21c90f5a | ||
|
058db50095 | ||
|
43defeb6d8 | ||
|
dc76f5627b | ||
|
d75e045bc7 | ||
|
e431b3f7d4 | ||
|
551f3e44f2 | ||
|
41a4c4d181 | ||
|
9719a540df | ||
|
408aee62c1 | ||
|
a61dce8f03 | ||
|
5f220fa23e | ||
|
4e02101d5d | ||
|
ee810d5f38 | ||
|
343fa4253b | ||
|
331d1d75fe | ||
|
95f7d9bed3 | ||
|
3a7be104d9 | ||
|
6141cc0a7b | ||
|
9e57031fdd | ||
|
69965f77d1 | ||
|
aec114d05c | ||
|
06c28f4d56 | ||
|
7fd617abd7 | ||
|
f8349e6ba1 | ||
|
d33c619372 | ||
|
56a49ff1e0 | ||
|
4d8fe9b2e2 | ||
|
8f5c45d1c5 | ||
|
b5587695e8 | ||
|
27d93fa91e | ||
|
78fcd692b2 | ||
|
87d4758efc | ||
|
74f1d9de01 |
2
ClassDiagram.cd
Normal file
2
ClassDiagram.cd
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ClassDiagram />
|
BIN
D2tweaks.aps
Normal file
BIN
D2tweaks.aps
Normal file
Binary file not shown.
@@ -47,12 +47,12 @@
|
|||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<OutDir>..\..\Diablo II\MODS\ironman-dev</OutDir>
|
<OutDir>..\..\Diablo II\MODS\ironman-dev\</OutDir>
|
||||||
<IntDir>$(SolutionDir)Build\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)Build\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<OutDir>..\..\Diablo II\MODS\ironman-dev</OutDir>
|
<OutDir>..\..\Diablo II\MODS\ironman-dev\</OutDir>
|
||||||
<IntDir>$(SolutionDir)Build\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)Build\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -180,6 +180,7 @@
|
|||||||
<ClCompile Include="vendor\minhook\src\trampoline.c" />
|
<ClCompile Include="vendor\minhook\src\trampoline.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="ClassDiagram.cd" />
|
||||||
<None Include="vendor\minhook\dll_resources\MinHook.def" />
|
<None Include="vendor\minhook\dll_resources\MinHook.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -279,6 +280,7 @@
|
|||||||
<ClInclude Include="include\diablo2\utils\screen.h" />
|
<ClInclude Include="include\diablo2\utils\screen.h" />
|
||||||
<ClInclude Include="include\fw\pool.h" />
|
<ClInclude Include="include\fw\pool.h" />
|
||||||
<ClInclude Include="include\fw\singleton.h" />
|
<ClInclude Include="include\fw\singleton.h" />
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
<ClInclude Include="vendor\D2Template\D2Template.h" />
|
<ClInclude Include="vendor\D2Template\D2Template.h" />
|
||||||
<ClInclude Include="vendor\D2Template\D2TemplateConstants.h" />
|
<ClInclude Include="vendor\D2Template\D2TemplateConstants.h" />
|
||||||
<ClInclude Include="vendor\D2Template\D2TemplateDataTables.h" />
|
<ClInclude Include="vendor\D2Template\D2TemplateDataTables.h" />
|
||||||
|
77
build/Debug/D2tweaks.Build.CppClean.log
Normal file
77
build/Debug/D2tweaks.Build.CppClean.log
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\common\asm_code.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\common\hooking.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2win.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2gfx.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2common.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2lang.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2game.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2net.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\controls\checkbox.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\controls\image.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\controls\label.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\controls\button.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\loot_filter\loot_filter.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\loot_filter\loot_filter_settings_toggle_menu.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\loot_filter\loot_filter_settings_menu.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\common\string_utils.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\common\config.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\common\ini.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vc143.pdb
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\client_module.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\small_patches\small_patches.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\common\common.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\common\asset_manager.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\server_module.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\controls\group.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\menu.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\ui\ui_manager.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2launch.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\fog.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\storm.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\d2cmp.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\utils\mpq_ifstream.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\diablo2\utils\screen.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\main.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\d2template\d2template.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\dllnotify\dllnotify.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\minhook\src\buffer.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\minhook\src\hook.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\minhook\src\trampoline.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\minhook\src\hde\hde32.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\vendor\minhook\src\hde\hde64.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\autosort\autosort_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\auto_gold_pickup\auto_gold_pickup_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\auto_item_pickup\auto_item_pickup_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\damage_display\damage_display_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\item_drop_message\item_drop_message_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\item_move\item_move_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\loot_filter\loot_filter_settings.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\test\test.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\trader_update\trader_update_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\client\modules\transmute\transmute_client.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\autosort\autosort_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\auto_gold_pickup\auto_gold_pickup_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\auto_item_pickup\auto_item_pickup_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\damage_display\damage_display_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\identify_on_pickup\identify_on_pickup_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\item_drop_message\item_drop_message_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\item_move\item_move_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\test\test.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\trader_update\trader_update_server.obj
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\src\d2tweaks\server\modules\transmute\transmute_server.obj
|
||||||
|
d:\diablo ii\mods\ironman-dev\d2tweaks.dll
|
||||||
|
d:\diablo ii\mods\ironman-dev\d2tweaks.pdb
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.ilk
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.pdb
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.vcxproj.filelistabsolute.txt
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\cl.command.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\cl.items.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\cl.read.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\cl.write.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\link.command.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\link.read.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\link.secondary.1.tlog
|
||||||
|
d:\vscode\d2tweaks-rnd2k\build\debug\d2tweaks.tlog\link.write.1.tlog
|
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,4 @@
|
|||||||
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(517,5): warning MSB8004: Output Directory does not end with a trailing slash. This build instance will add the slash as it is required to allow proper evaluation of the Output Directory.
|
autosort_client.cpp
|
||||||
ui_manager.cpp
|
D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\autosort\autosort_client.cpp(197,15): warning C4018: '<': signed/unsigned mismatch
|
||||||
|
D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\autosort\autosort_client.cpp(197,66): warning C4018: '<=': signed/unsigned mismatch
|
||||||
D2tweaks.vcxproj -> D:\Diablo II\MODS\ironman-dev\D2tweaks.dll
|
D2tweaks.vcxproj -> D:\Diablo II\MODS\ironman-dev\D2tweaks.dll
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1 @@
|
|||||||
D:\VSCode\D2tweaks_src_17.04.2024\Build\Debug\D2tweaks.dll
|
D:\VSCode\D2tweaks_src_17.04.2024\Build\Debug\D2tweaks.dll
|
||||||
D:\VSCode\d2tweaks-rnd2k\Build\Debug\D2tweaks.dll
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/Debug/vendor/D2Template/D2Template.obj
vendored
BIN
build/Debug/vendor/D2Template/D2Template.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/DllNotify/DllNotify.obj
vendored
BIN
build/Debug/vendor/DllNotify/DllNotify.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/minhook/src/buffer.obj
vendored
BIN
build/Debug/vendor/minhook/src/buffer.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/minhook/src/hde/hde32.obj
vendored
BIN
build/Debug/vendor/minhook/src/hde/hde32.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/minhook/src/hde/hde64.obj
vendored
BIN
build/Debug/vendor/minhook/src/hde/hde64.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/minhook/src/hook.obj
vendored
BIN
build/Debug/vendor/minhook/src/hook.obj
vendored
Binary file not shown.
BIN
build/Debug/vendor/minhook/src/trampoline.obj
vendored
BIN
build/Debug/vendor/minhook/src/trampoline.obj
vendored
Binary file not shown.
8
d2tweaks-rnd2k.code-workspace
Normal file
8
d2tweaks-rnd2k.code-workspace
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
// If MFC is linked, we will use CStringArray for great convenience
|
// If MFC is linked, we will use CStringArray for great convenience
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
#include <afxtempl.h>
|
#include <afxtempl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Number bases
|
// Number bases
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
// string, the 2nd parameter is a 32-bit user defined data, this parameter can
|
// 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
|
// be NULL. The parsing will terminate if this function returns zero. To use
|
||||||
// the callback, function pointer needs to be passed to "CIni::ParseDNTString".
|
// 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
|
class CIni
|
||||||
{
|
{
|
||||||
|
@@ -13,20 +13,17 @@
|
|||||||
struct StatEntry {
|
struct StatEntry {
|
||||||
std::wstring stat_display_string;
|
std::wstring stat_display_string;
|
||||||
diablo2::ui_color_t colorStat, colorStatValue;
|
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 std::vector<StatEntry> globalStatsVector; // Declaration of the global variable
|
||||||
|
|
||||||
extern diablo2::structures::gfxdata g_gfxdata; // global gfxdata
|
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_stats_enabled;
|
||||||
|
extern bool m_help_enabled;
|
||||||
|
extern bool m_cube_enabled;
|
||||||
|
extern bool m_stash_enabled;
|
||||||
|
|
||||||
namespace diablo2 {
|
namespace diablo2 {
|
||||||
namespace structures {
|
namespace structures {
|
||||||
|
@@ -15,9 +15,111 @@ namespace d2_tweaks {
|
|||||||
bool show_runes;
|
bool show_runes;
|
||||||
bool show_gems;
|
bool show_gems;
|
||||||
|
|
||||||
|
bool m_show_r01;
|
||||||
|
bool m_show_r02;
|
||||||
|
bool m_show_r03;
|
||||||
|
bool m_show_r04;
|
||||||
|
bool m_show_r05;
|
||||||
|
bool m_show_r06;
|
||||||
|
bool m_show_r07;
|
||||||
|
bool m_show_r08;
|
||||||
|
bool m_show_r09;
|
||||||
|
bool m_show_r10;
|
||||||
|
bool m_show_r11;
|
||||||
|
bool m_show_r12;
|
||||||
|
bool m_show_r13;
|
||||||
|
bool m_show_r14;
|
||||||
|
bool m_show_r15;
|
||||||
|
bool m_show_r16;
|
||||||
|
bool m_show_r17;
|
||||||
|
bool m_show_r18;
|
||||||
|
bool m_show_r19;
|
||||||
|
bool m_show_r20;
|
||||||
|
bool m_show_r21;
|
||||||
|
bool m_show_r22;
|
||||||
|
bool m_show_r23;
|
||||||
|
bool m_show_r24;
|
||||||
|
bool m_show_r25;
|
||||||
|
bool m_show_r26;
|
||||||
|
bool m_show_r27;
|
||||||
|
bool m_show_r28;
|
||||||
|
bool m_show_r29;
|
||||||
|
bool m_show_r30;
|
||||||
|
bool m_show_r31;
|
||||||
|
bool m_show_r32;
|
||||||
|
bool m_show_r33;
|
||||||
|
|
||||||
|
bool m_show_amethyst;
|
||||||
|
bool m_show_diamond;
|
||||||
|
bool m_show_emerald;
|
||||||
|
bool m_show_ruby;
|
||||||
|
bool m_show_sapphire;
|
||||||
|
bool m_show_skull;
|
||||||
|
bool m_show_topaz;
|
||||||
|
|
||||||
|
bool m_show_chipped;
|
||||||
|
bool m_show_flawed;
|
||||||
|
bool m_show_normal;
|
||||||
|
bool m_show_flawless;
|
||||||
|
bool m_show_perfect;
|
||||||
|
|
||||||
|
bool m_show_rough;
|
||||||
|
bool m_show_faded;
|
||||||
|
bool m_show_blemished;
|
||||||
|
bool m_show_cleaned;
|
||||||
|
bool m_show_triangle;
|
||||||
|
bool m_show_trangle_cut;
|
||||||
|
bool m_show_square;
|
||||||
|
bool m_show_square_cut;
|
||||||
|
bool m_show_regular;
|
||||||
|
bool m_show_regular_cut;
|
||||||
|
bool m_show_star;
|
||||||
|
bool m_show_star_cut;
|
||||||
|
bool m_show_imperial;
|
||||||
|
bool m_show_imperial_cut;
|
||||||
|
bool m_show_royal;
|
||||||
|
bool m_show_royal_cut;
|
||||||
|
bool m_show_spectacular;
|
||||||
|
bool m_show_legendary;
|
||||||
|
bool m_show_legendary_cut;
|
||||||
|
|
||||||
|
bool m_show_flourite;
|
||||||
|
bool m_show_jade;
|
||||||
|
bool m_show_argonite;
|
||||||
|
bool m_show_azurite;
|
||||||
|
bool m_show_sulpher;
|
||||||
|
bool m_show_quartz;
|
||||||
|
bool m_show_tiger_eye;
|
||||||
|
|
||||||
|
bool m_show_rejuv_potion;
|
||||||
|
bool m_show_full_rejuv_potion;
|
||||||
|
|
||||||
|
bool m_show_hp1;
|
||||||
|
bool m_show_hp2;
|
||||||
|
bool m_show_hp3;
|
||||||
|
bool m_show_hp4;
|
||||||
|
bool m_show_hp5;
|
||||||
|
|
||||||
|
bool m_show_mp1;
|
||||||
|
bool m_show_mp2;
|
||||||
|
bool m_show_mp3;
|
||||||
|
bool m_show_mp4;
|
||||||
|
bool m_show_mp5;
|
||||||
|
|
||||||
|
bool m_show_frp;
|
||||||
|
bool m_show_mrp;
|
||||||
|
bool m_show_prp;
|
||||||
|
bool m_show_crp;
|
||||||
|
bool m_show_lrp;
|
||||||
|
bool m_show_vps;
|
||||||
|
bool m_show_yps;
|
||||||
|
bool m_show_wms;
|
||||||
|
|
||||||
|
bool m_show_close;
|
||||||
|
|
||||||
bool quality_settings[static_cast<size_t>(diablo2::structures::item_quality_t::ITEM_QUALITY_COUNT)];
|
bool quality_settings[static_cast<size_t>(diablo2::structures::item_quality_t::ITEM_QUALITY_COUNT)];
|
||||||
|
|
||||||
char reserved[1004];
|
char reserved[888];
|
||||||
|
|
||||||
static loot_filter_settings& get();
|
static loot_filter_settings& get();
|
||||||
|
|
||||||
|
@@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
#include <d2tweaks/ui/menu.h>
|
#include <d2tweaks/ui/menu.h>
|
||||||
|
|
||||||
|
#include <chrono> // Add this line
|
||||||
|
#include <diablo2/d2common.h>
|
||||||
|
|
||||||
namespace diablo2 {
|
namespace diablo2 {
|
||||||
namespace structures {
|
namespace structures {
|
||||||
struct unit;
|
struct unit;
|
||||||
@@ -26,6 +29,108 @@ namespace d2_tweaks {
|
|||||||
ui::controls::checkbox* m_show_runes;
|
ui::controls::checkbox* m_show_runes;
|
||||||
ui::controls::checkbox* m_show_gems;
|
ui::controls::checkbox* m_show_gems;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_ruby;
|
||||||
|
ui::controls::checkbox* m_show_sapphire;
|
||||||
|
ui::controls::checkbox* m_show_emerald;
|
||||||
|
ui::controls::checkbox* m_show_diamond;
|
||||||
|
ui::controls::checkbox* m_show_topaz;
|
||||||
|
ui::controls::checkbox* m_show_amethyst;
|
||||||
|
ui::controls::checkbox* m_show_skull;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_r01;
|
||||||
|
ui::controls::checkbox* m_show_r02;
|
||||||
|
ui::controls::checkbox* m_show_r03;
|
||||||
|
ui::controls::checkbox* m_show_r04;
|
||||||
|
ui::controls::checkbox* m_show_r05;
|
||||||
|
ui::controls::checkbox* m_show_r06;
|
||||||
|
ui::controls::checkbox* m_show_r07;
|
||||||
|
ui::controls::checkbox* m_show_r08;
|
||||||
|
ui::controls::checkbox* m_show_r09;
|
||||||
|
ui::controls::checkbox* m_show_r10;
|
||||||
|
ui::controls::checkbox* m_show_r11;
|
||||||
|
ui::controls::checkbox* m_show_r12;
|
||||||
|
ui::controls::checkbox* m_show_r13;
|
||||||
|
ui::controls::checkbox* m_show_r14;
|
||||||
|
ui::controls::checkbox* m_show_r15;
|
||||||
|
ui::controls::checkbox* m_show_r16;
|
||||||
|
ui::controls::checkbox* m_show_r17;
|
||||||
|
ui::controls::checkbox* m_show_r18;
|
||||||
|
ui::controls::checkbox* m_show_r19;
|
||||||
|
ui::controls::checkbox* m_show_r20;
|
||||||
|
ui::controls::checkbox* m_show_r21;
|
||||||
|
ui::controls::checkbox* m_show_r22;
|
||||||
|
ui::controls::checkbox* m_show_r23;
|
||||||
|
ui::controls::checkbox* m_show_r24;
|
||||||
|
ui::controls::checkbox* m_show_r25;
|
||||||
|
ui::controls::checkbox* m_show_r26;
|
||||||
|
ui::controls::checkbox* m_show_r27;
|
||||||
|
ui::controls::checkbox* m_show_r28;
|
||||||
|
ui::controls::checkbox* m_show_r29;
|
||||||
|
ui::controls::checkbox* m_show_r30;
|
||||||
|
ui::controls::checkbox* m_show_r31;
|
||||||
|
ui::controls::checkbox* m_show_r32;
|
||||||
|
ui::controls::checkbox* m_show_r33;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_chipped;
|
||||||
|
ui::controls::checkbox* m_show_flawed;
|
||||||
|
ui::controls::checkbox* m_show_normal;
|
||||||
|
ui::controls::checkbox* m_show_flawless;
|
||||||
|
ui::controls::checkbox* m_show_perfect;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_flourite;
|
||||||
|
ui::controls::checkbox* m_show_jade;
|
||||||
|
ui::controls::checkbox* m_show_argonite;
|
||||||
|
ui::controls::checkbox* m_show_azurite;
|
||||||
|
ui::controls::checkbox* m_show_sulpher;
|
||||||
|
ui::controls::checkbox* m_show_quartz;
|
||||||
|
ui::controls::checkbox* m_show_tiger_eye;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_rough;
|
||||||
|
ui::controls::checkbox* m_show_faded;
|
||||||
|
ui::controls::checkbox* m_show_blemished;
|
||||||
|
ui::controls::checkbox* m_show_cleaned;
|
||||||
|
ui::controls::checkbox* m_show_triangle;
|
||||||
|
ui::controls::checkbox* m_show_trangle_cut;
|
||||||
|
ui::controls::checkbox* m_show_square;
|
||||||
|
ui::controls::checkbox* m_show_square_cut;
|
||||||
|
ui::controls::checkbox* m_show_regular;
|
||||||
|
ui::controls::checkbox* m_show_regular_cut;
|
||||||
|
ui::controls::checkbox* m_show_star;
|
||||||
|
ui::controls::checkbox* m_show_star_cut;
|
||||||
|
ui::controls::checkbox* m_show_imperial;
|
||||||
|
ui::controls::checkbox* m_show_imperial_cut;
|
||||||
|
ui::controls::checkbox* m_show_royal;
|
||||||
|
ui::controls::checkbox* m_show_royal_cut;
|
||||||
|
ui::controls::checkbox* m_show_spectacular;
|
||||||
|
ui::controls::checkbox* m_show_legendary;
|
||||||
|
ui::controls::checkbox* m_show_legendary_cut;
|
||||||
|
ui::controls::checkbox* m_show_rejuv_potion;
|
||||||
|
ui::controls::checkbox* m_show_full_rejuv_potion;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_hp1;
|
||||||
|
ui::controls::checkbox* m_show_hp2;
|
||||||
|
ui::controls::checkbox* m_show_hp3;
|
||||||
|
ui::controls::checkbox* m_show_hp4;
|
||||||
|
ui::controls::checkbox* m_show_hp5;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_mp1;
|
||||||
|
ui::controls::checkbox* m_show_mp2;
|
||||||
|
ui::controls::checkbox* m_show_mp3;
|
||||||
|
ui::controls::checkbox* m_show_mp4;
|
||||||
|
ui::controls::checkbox* m_show_mp5;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_frp;
|
||||||
|
ui::controls::checkbox* m_show_mrp;
|
||||||
|
ui::controls::checkbox* m_show_prp;
|
||||||
|
ui::controls::checkbox* m_show_crp;
|
||||||
|
ui::controls::checkbox* m_show_lrp;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_show_vps;
|
||||||
|
ui::controls::checkbox* m_show_yps;
|
||||||
|
ui::controls::checkbox* m_show_wms;
|
||||||
|
|
||||||
|
ui::controls::checkbox* m_close;
|
||||||
|
|
||||||
void(__fastcall* m_draw_dropped_items_names_original)(void*, void*);
|
void(__fastcall* m_draw_dropped_items_names_original)(void*, void*);
|
||||||
void(__fastcall* m_handle_dropped_items_original)(void*, void*);
|
void(__fastcall* m_handle_dropped_items_original)(void*, void*);
|
||||||
public:
|
public:
|
||||||
@@ -34,11 +139,118 @@ namespace d2_tweaks {
|
|||||||
void reload_settings();
|
void reload_settings();
|
||||||
|
|
||||||
void draw() override;
|
void draw() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string m_selected_gem;
|
||||||
|
|
||||||
|
std::chrono::steady_clock::time_point m_last_packet_sent;
|
||||||
|
|
||||||
|
void gem_checkbox_clicked(const std::string& gem);
|
||||||
|
void stone_checkbox_clicked(const std::string& gem);
|
||||||
|
|
||||||
void register_misc_checkboxes();
|
void register_misc_checkboxes();
|
||||||
void register_quality_checkboxes();
|
void register_quality_checkboxes();
|
||||||
|
|
||||||
void update_alt_only(bool value);
|
void update_alt_only(bool value);
|
||||||
|
|
||||||
|
|
||||||
|
void extract_item(bool value, int prop, uint32_t val, uint32_t rune, diablo2::unit_stats_t stat);
|
||||||
|
|
||||||
|
void extract_r01(bool value);
|
||||||
|
void extract_r02(bool value);
|
||||||
|
void extract_r03(bool value);
|
||||||
|
void extract_r04(bool value);
|
||||||
|
void extract_r05(bool value);
|
||||||
|
void extract_r06(bool value);
|
||||||
|
void extract_r07(bool value);
|
||||||
|
void extract_r08(bool value);
|
||||||
|
void extract_r09(bool value);
|
||||||
|
void extract_r10(bool value);
|
||||||
|
void extract_r11(bool value);
|
||||||
|
void extract_r12(bool value);
|
||||||
|
void extract_r13(bool value);
|
||||||
|
void extract_r14(bool value);
|
||||||
|
void extract_r15(bool value);
|
||||||
|
void extract_r16(bool value);
|
||||||
|
void extract_r17(bool value);
|
||||||
|
void extract_r18(bool value);
|
||||||
|
void extract_r19(bool value);
|
||||||
|
void extract_r20(bool value);
|
||||||
|
void extract_r21(bool value);
|
||||||
|
void extract_r22(bool value);
|
||||||
|
void extract_r23(bool value);
|
||||||
|
void extract_r24(bool value);
|
||||||
|
void extract_r25(bool value);
|
||||||
|
void extract_r26(bool value);
|
||||||
|
void extract_r27(bool value);
|
||||||
|
void extract_r28(bool value);
|
||||||
|
void extract_r29(bool value);
|
||||||
|
void extract_r30(bool value);
|
||||||
|
void extract_r31(bool value);
|
||||||
|
void extract_r32(bool value);
|
||||||
|
void extract_r33(bool value);
|
||||||
|
|
||||||
|
void extract_chipped(bool value);
|
||||||
|
void extract_flawed(bool value);
|
||||||
|
void extract_normal(bool value);
|
||||||
|
void extract_flawless(bool value);
|
||||||
|
void extract_perfect(bool value);
|
||||||
|
|
||||||
|
void extract_rough(bool value);
|
||||||
|
void extract_faded(bool value);
|
||||||
|
void extract_blemished(bool value);
|
||||||
|
void extract_cleaned(bool value);
|
||||||
|
void extract_triangle(bool value);
|
||||||
|
void extract_trangle_cut(bool value);
|
||||||
|
void extract_square(bool value);
|
||||||
|
void extract_square_cut(bool value);
|
||||||
|
void extract_regular(bool value);
|
||||||
|
void extract_regular_cut(bool value);
|
||||||
|
void extract_star(bool value);
|
||||||
|
void extract_star_cut(bool value);
|
||||||
|
void extract_imperial(bool value);
|
||||||
|
void extract_imperial_cut(bool value);
|
||||||
|
void extract_royal(bool value);
|
||||||
|
void extract_royal_cut(bool value);
|
||||||
|
void extract_spectacular(bool value);
|
||||||
|
void extract_legendary(bool value);
|
||||||
|
void extract_legendary_cut(bool value);
|
||||||
|
|
||||||
|
void extract_rejuv_potion(bool value);
|
||||||
|
void extract_full_rejuv_potion(bool value);
|
||||||
|
|
||||||
|
void extract_hp1(bool value);
|
||||||
|
void extract_hp2(bool value);
|
||||||
|
void extract_hp3(bool value);
|
||||||
|
void extract_hp4(bool value);
|
||||||
|
void extract_hp5(bool value);
|
||||||
|
|
||||||
|
void extract_mp1(bool value);
|
||||||
|
void extract_mp2(bool value);
|
||||||
|
void extract_mp3(bool value);
|
||||||
|
void extract_mp4(bool value);
|
||||||
|
void extract_mp5(bool value);
|
||||||
|
|
||||||
|
|
||||||
|
void extract_frp(bool value);
|
||||||
|
void extract_mrp(bool value);
|
||||||
|
void extract_prp(bool value);
|
||||||
|
void extract_crp(bool value);
|
||||||
|
void extract_lrp(bool value);
|
||||||
|
void extract_vps(bool value);
|
||||||
|
void extract_yps(bool value);
|
||||||
|
void extract_wms(bool value);
|
||||||
|
|
||||||
|
void close_window(bool value);
|
||||||
|
|
||||||
|
//void extract_flourite(bool value);
|
||||||
|
//void extract_jade(bool value);
|
||||||
|
//void extract_argonite(bool value);
|
||||||
|
//void extract_azurite(bool value);
|
||||||
|
//void extract_sulpher(bool value);
|
||||||
|
//void extract_quartz(bool value);
|
||||||
|
//void extract_tiger_eye(bool value);
|
||||||
|
|
||||||
void update_show_gold(bool value);
|
void update_show_gold(bool value);
|
||||||
void update_show_runes(bool value);
|
void update_show_runes(bool value);
|
||||||
void update_show_gems(bool value);
|
void update_show_gems(bool value);
|
||||||
@@ -61,7 +273,6 @@ namespace d2_tweaks {
|
|||||||
//handle hovering over item and actual click
|
//handle hovering over item and actual click
|
||||||
static void __fastcall handle_dropped_items(diablo2::structures::unit* unit, void* edx);
|
static void __fastcall handle_dropped_items(diablo2::structures::unit* unit, void* edx);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,14 +17,34 @@ namespace d2_tweaks {
|
|||||||
class loot_filter_settings_toggle_menu final : public ui::menu, singleton<loot_filter_settings_toggle_menu> {
|
class loot_filter_settings_toggle_menu final : public ui::menu, singleton<loot_filter_settings_toggle_menu> {
|
||||||
ui::controls::button* m_toggle_filter_settings_btn;
|
ui::controls::button* m_toggle_filter_settings_btn;
|
||||||
ui::controls::button* m_btn_toggle_stats;
|
ui::controls::button* m_btn_toggle_stats;
|
||||||
menu* m_filter_settings_menu;
|
ui::controls::button* m_btn_toggle_help;
|
||||||
bool m_show;
|
ui::controls::button* m_btn_toggle_cube;
|
||||||
|
ui::controls::button* m_btn_toggle_stash;
|
||||||
|
ui::controls::button* m_btn_toggle_bag;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
menu* m_filter_settings_menu;
|
||||||
|
menu* m_menu;
|
||||||
|
bool m_show;
|
||||||
|
bool m_show_bag;
|
||||||
|
|
||||||
|
|
||||||
explicit loot_filter_settings_toggle_menu(token);
|
explicit loot_filter_settings_toggle_menu(token);
|
||||||
|
|
||||||
|
void toggle_show() {
|
||||||
|
m_show = !m_show;
|
||||||
|
set_enabled(m_show);
|
||||||
|
set_visible(m_show);
|
||||||
|
}
|
||||||
|
|
||||||
void toggle_filter_settings_click();
|
void toggle_filter_settings_click();
|
||||||
void toggle_stats_settings_click();
|
void toggle_stats_settings_click();
|
||||||
|
void toggle_help_click();
|
||||||
|
void toggle_cube_click();
|
||||||
|
void toggle_stash_click();
|
||||||
|
void toggle_bag_click();
|
||||||
void draw() override;
|
void draw() override;
|
||||||
|
|
||||||
bool key_event(uint32_t key, bool up) override;
|
bool key_event(uint32_t key, bool up) override;
|
||||||
|
@@ -201,6 +201,7 @@ namespace d2_tweaks {
|
|||||||
MESSAGE_TYPE_ITEM_DROPPED_INFO,
|
MESSAGE_TYPE_ITEM_DROPPED_INFO,
|
||||||
MESSAGE_TYPE_TRANSMUTE,
|
MESSAGE_TYPE_TRANSMUTE,
|
||||||
MESSAGE_TYPE_TRADER_UPDATE,
|
MESSAGE_TYPE_TRADER_UPDATE,
|
||||||
|
MESSAGE_TYPE_INTERACT = 1,
|
||||||
|
|
||||||
MESSAGE_TYPE_COUNT
|
MESSAGE_TYPE_COUNT
|
||||||
};
|
};
|
||||||
@@ -235,11 +236,19 @@ namespace d2_tweaks {
|
|||||||
|
|
||||||
struct item_move_cs : packet_header {
|
struct item_move_cs : packet_header {
|
||||||
uint32_t item_guid;
|
uint32_t item_guid;
|
||||||
|
const char* item_code;
|
||||||
uint8_t target_page;
|
uint8_t target_page;
|
||||||
uint32_t bag_guid = 0;
|
uint32_t bag_guid = 0;
|
||||||
bool updateBag;
|
bool updateBag;
|
||||||
|
bool removeFromBag;
|
||||||
|
bool summon;
|
||||||
int prop;
|
int prop;
|
||||||
int val;
|
int val;
|
||||||
|
int tmog;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
bool extract;
|
||||||
|
uint32_t iCode;
|
||||||
|
|
||||||
item_move_cs() : item_guid(0), target_page(0) {
|
item_move_cs() : item_guid(0), target_page(0) {
|
||||||
message_type = MESSAGE_TYPE_ITEM_MOVE;
|
message_type = MESSAGE_TYPE_ITEM_MOVE;
|
||||||
@@ -270,7 +279,6 @@ namespace d2_tweaks {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct inventory_sort_sc : packet_header {
|
struct inventory_sort_sc : packet_header {
|
||||||
uint8_t page;
|
uint8_t page;
|
||||||
uint8_t tx;
|
uint8_t tx;
|
||||||
@@ -296,11 +304,19 @@ namespace d2_tweaks {
|
|||||||
damage_type_t damage_type;
|
damage_type_t damage_type;
|
||||||
uint32_t damage;
|
uint32_t damage;
|
||||||
|
|
||||||
|
|
||||||
uint32_t currentHp; // New field for current hit points
|
uint32_t currentHp; // New field for current hit points
|
||||||
uint32_t maxHp; // New field for maximum hit points
|
uint32_t maxHp; // New field for maximum hit points
|
||||||
|
|
||||||
damage_info_sc() : unit_type(0), guid(0), damage_type(DAMAGE_TYPE_UNKNOWN), damage(0), currentHp(0), maxHp(0) {
|
// You can add these details to the packet if needed
|
||||||
|
// packet.isChampion = isChampion;
|
||||||
|
// packet.isUnique = isUnique;
|
||||||
|
// packet.isSuperUnique = isSuperUnique
|
||||||
|
|
||||||
|
bool isChampion;
|
||||||
|
bool isUnique;
|
||||||
|
bool isSuperUnique;
|
||||||
|
|
||||||
|
damage_info_sc() : unit_type(0), guid(0), damage_type(DAMAGE_TYPE_UNKNOWN), damage(0), currentHp(0), maxHp(0), isChampion(0), isUnique(0), isSuperUnique(0) {
|
||||||
message_type = MESSAGE_TYPE_DAMAGE_INFO;
|
message_type = MESSAGE_TYPE_DAMAGE_INFO;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -112,6 +112,8 @@ namespace d2_tweaks {
|
|||||||
|
|
||||||
virtual void left_mouse(int32_t offsetX, int32_t offsetY, bool up, bool& block) = 0;
|
virtual void left_mouse(int32_t offsetX, int32_t offsetY, bool up, bool& block) = 0;
|
||||||
virtual void right_mouse(int32_t offsetX, int32_t offsetY, bool up, bool& block) = 0;
|
virtual void right_mouse(int32_t offsetX, int32_t offsetY, bool up, bool& block) = 0;
|
||||||
|
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;
|
virtual void key_event(int32_t offsetX, int32_t offsetY, uint32_t key, bool up, bool& block) = 0;
|
||||||
};
|
};
|
||||||
|
@@ -9,7 +9,6 @@
|
|||||||
namespace d2_tweaks {
|
namespace d2_tweaks {
|
||||||
namespace ui {
|
namespace ui {
|
||||||
namespace controls {
|
namespace controls {
|
||||||
|
|
||||||
class label : public control {
|
class label : public control {
|
||||||
std::wstring m_text;
|
std::wstring m_text;
|
||||||
bool m_text_owned;
|
bool m_text_owned;
|
||||||
@@ -31,7 +30,6 @@ namespace d2_tweaks {
|
|||||||
return m_text;
|
return m_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
diablo2::ui_color_t get_color() const {
|
diablo2::ui_color_t get_color() const {
|
||||||
return m_color;
|
return m_color;
|
||||||
}
|
}
|
||||||
|
@@ -81,6 +81,8 @@ namespace d2_tweaks {
|
|||||||
|
|
||||||
virtual bool left_mouse(bool up);
|
virtual bool left_mouse(bool up);
|
||||||
virtual bool right_mouse(bool up);
|
virtual bool right_mouse(bool up);
|
||||||
|
virtual bool middle_mouse(bool up);
|
||||||
|
virtual bool mouse_wheel(bool up);
|
||||||
|
|
||||||
virtual bool key_event(uint32_t key, bool up);
|
virtual bool key_event(uint32_t key, bool up);
|
||||||
};
|
};
|
||||||
|
@@ -32,6 +32,8 @@ namespace d2_tweaks {
|
|||||||
|
|
||||||
bool process_left_mouse(bool up);
|
bool process_left_mouse(bool up);
|
||||||
bool process_right_mouse(bool up);
|
bool process_right_mouse(bool up);
|
||||||
|
bool process_middle_mouse(bool up);
|
||||||
|
bool process_mouse_wheel(bool up);
|
||||||
|
|
||||||
bool process_key_event(uint32_t key, bool up);
|
bool process_key_event(uint32_t key, bool up);
|
||||||
};
|
};
|
||||||
|
@@ -59,7 +59,6 @@ namespace diablo2 {
|
|||||||
static bool get_ui_window_state(ui_window_t window);
|
static bool get_ui_window_state(ui_window_t window);
|
||||||
static void* get_buysellbtn();
|
static void* get_buysellbtn();
|
||||||
|
|
||||||
|
|
||||||
static void play_sound(uint32_t soundId, structures::unit* u, uint32_t ticks, BOOL prePick, uint32_t cache);
|
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);
|
static structures::unit* get_unit_by_guid(int32_t type, int32_t guid);
|
||||||
@@ -86,5 +85,9 @@ namespace diablo2 {
|
|||||||
static bool is_gamble_open();
|
static bool is_gamble_open();
|
||||||
static uint8_t current_interact_menu();
|
static uint8_t current_interact_menu();
|
||||||
static void resync_vendor_inventory(structures::unit* ptNPC);
|
static void resync_vendor_inventory(structures::unit* ptNPC);
|
||||||
|
|
||||||
|
static int32_t send_to_server_9(BYTE type, DWORD num, DWORD unk1);
|
||||||
|
|
||||||
|
static void set_ui_toggle(int nToggle, int nUIState, BOOL bToggle);
|
||||||
};
|
};
|
||||||
}
|
}
|
@@ -75,13 +75,9 @@
|
|||||||
//
|
//
|
||||||
//extern DataTables* sgptDataTables;
|
//extern DataTables* sgptDataTables;
|
||||||
|
|
||||||
struct D2PropertyStrc
|
|
||||||
{
|
|
||||||
int32_t nProperty; //0x00
|
|
||||||
int32_t nLayer; //0x04
|
|
||||||
int32_t nMin; //0x08
|
|
||||||
int32_t nMax; //0x0C
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace diablo2 {
|
namespace diablo2 {
|
||||||
namespace structures {
|
namespace structures {
|
||||||
@@ -92,6 +88,88 @@ namespace diablo2 {
|
|||||||
|
|
||||||
struct items_line;
|
struct items_line;
|
||||||
struct item_types_line;
|
struct item_types_line;
|
||||||
|
|
||||||
|
struct D2PropertyStrc
|
||||||
|
{
|
||||||
|
int32_t nProperty; //0x00
|
||||||
|
int32_t nLayer; //0x04
|
||||||
|
int32_t nMin; //0x08
|
||||||
|
int32_t nMax; //0x0C
|
||||||
|
};
|
||||||
|
|
||||||
|
struct D2RunesTxt
|
||||||
|
{
|
||||||
|
char szName[64]; //0x00
|
||||||
|
char szRuneName[64]; //0x40
|
||||||
|
uint8_t nComplete; //0x80
|
||||||
|
uint8_t nServer; //0x81
|
||||||
|
uint16_t wStringId; //0x82
|
||||||
|
uint16_t pad0x84; //0x84
|
||||||
|
uint16_t wIType[6]; //0x86
|
||||||
|
uint16_t wEType[3]; //0x92
|
||||||
|
int32_t nRune[6]; //0x98
|
||||||
|
D2PropertyStrc pProperties[7]; //0xB0
|
||||||
|
};
|
||||||
|
|
||||||
|
struct D2OpStatDataStrc
|
||||||
|
{
|
||||||
|
uint16_t nOpBase; //0x00
|
||||||
|
uint16_t nStat; //0x02
|
||||||
|
uint8_t nOp; //0x04
|
||||||
|
uint8_t nOpParam; //0x05
|
||||||
|
};
|
||||||
|
|
||||||
|
struct D2ItemStatCostTxt
|
||||||
|
{
|
||||||
|
uint16_t wStatId; //0x00
|
||||||
|
uint16_t pad0x02; //0x02
|
||||||
|
uint32_t dwItemStatFlags; //0x04
|
||||||
|
uint8_t nSendBits; //0x08
|
||||||
|
uint8_t nSendParamBits; //0x09
|
||||||
|
uint8_t nCsvBits; //0x0A
|
||||||
|
uint8_t nCsvParam; //0x0B
|
||||||
|
uint32_t dwDivide; //0x0C
|
||||||
|
uint32_t dwMultiply; //0x10
|
||||||
|
uint32_t dwAdd; //0x14
|
||||||
|
uint8_t nValShift; //0x18
|
||||||
|
uint8_t nSaveBits; //0x19
|
||||||
|
uint8_t n09SaveBits; //0x1A
|
||||||
|
uint8_t pad0x1B; //0x1B
|
||||||
|
uint32_t dwSaveAdd; //0x1C
|
||||||
|
uint32_t dw09SaveAdd; //0x20
|
||||||
|
uint32_t dwSaveParamBits; //0x24
|
||||||
|
uint32_t dw09SaveParamBits; //0x28
|
||||||
|
int32_t dwMinAccr; //0x2C
|
||||||
|
uint8_t nEncode; //0x30
|
||||||
|
uint8_t pad0x31; //0x31
|
||||||
|
uint16_t wMaxStat; //0x32
|
||||||
|
int16_t nDescPriority; //0x34
|
||||||
|
uint8_t nDescFunc; //0x36
|
||||||
|
uint8_t nDescVal; //0x37
|
||||||
|
uint16_t wDescStrPos; //0x38
|
||||||
|
uint16_t wDescStrNeg; //0x3A
|
||||||
|
uint16_t wDescStr2; //0x3C
|
||||||
|
uint16_t wDescGrp; //0x3E
|
||||||
|
uint8_t nDescGrpFunc; //0x40
|
||||||
|
uint8_t nDescGrpVal; //0x41
|
||||||
|
uint16_t wDescGrpStrPos; //0x42
|
||||||
|
uint16_t wDescGrpStrNeg; //0x44
|
||||||
|
uint16_t wDescGrpStr2; //0x46
|
||||||
|
int16_t wItemEvent[2]; //0x48
|
||||||
|
uint16_t wItemEventFunc[2]; //0x4C
|
||||||
|
uint8_t nKeepZero; //0x50
|
||||||
|
uint8_t bIsBaseOfOtherStatOp; //0x51
|
||||||
|
uint8_t bHasOpStatData; //0x52
|
||||||
|
uint8_t bHasOpApplyingToItem; //0x53
|
||||||
|
uint8_t nOp; //0x54
|
||||||
|
uint8_t nOpParam; //0x55
|
||||||
|
uint16_t wOpBase; //0x56
|
||||||
|
uint16_t wOpStat[3]; //0x58
|
||||||
|
uint16_t unk0x5E[64]; //0x5E - also related to op stats (see DATATBLS_LoadItemStatCostTxt)
|
||||||
|
D2OpStatDataStrc pOpStatData[16]; //0xDE
|
||||||
|
uint16_t pad0x13E; //0x13E
|
||||||
|
uint32_t dwStuff; //0x140
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
enum unit_stats_t {
|
enum unit_stats_t {
|
||||||
@@ -297,10 +375,10 @@ namespace diablo2 {
|
|||||||
UNIT_STAT_ITEM_SKILLONLEVELUP = 0xC7,
|
UNIT_STAT_ITEM_SKILLONLEVELUP = 0xC7,
|
||||||
UNIT_STAT_UNUSED200 = 0xC8,
|
UNIT_STAT_UNUSED200 = 0xC8,
|
||||||
UNIT_STAT_ITEM_SKILLONGETHIT = 0xC9,
|
UNIT_STAT_ITEM_SKILLONGETHIT = 0xC9,
|
||||||
UNIT_STAT_UNUSED202 = 0xCA,
|
UNIT_STAT_is_champion = 0xCA, // 202
|
||||||
UNIT_STAT_UNUSED203 = 0xCB,
|
UNIT_STAT_is_unique = 0xCB, // 203
|
||||||
UNIT_STAT_ITEM_CHARGED_SKILL = 0xCC,
|
UNIT_STAT_ITEM_CHARGED_SKILL = 0xCC, // 204
|
||||||
UNIT_STAT_UNUSED204 = 0xCD,
|
UNIT_STAT_is_super_unique = 0xCD, // 205
|
||||||
UNIT_STAT_UNUSED205 = 0xCE,
|
UNIT_STAT_UNUSED205 = 0xCE,
|
||||||
UNIT_STAT_UNUSED206 = 0xCF,
|
UNIT_STAT_UNUSED206 = 0xCF,
|
||||||
UNIT_STAT_UNUSED207 = 0xD0,
|
UNIT_STAT_UNUSED207 = 0xD0,
|
||||||
@@ -397,7 +475,6 @@ namespace diablo2 {
|
|||||||
UNIT_STAT_ITEM_TOHIT_UNDEAD_BYTIME = 0x12B,
|
UNIT_STAT_ITEM_TOHIT_UNDEAD_BYTIME = 0x12B,
|
||||||
UNIT_STAT_ITEM_CRUSHINGBLOW_BYTIME = 0x12C,
|
UNIT_STAT_ITEM_CRUSHINGBLOW_BYTIME = 0x12C,
|
||||||
|
|
||||||
|
|
||||||
// unit_stats_t from Ironman mod
|
// unit_stats_t from Ironman mod
|
||||||
|
|
||||||
UNIT_STAT_strength = 0,
|
UNIT_STAT_strength = 0,
|
||||||
@@ -884,19 +961,19 @@ namespace diablo2 {
|
|||||||
UNIT_STAT_UNUSED_65 = 481,
|
UNIT_STAT_UNUSED_65 = 481,
|
||||||
UNIT_STAT_UNUSED_66 = 482,
|
UNIT_STAT_UNUSED_66 = 482,
|
||||||
UNIT_STAT_UNUSED_67 = 483,
|
UNIT_STAT_UNUSED_67 = 483,
|
||||||
UNIT_STAT_UNUSED_68 = 484,
|
UNIT_STAT_gembag_PotionsHP = 484,
|
||||||
UNIT_STAT_UNUSED_69 = 485,
|
UNIT_STAT_gembag_PotionsMana = 485,
|
||||||
UNIT_STAT_UNUSED_70 = 486,
|
UNIT_STAT_gembag_Potions = 486,
|
||||||
UNIT_STAT_UNUSED_71 = 487,
|
UNIT_STAT_gembag_Stones_Flourite = 487,
|
||||||
UNIT_STAT_UNUSED_72 = 488,
|
UNIT_STAT_gembag_Stones_Jade = 488,
|
||||||
UNIT_STAT_UNUSED_73 = 489,
|
UNIT_STAT_gembag_Stones_Argonite = 489,
|
||||||
UNIT_STAT_UNUSED_74 = 490,
|
UNIT_STAT_gembag_Stones_Azurite = 490,
|
||||||
UNIT_STAT_UNUSED_75 = 491,
|
UNIT_STAT_gembag_Stones_Sulpher = 491,
|
||||||
UNIT_STAT_UNUSED_76 = 492,
|
UNIT_STAT_gembag_Stones_Quartz = 492,
|
||||||
UNIT_STAT_UNUSED_77 = 493,
|
UNIT_STAT_gembag_Stones_TigerEye = 493,
|
||||||
UNIT_STAT_UNUSED_78 = 494,
|
UNIT_STAT_UNUSED_68 = 494,
|
||||||
UNIT_STAT_UNUSED_79 = 495,
|
UNIT_STAT_runebag_RunesE = 495,
|
||||||
UNIT_STAT_UNUSED_80 = 496,
|
UNIT_STAT_runebag_RunesF = 496,
|
||||||
UNIT_STAT_passive_sum_mastery = 497,
|
UNIT_STAT_passive_sum_mastery = 497,
|
||||||
UNIT_STAT_item_socketmultiplier = 498,
|
UNIT_STAT_item_socketmultiplier = 498,
|
||||||
UNIT_STAT_gembag_Ruby = 499,
|
UNIT_STAT_gembag_Ruby = 499,
|
||||||
@@ -909,14 +986,10 @@ namespace diablo2 {
|
|||||||
UNIT_STAT_runebag_RunesA = 506,
|
UNIT_STAT_runebag_RunesA = 506,
|
||||||
UNIT_STAT_runebag_RunesB = 507,
|
UNIT_STAT_runebag_RunesB = 507,
|
||||||
UNIT_STAT_runebag_RunesC = 508,
|
UNIT_STAT_runebag_RunesC = 508,
|
||||||
UNIT_STAT_UNUSED_83 = 509,
|
UNIT_STAT_runebag_RunesD = 509,
|
||||||
UNIT_STAT_item_aura_display = 510,
|
UNIT_STAT_item_aura_display = 510,
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class d2_common {
|
class d2_common {
|
||||||
public:
|
public:
|
||||||
static char* get_base();
|
static char* get_base();
|
||||||
@@ -980,8 +1053,29 @@ namespace diablo2 {
|
|||||||
static void diablo2::d2_common::update_trade(structures::inventory* inventory, structures::unit* item);
|
static void diablo2::d2_common::update_trade(structures::inventory* inventory, structures::unit* item);
|
||||||
//static void diablo2::d2_common::set_item_flags(structures::unit* item, structures::itemflags_t dwFlag, bool bSet);
|
//static void diablo2::d2_common::set_item_flags(structures::unit* item, structures::itemflags_t dwFlag, bool bSet);
|
||||||
|
|
||||||
static void diablo2::d2_common::add_property(structures::unit* item, D2PropertyStrc* pProperty, int nUnused);
|
static void diablo2::d2_common::add_property(structures::unit* item, diablo2::structures::D2PropertyStrc* pProperty, int nUnused);
|
||||||
static void diablo2::d2_common::ITEMS_SetItemFlag(structures::unit* item, uint32_t dwFlag, BOOL bSet);
|
static void diablo2::d2_common::ITEMS_SetItemFlag(structures::unit* item, uint32_t dwFlag, BOOL bSet);
|
||||||
|
|
||||||
|
//D2Common.0x6FDA42B0
|
||||||
|
// D2ItemStatCostTxt* __fastcall ITEMS_GetItemStatCostTxtRecord(int nStatId)
|
||||||
|
// Write a function signature for this function
|
||||||
|
static structures::D2ItemStatCostTxt* get_item_stat_cost_record(int nStatId);
|
||||||
|
|
||||||
|
//D2Common.0x6FD57720 (#10602)
|
||||||
|
//int __stdcall DATATBLS_GetItemIdFromItemCode(uint32_t dwCode)
|
||||||
|
static int get_item_id_from_item_code(uint32_t dwCode);
|
||||||
|
|
||||||
|
//D2Common.0x6FD576D0 (#10601)
|
||||||
|
// D2ItemsTxt* __stdcall DATATBLS_GetItemRecordFromItemCode(uint32_t dwCode, int* pItemId)
|
||||||
|
static structures::items_line* get_item_record_from_item_code(uint32_t dwCode, int* pItemId);
|
||||||
|
|
||||||
|
// //D2Common.0x6FD5EAA0 (#10620)
|
||||||
|
// D2COMMON_DLL_DECL D2RunesTxt* __stdcall DATATBLS_GetRunesTxtRecord(int nRunewordId);
|
||||||
|
static structures::D2RunesTxt* get_runes_txt_record(int nRunewordId);
|
||||||
|
|
||||||
|
//D2Common.0x6FD57680 (#10600)
|
||||||
|
//D2ItemsTxt* __stdcall DATATBLS_GetItemsTxtRecord(int nItemId)
|
||||||
|
static structures::items_line* get_items_txt_record(int nItemId);
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <diablo2/structures/unit.h>
|
#include <diablo2/structures/unit.h>
|
||||||
|
#include "d2common.h"
|
||||||
|
|
||||||
namespace diablo2 {
|
namespace diablo2 {
|
||||||
namespace structures {
|
namespace structures {
|
||||||
@@ -10,6 +11,205 @@ namespace diablo2 {
|
|||||||
struct net_client;
|
struct net_client;
|
||||||
struct game;
|
struct game;
|
||||||
struct unit;
|
struct unit;
|
||||||
|
|
||||||
|
struct D2MonPropTxt
|
||||||
|
{
|
||||||
|
uint32_t dwId; //0x00
|
||||||
|
diablo2::structures::D2PropertyStrc props[3][6]; //0x04
|
||||||
|
uint8_t nChance[3][6]; //0x124
|
||||||
|
uint16_t pad0x136; //0x136
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
|
||||||
|
enum D2C_AiSpecialState : uint32_t
|
||||||
|
{
|
||||||
|
AISPECIALSTATE_NONE = 0,
|
||||||
|
AISPECIALSTATE_NO_MON_STATS = 1, // Set when classid > nMonStatsRecord
|
||||||
|
AISPECIALSTATE_2 = 2, // Unused
|
||||||
|
AISPECIALSTATE_3 = 3, // Unused
|
||||||
|
AISPECIALSTATE_4 = 4, // Unused
|
||||||
|
AISPECIALSTATE_ROGUE_HIREABLE_NON_PLAYER_OWNER = 5,
|
||||||
|
AISPECIALSTATE_HIREABLE_NON_PLAYER_OWNER = 6,
|
||||||
|
AISPECIALSTATE_REVIVED = 7, // as necromancer pet
|
||||||
|
AISPECIALSTATE_8 = 8, // Unused
|
||||||
|
AISPECIALSTATE_9 = 9, // Unused
|
||||||
|
// Curses
|
||||||
|
AISPECIALSTATE_DIMVISION = 10,
|
||||||
|
AISPECIALSTATE_TERROR = 11,
|
||||||
|
AISPECIALSTATE_TAUNT = 12,
|
||||||
|
|
||||||
|
AISPECIALSTATE_COUNTESS = 13,
|
||||||
|
AISPECIALSTATE_14 = 14, // Unused
|
||||||
|
AISPECIALSTATE_WHIPPED = 15, // When whipped by overseer, for suicide minions
|
||||||
|
AISPECIALSTATE_MOUNTING_UNIT = 16, // When a unit is mounting another (tower / siege beast)
|
||||||
|
AISPECIALSTATE_17 = 17, // Unused
|
||||||
|
|
||||||
|
AISPECIALSTATE_TABLE_COUNT = 18,
|
||||||
|
AISPECIALSTATE_INVALID = 19, // Could be for objects ?
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct D2SkillsTxt
|
||||||
|
{
|
||||||
|
int16_t nSkillId; //0x00
|
||||||
|
uint16_t unk0x02; //0x02
|
||||||
|
uint32_t dwFlags[2]; //0x04 D2C_SkillsTxtFlags
|
||||||
|
int8_t nCharClass; //0x0C
|
||||||
|
uint8_t unk0x0D[3]; //0x0D
|
||||||
|
uint8_t nAnim; //0x10
|
||||||
|
uint8_t nMonAnim; //0x11
|
||||||
|
uint8_t nSeqTrans; //0x12
|
||||||
|
uint8_t nSeqNum; //0x13
|
||||||
|
uint8_t nRange; //0x14
|
||||||
|
uint8_t nSelectProc; //0x15
|
||||||
|
uint8_t nSeqInput; //0x16
|
||||||
|
uint8_t pad0x17; //0x17
|
||||||
|
int16_t nITypeA[3]; //0x18
|
||||||
|
int16_t nITypeB[3]; //0x1E
|
||||||
|
int16_t nETypeA[2]; //0x24
|
||||||
|
int16_t nETypeB[2]; //0x28
|
||||||
|
int16_t wSrvStartFunc; //0x2C
|
||||||
|
uint16_t wSrvDoFunc; //0x2E
|
||||||
|
uint16_t wSrvPrgFunc[3]; //0x30
|
||||||
|
uint16_t pad0x36; //0x36
|
||||||
|
uint32_t dwPrgCalc[3]; //0x38
|
||||||
|
uint8_t nPrgDamage; //0x44
|
||||||
|
uint8_t pad0x45; //0x45
|
||||||
|
int16_t wSrvMissile; //0x46
|
||||||
|
int16_t wSrvMissileA; //0x48
|
||||||
|
int16_t wSrvMissileB; //0x4A
|
||||||
|
int16_t wSrvMissileC; //0x4C
|
||||||
|
int16_t wSrvOverlay; //0x4E
|
||||||
|
uint32_t dwAuraFilter; //0x50
|
||||||
|
int16_t wAuraStat[6]; //0x54
|
||||||
|
uint32_t dwAuraLenCalc; //0x60
|
||||||
|
uint32_t dwAuraRangeCalc; //0x64
|
||||||
|
int32_t dwAuraStatCalc[6]; //0x68
|
||||||
|
int16_t nAuraState; //0x80
|
||||||
|
int16_t wAuraTargetState; //0x82
|
||||||
|
int16_t wAuraEvent[3]; //0x84
|
||||||
|
int16_t wAuraEventFunc[3]; //0x8A
|
||||||
|
uint16_t wAuraTgtEvent; //0x90
|
||||||
|
uint16_t wAuraTgtEventFunc; //0x92
|
||||||
|
int16_t nPassiveState; //0x94
|
||||||
|
int16_t nPassiveIType; //0x96
|
||||||
|
int16_t nPassiveStat[5]; //0x98
|
||||||
|
uint16_t pad0xA2; //0xA2
|
||||||
|
uint32_t dwPassiveCalc[5]; //0xA4
|
||||||
|
uint16_t wPassiveEvent; //0xB8
|
||||||
|
uint16_t wPassiveEventFunc; //0xBA
|
||||||
|
uint16_t wSummon; //0xBC
|
||||||
|
int8_t nPetType; //0xBE
|
||||||
|
int8_t nSumMode; //0xBF
|
||||||
|
uint32_t dwPetMax; //0xC0
|
||||||
|
uint16_t wSumSkill[5]; //0xC4
|
||||||
|
uint16_t pad0xCE; //0xCE
|
||||||
|
uint32_t dwSumSkCalc[5]; //0xD0
|
||||||
|
int16_t wSumUMod; //0xE4
|
||||||
|
int16_t wSumOverlay; //0xE6
|
||||||
|
uint16_t wCltMissile; //0xE8
|
||||||
|
uint16_t wCltMissileA; //0xEA
|
||||||
|
uint16_t wCltMissileB; //0xEC
|
||||||
|
uint16_t wCltMissileC; //0xEE
|
||||||
|
uint16_t wCltMissileD; //0xF0
|
||||||
|
uint16_t wCltStFunc; //0xF2
|
||||||
|
uint16_t wCltDoFunc; //0xF4
|
||||||
|
uint16_t wCltPrgFunc[3]; //0xF6
|
||||||
|
uint16_t wStSound; //0xFC
|
||||||
|
uint16_t nStSoundClass; //0x0FE
|
||||||
|
uint16_t wDoSound; //0x100
|
||||||
|
uint16_t wDoSoundA; //0x102
|
||||||
|
uint16_t wDoSoundB; //0x104
|
||||||
|
uint16_t wCastOverlay; //0x106
|
||||||
|
uint16_t wTgtOverlay; //0x108
|
||||||
|
uint16_t wTgtSound; //0x10A
|
||||||
|
uint16_t wPrgOverlay; //0x10C
|
||||||
|
uint16_t wPrgSound; //0x10E
|
||||||
|
uint16_t wCltOverlayA; //0x110
|
||||||
|
uint16_t wCltOverlayB; //0x112
|
||||||
|
int32_t dwCltCalc[3]; //0x114
|
||||||
|
uint8_t nItemTarget; //0x120 D2C_SkillsTxtItemTarget
|
||||||
|
uint8_t pad0x121; //0x121
|
||||||
|
uint16_t wItemCastSound; //0x122
|
||||||
|
uint16_t wItemCastOverlay; //0x124
|
||||||
|
uint16_t pad0x126; //0x126
|
||||||
|
uint32_t dwPerDelay; //0x128
|
||||||
|
uint16_t wMaxLvl; //0x12C
|
||||||
|
uint16_t wResultFlags; //0x12E
|
||||||
|
uint32_t dwHitFlags; //0x130
|
||||||
|
uint32_t dwHitClass; //0x134
|
||||||
|
uint32_t dwCalc[4]; //0x138
|
||||||
|
int32_t dwParam[8]; //0x148
|
||||||
|
uint8_t nWeapSel; //0x168
|
||||||
|
uint8_t pad0x169; //0x169
|
||||||
|
uint16_t wItemEffect; //0x16A
|
||||||
|
uint16_t wItemCltEffect; //0x16C
|
||||||
|
uint16_t pad0x16E; //0x16E
|
||||||
|
uint32_t dwSkPoints; //0x170
|
||||||
|
uint16_t wReqLevel; //0x174
|
||||||
|
uint16_t wReqStr; //0x176
|
||||||
|
uint16_t wReqDex; //0x178
|
||||||
|
uint16_t wReqInt; //0x17A
|
||||||
|
uint16_t wReqVit; //0x17C
|
||||||
|
int16_t nReqSkill[3]; //0x17E
|
||||||
|
int16_t wStartMana; //0x184
|
||||||
|
uint16_t wMinMana; //0x186
|
||||||
|
uint8_t nManaShift; //0x188
|
||||||
|
uint8_t pad0x189; //0x189
|
||||||
|
int16_t wMana; //0x18A
|
||||||
|
int16_t wLevelMana; //0x18C
|
||||||
|
uint8_t nAttackRank; //0x18E
|
||||||
|
uint8_t nLineOfSight; //0x18F D2C_SkillsTxtLineOfSight
|
||||||
|
uint32_t dwDelay; //0x190
|
||||||
|
uint16_t wSkillDesc; //0x194
|
||||||
|
uint16_t pad0x196; //0x196
|
||||||
|
uint32_t dwToHit; //0x198
|
||||||
|
uint32_t dwLevToHit; //0x19C
|
||||||
|
uint32_t dwToHitCalc; //0x1A0
|
||||||
|
uint8_t nToHitShift; //0x1A4
|
||||||
|
uint8_t nSrcDam; //0x1A5
|
||||||
|
uint16_t pad0x1A6; //0x1A6
|
||||||
|
uint32_t dwMinDam; //0x1A8
|
||||||
|
uint32_t dwMaxDam; //0x1AC
|
||||||
|
uint32_t dwMinLvlDam[5]; //0x1B0
|
||||||
|
uint32_t dwMaxLvlDam[5]; //0x1C4
|
||||||
|
uint32_t dwDmgSymPerCalc; //0x1D8
|
||||||
|
uint8_t nEType; //0x1DC
|
||||||
|
uint8_t pad0x1DD[3]; //0x1DD
|
||||||
|
uint32_t dwEMin; //0x1E0
|
||||||
|
uint32_t dwEMax; //0x1E4
|
||||||
|
uint32_t dwEMinLev[5]; //0x1E8
|
||||||
|
uint32_t dwEMaxLev[5]; //0x1FC
|
||||||
|
uint32_t dwEDmgSymPerCalc; //0x210
|
||||||
|
uint32_t dwELen; //0x214
|
||||||
|
uint32_t dwELevLen[3]; //0x218
|
||||||
|
uint32_t dwELenSymPerCalc; //0x224
|
||||||
|
uint8_t nRestrict; //0x228
|
||||||
|
uint8_t pad0x229; //0x229
|
||||||
|
int16_t nState[3]; //0x22A
|
||||||
|
uint8_t nAiType; //0x230
|
||||||
|
uint8_t pad0x231; //0x231
|
||||||
|
int16_t wAiBonus; //0x232
|
||||||
|
int32_t nCostMult; //0x234
|
||||||
|
int32_t nCostAdd; //0x238
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
struct D2SummonArgStrc
|
||||||
|
{
|
||||||
|
uint32_t dwFlags; //0x00
|
||||||
|
diablo2::structures::unit* pOwner; //0x04
|
||||||
|
int32_t nHcIdx; //0x08
|
||||||
|
D2C_AiSpecialState nAiSpecialState; //0x0C
|
||||||
|
int32_t nMonMode; //0x10
|
||||||
|
D2CoordStrc pPosition; //0x14
|
||||||
|
int32_t nPetType; //0x1C
|
||||||
|
int32_t nPetMax; //0x20
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class d2_game {
|
class d2_game {
|
||||||
@@ -47,5 +247,57 @@ namespace diablo2 {
|
|||||||
|
|
||||||
static void update_inventory_items(structures::game* game, structures::unit* player);
|
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);
|
static uint32_t __fastcall diablo2::d2_game::transmogrify(diablo2::structures::game* game, diablo2::structures::unit* player);
|
||||||
|
|
||||||
|
//D2Game.0x6FC4ED80
|
||||||
|
static structures::unit* __fastcall D2GAME_CreateItemEx_6FC4ED80(structures::game* pGame, structures::D2ItemDropStrc* pItemDrop, int32_t a3);
|
||||||
|
|
||||||
|
//D2Game.0x6FC4A660
|
||||||
|
static int32_t __fastcall diablo2::d2_game::D2GAME_Transmogrify_6FC4A660(structures::game* pGame, structures::unit* pPlayer, structures::unit* pItem);
|
||||||
|
|
||||||
|
static diablo2::structures::unit* __fastcall diablo2::d2_game::QUESTS_CreateItem(diablo2::structures::game* pGame, diablo2::structures::unit* pPlayer, uint32_t dwCode, int32_t nLevel, uint8_t nQuality, int32_t bDroppable);
|
||||||
|
|
||||||
|
// Add wrapper for D2Game.0x6FC603D0
|
||||||
|
// D2MonPropTxt* __fastcall MONSTER_GetMonPropTxtRecord(int32_t nId)
|
||||||
|
static diablo2::structures::D2MonPropTxt* __fastcall diablo2::d2_game::MONSTER_GetMonPropTxtRecord(int32_t nId);
|
||||||
|
|
||||||
|
|
||||||
|
// add wrapper for //D2Game.0x6FCBC900
|
||||||
|
// D2UnitStrc* __stdcall SUNIT_GetTargetUnit(D2GameStrc* pGame, D2UnitStrc* pUnit)
|
||||||
|
static diablo2::structures::unit* __stdcall diablo2::d2_game::SUNIT_GetTargetUnit(structures::game* pGame, structures::unit* pUnit);
|
||||||
|
|
||||||
|
//D2Game.0x6FCF5B90
|
||||||
|
//D2SkillsTxt* __fastcall SKILLS_GetSkillsTxtRecord(int32_t nSkillId)
|
||||||
|
static diablo2::structures::D2SkillsTxt* __fastcall diablo2::d2_game::SKILLS_GetSkillsTxtRecord(int32_t nSkillId);
|
||||||
|
|
||||||
|
//D2Game.0x6FD15580
|
||||||
|
//int32_t __fastcall D2GAME_GetSummonIdFromSkill_6FD15580(D2UnitStrc* pUnit, int32_t bFromMonster, int32_t nSkillId, int32_t nSkillLevel, int32_t* pSpawnMode, int32_t* pX, int32_t* pY)
|
||||||
|
static int32_t __fastcall diablo2::d2_game::D2GAME_GetSummonIdFromSkill_6FD15580(structures::unit* pUnit, int32_t bFromMonster, int32_t nSkillId, int32_t nSkillLevel, int32_t* pSpawnMode, int32_t* pX, int32_t* pY);
|
||||||
|
|
||||||
|
//D2Game.0x6FD14430
|
||||||
|
//D2UnitStrc* __fastcall D2GAME_SummonPet_6FD14430(D2GameStrc* pGame, D2SummonArgStrc* pSummonArg)
|
||||||
|
static diablo2::structures::unit* __fastcall diablo2::d2_game::D2GAME_SummonPet_6FD14430(structures::game* pGame, structures::D2SummonArgStrc* pSummonArg);
|
||||||
|
|
||||||
|
//D2Game.0x6FD0CB10
|
||||||
|
//int32_t __fastcall D2GAME_SKILLS_SetSummonBaseStats_6FD0CB10(D2GameStrc* pGame, D2UnitStrc* pUnit, D2UnitStrc* pPet, int32_t nPetLevelArg, int32_t nSkillLevel)
|
||||||
|
static int32_t __fastcall diablo2::d2_game::D2GAME_SKILLS_SetSummonBaseStats_6FD0CB10(structures::game* pGame, structures::unit* pUnit, structures::unit* pPet, int32_t nPetLevelArg, int32_t nSkillLevel);
|
||||||
|
|
||||||
|
//D2Game.0x6FD0C530
|
||||||
|
//int32_t __fastcall D2GAME_SetSummonPassiveStats_6FD0C530(D2GameStrc* pGame, D2UnitStrc* pUnit, D2UnitStrc* pPet, int32_t nSkillId, int32_t nSkillLevel, int32_t nItemLevel)
|
||||||
|
static int32_t __fastcall diablo2::d2_game::D2GAME_SetSummonPassiveStats_6FD0C530(structures::game* pGame, structures::unit* pUnit, structures::unit* pPet, int32_t nSkillId, int32_t nSkillLevel, int32_t nItemLevel);
|
||||||
|
|
||||||
|
//D2Game.0x6FD0C2E0
|
||||||
|
//void __fastcall D2GAME_SetSummonResistance_6FD0C2E0(D2UnitStrc* pUnit, D2UnitStrc* pPet)
|
||||||
|
static void __fastcall diablo2::d2_game::D2GAME_SetSummonResistance_6FD0C2E0(structures::unit* pUnit, structures::unit* pPet);
|
||||||
|
|
||||||
|
//D2Game.0x6FC3E200
|
||||||
|
//void __fastcall sub_6FC3E200(D2ClientStrc* pClient, D2UnitStrc* pUnit)
|
||||||
|
static void __fastcall diablo2::d2_game::sub_6FC3E200(structures::net_client* pClient, structures::unit* pUnit);
|
||||||
|
|
||||||
|
|
||||||
|
//D2Game.0x6FC69F10
|
||||||
|
//D2UnitStrc* __fastcall D2GAME_SpawnMonster_6FC69F10(D2GameStrc* pGame, D2ActiveRoomStrc* pRoom, int32_t nX, int32_t nY, int32_t nMonsterId, int32_t nAnimMode, int32_t a7, int16_t nFlags)
|
||||||
|
static diablo2::structures::unit* __fastcall diablo2::d2_game::D2GAME_SpawnMonster_6FC69F10(structures::game* pGame, structures::room* pRoom, int32_t nX, int32_t nY, int32_t nMonsterId, int32_t nAnimMode, int32_t a7, int16_t nFlags);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,5 @@ namespace diablo2 {
|
|||||||
static int32_t get_resolution_mode();
|
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_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);
|
static void draw_filled_rect(int left, int top, int right, int bottom, DWORD color, int transTbl);
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
@@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include "room.h"
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
|
|
||||||
@@ -23,7 +25,18 @@ namespace diablo2 {
|
|||||||
struct quest_record;
|
struct quest_record;
|
||||||
struct npc_record;
|
struct npc_record;
|
||||||
|
|
||||||
|
enum D2C_ItemQualities
|
||||||
|
{
|
||||||
|
ITEMQUAL_INFERIOR = 0x01, //0x01 Inferior
|
||||||
|
ITEMQUAL_NORMAL = 0x02, //0x02 Normal
|
||||||
|
ITEMQUAL_SUPERIOR = 0x03, //0x03 Superior
|
||||||
|
ITEMQUAL_MAGIC = 0x04, //0x04 Magic
|
||||||
|
ITEMQUAL_SET = 0x05, //0x05 Set
|
||||||
|
ITEMQUAL_RARE = 0x06, //0x06 Rare
|
||||||
|
ITEMQUAL_UNIQUE = 0x07, //0x07 Unique
|
||||||
|
ITEMQUAL_CRAFT = 0x08, //0x08 Crafted
|
||||||
|
ITEMQUAL_TEMPERED = 0x09 //0x09 Tempered
|
||||||
|
};
|
||||||
|
|
||||||
enum class unit_type_t : int32_t {
|
enum class unit_type_t : int32_t {
|
||||||
UNIT_TYPE_PLAYER = 0,
|
UNIT_TYPE_PLAYER = 0,
|
||||||
@@ -76,7 +89,55 @@ namespace diablo2 {
|
|||||||
ITEMFLAG_ITEM = 0x08000000
|
ITEMFLAG_ITEM = 0x08000000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct D2SeedStrc
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t nLowSeed; //0x00
|
||||||
|
uint32_t nHighSeed; //0x04
|
||||||
|
};
|
||||||
|
uint64_t lSeed; //0x00
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct D2CoordStrc //sizeof 0x08
|
||||||
|
{
|
||||||
|
int nX; //0x00
|
||||||
|
int nY; //0x04
|
||||||
|
};
|
||||||
|
|
||||||
|
struct D2ItemDropStrc
|
||||||
|
{
|
||||||
|
diablo2::structures::unit* pUnit; //0x00
|
||||||
|
D2SeedStrc* pSeed; //0x04
|
||||||
|
diablo2::structures::game* pGame; //0x08
|
||||||
|
int32_t nItemLvl; //0x0C
|
||||||
|
uint32_t unk0x10; //0x10
|
||||||
|
int32_t nId; //0x14
|
||||||
|
int32_t nSpawnType; //0x18 [3 for ground spawn, 4 for inv spawn]
|
||||||
|
int32_t nX; //0x1C
|
||||||
|
int32_t nY; //0x20
|
||||||
|
diablo2::structures::room* pRoom; //0x24
|
||||||
|
uint16_t wUnitInitFlags; //0x28
|
||||||
|
uint16_t wItemFormat; //0x2A [ptGame0x0x78]
|
||||||
|
BOOL bForce; //0x2C
|
||||||
|
int32_t nQuality; //0x30
|
||||||
|
int32_t nQuantity; //0x34
|
||||||
|
int32_t nMinDur; //0x38
|
||||||
|
int32_t nMaxDur; //0x3C
|
||||||
|
int32_t nItemIndex; //0x40
|
||||||
|
uint32_t dwFlags1; //0x44 - itemflag override (used when force is true)
|
||||||
|
uint32_t dwSeed; //0x48 - overrides the seed, used when force is true
|
||||||
|
uint32_t dwItemSeed; //0x4C - overrides the item seed when force is true
|
||||||
|
int32_t eEarLvl; //0x50
|
||||||
|
int32_t nQtyOverride; //0x54
|
||||||
|
char szName[16]; //0x58
|
||||||
|
int32_t nPrefix[3]; //0x68
|
||||||
|
int32_t nSuffix[3]; //0x74
|
||||||
|
uint32_t dwFlags2; //0x80
|
||||||
|
};
|
||||||
|
|
||||||
struct unit {
|
struct unit {
|
||||||
unit_type_t type;
|
unit_type_t type;
|
||||||
|
@@ -23,8 +23,6 @@ namespace diablo2 {
|
|||||||
mpq_streambuf m_streambuf;
|
mpq_streambuf m_streambuf;
|
||||||
public:
|
public:
|
||||||
explicit mpq_ifstream(const std::string& path);
|
explicit mpq_ifstream(const std::string& path);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
14
resource.h
Normal file
14
resource.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by D2tweaks.rc
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
@@ -74,7 +74,7 @@ CIni::CIni(LPCTSTR lpPathName)
|
|||||||
CIni::~CIni()
|
CIni::~CIni()
|
||||||
{
|
{
|
||||||
if (m_pszPathName != NULL)
|
if (m_pszPathName != NULL)
|
||||||
delete [] m_pszPathName;
|
delete[] m_pszPathName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -92,7 +92,7 @@ void CIni::SetPathName(LPCTSTR lpPathName)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_pszPathName != NULL)
|
if (m_pszPathName != NULL)
|
||||||
delete [] m_pszPathName;
|
delete[] m_pszPathName;
|
||||||
|
|
||||||
m_pszPathName = _tcsdup(lpPathName);
|
m_pszPathName = _tcsdup(lpPathName);
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,7 @@ DWORD CIni::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD d
|
|||||||
dwLen = min(dwLen, dwBufSize);
|
dwLen = min(dwLen, dwBufSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return dwLen;
|
return dwLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ CString CIni::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault) con
|
|||||||
{
|
{
|
||||||
LPTSTR psz = __GetStringDynamic(lpSection, lpKey, lpDefault);
|
LPTSTR psz = __GetStringDynamic(lpSection, lpKey, lpDefault);
|
||||||
CString str(psz);
|
CString str(psz);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -177,8 +177,8 @@ BOOL CIni::AppendString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpString) cons
|
|||||||
TCHAR* pNewString = new TCHAR[_tcslen(psz) + _tcslen(lpString) + 1];
|
TCHAR* pNewString = new TCHAR[_tcslen(psz) + _tcslen(lpString) + 1];
|
||||||
_stprintf(pNewString, _T("%s%s"), psz, lpString);
|
_stprintf(pNewString, _T("%s%s"), psz, lpString);
|
||||||
const BOOL RES = WriteString(lpSection, lpKey, pNewString);
|
const BOOL RES = WriteString(lpSection, lpKey, pNewString);
|
||||||
delete [] pNewString;
|
delete[] pNewString;
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ DWORD CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dw
|
|||||||
const DWORD MAX_LEN = _tcslen(psz) + 2;
|
const DWORD MAX_LEN = _tcslen(psz) + 2;
|
||||||
LPTSTR p = new TCHAR[MAX_LEN + 1];
|
LPTSTR p = new TCHAR[MAX_LEN + 1];
|
||||||
dwCopied = __StringSplit(psz, p, MAX_LEN, lpDelimiter, bTrimString);
|
dwCopied = __StringSplit(psz, p, MAX_LEN, lpDelimiter, bTrimString);
|
||||||
delete [] p;
|
delete[] p;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -215,12 +215,12 @@ DWORD CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dw
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return dwCopied;
|
return dwCopied;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
void CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, CStringArray *pArray, LPCTSTR lpDelimiter, BOOL bTrimString) const
|
void CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, CStringArray* pArray, LPCTSTR lpDelimiter, BOOL bTrimString) const
|
||||||
{
|
{
|
||||||
if (pArray != NULL)
|
if (pArray != NULL)
|
||||||
pArray->RemoveAll();
|
pArray->RemoveAll();
|
||||||
@@ -232,12 +232,12 @@ void CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, CStringArray *pArray, LPCT
|
|||||||
LPTSTR psz = new TCHAR[LEN + 3];
|
LPTSTR psz = new TCHAR[LEN + 3];
|
||||||
GetArray(lpSection, lpKey, psz, LEN + 2, lpDelimiter);
|
GetArray(lpSection, lpKey, psz, LEN + 2, lpDelimiter);
|
||||||
ParseDNTString(psz, __SubStrAdd, (LPVOID)pArray);
|
ParseDNTString(psz, __SubStrAdd, (LPVOID)pArray);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
BOOL CIni::WriteArray(LPCTSTR lpSection, LPCTSTR lpKey, const CStringArray *pArray, int nWriteCount, LPCTSTR lpDelimiter) const
|
BOOL CIni::WriteArray(LPCTSTR lpSection, LPCTSTR lpKey, const CStringArray* pArray, int nWriteCount, LPCTSTR lpDelimiter) const
|
||||||
{
|
{
|
||||||
if (pArray == NULL)
|
if (pArray == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -385,7 +385,7 @@ DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWOR
|
|||||||
DWORD dwLen = _tcslen(psz) / 2;
|
DWORD dwLen = _tcslen(psz) / 2;
|
||||||
if (dwLen <= dwOffset)
|
if (dwLen <= dwOffset)
|
||||||
{
|
{
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,7 +401,7 @@ DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWOR
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -425,7 +425,7 @@ DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWOR
|
|||||||
{
|
{
|
||||||
dwProcLen = dwLen - dwOffset;
|
dwProcLen = dwLen - dwOffset;
|
||||||
}
|
}
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return dwProcLen;
|
return dwProcLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,7 +441,7 @@ BOOL CIni::WriteDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWOR
|
|||||||
for (DWORD i = 0, j = 0; i < dwDataSize; i++, j += 2)
|
for (DWORD i = 0, j = 0; i < dwDataSize; i++, j += 2)
|
||||||
_stprintf(&psz[j], _T("%02X"), lpb[i]);
|
_stprintf(&psz[j], _T("%02X"), lpb[i]);
|
||||||
const BOOL RES = WriteString(lpSection, lpKey, psz);
|
const BOOL RES = WriteString(lpSection, lpKey, psz);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,7 +457,7 @@ BOOL CIni::AppendDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWO
|
|||||||
for (DWORD i = 0, j = 0; i < dwDataSize; i++, j += 2)
|
for (DWORD i = 0, j = 0; i < dwDataSize; i++, j += 2)
|
||||||
_stprintf(&psz[j], _T("%02X"), lpb[i]);
|
_stprintf(&psz[j], _T("%02X"), lpb[i]);
|
||||||
const BOOL RES = AppendString(lpSection, lpKey, psz);
|
const BOOL RES = AppendString(lpSection, lpKey, psz);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,12 +514,12 @@ DWORD CIni::GetKeyLines(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) con
|
|||||||
while (dwCopied + 2 >= dwLen)
|
while (dwCopied + 2 >= dwLen)
|
||||||
{
|
{
|
||||||
dwLen += DEF_PROFILE_THRESHOLD;
|
dwLen += DEF_PROFILE_THRESHOLD;
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
psz = new TCHAR[dwLen + 1];
|
psz = new TCHAR[dwLen + 1];
|
||||||
dwCopied = ::GetPrivateProfileSection(lpSection, psz, dwLen, m_pszPathName);
|
dwCopied = ::GetPrivateProfileSection(lpSection, psz, dwLen, m_pszPathName);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return dwCopied + 2;
|
return dwCopied + 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -549,7 +549,7 @@ DWORD CIni::GetKeyNames(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) con
|
|||||||
LPTSTR psz = new TCHAR[LEN + 1];
|
LPTSTR psz = new TCHAR[LEN + 1];
|
||||||
GetKeyLines(lpSection, psz, LEN);
|
GetKeyLines(lpSection, psz, LEN);
|
||||||
ParseDNTString(psz, __KeyPairProc, (LPVOID)(&sl));
|
ParseDNTString(psz, __KeyPairProc, (LPVOID)(&sl));
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
if (lpBuffer != NULL)
|
if (lpBuffer != NULL)
|
||||||
lpBuffer[sl.dwTotalCopied] = _T('\0');
|
lpBuffer[sl.dwTotalCopied] = _T('\0');
|
||||||
return sl.dwTotalCopied;
|
return sl.dwTotalCopied;
|
||||||
@@ -567,12 +567,12 @@ DWORD CIni::GetSectionNames(LPTSTR lpBuffer, DWORD dwBufSize) const
|
|||||||
while (dwCopied + 2 >= dwLen)
|
while (dwCopied + 2 >= dwLen)
|
||||||
{
|
{
|
||||||
dwLen += DEF_PROFILE_THRESHOLD;
|
dwLen += DEF_PROFILE_THRESHOLD;
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
psz = new TCHAR[dwLen + 1];
|
psz = new TCHAR[dwLen + 1];
|
||||||
dwCopied = ::GetPrivateProfileSectionNames(psz, dwLen, m_pszPathName);
|
dwCopied = ::GetPrivateProfileSectionNames(psz, dwLen, m_pszPathName);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return dwCopied + 2;
|
return dwCopied + 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -582,7 +582,7 @@ DWORD CIni::GetSectionNames(LPTSTR lpBuffer, DWORD dwBufSize) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
void CIni::GetSectionNames(CStringArray *pArray) const
|
void CIni::GetSectionNames(CStringArray* pArray) const
|
||||||
{
|
{
|
||||||
if (pArray != NULL)
|
if (pArray != NULL)
|
||||||
pArray->RemoveAll();
|
pArray->RemoveAll();
|
||||||
@@ -594,13 +594,13 @@ void CIni::GetSectionNames(CStringArray *pArray) const
|
|||||||
LPTSTR psz = new TCHAR[LEN + 1];
|
LPTSTR psz = new TCHAR[LEN + 1];
|
||||||
GetSectionNames(psz, LEN);
|
GetSectionNames(psz, LEN);
|
||||||
ParseDNTString(psz, __SubStrAdd, pArray);
|
ParseDNTString(psz, __SubStrAdd, pArray);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
// Retrieve a list of key-lines(key-pairs) of the specified section
|
// Retrieve a list of key-lines(key-pairs) of the specified section
|
||||||
void CIni::GetKeyLines(LPCTSTR lpSection, CStringArray *pArray) const
|
void CIni::GetKeyLines(LPCTSTR lpSection, CStringArray* pArray) const
|
||||||
{
|
{
|
||||||
if (pArray != NULL)
|
if (pArray != NULL)
|
||||||
pArray->RemoveAll();
|
pArray->RemoveAll();
|
||||||
@@ -612,13 +612,13 @@ void CIni::GetKeyLines(LPCTSTR lpSection, CStringArray *pArray) const
|
|||||||
LPTSTR psz = new TCHAR[LEN + 1];
|
LPTSTR psz = new TCHAR[LEN + 1];
|
||||||
GetKeyLines(lpSection, psz, LEN);
|
GetKeyLines(lpSection, psz, LEN);
|
||||||
ParseDNTString(psz, __SubStrAdd, pArray);
|
ParseDNTString(psz, __SubStrAdd, pArray);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
#ifdef __AFXWIN_H__
|
||||||
// Retrieve a list of key names of the specified section
|
// Retrieve a list of key names of the specified section
|
||||||
void CIni::GetKeyNames(LPCTSTR lpSection, CStringArray *pArray) const
|
void CIni::GetKeyNames(LPCTSTR lpSection, CStringArray* pArray) const
|
||||||
{
|
{
|
||||||
if (pArray == NULL)
|
if (pArray == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -628,7 +628,7 @@ void CIni::GetKeyNames(LPCTSTR lpSection, CStringArray *pArray) const
|
|||||||
LPTSTR psz = new TCHAR[LEN + 1];
|
LPTSTR psz = new TCHAR[LEN + 1];
|
||||||
GetKeyNames(lpSection, psz, LEN);
|
GetKeyNames(lpSection, psz, LEN);
|
||||||
ParseDNTString(psz, __SubStrAdd, (LPVOID)pArray);
|
ParseDNTString(psz, __SubStrAdd, (LPVOID)pArray);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -658,7 +658,7 @@ BOOL CIni::IsSectionExist(LPCTSTR lpSection) const
|
|||||||
LPTSTR psz = new TCHAR[LEN + 1];
|
LPTSTR psz = new TCHAR[LEN + 1];
|
||||||
GetSectionNames(psz, LEN);
|
GetSectionNames(psz, LEN);
|
||||||
BOOL RES = !ParseDNTString(psz, __SubStrCompare, (LPVOID)lpSection);
|
BOOL RES = !ParseDNTString(psz, __SubStrCompare, (LPVOID)lpSection);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,7 +670,7 @@ BOOL CIni::IsKeyExist(LPCTSTR lpSection, LPCTSTR lpKey) const
|
|||||||
// Test it with the default unique string
|
// Test it with the default unique string
|
||||||
LPTSTR psz = __GetStringDynamic(lpSection, lpKey, DEF_PROFILE_TESTSTRING);
|
LPTSTR psz = __GetStringDynamic(lpSection, lpKey, DEF_PROFILE_TESTSTRING);
|
||||||
const BOOL RES = (_tcscmp(psz, DEF_PROFILE_TESTSTRING) != 0);
|
const BOOL RES = (_tcscmp(psz, DEF_PROFILE_TESTSTRING) != 0);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -695,7 +695,7 @@ BOOL CIni::CopySection(LPCTSTR lpSrcSection, LPCTSTR lpDestSection, BOOL bFailIf
|
|||||||
//memset(psz, 0, sizeof(TCHAR) * (SRC_LEN + 2));
|
//memset(psz, 0, sizeof(TCHAR) * (SRC_LEN + 2));
|
||||||
GetKeyLines(lpSrcSection, psz, SRC_LEN);
|
GetKeyLines(lpSrcSection, psz, SRC_LEN);
|
||||||
const BOOL RES = ::WritePrivateProfileSection(lpDestSection, psz, m_pszPathName);
|
const BOOL RES = ::WritePrivateProfileSection(lpDestSection, psz, m_pszPathName);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
|
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
@@ -717,7 +717,7 @@ BOOL CIni::CopyKey(LPCTSTR lpSrcSection, LPCTSTR lpSrcKey, LPCTSTR lpDestSection
|
|||||||
|
|
||||||
LPTSTR psz = __GetStringDynamic(lpSrcSection, lpSrcKey);
|
LPTSTR psz = __GetStringDynamic(lpSrcSection, lpSrcKey);
|
||||||
const BOOL RES = WriteString(lpDestSection, lpDestKey, psz);
|
const BOOL RES = WriteString(lpDestSection, lpDestKey, psz);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
return RES;
|
return RES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -770,7 +770,7 @@ LPTSTR CIni::__GetStringDynamic(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefa
|
|||||||
while (dwCopied + 1 >= dwLen)
|
while (dwCopied + 1 >= dwLen)
|
||||||
{
|
{
|
||||||
dwLen += DEF_PROFILE_THRESHOLD;
|
dwLen += DEF_PROFILE_THRESHOLD;
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
psz = new TCHAR[dwLen + 1];
|
psz = new TCHAR[dwLen + 1];
|
||||||
dwCopied = ::GetPrivateProfileString(lpSection, lpKey, lpDefault == NULL ? _T("") : lpDefault, psz, dwLen, m_pszPathName);
|
dwCopied = ::GetPrivateProfileString(lpSection, lpKey, lpDefault == NULL ? _T("") : lpDefault, psz, dwLen, m_pszPathName);
|
||||||
}
|
}
|
||||||
@@ -828,7 +828,7 @@ DWORD CIni::__StringSplit(LPCTSTR lpString, LPTSTR lpBuffer, DWORD dwBufSize, LP
|
|||||||
lpTarget[COPY_LEN] = _T('\0');
|
lpTarget[COPY_LEN] = _T('\0');
|
||||||
lpTarget = &lpTarget[SEG_LEN + 1];
|
lpTarget = &lpTarget[SEG_LEN + 1];
|
||||||
}
|
}
|
||||||
delete [] pszSeg;
|
delete[] pszSeg;
|
||||||
lpPos = &lpEnd[DEL_LEN]; // Advance the pointer for next search
|
lpPos = &lpEnd[DEL_LEN]; // Advance the pointer for next search
|
||||||
lpEnd = _tcsstr(lpPos, pszDel);
|
lpEnd = _tcsstr(lpPos, pszDel);
|
||||||
}
|
}
|
||||||
@@ -849,9 +849,9 @@ DWORD CIni::__StringSplit(LPCTSTR lpString, LPTSTR lpBuffer, DWORD dwBufSize, LP
|
|||||||
lpTarget[COPY_LEN] = _T('\0');
|
lpTarget[COPY_LEN] = _T('\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] pszSeg;
|
delete[] pszSeg;
|
||||||
lpBuffer[dwCopied] = _T('\0');
|
lpBuffer[dwCopied] = _T('\0');
|
||||||
delete [] pszDel;
|
delete[] pszDel;
|
||||||
return dwCopied;
|
return dwCopied;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -890,10 +890,10 @@ BOOL CALLBACK CIni::__SubStrCompare(LPCTSTR lpString1, LPVOID lpParam)
|
|||||||
|
|
||||||
// Callback function used to process a key-pair, it extracts the
|
// Callback function used to process a key-pair, it extracts the
|
||||||
// key name from the key-pair string
|
// key name from the key-pair string
|
||||||
BOOL CALLBACK CIni:: __KeyPairProc(LPCTSTR lpString, LPVOID lpParam)
|
BOOL CALLBACK CIni::__KeyPairProc(LPCTSTR lpString, LPVOID lpParam)
|
||||||
{
|
{
|
||||||
STR_LIMIT* psl = (STR_LIMIT*)lpParam;
|
STR_LIMIT* psl = (STR_LIMIT*)lpParam;
|
||||||
if (lpString == NULL || psl== NULL)
|
if (lpString == NULL || psl == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
LPCTSTR p = _tcschr(lpString, _T('='));
|
LPCTSTR p = _tcschr(lpString, _T('='));
|
||||||
@@ -926,7 +926,7 @@ BOOL CALLBACK CIni:: __KeyPairProc(LPCTSTR lpString, LPVOID lpParam)
|
|||||||
dwCopyLen = dwNameLen;
|
dwCopyLen = dwNameLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
psl->dwTotalCopied += dwCopyLen + 1;
|
psl->dwTotalCopied += dwCopyLen + 1;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -1068,7 +1068,7 @@ BOOL CIni::__TrimString(LPTSTR lpString)
|
|||||||
{
|
{
|
||||||
LPTSTR psz = _tcsdup(p);
|
LPTSTR psz = _tcsdup(p);
|
||||||
_tcscpy(lpString, psz);
|
_tcscpy(lpString, psz);
|
||||||
delete [] psz;
|
delete[] psz;
|
||||||
}
|
}
|
||||||
|
|
||||||
return bTrimmed;
|
return bTrimmed;
|
||||||
|
@@ -8,7 +8,6 @@
|
|||||||
#include <d2tweaks/client/modules/client_module.h>
|
#include <d2tweaks/client/modules/client_module.h>
|
||||||
#include <d2tweaks/ui/ui_manager.h>
|
#include <d2tweaks/ui/ui_manager.h>
|
||||||
|
|
||||||
|
|
||||||
#include <diablo2/structures/unit.h>
|
#include <diablo2/structures/unit.h>
|
||||||
#include <diablo2/structures/client_unit_list.h>
|
#include <diablo2/structures/client_unit_list.h>
|
||||||
#include <WinBase.h>
|
#include <WinBase.h>
|
||||||
@@ -45,12 +44,6 @@
|
|||||||
std::vector<StatEntry> globalStatsVector;
|
std::vector<StatEntry> globalStatsVector;
|
||||||
diablo2::structures::gfxdata g_gfxdata; // global gfxdata
|
diablo2::structures::gfxdata g_gfxdata; // global gfxdata
|
||||||
|
|
||||||
int randStat;
|
|
||||||
int randStatRangeLow;
|
|
||||||
int randStatRangeHigh;
|
|
||||||
int randStatBool;
|
|
||||||
|
|
||||||
|
|
||||||
std::wstring ConvertCharToWString(const std::string& charString) {
|
std::wstring ConvertCharToWString(const std::string& charString) {
|
||||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
|
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
|
||||||
return converter.from_bytes(charString);
|
return converter.from_bytes(charString);
|
||||||
@@ -99,8 +92,6 @@ diablo2::ui_color_t mapColorToEnum(const std::string& colorName) {
|
|||||||
return diablo2::ui_color_t::UI_COLOR_WHITE;
|
return diablo2::ui_color_t::UI_COLOR_WHITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Define a struct to hold key-value pairs within a section
|
// Define a struct to hold key-value pairs within a section
|
||||||
struct Section {
|
struct Section {
|
||||||
std::map<std::string, std::string> assignments;
|
std::map<std::string, std::string> assignments;
|
||||||
@@ -166,6 +157,14 @@ void ParseIniFile(const std::string& iniFilePath) {
|
|||||||
else if (key == "item_type_id") {
|
else if (key == "item_type_id") {
|
||||||
entry.item_type_id = std::stoi(value);
|
entry.item_type_id = std::stoi(value);
|
||||||
}
|
}
|
||||||
|
// add op and param
|
||||||
|
else if (key == "op") {
|
||||||
|
entry.op = std::stoi(value);
|
||||||
|
}
|
||||||
|
// add op and param
|
||||||
|
else if (key == "param") {
|
||||||
|
entry.param = std::stoi(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -214,7 +213,7 @@ __declspec (naked) void handle_cs_packet_wrapper() {
|
|||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
pushfd;
|
pushfd;
|
||||||
call [d2_tweaks::client::client::handle_cs_packet]
|
call[d2_tweaks::client::client::handle_cs_packet]
|
||||||
popfd;
|
popfd;
|
||||||
popad;
|
popad;
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -223,7 +222,6 @@ __declspec (naked) void handle_cs_packet_wrapper() {
|
|||||||
RET_TO_RVA(DLLBASE_D2CLIENT, 0xD856);
|
RET_TO_RVA(DLLBASE_D2CLIENT, 0xD856);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__declspec (naked) void handle_sc_standart_packet_wrapper() {
|
__declspec (naked) void handle_sc_standart_packet_wrapper() {
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
@@ -239,7 +237,6 @@ __declspec (naked) void handle_sc_standart_packet_wrapper() {
|
|||||||
RET_TO_RVA(DLLBASE_D2CLIENT, 0x150B5);
|
RET_TO_RVA(DLLBASE_D2CLIENT, 0x150B5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const DLLPatchStrc gpt_handle_cs_packet[] =
|
static const DLLPatchStrc gpt_handle_cs_packet[] =
|
||||||
{
|
{
|
||||||
{D2DLL_D2CLIENT, 0xD850 + 0, PATCH_JMP, FALSE, 0x1},
|
{D2DLL_D2CLIENT, 0xD850 + 0, PATCH_JMP, FALSE, 0x1},
|
||||||
@@ -248,7 +245,6 @@ static const DLLPatchStrc gpt_handle_cs_packet[] =
|
|||||||
{D2DLL_INVALID}
|
{D2DLL_INVALID}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const DLLPatchStrc gpt_handle_sc_standart_packet[] =
|
static const DLLPatchStrc gpt_handle_sc_standart_packet[] =
|
||||||
{
|
{
|
||||||
{D2DLL_D2CLIENT, 0x150B0 + 0, PATCH_JMP, FALSE, 0x1},
|
{D2DLL_D2CLIENT, 0x150B0 + 0, PATCH_JMP, FALSE, 0x1},
|
||||||
@@ -256,7 +252,6 @@ static const DLLPatchStrc gpt_handle_sc_standart_packet[] =
|
|||||||
{D2DLL_INVALID}
|
{D2DLL_INVALID}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::client::init() {
|
void d2_tweaks::client::client::init() {
|
||||||
// handle packet <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> GamePacketReceivedIntercept
|
// handle packet <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> GamePacketReceivedIntercept
|
||||||
hooking::hook(diablo2::d2_client::get_base() + 0x11CB0, handle_packet, reinterpret_cast<void**>(&g_handle_packet));
|
hooking::hook(diablo2::d2_client::get_base() + 0x11CB0, handle_packet, reinterpret_cast<void**>(&g_handle_packet));
|
||||||
@@ -272,23 +267,10 @@ void d2_tweaks::client::client::init() {
|
|||||||
if (m_module == nullptr)
|
if (m_module == nullptr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//randStat = GetPrivateProfileIntA("RandStat", "stat", 0, lpIniFilePath);
|
|
||||||
//randStatRangeLow = GetPrivateProfileIntA("RandStat", "statRangeLow", 0, lpIniFilePath);
|
|
||||||
//randStatRangeHigh = GetPrivateProfileIntA("RandStat", "statRangeHigh", 0, lpIniFilePath);
|
|
||||||
//randStatBool = GetPrivateProfileIntA("RandStat", "statBool", 0, lpIniFilePath);
|
|
||||||
|
|
||||||
//spdlog::info("randStat = {0}", randStat);
|
|
||||||
//spdlog::info("randStatRangeLow = {0}", randStatRangeLow);
|
|
||||||
//spdlog::info("randStatRangeHigh = {0}", randStatRangeHigh);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Load and parse the INI file
|
// Load and parse the INI file
|
||||||
ParseIniFile(iniFilePath);
|
ParseIniFile(iniFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
D2TEMPLATE_ApplyPatch(gpt_handle_cs_packet);
|
D2TEMPLATE_ApplyPatch(gpt_handle_cs_packet);
|
||||||
//D2TEMPLATE_ApplyPatch(gpt_handle_sc_standart_packet);
|
//D2TEMPLATE_ApplyPatch(gpt_handle_sc_standart_packet);
|
||||||
|
|
||||||
@@ -300,13 +282,12 @@ void d2_tweaks::client::client::init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int32_t g_ebp_send_to_client;
|
static int32_t g_ebp_send_to_client;
|
||||||
void d2_tweaks::client::client::handle_cs_packet(common::packet_header* packet, size_t size) {
|
void d2_tweaks::client::client::handle_cs_packet(common::packet_header* packet, size_t size) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
__asm {
|
__asm {
|
||||||
push [ebp + 0x2C];
|
push[ebp + 0x2C];
|
||||||
pop [g_ebp_send_to_client];
|
pop[g_ebp_send_to_client];
|
||||||
}
|
}
|
||||||
spdlog::warn("[d2client SEND] Packet {} Message {} Size {} CallFrom {}", (void*)packet->d2_packet_type, (void*)packet->message_type, size, (void*)g_ebp_send_to_client);
|
spdlog::warn("[d2client SEND] Packet {} Message {} Size {} CallFrom {}", (void*)packet->d2_packet_type, (void*)packet->message_type, size, (void*)g_ebp_send_to_client);
|
||||||
#endif
|
#endif
|
||||||
@@ -325,7 +306,6 @@ void d2_tweaks::client::client::handle_cs_packet(common::packet_header* packet,
|
|||||||
handler->handle_cs_packet(packet);
|
handler->handle_cs_packet(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::client::handle_standart_packet(common::packet_header* packet, size_t size) {
|
void d2_tweaks::client::client::handle_standart_packet(common::packet_header* packet, size_t size) {
|
||||||
if (size == -1)
|
if (size == -1)
|
||||||
return;
|
return;
|
||||||
@@ -337,7 +317,6 @@ void d2_tweaks::client::client::handle_standart_packet(common::packet_header* pa
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::client::handle_packet(common::packet_header* packet, size_t size) {
|
void d2_tweaks::client::client::handle_packet(common::packet_header* packet, size_t size) {
|
||||||
static common::packet_header dummy;
|
static common::packet_header dummy;
|
||||||
static auto& instance = singleton<client>::instance();
|
static auto& instance = singleton<client>::instance();
|
||||||
@@ -362,10 +341,8 @@ void d2_tweaks::client::client::handle_packet(common::packet_header* packet, siz
|
|||||||
handler->handle_packet(packet);
|
handler->handle_packet(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool g_is_init = false;
|
static bool g_is_init = false;
|
||||||
void d2_tweaks::client::client::game_tick() {
|
void d2_tweaks::client::client::game_tick() {
|
||||||
|
|
||||||
static auto& instance = singleton<client>::instance(); /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> d2 gl
|
static auto& instance = singleton<client>::instance(); /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> d2 gl
|
||||||
|
|
||||||
if (g_is_init == false) {
|
if (g_is_init == false) {
|
||||||
@@ -380,7 +357,7 @@ void d2_tweaks::client::client::game_tick() {
|
|||||||
g_is_init = true;
|
g_is_init = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto & tick_handler : instance.m_tick_handlers) {
|
for (auto& tick_handler : instance.m_tick_handlers) {
|
||||||
if (tick_handler == nullptr)
|
if (tick_handler == nullptr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -390,7 +367,6 @@ void d2_tweaks::client::client::game_tick() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t d2_tweaks::client::client::draw_game_ui() {
|
int32_t d2_tweaks::client::client::draw_game_ui() {
|
||||||
static auto& ui = singleton<ui::ui_manager>::instance();
|
static auto& ui = singleton<ui::ui_manager>::instance();
|
||||||
|
|
||||||
@@ -401,8 +377,6 @@ int32_t d2_tweaks::client::client::draw_game_ui() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::client::register_module(modules::client_module* module) {
|
void d2_tweaks::client::client::register_module(modules::client_module* module) {
|
||||||
m_modules[m_module_id_counter++] = module;
|
m_modules[m_module_id_counter++] = module;
|
||||||
}
|
}
|
||||||
|
@@ -67,12 +67,9 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_gold_pickup::init_early() {
|
void d2_tweaks::client::modules::auto_gold_pickup::init_early() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_gold_pickup::init() {
|
void d2_tweaks::client::modules::auto_gold_pickup::init() {
|
||||||
char acPathToIni[MAX_PATH] = { 0 };
|
char acPathToIni[MAX_PATH] = { 0 };
|
||||||
const char* pcIniFile = "\\d2tweaks.ini";
|
const char* pcIniFile = "\\d2tweaks.ini";
|
||||||
@@ -89,7 +86,6 @@ void d2_tweaks::client::modules::auto_gold_pickup::init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_gold_pickup::tick() {
|
void d2_tweaks::client::modules::auto_gold_pickup::tick() {
|
||||||
const auto unit = diablo2::d2_client::get_local_player();
|
const auto unit = diablo2::d2_client::get_local_player();
|
||||||
|
|
||||||
@@ -133,7 +129,6 @@ void d2_tweaks::client::modules::auto_gold_pickup::tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_gold_pickup::handle_packet(common::packet_header* packet) {
|
void d2_tweaks::client::modules::auto_gold_pickup::handle_packet(common::packet_header* packet) {
|
||||||
const auto info = static_cast<common::gold_pickup_info_sc*>(packet);
|
const auto info = static_cast<common::gold_pickup_info_sc*>(packet);
|
||||||
m_nLastUpdate = GetTickCount();
|
m_nLastUpdate = GetTickCount();
|
||||||
|
@@ -67,7 +67,6 @@ static char m_acPathToIni[MAX_PATH] = { 0 };
|
|||||||
static const char* m_pcIniFile = "\\d2tweaks.ini";
|
static const char* m_pcIniFile = "\\d2tweaks.ini";
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_item_pickup::init_early() {
|
void d2_tweaks::client::modules::auto_item_pickup::init_early() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReloadFilters(char* szPathToIni) {
|
void ReloadFilters(char* szPathToIni) {
|
||||||
@@ -120,7 +119,6 @@ void ReloadFilters(char* szPathToIni) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Parse ItemCode
|
/// Parse ItemCode
|
||||||
dwLenght = lstrlen(m_pcItemListAll);
|
dwLenght = lstrlen(m_pcItemListAll);
|
||||||
memcpy(m_pcItemListAllTemp, m_pcItemListAll, dwLenght + 1);
|
memcpy(m_pcItemListAllTemp, m_pcItemListAll, dwLenght + 1);
|
||||||
@@ -196,7 +194,6 @@ void ReloadFilters(char* szPathToIni) {
|
|||||||
token_string_itemcode = strtok(NULL, " ,|");
|
token_string_itemcode = strtok(NULL, " ,|");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Parse ItemType Code
|
/// Parse ItemType Code
|
||||||
dwLenght = lstrlen(m_pcItemTypesAll);
|
dwLenght = lstrlen(m_pcItemTypesAll);
|
||||||
memcpy(m_pcItemTypesAllTemp, m_pcItemTypesAll, dwLenght + 1);
|
memcpy(m_pcItemTypesAllTemp, m_pcItemTypesAll, dwLenght + 1);
|
||||||
@@ -272,7 +269,6 @@ void ReloadFilters(char* szPathToIni) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class auto_item_pickup_menu : public d2_tweaks::ui::menu {
|
class auto_item_pickup_menu : public d2_tweaks::ui::menu {
|
||||||
d2_tweaks::common::asset* m_buttons_img;
|
d2_tweaks::common::asset* m_buttons_img;
|
||||||
d2_tweaks::ui::controls::button* m_auto_pickup_btn;
|
d2_tweaks::ui::controls::button* m_auto_pickup_btn;
|
||||||
@@ -359,7 +355,6 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_item_pickup::init() {
|
void d2_tweaks::client::modules::auto_item_pickup::init() {
|
||||||
GetCurrentDirectory(MAX_PATH, m_acPathToIni);
|
GetCurrentDirectory(MAX_PATH, m_acPathToIni);
|
||||||
lstrcat(m_acPathToIni, m_pcIniFile);
|
lstrcat(m_acPathToIni, m_pcIniFile);
|
||||||
@@ -375,7 +370,6 @@ void d2_tweaks::client::modules::auto_item_pickup::init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool find_free_space(diablo2::structures::inventory* inv, diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y) {
|
bool find_free_space(diablo2::structures::inventory* inv, diablo2::structures::unit* item, int32_t inventoryIndex, char page, uint32_t& x, uint32_t& y) {
|
||||||
char data[0x18];
|
char data[0x18];
|
||||||
|
|
||||||
@@ -396,7 +390,6 @@ bool find_free_space(diablo2::structures::inventory* inv, diablo2::structures::u
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_item_pickup::tick() {
|
void d2_tweaks::client::modules::auto_item_pickup::tick() {
|
||||||
static common::item_pickup_info_sc packet;
|
static common::item_pickup_info_sc packet;
|
||||||
const auto unit = diablo2::d2_client::get_local_player();
|
const auto unit = diablo2::d2_client::get_local_player();
|
||||||
@@ -476,7 +469,6 @@ void d2_tweaks::client::modules::auto_item_pickup::tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (itemtype_record_equiv2) {
|
if (itemtype_record_equiv2) {
|
||||||
if (*(DWORD*)itemtype_record_equiv2->code != 0x20202020) {
|
if (*(DWORD*)itemtype_record_equiv2->code != 0x20202020) {
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> equiv1
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> equiv1
|
||||||
@@ -527,7 +519,6 @@ void d2_tweaks::client::modules::auto_item_pickup::tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < m_nCountItemListAll; i++)
|
for (uint32_t i = 0; i < m_nCountItemListAll; i++)
|
||||||
{
|
{
|
||||||
if (record->string_code[0] == m_stItemList[i].code0 &&
|
if (record->string_code[0] == m_stItemList[i].code0 &&
|
||||||
@@ -560,7 +551,6 @@ void d2_tweaks::client::modules::auto_item_pickup::tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::auto_item_pickup::handle_packet(common::packet_header* packet) {
|
void d2_tweaks::client::modules::auto_item_pickup::handle_packet(common::packet_header* packet) {
|
||||||
const auto info = static_cast<common::item_pickup_info_sc*>(packet);
|
const auto info = static_cast<common::item_pickup_info_sc*>(packet);
|
||||||
|
|
||||||
|
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
|
|
||||||
#include <d2tweaks/common/common.h>
|
#include <d2tweaks/common/common.h>
|
||||||
#include <d2tweaks/common/protocol.h>
|
#include <d2tweaks/common/protocol.h>
|
||||||
#include <d2tweaks/common/asset_manager.h>
|
#include <d2tweaks/common/asset_manager.h>
|
||||||
@@ -20,7 +19,6 @@
|
|||||||
#include <diablo2/d2gfx.h>
|
#include <diablo2/d2gfx.h>
|
||||||
#include <diablo2/d2cmp.h>
|
#include <diablo2/d2cmp.h>
|
||||||
|
|
||||||
|
|
||||||
#include <diablo2/structures/unit.h>
|
#include <diablo2/structures/unit.h>
|
||||||
#include <diablo2/structures/inventory.h>
|
#include <diablo2/structures/inventory.h>
|
||||||
#include <diablo2/structures/item_data.h>
|
#include <diablo2/structures/item_data.h>
|
||||||
@@ -45,10 +43,19 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
#include <DllNotify.h>
|
#include <DllNotify.h>
|
||||||
#include <D2Template.h>
|
#include <D2Template.h>
|
||||||
|
|
||||||
|
#include <diablo2/d2gfx.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <locale>
|
||||||
|
#include <codecvt>
|
||||||
|
|
||||||
MODULE_INIT(autosort)
|
MODULE_INIT(autosort)
|
||||||
|
|
||||||
enum ColorEnum {
|
enum ColorEnum {
|
||||||
@@ -88,7 +95,6 @@ std::map<int, diablo2::ui_font_t> fontMap = {
|
|||||||
{13, diablo2::ui_font_t::UI_FONT_INGAMECHAT}
|
{13, diablo2::ui_font_t::UI_FONT_INGAMECHAT}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class inventory_sort_menu : public d2_tweaks::ui::menu {
|
class inventory_sort_menu : public d2_tweaks::ui::menu {
|
||||||
d2_tweaks::common::asset* m_buttons_img;
|
d2_tweaks::common::asset* m_buttons_img;
|
||||||
|
|
||||||
@@ -115,8 +121,6 @@ public:
|
|||||||
m_sort_cube_btn = get_button("m_sort_cube_btn", std::bind(&inventory_sort_menu::sort_cube_click, this));
|
m_sort_cube_btn = get_button("m_sort_cube_btn", std::bind(&inventory_sort_menu::sort_cube_click, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Function to find the Diablo II window handle
|
// Function to find the Diablo II window handle
|
||||||
HWND FindDiabloIIWindow() {
|
HWND FindDiabloIIWindow() {
|
||||||
return FindWindow(NULL, "Diablo II");
|
return FindWindow(NULL, "Diablo II");
|
||||||
@@ -132,18 +136,85 @@ public:
|
|||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC(hwnd, hdc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int statsFont = GetPrivateProfileIntA("Options", "statsFont", 0, "./d2tweaks.ini");
|
int statsFont = GetPrivateProfileIntA("Options", "statsFont", 0, "./d2tweaks.ini");
|
||||||
|
|
||||||
|
ULONGLONG lastSendTime = GetTickCount64();
|
||||||
|
|
||||||
|
// Function to split a string into words
|
||||||
|
std::vector<std::string> split(const std::string& s, char delim) {
|
||||||
|
std::stringstream ss(s);
|
||||||
|
std::string item;
|
||||||
|
std::vector<std::string> tokens;
|
||||||
|
while (getline(ss, item, delim)) {
|
||||||
|
tokens.push_back(item);
|
||||||
|
}
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring stringToWstring(const std::string& str) {
|
||||||
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
||||||
|
return converter.from_bytes(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to justify a line of text
|
||||||
|
void justifyLine(const std::vector<std::string>& words, int start, int end, int maxLineLength, int& xPos, int yPos, int padding) {
|
||||||
|
int lineLength = 0;
|
||||||
|
for (int i = start; i <= end; i++) {
|
||||||
|
lineLength += words[i].length() * 8; // Assuming each character has a width of 8 pixels
|
||||||
|
}
|
||||||
|
|
||||||
|
int numSpaces = end - start;
|
||||||
|
int extraSpaces = maxLineLength - lineLength - padding * 2;
|
||||||
|
|
||||||
|
int spaceWidth = 8;
|
||||||
|
int extraSpacePerGap = numSpaces > 0 ? extraSpaces / numSpaces : 0;
|
||||||
|
int remainingSpaces = numSpaces > 0 ? extraSpaces % numSpaces : 0;
|
||||||
|
|
||||||
|
for (int i = start; i <= end; i++) {
|
||||||
|
diablo2::d2_win::draw_boxed_text(const_cast<wchar_t*>(stringToWstring(words[i]).c_str()), xPos + padding, yPos, 0, 0, diablo2::UI_COLOR_WHITE); // Assuming paletteIndex, transTbl, and color are 0
|
||||||
|
xPos += words[i].length() * 8 + spaceWidth + extraSpacePerGap + padding;
|
||||||
|
|
||||||
|
if (remainingSpaces > 0) {
|
||||||
|
xPos += 1; // Add an extra pixel for the remaining spaces
|
||||||
|
remainingSpaces--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to draw justified text inside a box with padding
|
||||||
|
void drawJustifiedTextInBox(const std::string& text, int boxX, int boxY, int boxWidth, int boxHeight, int padding) {
|
||||||
|
std::vector<std::string> words = split(text, ' ');
|
||||||
|
int maxLineLength = boxWidth;
|
||||||
|
int xPos = boxX + padding;
|
||||||
|
int yPos = boxY + padding;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < words.size(); ) {
|
||||||
|
int start = i;
|
||||||
|
int end = i;
|
||||||
|
int lineLength = 0;
|
||||||
|
|
||||||
|
// Find the end index for the current line
|
||||||
|
while (end < words.size() && lineLength + words[end].length() <= maxLineLength) {
|
||||||
|
lineLength += words[end].length();
|
||||||
|
if (end > start) {
|
||||||
|
lineLength++; // Add space width
|
||||||
|
}
|
||||||
|
end++;
|
||||||
|
}
|
||||||
|
|
||||||
|
justifyLine(words, start, end - 1, maxLineLength, xPos, yPos, padding);
|
||||||
|
yPos += 16; // Assuming each line is 16 pixels tall
|
||||||
|
xPos = boxX + padding;
|
||||||
|
i = end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void draw() override {
|
void draw() override {
|
||||||
auto stats = globalStatsVector;
|
auto stats = globalStatsVector;
|
||||||
int textOffset = 40; // Initial offset for the first line
|
int textOffset = 40; // Initial offset for the first line
|
||||||
|
|
||||||
const auto player = diablo2::d2_client::get_local_player();
|
const auto player = diablo2::d2_client::get_local_player();
|
||||||
|
auto name = player->player_data->name;
|
||||||
|
|
||||||
// Add all items to vector
|
// Add all items to vector
|
||||||
std::vector<diablo2::structures::unit*> items;
|
std::vector<diablo2::structures::unit*> items;
|
||||||
@@ -157,132 +228,71 @@ public:
|
|||||||
// Initialize statValue
|
// Initialize statValue
|
||||||
int32_t statValue = 0;
|
int32_t statValue = 0;
|
||||||
|
|
||||||
|
//if (diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_STASH)) {
|
||||||
if (diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_STASH)) {
|
// diablo2::d2_gfx::draw_filled_rect(130, 48, 640, 155, 5, 50);
|
||||||
diablo2::d2_gfx::draw_filled_rect(130, 48, 640, 155, 5, 50);
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (m_stats_enabled) {
|
if (m_stats_enabled) {
|
||||||
for (const auto& stat : stats) {
|
for (const auto& stat : stats) {
|
||||||
|
int param = stat.param;
|
||||||
|
int op = stat.op;
|
||||||
|
auto statline = diablo2::d2_common::get_item_stat_cost_record(stat.stat);
|
||||||
|
auto opBase = statline->wOpBase;
|
||||||
|
auto opStat = statline->wOpStat[0];
|
||||||
|
auto opBaseValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(opBase), NULL);
|
||||||
|
auto opStatValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(opStat), NULL);
|
||||||
|
|
||||||
double param = 6;
|
if (stat.is_item_stat == 0) {
|
||||||
|
int32_t statvalue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
||||||
int32_t spirits = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(185), NULL);
|
int basevalue = 1;
|
||||||
int32_t soulscaptured = statValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(184), NULL);
|
switch (op) {
|
||||||
|
case 0:
|
||||||
switch (stat.stat) {
|
statValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
||||||
// 2. (statValue <- this is probably op stat1 ? * baseValue <- this is probably op base ) / 2 ^ param
|
break;
|
||||||
|
case 1: // Formula: opstatbasevalue * statvalue / 100
|
||||||
// (op stat1 value * base stat value) / (2 ^ param)
|
statValue = static_cast<int32_t>(opBaseValue) / 100;
|
||||||
// let's try this fucking thing
|
break;
|
||||||
|
case 2: // Formula: (statvalue * basevalue) / (2 ^ param)
|
||||||
case 190: {
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param));
|
||||||
// str/spirits
|
break;
|
||||||
statValue = static_cast<int32_t>((1 * spirits) / pow(2, param)); // what is the value of opStat_str
|
case 3: // Percentage-based version of op #2
|
||||||
break;
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param)) / 100;
|
||||||
}
|
break;
|
||||||
case 191: {
|
case 4: // Item-based stat increase
|
||||||
// dex/spirits
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param));
|
||||||
statValue = static_cast<int32_t>((1 * spirits) / pow(2, param)); // what is the value of opStat_str
|
break;
|
||||||
break;
|
case 5: // Percentage-based item increase
|
||||||
}
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param)) / 100;
|
||||||
case 192: {
|
break;
|
||||||
// vit/spirits
|
case 11: // Similar to op #1 and #13
|
||||||
statValue = static_cast<int32_t>((1 * spirits) / pow(2, param)); // what is the value of opStat_str
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param)) / 100;
|
||||||
break;
|
break;
|
||||||
}
|
case 13:
|
||||||
case 193: {
|
statValue = static_cast<int32_t>((opBaseValue) / pow(op, param)) / 100;
|
||||||
// enr/spirits
|
break;
|
||||||
statValue = static_cast<int32_t>((1 * spirits) / pow(2, param)); // what is the value of opStat_str
|
default:
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 200: {
|
|
||||||
// skills/souls
|
|
||||||
param = 8;
|
|
||||||
statValue = static_cast<int32_t>((1 * soulscaptured) / pow(2, param)); // what is the value of opStat_str
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 301: {
|
|
||||||
for (auto item : items) {
|
|
||||||
const auto record = diablo2::d2_common::get_item_record(item->data_record_index);
|
|
||||||
if (record->type == 104) {
|
|
||||||
statValue = diablo2::d2_common::get_stat(item, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 304: {
|
|
||||||
for (auto item : items) {
|
|
||||||
const auto record = diablo2::d2_common::get_item_record(item->data_record_index);
|
|
||||||
if (record->type == 104) {
|
|
||||||
statValue = diablo2::d2_common::get_stat(item, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
|
||||||
// By default, get player stats
|
|
||||||
statValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
statValue = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
int32_t diablo2::d2_common::set_stat(structures::unit* unit, unit_stats_t stat, uint32_t value, int16_t param) {
|
|
||||||
static wrap_func_std_import<int32_t(structures::unit*, int32_t, int32_t, int32_t)> set_stat(10517, get_base());
|
|
||||||
return set_stat(unit, stat, value, param);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::random_device rd;
|
|
||||||
std::mt19937 gen(rd());
|
|
||||||
std::uniform_int_distribution<> dis(randStatRangeLow, randStatRangeHigh);
|
|
||||||
unsigned int randomNumber = dis(gen);
|
|
||||||
|
|
||||||
std::random_device rdb;
|
|
||||||
std::mt19937 genb(rdb());
|
|
||||||
std::uniform_int_distribution<> randBool(1, 2);
|
|
||||||
unsigned int randomBool = randBool(genb) - 1;
|
|
||||||
|
|
||||||
if (stat.is_item_stat == 1) {
|
|
||||||
for (auto item : items) {
|
|
||||||
const auto record = diablo2::d2_common::get_item_record(item->data_record_index);
|
|
||||||
int RandStatValue = diablo2::d2_common::get_stat(item, static_cast<diablo2::unit_stats_t>(randStat), NULL);
|
|
||||||
|
|
||||||
if (record->type == stat.item_type_id && RandStatValue != 0) {
|
|
||||||
// set randStat value to random number 1 and 2^(32) = 4294967296
|
|
||||||
diablo2::d2_common::set_stat(item, static_cast<diablo2::unit_stats_t>(randStat), randomNumber, 0);
|
|
||||||
diablo2::d2_common::set_stat(item, static_cast<diablo2::unit_stats_t>(randStatBool), randomBool, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// set randStat value to random number 1 and 2^(32) = 4294967296
|
for (auto item : items) {
|
||||||
//diablo2::d2_common::set_stat(player, static_cast<diablo2::unit_stats_t>(randStat), randomNumber, 0);
|
const auto record = diablo2::d2_common::get_item_record(item->data_record_index);
|
||||||
//diablo2::d2_common::set_stat(player, static_cast<diablo2::unit_stats_t>(randStatBool), randomBool, 0);
|
if (record->type == stat.item_type_id) {
|
||||||
|
statValue = diablo2::d2_common::get_stat(item, static_cast<diablo2::unit_stats_t>(stat.stat), NULL);
|
||||||
int statValue1 = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(randStat), NULL);
|
}
|
||||||
int statValue2 = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(randStatBool), NULL);
|
}
|
||||||
|
|
||||||
if (statValue1 > 0 ) {
|
|
||||||
diablo2::d2_common::set_stat(player, static_cast<diablo2::unit_stats_t>(randStat), 0, 0);
|
|
||||||
diablo2::d2_common::set_stat(player, static_cast<diablo2::unit_stats_t>(randStatBool), 0, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// write code to get player name and display it using MessageBox
|
||||||
*/
|
const auto player = diablo2::d2_client::get_local_player();
|
||||||
|
auto name = player->player_data->name;
|
||||||
|
|
||||||
auto statValueStr = std::to_wstring(statValue);
|
auto statValueStr = std::to_wstring(statValue);
|
||||||
std::wstring statText = std::wstring(stat.stat_display_string);// .append(L" " + statValueStr);
|
std::wstring statText = std::wstring(stat.stat_display_string);// .append(L" " + statValueStr);
|
||||||
|
|
||||||
if (!diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_STASH)
|
if (!diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_STASH)
|
||||||
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_CHARACTER)
|
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_CHARACTER)
|
||||||
// && !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_INVENTORY)
|
|
||||||
// && !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_SKILL)
|
|
||||||
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_CHAT)
|
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_CHAT)
|
||||||
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_NPCMENU)
|
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_NPCMENU)
|
||||||
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_MAINMENU)
|
&& !diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_MAINMENU)
|
||||||
@@ -310,21 +320,121 @@ public:
|
|||||||
diablo2::d2_win::draw_text(const_cast<wchar_t*>(statValueStr.c_str()), stat.x2, stat.y2 + textOffset, stat.colorStatValue, 0);
|
diablo2::d2_win::draw_text(const_cast<wchar_t*>(statValueStr.c_str()), stat.x2, stat.y2 + textOffset, stat.colorStatValue, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
auto runeword = diablo2::d2_common::get_runes_txt_record(169);
|
||||||
|
|
||||||
|
|
||||||
|
// Assuming szName is a null-terminated C-string.
|
||||||
|
wchar_t wText[1024]; // Ensure this buffer is large enough to hold the converted string.
|
||||||
|
wchar_t wLine[128]; // Buffer for each line
|
||||||
|
size_t convertedChars = 0;
|
||||||
|
|
||||||
|
// Initialize vertical offset
|
||||||
|
int yOffset = 200;
|
||||||
|
|
||||||
|
// Convert and draw each field
|
||||||
|
mbstowcs_s(&convertedChars, wText, "szName: ", _TRUNCATE);
|
||||||
|
mbstowcs_s(&convertedChars, wLine, runeword->szName, _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%s", wText, wLine);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "szRuneName: ", _TRUNCATE);
|
||||||
|
mbstowcs_s(&convertedChars, wLine, runeword->szRuneName, _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%s", wText, wLine);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "nComplete: ", _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%d", wText, runeword->nComplete);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "nServer: ", _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%d", wText, runeword->nServer);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "wStringId: ", _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%d", wText, runeword->wStringId);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "pad0x84: ", _TRUNCATE);
|
||||||
|
swprintf(wText, L"%s%d", wText, runeword->pad0x84);
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "wIType: ", _TRUNCATE);
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
swprintf(wLine, L"%d ", runeword->wIType[i]);
|
||||||
|
wcscat_s(wText, wLine);
|
||||||
|
}
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "wEType: ", _TRUNCATE);
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
swprintf(wLine, L"%d ", runeword->wEType[i]);
|
||||||
|
wcscat_s(wText, wLine);
|
||||||
|
}
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
mbstowcs_s(&convertedChars, wText, "nRune: ", _TRUNCATE);
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
diablo2::structures::items_line* rItem = diablo2::d2_common::get_items_txt_record(runeword->nRune[i]);
|
||||||
|
auto code = rItem->string_code;
|
||||||
|
|
||||||
|
// Ensure code is not null before attempting to use it
|
||||||
|
if (code) {
|
||||||
|
// Format code and add to wLine
|
||||||
|
//swprintf(wLine, L"%ls ", code);
|
||||||
|
|
||||||
|
// Concatenate wLine to wText
|
||||||
|
wcscat_s(wText, wLine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diablo2::d2_win::draw_text(wText, 200, yOffset, diablo2::UI_COLOR_GOLD, 0);
|
||||||
|
yOffset += 14;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//diablo2::d2_win::draw_boxed_text(const_cast<wchar_t*>(statText.c_str()), stat.x1, stat.y1 + textOffset, 1, 0, stat.colorStat);
|
//diablo2::d2_win::draw_boxed_text(const_cast<wchar_t*>(statText.c_str()), stat.x1, stat.y1 + textOffset, 1, 0, stat.colorStat);
|
||||||
//diablo2::d2_win::draw_boxed_text(const_cast<wchar_t*>(statValueStr.c_str()), stat.x2, stat.y2 + textOffset, 1, 4, stat.colorStatValue);
|
//diablo2::d2_win::draw_boxed_text(const_cast<wchar_t*>(statValueStr.c_str()), stat.x2, stat.y2 + textOffset, 1, 4, stat.colorStatValue);
|
||||||
|
|
||||||
// diablo2::d2_win::set_current_font(diablo2::UI_FONT_16); // Set font to FONT16
|
// diablo2::d2_win::set_current_font(diablo2::UI_FONT_16); // Set font to FONT16
|
||||||
|
|
||||||
|
|
||||||
//diablo2::structures::d2_cmp::init_gfx_data(&g_gfxdata);
|
//diablo2::structures::d2_cmp::init_gfx_data(&g_gfxdata);
|
||||||
|
|
||||||
//diablo2::d2_gfx::draw_image(&g_gfxdata, 200, 200, 1, 5, 0);
|
//diablo2::d2_gfx::draw_image(&g_gfxdata, 200, 200, 1, 5, 0);
|
||||||
|
|
||||||
// instead try to load direct jpg with gdi and insetad ofloading jpg file, specify it bb64 encoded and decode it.
|
// instead try to load direct jpg with gdi and insetad ofloading jpg file, specify it bb64 encoded and decode it.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_help_enabled) {
|
||||||
|
//const int windowWidth = 1280;
|
||||||
|
//const int windowHeight = 768;
|
||||||
|
//const int boxWidth = 1000;
|
||||||
|
//const int boxHeight = 680;
|
||||||
|
//const int boxX = (windowWidth - boxWidth) / 2;
|
||||||
|
//const int boxY = (windowHeight - boxHeight) / 2;
|
||||||
|
//const std::string helpText = "This is a sample help screen! You can put help text in here!?";
|
||||||
|
//// Draw filled background box
|
||||||
|
//diablo2::d2_gfx::draw_filled_rect(boxX, boxY, boxX + boxWidth, boxY + boxHeight, 0, 255);
|
||||||
|
//// Draw justified text inside the box with padding
|
||||||
|
//drawJustifiedTextInBox(helpText, boxX, boxY, boxWidth, boxHeight, 0);
|
||||||
|
}
|
||||||
|
|
||||||
diablo2::ui_color_t::UI_COLOR_WHITE;
|
diablo2::ui_color_t::UI_COLOR_WHITE;
|
||||||
|
|
||||||
|
|
||||||
// print player health, mana, and stamina bars, lastexp, nextexp, and level
|
// print player health, mana, and stamina bars, lastexp, nextexp, and level
|
||||||
// Get current HP, Mana, and Stamina along with their maximum values
|
// Get current HP, Mana, and Stamina along with their maximum values
|
||||||
int statHP = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(6), NULL) / 256;
|
int statHP = diablo2::d2_common::get_stat(player, static_cast<diablo2::unit_stats_t>(6), NULL) / 256;
|
||||||
@@ -349,17 +459,12 @@ public:
|
|||||||
float manaPercentage = static_cast<float>(statMana) / static_cast<float>(statMaxMana);
|
float manaPercentage = static_cast<float>(statMana) / static_cast<float>(statMaxMana);
|
||||||
float staminaPercentage = static_cast<float>(statStamina) / static_cast<float>(statMaxStamina);
|
float staminaPercentage = static_cast<float>(statStamina) / static_cast<float>(statMaxStamina);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int sHeight = 768;
|
int sHeight = 768;
|
||||||
int sWidth = 1280;
|
int sWidth = 1280;
|
||||||
|
|
||||||
int sHCenter = sHeight / 2;
|
int sHCenter = sHeight / 2;
|
||||||
int sWCenter = sWidth / 2;
|
int sWCenter = sWidth / 2;
|
||||||
|
|
||||||
//spdlog::info("healthPercentage: {}", healthPercentage);
|
|
||||||
|
|
||||||
|
|
||||||
// Define default bar color
|
// Define default bar color
|
||||||
DWORD barColor = 0;
|
DWORD barColor = 0;
|
||||||
|
|
||||||
@@ -374,52 +479,51 @@ public:
|
|||||||
barColor = 5;
|
barColor = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
//spdlog::info("barColor: {}", barColor);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Define the dimensions for the bars
|
// Define the dimensions for the bars
|
||||||
int barWidth = 200; // Width of the bars
|
int pbarWidth = GetPrivateProfileIntA("Options", "pbarWidth", 200, "./d2tweaks.ini");
|
||||||
int barHeight = 16; // Height of the bars
|
int pbarHeight = GetPrivateProfileIntA("Options", "pbarHeight", 16, "./d2tweaks.ini");
|
||||||
|
|
||||||
// Define the coordinates for the bars
|
// Define the coordinates for the bars
|
||||||
int barX = sWCenter - 100; // Left coordinate of the bars
|
int barX = 245; // Left coordinate of the bars
|
||||||
int barY_HP = 654; // Top coordinate of the HP bar
|
int barY_HP = 728; // Top coordinate of the HP bar
|
||||||
int barY_Mana = barY_HP + barHeight + 4; // Top coordinate of the Mana bar with separator
|
int barY_Mana = barY_HP + pbarHeight + 4; // Top coordinate of the Mana bar with separator
|
||||||
int barY_Stamina = barY_Mana + barHeight + 4; // Top coordinate of the Stamina bar with separator
|
int barY_Stamina = barY_Mana + pbarHeight + 4; // Top coordinate of the Stamina bar with separator
|
||||||
|
|
||||||
std::wstring life = L"L: " + strHP + L" / " + strMaxHP;
|
|
||||||
std::wstring mana = L"M: " + strMana + L" / " + strMaxMana;
|
|
||||||
std::wstring stamina = L"" + strStamina + L" / " + strMaxStamina;
|
|
||||||
|
|
||||||
int lifeWidth = diablo2::d2_win::get_text_pixel_width(const_cast<wchar_t*>(life.c_str()));
|
|
||||||
int manaWidth = diablo2::d2_win::get_text_pixel_width(const_cast<wchar_t*>(mana.c_str()));
|
|
||||||
int staminaWidth = diablo2::d2_win::get_text_pixel_width(const_cast<wchar_t*>(stamina.c_str()));
|
|
||||||
|
|
||||||
|
std::wstring life = strHP + L" / " + strMaxHP;
|
||||||
|
std::wstring mana = strMana + L" / " + strMaxMana;
|
||||||
|
std::wstring stamina = strStamina + L" / " + strMaxStamina;
|
||||||
|
|
||||||
// Calculate the filled widths of the bars
|
// Calculate the filled widths of the bars
|
||||||
int filledHPWidth = static_cast<int>(healthPercentage * barWidth);
|
int filledHPWidth = static_cast<int>(healthPercentage * pbarWidth);
|
||||||
int filledManaWidth = static_cast<int>(manaPercentage * barWidth);
|
int filledManaWidth = static_cast<int>(manaPercentage * pbarWidth);
|
||||||
int filledStaminaWidth = static_cast<int>(staminaPercentage * barWidth);
|
int filledStaminaWidth = static_cast<int>(staminaPercentage * pbarWidth);
|
||||||
|
|
||||||
// at 345 we need to minus the width of the text
|
// at 345 we need to minus the width of the text
|
||||||
sWCenter = barX + 100 - (diablo2::d2_win::get_text_pixel_width(const_cast<wchar_t*>(mana.c_str())) / 2);
|
sWCenter = barX + 100 - (diablo2::d2_win::get_text_pixel_width(const_cast<wchar_t*>(mana.c_str())) / 2);
|
||||||
|
|
||||||
HWND diabloIIWnd = FindDiabloIIWindow();
|
HWND diabloIIWnd = FindDiabloIIWindow();
|
||||||
|
|
||||||
|
// Get player_bars_enabled from [Options] in d2tweaks.ini
|
||||||
|
int player_bars_enabled_hp = GetPrivateProfileIntA("Options", "player_bars_hp_enabled", 1, "./d2tweaks.ini");
|
||||||
|
int player_bars_X_hp = GetPrivateProfileIntA("Options", "player_bars_hp_X", barX, "./d2tweaks.ini");
|
||||||
|
int player_bars_Y_hp = GetPrivateProfileIntA("Options", "player_bars_hp_Y", barY_HP, "./d2tweaks.ini");
|
||||||
|
|
||||||
|
int player_bars_enabled_mana = GetPrivateProfileIntA("Options", "player_bars_mana_enabled", 1, "./d2tweaks.ini");
|
||||||
|
int player_bars_X_mana = GetPrivateProfileIntA("Options", "player_bars_mana_X", barX, "./d2tweaks.ini");
|
||||||
|
int player_bars_Y_mana = GetPrivateProfileIntA("Options", "player_bars_mana_Y", barY_Mana, "./d2tweaks.ini");
|
||||||
|
|
||||||
|
if (player_bars_enabled_hp == 1) {
|
||||||
// Draw the filled HP bar
|
// Draw the filled HP bar
|
||||||
diablo2::d2_gfx::draw_filled_rect(barX, barY_HP, barX + filledHPWidth, barY_HP + barHeight, barColor, 255);
|
diablo2::d2_gfx::draw_filled_rect(player_bars_X_hp, player_bars_Y_hp, barX + filledHPWidth, barY_HP + pbarHeight, barColor, 255);
|
||||||
//DrawFilledRect(diabloIIWnd, barX, barY_HP, barX + filledHPWidth, barY_HP + barHeight, RGB(255, 0, 0)); // Red color for HP
|
//DrawFilledRect(diabloIIWnd, barX, barY_HP, barX + filledHPWidth, barY_HP + barHeight, RGB(255, 0, 0)); // Red color for HP
|
||||||
|
diablo2::d2_win::draw_text(const_cast<wchar_t*>(life.c_str()), sWCenter, barY_HP + 15, diablo2::UI_COLOR_WHITE, 0);
|
||||||
diablo2::d2_win::draw_text(const_cast<wchar_t*>(life.c_str()), sWCenter, barY_HP + 15, stat.colorStatValue, 0);
|
}
|
||||||
|
if (player_bars_enabled_mana == 1) {
|
||||||
|
|
||||||
|
|
||||||
// Draw the filled Mana bar
|
// Draw the filled Mana bar
|
||||||
diablo2::d2_gfx::draw_filled_rect(barX, barY_Mana, barX + filledManaWidth, barY_Mana + barHeight, 140, 255);
|
diablo2::d2_gfx::draw_filled_rect(player_bars_X_mana, player_bars_Y_mana, barX + filledManaWidth, barY_Mana + pbarHeight, 140, 255);
|
||||||
//DrawFilledRect(diabloIIWnd, barX, barY_Mana, barX + filledManaWidth, barY_Mana + barHeight, RGB(100, 100, 255)); // Blue color for Mana
|
//DrawFilledRect(diabloIIWnd, barX, barY_Mana, barX + filledManaWidth, barY_Mana + barHeight, RGB(100, 100, 255)); // Blue color for Mana
|
||||||
diablo2::d2_win::draw_text(const_cast<wchar_t*>(mana.c_str()), sWCenter, barY_Mana + 15, stat.colorStatValue, 0);
|
diablo2::d2_win::draw_text(const_cast<wchar_t*>(mana.c_str()), sWCenter, barY_Mana + 15, diablo2::UI_COLOR_WHITE, 0);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
// Define the number of separators
|
// Define the number of separators
|
||||||
int numColors = 256;
|
int numColors = 256;
|
||||||
@@ -448,10 +552,6 @@ public:
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Draw the filled Stamina bar
|
// Draw the filled Stamina bar
|
||||||
// diablo2::d2_gfx::draw_filled_rect(barX, barY_Stamina, barX + filledStaminaWidth, barY_Stamina + barHeight, 12, 255);
|
// diablo2::d2_gfx::draw_filled_rect(barX, barY_Stamina, barX + filledStaminaWidth, barY_Stamina + barHeight, 12, 255);
|
||||||
//DrawFilledRect(diabloIIWnd, barX, barY_Stamina, barX + filledStaminaWidth, barY_Stamina + barHeight, RGB(255, 255, 0)); // Green color for Stamina
|
//DrawFilledRect(diabloIIWnd, barX, barY_Stamina, barX + filledStaminaWidth, barY_Stamina + barHeight, RGB(255, 255, 0)); // Green color for Stamina
|
||||||
@@ -462,14 +562,6 @@ public:
|
|||||||
|
|
||||||
diablo2::d2_win::set_current_font(diablo2::UI_FONT_16); // Set font to FONT16
|
diablo2::d2_win::set_current_font(diablo2::UI_FONT_16); // Set font to FONT16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!should_draw()) {
|
if (!should_draw()) {
|
||||||
m_sort_inventory_btn->set_enabled(false);
|
m_sort_inventory_btn->set_enabled(false);
|
||||||
m_sort_inventory_btn->set_visible(false);
|
m_sort_inventory_btn->set_visible(false);
|
||||||
@@ -546,12 +638,9 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::autosort::init_early() {
|
void d2_tweaks::client::modules::autosort::init_early() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void d2_tweaks::client::modules::autosort::init() {
|
void d2_tweaks::client::modules::autosort::init() {
|
||||||
char acPathToIni[MAX_PATH] = { 0 };
|
char acPathToIni[MAX_PATH] = { 0 };
|
||||||
const char* pcIniFile = "\\d2tweaks.ini";
|
const char* pcIniFile = "\\d2tweaks.ini";
|
||||||
@@ -584,4 +673,3 @@ void d2_tweaks::client::modules::autosort::handle_packet(common::packet_header*
|
|||||||
diablo2::d2_common::inv_add_item(player->inventory, item, inventorySort->tx, inventorySort->ty, inventoryIndex, true, item->item_data->page);
|
diablo2::d2_common::inv_add_item(player->inventory, item, inventorySort->tx, inventorySort->ty, inventoryIndex, true, item->item_data->page);
|
||||||
diablo2::d2_common::inv_update_item(player->inventory, item, true);
|
diablo2::d2_common::inv_update_item(player->inventory, item, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user