diff --git a/build/Debug/D2tweaks.ilk b/build/Debug/D2tweaks.ilk index c4f861c..9b5a87c 100644 Binary files a/build/Debug/D2tweaks.ilk and b/build/Debug/D2tweaks.ilk differ diff --git a/build/Debug/D2tweaks.log b/build/Debug/D2tweaks.log index 04e5a0e..b31b3f1 100644 --- a/build/Debug/D2tweaks.log +++ b/build/Debug/D2tweaks.log @@ -3,34 +3,31 @@ autosort_client.cpp auto_gold_pickup_client.cpp auto_item_pickup_client.cpp - client_module.cpp damage_display_client.cpp D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\damage_display\damage_display_client.cpp(138,12): warning C4244: 'argument': conversion from 'time_t' to 'unsigned int', possible loss of data D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\damage_display\damage_display_client.cpp(144,31): warning C4244: '=': conversion from 'ULONGLONG' to 'long', possible loss of data -D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\damage_display\damage_display_client.cpp(252,59): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data +D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\damage_display\damage_display_client.cpp(267,59): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data item_drop_message_client.cpp item_move_client.cpp D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\client\modules\item_move\item_move_client.cpp(99,33): warning C4018: '<': signed/unsigned mismatch loot_filter_settings_menu.cpp - loot_filter_settings_toggle_menu.cpp - small_patches.cpp test.cpp trader_update_client.cpp transmute_client.cpp - asset_manager.cpp + autosort_server.cpp +D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\server\modules\autosort\autosort_server.cpp(348,25): warning C4018: '<=': signed/unsigned mismatch +D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\server\modules\autosort\autosort_server.cpp(349,26): warning C4018: '<=': signed/unsigned mismatch + auto_gold_pickup_server.cpp +D:\VSCode\d2tweaks-rnd2k\src\d2tweaks\server\modules\auto_gold_pickup\auto_gold_pickup_server.cpp(51,33): warning C4018: '>': signed/unsigned mismatch + auto_item_pickup_server.cpp + damage_display_server.cpp + identify_on_pickup_server.cpp + item_drop_message_server.cpp + item_move_server.cpp + test.cpp trader_update_server.cpp - server.cpp - button.cpp - checkbox.cpp - group.cpp - image.cpp - label.cpp - menu.cpp + transmute_server.cpp ui_manager.cpp - d2gfx.cpp - d2win.cpp - main.cpp - D2Template.cpp - DllNotify.cpp - LINK : ..\..\Diablo II\MODS\ironman-dev\D2tweaks.dll not found or not built by the last incremental link; performing full link + d2common.cpp + screen.cpp D2tweaks.vcxproj -> D:\Diablo II\MODS\ironman-dev\D2tweaks.dll diff --git a/build/Debug/D2tweaks.tlog/CL.command.1.tlog b/build/Debug/D2tweaks.tlog/CL.command.1.tlog index 72ba9fb..691b62a 100644 Binary files a/build/Debug/D2tweaks.tlog/CL.command.1.tlog and b/build/Debug/D2tweaks.tlog/CL.command.1.tlog differ diff --git a/build/Debug/D2tweaks.tlog/CL.read.1.tlog b/build/Debug/D2tweaks.tlog/CL.read.1.tlog index 8d3f5a4..db2789a 100644 Binary files a/build/Debug/D2tweaks.tlog/CL.read.1.tlog and b/build/Debug/D2tweaks.tlog/CL.read.1.tlog differ diff --git a/build/Debug/D2tweaks.tlog/CL.write.1.tlog b/build/Debug/D2tweaks.tlog/CL.write.1.tlog index 357dacc..40556e0 100644 Binary files a/build/Debug/D2tweaks.tlog/CL.write.1.tlog and b/build/Debug/D2tweaks.tlog/CL.write.1.tlog differ diff --git a/build/Debug/D2tweaks.tlog/link.read.1.tlog b/build/Debug/D2tweaks.tlog/link.read.1.tlog index 8f2dc7a..3cd0a7f 100644 Binary files a/build/Debug/D2tweaks.tlog/link.read.1.tlog and b/build/Debug/D2tweaks.tlog/link.read.1.tlog differ diff --git a/build/Debug/src/d2tweaks/client/client.obj b/build/Debug/src/d2tweaks/client/client.obj index 17f3f76..62265ce 100644 Binary files a/build/Debug/src/d2tweaks/client/client.obj and b/build/Debug/src/d2tweaks/client/client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/auto_gold_pickup/auto_gold_pickup_client.obj b/build/Debug/src/d2tweaks/client/modules/auto_gold_pickup/auto_gold_pickup_client.obj index 4523a66..994fd33 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/auto_gold_pickup/auto_gold_pickup_client.obj and b/build/Debug/src/d2tweaks/client/modules/auto_gold_pickup/auto_gold_pickup_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/auto_item_pickup/auto_item_pickup_client.obj b/build/Debug/src/d2tweaks/client/modules/auto_item_pickup/auto_item_pickup_client.obj index 7f2c0ee..8e7af4b 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/auto_item_pickup/auto_item_pickup_client.obj and b/build/Debug/src/d2tweaks/client/modules/auto_item_pickup/auto_item_pickup_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/autosort/autosort_client.obj b/build/Debug/src/d2tweaks/client/modules/autosort/autosort_client.obj index eeb82ff..aa2ce25 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/autosort/autosort_client.obj and b/build/Debug/src/d2tweaks/client/modules/autosort/autosort_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/damage_display/damage_display_client.obj b/build/Debug/src/d2tweaks/client/modules/damage_display/damage_display_client.obj index 2759dc3..89cbce4 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/damage_display/damage_display_client.obj and b/build/Debug/src/d2tweaks/client/modules/damage_display/damage_display_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/item_drop_message/item_drop_message_client.obj b/build/Debug/src/d2tweaks/client/modules/item_drop_message/item_drop_message_client.obj index e458144..3b76907 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/item_drop_message/item_drop_message_client.obj and b/build/Debug/src/d2tweaks/client/modules/item_drop_message/item_drop_message_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/item_move/item_move_client.obj b/build/Debug/src/d2tweaks/client/modules/item_move/item_move_client.obj index 21716fe..caf62dd 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/item_move/item_move_client.obj and b/build/Debug/src/d2tweaks/client/modules/item_move/item_move_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/loot_filter/loot_filter_settings_menu.obj b/build/Debug/src/d2tweaks/client/modules/loot_filter/loot_filter_settings_menu.obj index ede3fe5..6c89a45 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/loot_filter/loot_filter_settings_menu.obj and b/build/Debug/src/d2tweaks/client/modules/loot_filter/loot_filter_settings_menu.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/test/test.obj b/build/Debug/src/d2tweaks/client/modules/test/test.obj index c0b3250..f851df1 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/test/test.obj and b/build/Debug/src/d2tweaks/client/modules/test/test.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/trader_update/trader_update_client.obj b/build/Debug/src/d2tweaks/client/modules/trader_update/trader_update_client.obj index 6bd8083..b56fea6 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/trader_update/trader_update_client.obj and b/build/Debug/src/d2tweaks/client/modules/trader_update/trader_update_client.obj differ diff --git a/build/Debug/src/d2tweaks/client/modules/transmute/transmute_client.obj b/build/Debug/src/d2tweaks/client/modules/transmute/transmute_client.obj index b363c7d..a6a5943 100644 Binary files a/build/Debug/src/d2tweaks/client/modules/transmute/transmute_client.obj and b/build/Debug/src/d2tweaks/client/modules/transmute/transmute_client.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/auto_gold_pickup/auto_gold_pickup_server.obj b/build/Debug/src/d2tweaks/server/modules/auto_gold_pickup/auto_gold_pickup_server.obj index 96ad0b9..655f286 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/auto_gold_pickup/auto_gold_pickup_server.obj and b/build/Debug/src/d2tweaks/server/modules/auto_gold_pickup/auto_gold_pickup_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/auto_item_pickup/auto_item_pickup_server.obj b/build/Debug/src/d2tweaks/server/modules/auto_item_pickup/auto_item_pickup_server.obj index 5853dec..b47e935 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/auto_item_pickup/auto_item_pickup_server.obj and b/build/Debug/src/d2tweaks/server/modules/auto_item_pickup/auto_item_pickup_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/autosort/autosort_server.obj b/build/Debug/src/d2tweaks/server/modules/autosort/autosort_server.obj index 0b232f5..23222bc 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/autosort/autosort_server.obj and b/build/Debug/src/d2tweaks/server/modules/autosort/autosort_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/damage_display/damage_display_server.obj b/build/Debug/src/d2tweaks/server/modules/damage_display/damage_display_server.obj index 404c638..cda140b 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/damage_display/damage_display_server.obj and b/build/Debug/src/d2tweaks/server/modules/damage_display/damage_display_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/identify_on_pickup/identify_on_pickup_server.obj b/build/Debug/src/d2tweaks/server/modules/identify_on_pickup/identify_on_pickup_server.obj index 659d176..f19884c 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/identify_on_pickup/identify_on_pickup_server.obj and b/build/Debug/src/d2tweaks/server/modules/identify_on_pickup/identify_on_pickup_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/item_drop_message/item_drop_message_server.obj b/build/Debug/src/d2tweaks/server/modules/item_drop_message/item_drop_message_server.obj index 5413895..a1f88df 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/item_drop_message/item_drop_message_server.obj and b/build/Debug/src/d2tweaks/server/modules/item_drop_message/item_drop_message_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/item_move/item_move_server.obj b/build/Debug/src/d2tweaks/server/modules/item_move/item_move_server.obj index 9d26d46..4ba8659 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/item_move/item_move_server.obj and b/build/Debug/src/d2tweaks/server/modules/item_move/item_move_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/test/test.obj b/build/Debug/src/d2tweaks/server/modules/test/test.obj index 0c65f6d..e8a79f2 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/test/test.obj and b/build/Debug/src/d2tweaks/server/modules/test/test.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/trader_update/trader_update_server.obj b/build/Debug/src/d2tweaks/server/modules/trader_update/trader_update_server.obj index 386227b..3a41c0d 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/trader_update/trader_update_server.obj and b/build/Debug/src/d2tweaks/server/modules/trader_update/trader_update_server.obj differ diff --git a/build/Debug/src/d2tweaks/server/modules/transmute/transmute_server.obj b/build/Debug/src/d2tweaks/server/modules/transmute/transmute_server.obj index 03b7640..7a0f932 100644 Binary files a/build/Debug/src/d2tweaks/server/modules/transmute/transmute_server.obj and b/build/Debug/src/d2tweaks/server/modules/transmute/transmute_server.obj differ diff --git a/build/Debug/src/d2tweaks/ui/ui_manager.obj b/build/Debug/src/d2tweaks/ui/ui_manager.obj index 2e5634a..a46af73 100644 Binary files a/build/Debug/src/d2tweaks/ui/ui_manager.obj and b/build/Debug/src/d2tweaks/ui/ui_manager.obj differ diff --git a/build/Debug/src/diablo2/d2common.obj b/build/Debug/src/diablo2/d2common.obj index 2a8cc28..b494015 100644 Binary files a/build/Debug/src/diablo2/d2common.obj and b/build/Debug/src/diablo2/d2common.obj differ diff --git a/build/Debug/src/diablo2/utils/screen.obj b/build/Debug/src/diablo2/utils/screen.obj index db4fb80..e232fe0 100644 Binary files a/build/Debug/src/diablo2/utils/screen.obj and b/build/Debug/src/diablo2/utils/screen.obj differ diff --git a/build/Debug/vc143.pdb b/build/Debug/vc143.pdb index dad259e..f65d937 100644 Binary files a/build/Debug/vc143.pdb and b/build/Debug/vc143.pdb differ diff --git a/include/diablo2/d2common.h b/include/diablo2/d2common.h index 3f14b5c..52b833b 100644 --- a/include/diablo2/d2common.h +++ b/include/diablo2/d2common.h @@ -75,6 +75,14 @@ // //extern DataTables* sgptDataTables; +struct D2PropertyStrc +{ + int32_t nProperty; //0x00 + int32_t nLayer; //0x04 + int32_t nMin; //0x08 + int32_t nMax; //0x0C +}; + namespace diablo2 { namespace structures { struct unit; @@ -387,9 +395,528 @@ namespace diablo2 { UNIT_STAT_ITEM_DAMAGE_UNDEAD_BYTIME = 0x129, UNIT_STAT_ITEM_TOHIT_DEMON_BYTIME = 0x12A, 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_STAT_strength = 0, + UNIT_STAT_energy = 1, + UNIT_STAT_dexterity = 2, + UNIT_STAT_vitality = 3, + UNIT_STAT_statpts = 4, + UNIT_STAT_newskills = 5, + UNIT_STAT_hitpoints = 6, + UNIT_STAT_maxhp = 7, + UNIT_STAT_mana = 8, + UNIT_STAT_maxmana = 9, + UNIT_STAT_stamina = 10, + UNIT_STAT_maxstamina = 11, + UNIT_STAT_level = 12, + UNIT_STAT_experience = 13, + UNIT_STAT_gold = 14, + UNIT_STAT_goldbank = 15, + UNIT_STAT_item_armor_percent = 16, + UNIT_STAT_item_maxdamage_percent = 17, + UNIT_STAT_item_mindamage_percent = 18, + UNIT_STAT_tohit = 19, + UNIT_STAT_toblock = 20, + UNIT_STAT_mindamage = 21, + UNIT_STAT_maxdamage = 22, + UNIT_STAT_secondary_mindamage = 23, + UNIT_STAT_secondary_maxdamage = 24, + UNIT_STAT_damagepercent = 25, + UNIT_STAT_manarecovery = 26, + UNIT_STAT_manarecoverybonus = 27, + UNIT_STAT_staminarecoverybonus = 28, + UNIT_STAT_lastexp = 29, + UNIT_STAT_nextexp = 30, + UNIT_STAT_armorclass = 31, + UNIT_STAT_armorclass_vs_missile = 32, + UNIT_STAT_armorclass_vs_hth = 33, + UNIT_STAT_normal_damage_reduction = 34, + UNIT_STAT_magic_damage_reduction = 35, + UNIT_STAT_damageresist = 36, + UNIT_STAT_magicresist = 37, + UNIT_STAT_maxmagicresist = 38, + UNIT_STAT_fireresist = 39, + UNIT_STAT_maxfireresist = 40, + UNIT_STAT_lightresist = 41, + UNIT_STAT_maxlightresist = 42, + UNIT_STAT_coldresist = 43, + UNIT_STAT_maxcoldresist = 44, + UNIT_STAT_poisonresist = 45, + UNIT_STAT_maxpoisonresist = 46, + UNIT_STAT_damageaura = 47, + UNIT_STAT_firemindam = 48, + UNIT_STAT_firemaxdam = 49, + UNIT_STAT_lightmindam = 50, + UNIT_STAT_lightmaxdam = 51, + UNIT_STAT_magicmindam = 52, + UNIT_STAT_magicmaxdam = 53, + UNIT_STAT_coldmindam = 54, + UNIT_STAT_coldmaxdam = 55, + UNIT_STAT_coldlength = 56, + UNIT_STAT_poisonmindam = 57, + UNIT_STAT_poisonmaxdam = 58, + UNIT_STAT_poisonlength = 59, + UNIT_STAT_lifedrainmindam = 60, + UNIT_STAT_lifedrainmaxdam = 61, + UNIT_STAT_manadrainmindam = 62, + UNIT_STAT_manadrainmaxdam = 63, + UNIT_STAT_stamdrainmindam = 64, + UNIT_STAT_stamdrainmaxdam = 65, + UNIT_STAT_stunlength = 66, + UNIT_STAT_velocitypercent = 67, + UNIT_STAT_attackrate = 68, + UNIT_STAT_other_animrate = 69, + UNIT_STAT_quantity = 70, + UNIT_STAT_value = 71, + UNIT_STAT_durability = 72, + UNIT_STAT_maxdurability = 73, + UNIT_STAT_hpregen = 74, + UNIT_STAT_item_maxdurability_percent = 75, + UNIT_STAT_item_maxhp_percent = 76, + UNIT_STAT_item_maxmana_percent = 77, + UNIT_STAT_item_attackertakesdamage = 78, + UNIT_STAT_item_goldbonus = 79, + UNIT_STAT_item_magicbonus = 80, + UNIT_STAT_item_knockback = 81, + UNIT_STAT_item_timeduration = 82, + UNIT_STAT_item_addclassskills = 83, + UNIT_STAT_unsentparam1 = 84, + UNIT_STAT_item_addexperience = 85, + UNIT_STAT_item_healafterkill = 86, + UNIT_STAT_item_reducedprices = 87, + UNIT_STAT_item_doubleherbduration = 88, + UNIT_STAT_item_lightradius = 89, + UNIT_STAT_item_lightcolor = 90, + UNIT_STAT_item_req_percent = 91, + UNIT_STAT_item_levelreq = 92, + UNIT_STAT_item_fasterattackrate = 93, + UNIT_STAT_item_levelreqpct = 94, + UNIT_STAT_lastblockframe = 95, + UNIT_STAT_item_fastermovevelocity = 96, + UNIT_STAT_item_nonclassskill = 97, + UNIT_STAT_state = 98, + UNIT_STAT_item_fastergethitrate = 99, + UNIT_STAT_monster_playercount = 100, + UNIT_STAT_skill_poison_override_length = 101, + UNIT_STAT_item_fasterblockrate = 102, + UNIT_STAT_skill_bypass_undead = 103, + UNIT_STAT_skill_bypass_demons = 104, + UNIT_STAT_item_fastercastrate = 105, + UNIT_STAT_skill_bypass_beasts = 106, + UNIT_STAT_item_singleskill = 107, + UNIT_STAT_item_restinpeace = 108, + UNIT_STAT_curse_resistance = 109, + UNIT_STAT_item_poisonlengthresist = 110, + UNIT_STAT_item_normaldamage = 111, + UNIT_STAT_item_howl = 112, + UNIT_STAT_item_stupidity = 113, + UNIT_STAT_item_damagetomana = 114, + UNIT_STAT_item_ignoretargetac = 115, + UNIT_STAT_item_fractionaltargetac = 116, + UNIT_STAT_item_preventheal = 117, + UNIT_STAT_item_halffreezeduration = 118, + UNIT_STAT_item_tohit_percent = 119, + UNIT_STAT_item_damagetargetac = 120, + UNIT_STAT_item_demondamage_percent = 121, + UNIT_STAT_item_undeaddamage_percent = 122, + UNIT_STAT_item_demon_tohit = 123, + UNIT_STAT_item_undead_tohit = 124, + UNIT_STAT_item_throwable = 125, + UNIT_STAT_item_elemskill = 126, + UNIT_STAT_item_allskills = 127, + UNIT_STAT_item_attackertakeslightdamage = 128, + UNIT_STAT_ironmaiden_level = 129, + UNIT_STAT_lifetap_level = 130, + UNIT_STAT_thorns_percent = 131, + UNIT_STAT_bonearmor = 132, + UNIT_STAT_bonearmormax = 133, + UNIT_STAT_item_freeze = 134, + UNIT_STAT_item_openwounds = 135, + UNIT_STAT_item_crushingblow = 136, + UNIT_STAT_item_kickdamage = 137, + UNIT_STAT_item_manaafterkill = 138, + UNIT_STAT_item_healafterdemonkill = 139, + UNIT_STAT_item_extrablood = 140, + UNIT_STAT_item_deadlystrike = 141, + UNIT_STAT_item_absorbfire_percent = 142, + UNIT_STAT_item_absorbfire = 143, + UNIT_STAT_item_absorblight_percent = 144, + UNIT_STAT_item_absorblight = 145, + UNIT_STAT_item_absorbmagic_percent = 146, + UNIT_STAT_item_absorbmagic = 147, + UNIT_STAT_item_absorbcold_percent = 148, + UNIT_STAT_item_absorbcold = 149, + UNIT_STAT_item_slow = 150, + UNIT_STAT_item_aura = 151, + UNIT_STAT_item_indesctructible = 152, + UNIT_STAT_item_cannotbefrozen = 153, + UNIT_STAT_item_staminadrainpct = 154, + UNIT_STAT_item_reanimate = 155, + UNIT_STAT_item_pierce = 156, + UNIT_STAT_item_magicarrow = 157, + UNIT_STAT_item_explosivearrow = 158, + UNIT_STAT_item_throw_mindamage = 159, + UNIT_STAT_item_throw_maxdamage = 160, + UNIT_STAT_skill_handofathena = 161, + UNIT_STAT_skill_staminapercent = 162, + UNIT_STAT_skill_passive_staminapercent = 163, + UNIT_STAT_skill_concentration = 164, + UNIT_STAT_skill_enchant = 165, + UNIT_STAT_skill_pierce = 166, + UNIT_STAT_skill_conviction = 167, + UNIT_STAT_skill_chillingarmor = 168, + UNIT_STAT_skill_frenzy = 169, + UNIT_STAT_skill_decrepify = 170, + UNIT_STAT_skill_armor_percent = 171, + UNIT_STAT_alignment = 172, + UNIT_STAT_target0 = 173, + UNIT_STAT_target1 = 174, + UNIT_STAT_goldlost = 175, + UNIT_STAT_conversion_level = 176, + UNIT_STAT_conversion_maxhp = 177, + UNIT_STAT_unit_dooverlay = 178, + UNIT_STAT_attack_vs_montype = 179, + UNIT_STAT_damage_vs_montype = 180, + UNIT_STAT_fade = 181, + UNIT_STAT_armor_override_percent = 182, + UNIT_STAT_killcounter = 183, + UNIT_STAT_soulscaptured = 184, + UNIT_STAT_spirits = 185, + UNIT_STAT_skill_more = 186, + UNIT_STAT_item_corrupted = 187, + UNIT_STAT_item_addskill_tab = 188, + UNIT_STAT_hidden_corruption = 189, + UNIT_STAT_item_strength_spirits = 190, + UNIT_STAT_item_dexterity_spirits = 191, + UNIT_STAT_item_vitality_spirits = 192, + UNIT_STAT_item_energy_spirits = 193, + UNIT_STAT_item_numsockets = 194, + UNIT_STAT_item_skillonattack = 195, + UNIT_STAT_item_skillonkill = 196, + UNIT_STAT_item_skillondeath = 197, + UNIT_STAT_item_skillonhit = 198, + UNIT_STAT_item_skillonlevelup = 199, + UNIT_STAT_item_skill_souls = 200, + UNIT_STAT_item_skillongethit = 201, + UNIT_STAT_UNUSED_2 = 202, + UNIT_STAT_UNUSED_3 = 203, + UNIT_STAT_item_charged_skill = 204, + UNIT_STAT_UNUSED_5 = 205, + UNIT_STAT_UNUSED_6 = 206, + UNIT_STAT_UNUSED_7 = 207, + UNIT_STAT_UNUSED_8 = 208, + UNIT_STAT_UNUSED_9 = 209, + UNIT_STAT_UNUSED_10 = 210, + UNIT_STAT_UNUSED_11 = 211, + UNIT_STAT_UNUSED_12 = 212, + UNIT_STAT_UNUSED_13 = 213, + UNIT_STAT_item_armor_perlevel = 214, + UNIT_STAT_item_armorpercent_perlevel = 215, + UNIT_STAT_item_hp_perlevel = 216, + UNIT_STAT_item_mana_perlevel = 217, + UNIT_STAT_item_maxdamage_perlevel = 218, + UNIT_STAT_item_maxdamage_percent_perlevel = 219, + UNIT_STAT_item_strength_perlevel = 220, + UNIT_STAT_item_dexterity_perlevel = 221, + UNIT_STAT_item_energy_perlevel = 222, + UNIT_STAT_item_vitality_perlevel = 223, + UNIT_STAT_item_tohit_perlevel = 224, + UNIT_STAT_item_tohitpercent_perlevel = 225, + UNIT_STAT_item_cold_damagemax_perlevel = 226, + UNIT_STAT_item_fire_damagemax_perlevel = 227, + UNIT_STAT_item_ltng_damagemax_perlevel = 228, + UNIT_STAT_item_pois_damagemax_perlevel = 229, + UNIT_STAT_item_resist_cold_perlevel = 230, + UNIT_STAT_item_resist_fire_perlevel = 231, + UNIT_STAT_item_resist_ltng_perlevel = 232, + UNIT_STAT_item_resist_pois_perlevel = 233, + UNIT_STAT_item_absorb_cold_perlevel = 234, + UNIT_STAT_item_absorb_fire_perlevel = 235, + UNIT_STAT_item_absorb_ltng_perlevel = 236, + UNIT_STAT_item_absorb_pois_perlevel = 237, + UNIT_STAT_item_thorns_perlevel = 238, + UNIT_STAT_UNUSED_84 = 239, + UNIT_STAT_item_find_magic_perlevel = 240, + UNIT_STAT_item_regenstamina_perlevel = 241, + UNIT_STAT_item_stamina_perlevel = 242, + UNIT_STAT_item_damage_demon_perlevel = 243, + UNIT_STAT_item_damage_undead_perlevel = 244, + UNIT_STAT_item_tohit_demon_perlevel = 245, + UNIT_STAT_item_tohit_undead_perlevel = 246, + UNIT_STAT_item_crushingblow_perlevel = 247, + UNIT_STAT_item_openwounds_perlevel = 248, + UNIT_STAT_item_kick_damage_perlevel = 249, + UNIT_STAT_item_deadlystrike_perlevel = 250, + UNIT_STAT_item_find_gems_perlevel = 251, + UNIT_STAT_item_replenish_durability = 252, + UNIT_STAT_item_replenish_quantity = 253, + UNIT_STAT_item_extra_stack = 254, + UNIT_STAT_item_find_item = 255, + UNIT_STAT_item_slash_damage = 256, + UNIT_STAT_item_slash_damage_percent = 257, + UNIT_STAT_item_crush_damage = 258, + UNIT_STAT_item_crush_damage_percent = 259, + UNIT_STAT_item_thrust_damage = 260, + UNIT_STAT_item_thrust_damage_percent = 261, + UNIT_STAT_item_absorb_slash = 262, + UNIT_STAT_item_absorb_crush = 263, + UNIT_STAT_item_absorb_thrust = 264, + UNIT_STAT_item_absorb_slash_percent = 265, + UNIT_STAT_item_absorb_crush_percent = 266, + UNIT_STAT_item_absorb_thrust_percent = 267, + UNIT_STAT_UNUSED_14 = 268, + UNIT_STAT_UNUSED_15 = 269, + UNIT_STAT_UNUSED_16 = 270, + UNIT_STAT_UNUSED_17 = 271, + UNIT_STAT_UNUSED_18 = 272, + UNIT_STAT_UNUSED_19 = 273, + UNIT_STAT_UNUSED_20 = 274, + UNIT_STAT_UNUSED_21 = 275, + UNIT_STAT_UNUSED_22 = 276, + UNIT_STAT_UNUSED_23 = 277, + UNIT_STAT_UNUSED_24 = 278, + UNIT_STAT_UNUSED_25 = 279, + UNIT_STAT_UNUSED_26 = 280, + UNIT_STAT_UNUSED_27 = 281, + UNIT_STAT_UNUSED_28 = 282, + UNIT_STAT_UNUSED_29 = 283, + UNIT_STAT_UNUSED_30 = 284, + UNIT_STAT_UNUSED_31 = 285, + UNIT_STAT_UNUSED_32 = 286, + UNIT_STAT_UNUSED_33 = 287, + UNIT_STAT_UNUSED_34 = 288, + UNIT_STAT_UNUSED_35 = 289, + UNIT_STAT_UNUSED_36 = 290, + UNIT_STAT_UNUSED_37 = 291, + UNIT_STAT_UNUSED_38 = 292, + UNIT_STAT_UNUSED_39 = 293, + UNIT_STAT_UNUSED_40 = 294, + UNIT_STAT_UNUSED_41 = 295, + UNIT_STAT_UNUSED_42 = 296, + UNIT_STAT_UNUSED_43 = 297, + UNIT_STAT_UNUSED_44 = 298, + UNIT_STAT_display_spirits = 299, + UNIT_STAT_display_souls_captured = 300, + UNIT_STAT_magharv = 301, + UNIT_STAT_dummy = 302, + UNIT_STAT_display_kills = 303, + UNIT_STAT_iforge = 304, + UNIT_STAT_item_pierce_cold = 305, + UNIT_STAT_item_pierce_fire = 306, + UNIT_STAT_item_pierce_ltng = 307, + UNIT_STAT_item_pierce_pois = 308, + UNIT_STAT_item_damage_vs_monster = 309, + UNIT_STAT_item_damage_percent_vs_monster = 310, + UNIT_STAT_item_tohit_vs_monster = 311, + UNIT_STAT_item_tohit_percent_vs_monster = 312, + UNIT_STAT_item_ac_vs_monster = 313, + UNIT_STAT_item_ac_percent_vs_monster = 314, + UNIT_STAT_firelength = 315, + UNIT_STAT_burningmin = 316, + UNIT_STAT_burningmax = 317, + UNIT_STAT_progressive_damage = 318, + UNIT_STAT_progressive_steal = 319, + UNIT_STAT_progressive_other = 320, + UNIT_STAT_progressive_fire = 321, + UNIT_STAT_progressive_cold = 322, + UNIT_STAT_progressive_lightning = 323, + UNIT_STAT_item_extra_charges = 324, + UNIT_STAT_progressive_tohit = 325, + UNIT_STAT_poison_count = 326, + UNIT_STAT_damage_framerate = 327, + UNIT_STAT_pierce_idx = 328, + UNIT_STAT_passive_fire_mastery = 329, + UNIT_STAT_passive_ltng_mastery = 330, + UNIT_STAT_passive_cold_mastery = 331, + UNIT_STAT_passive_pois_mastery = 332, + UNIT_STAT_passive_fire_pierce = 333, + UNIT_STAT_passive_ltng_pierce = 334, + UNIT_STAT_passive_cold_pierce = 335, + UNIT_STAT_passive_pois_pierce = 336, + UNIT_STAT_passive_critical_strike = 337, + UNIT_STAT_passive_dodge = 338, + UNIT_STAT_passive_avoid = 339, + UNIT_STAT_passive_evade = 340, + UNIT_STAT_passive_warmth = 341, + UNIT_STAT_passive_mastery_melee_th = 342, + UNIT_STAT_passive_mastery_melee_dmg = 343, + UNIT_STAT_passive_mastery_melee_crit = 344, + UNIT_STAT_passive_mastery_throw_th = 345, + UNIT_STAT_passive_mastery_throw_dmg = 346, + UNIT_STAT_passive_mastery_throw_crit = 347, + UNIT_STAT_passive_weaponblock = 348, + UNIT_STAT_passive_summon_resist = 349, + UNIT_STAT_modifierlist_skill = 350, + UNIT_STAT_modifierlist_level = 351, + UNIT_STAT_last_sent_hp_pct = 352, + UNIT_STAT_source_unit_type = 353, + UNIT_STAT_source_unit_id = 354, + UNIT_STAT_shortparam1 = 355, + UNIT_STAT_questitemdifficulty = 356, + UNIT_STAT_passive_mag_mastery = 357, + UNIT_STAT_passive_mag_pierce = 358, + UNIT_STAT_item_strength_percent = 359, + UNIT_STAT_item_dexterity_percent = 360, + UNIT_STAT_item_vitality_percent = 361, + UNIT_STAT_item_energy_percent = 362, + UNIT_STAT_item_strengthpercent_perlevel = 363, + UNIT_STAT_item_dexteritypercent_perlevel = 364, + UNIT_STAT_item_energypercent_perlevel = 365, + UNIT_STAT_item_vitalitypercent_perlevel = 366, + UNIT_STAT_item_attackergetsblind = 367, + UNIT_STAT_item_attackerflees = 368, + UNIT_STAT_item_attackertakesfiredamage = 369, + UNIT_STAT_item_attackertakescolddamage = 370, + UNIT_STAT_item_maxdamage_perstr = 371, + UNIT_STAT_item_maxdamage_perdex = 372, + UNIT_STAT_item_mindamage_perlvl = 373, + UNIT_STAT_item_mindamage_perstr = 374, + UNIT_STAT_item_mindamage_perdex = 375, + UNIT_STAT_item_maxdamage_percent_perstr = 376, + UNIT_STAT_item_maxdamage_percent_perdex = 377, + UNIT_STAT_item_openwounds_perdex = 378, + UNIT_STAT_item_openwounds_perstr = 379, + UNIT_STAT_item_deadlystrike_perdex = 380, + UNIT_STAT_item_deadlystrike_perstr = 381, + UNIT_STAT_item_armor_perstr = 382, + UNIT_STAT_item_armor_perdex = 383, + UNIT_STAT_item_tohit_perstr = 384, + UNIT_STAT_item_tohit_perDex = 385, + UNIT_STAT_item_hp_pervitality = 386, + UNIT_STAT_item_mana_perenr = 387, + UNIT_STAT_item_fastercastrate_perenr = 388, + UNIT_STAT_item_fasterblockrate_perdex = 389, + UNIT_STAT_item_fastermovevelocity_pervitality = 390, + UNIT_STAT_item_fasterswingvelocity_perstrength = 391, + UNIT_STAT_item_mindamage_percent_perstr = 392, + UNIT_STAT_item_mindamage_percent_perdex = 393, + UNIT_STAT_item_mindamage_percent_perlvl = 394, + UNIT_STAT_item_crushingblow_perstr = 395, + UNIT_STAT_item_crushingblow_perdex = 396, + UNIT_STAT_item_elemskillcold = 397, + UNIT_STAT_item_elemskilllight = 398, + UNIT_STAT_item_elemskillpoison = 399, + UNIT_STAT_item_elemskillmagic = 400, + UNIT_STAT_item_elemskillfire = 401, + UNIT_STAT_item_armorpercent_perstr = 402, + UNIT_STAT_item_armorpercent_perdex = 403, + UNIT_STAT_item_tohitpercent_perstr = 404, + UNIT_STAT_item_tohitpercent_perdex = 405, + UNIT_STAT_item_fasterswingvelocity_perdex = 406, + UNIT_STAT_item_fasterswingvelocity_perlvl = 407, + UNIT_STAT_item_fasterblockrate_perstr = 408, + UNIT_STAT_item_fasterblockrate_perlvl = 409, + UNIT_STAT_item_fastermovevelocity_perdex = 410, + UNIT_STAT_item_fastermovevelocity_perlvl = 411, + UNIT_STAT_item_fastercastrate_perlvl = 412, + UNIT_STAT_item_fasterhitrecovery_pervit = 413, + UNIT_STAT_item_fasterhitrecovery_perlvl = 414, + UNIT_STAT_item_increasedblock_perdex = 415, + UNIT_STAT_item_increasedblock_perlvl = 416, + UNIT_STAT_item_addexperience_perlvl = 417, + UNIT_STAT_item_addexperience_perenr = 418, + UNIT_STAT_item_reducedprices_perlvl = 419, + UNIT_STAT_item_pierce_perlvl = 420, + UNIT_STAT_item_pierce_perstr = 421, + UNIT_STAT_resmax_display_all_zero = 422, + UNIT_STAT_maxmagres_percent = 423, + UNIT_STAT_maxfireres_percent = 424, + UNIT_STAT_maxlightres_percent = 425, + UNIT_STAT_maxcoldres_percent = 426, + UNIT_STAT_maxpoisres_percent = 427, + UNIT_STAT_magicresist_hidden = 428, + UNIT_STAT_maxmagicresist_hidden = 429, + UNIT_STAT_fireresist_hidden = 430, + UNIT_STAT_maxfireresist_hidden = 431, + UNIT_STAT_lightresist_hidden = 432, + UNIT_STAT_maxlightresist_hidden = 433, + UNIT_STAT_coldresist_hidden = 434, + UNIT_STAT_maxcoldresist_hidden = 435, + UNIT_STAT_poisonresist_hidden = 436, + UNIT_STAT_maxpoisonresist_hidden = 437, + UNIT_STAT_hiddenresist_dummy = 438, + UNIT_STAT_item_slow_perlvl = 439, + UNIT_STAT_item_kick_damage_perstr = 440, + UNIT_STAT_item_kick_damage_perdex = 441, + UNIT_STAT_damageresist_perlvl = 442, + UNIT_STAT_damageresist_pervit = 443, + UNIT_STAT_magic_damage_reduction_perlvl = 444, + UNIT_STAT_magic_damage_reduction_perenr = 445, + UNIT_STAT_magicresist_perlvl = 446, + UNIT_STAT_magicresist_perenr = 447, + UNIT_STAT_item_stupidity_perlvl = 448, + UNIT_STAT_item_freeze_perlvl = 449, + UNIT_STAT_item_freeze_perenr = 450, + UNIT_STAT_item_poisonlengthresist_perlvl = 451, + UNIT_STAT_item_poisonlengthresist_pervit = 452, + UNIT_STAT_curse_resistance_perlvl = 453, + UNIT_STAT_curse_resistance_perenr = 454, + UNIT_STAT_curse_resistance_length = 455, + UNIT_STAT_item_manaafterkill_perlvl = 456, + UNIT_STAT_item_manaafterkill_perenr = 457, + UNIT_STAT_item_damagetomana_perlvl = 458, + UNIT_STAT_item_damagetomana_perenr = 459, + UNIT_STAT_item_damagetomana_permana = 460, + UNIT_STAT_UNUSED_45 = 461, + UNIT_STAT_UNUSED_46 = 462, + UNIT_STAT_UNUSED_47 = 463, + UNIT_STAT_UNUSED_48 = 464, + UNIT_STAT_UNUSED_49 = 465, + UNIT_STAT_UNUSED_50 = 466, + UNIT_STAT_UNUSED_51 = 467, + UNIT_STAT_UNUSED_52 = 468, + UNIT_STAT_UNUSED_53 = 469, + UNIT_STAT_UNUSED_54 = 470, + UNIT_STAT_UNUSED_55 = 471, + UNIT_STAT_UNUSED_56 = 472, + UNIT_STAT_UNUSED_57 = 473, + UNIT_STAT_UNUSED_58 = 474, + UNIT_STAT_UNUSED_59 = 475, + UNIT_STAT_UNUSED_60 = 476, + UNIT_STAT_UNUSED_61 = 477, + UNIT_STAT_UNUSED_62 = 478, + UNIT_STAT_UNUSED_63 = 479, + UNIT_STAT_UNUSED_64 = 480, + UNIT_STAT_UNUSED_65 = 481, + UNIT_STAT_UNUSED_66 = 482, + UNIT_STAT_UNUSED_67 = 483, + UNIT_STAT_UNUSED_68 = 484, + UNIT_STAT_UNUSED_69 = 485, + UNIT_STAT_UNUSED_70 = 486, + UNIT_STAT_UNUSED_71 = 487, + UNIT_STAT_UNUSED_72 = 488, + UNIT_STAT_UNUSED_73 = 489, + UNIT_STAT_UNUSED_74 = 490, + UNIT_STAT_UNUSED_75 = 491, + UNIT_STAT_UNUSED_76 = 492, + UNIT_STAT_UNUSED_77 = 493, + UNIT_STAT_UNUSED_78 = 494, + UNIT_STAT_UNUSED_79 = 495, + UNIT_STAT_UNUSED_80 = 496, + UNIT_STAT_passive_sum_mastery = 497, + UNIT_STAT_item_socketmultiplier = 498, + UNIT_STAT_gembag_Ruby = 499, + UNIT_STAT_gembag_Amethyst = 500, + UNIT_STAT_gembag_Diamond = 501, + UNIT_STAT_gembag_Emerald = 502, + UNIT_STAT_gembag_Sapphire = 503, + UNIT_STAT_gembag_Topaz = 504, + UNIT_STAT_gembag_Skull = 505, + UNIT_STAT_runebag_RunesA = 506, + UNIT_STAT_runebag_RunesB = 507, + UNIT_STAT_runebag_RunesC = 508, + UNIT_STAT_UNUSED_83 = 509, + UNIT_STAT_item_aura_display = 510, + + }; + + class d2_common { public: static char* get_base(); @@ -452,5 +979,8 @@ namespace diablo2 { static void diablo2::d2_common::refresh_unit_inventory(structures::unit* unit, bool set_update_flags); 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::add_property(structures::unit* item, D2PropertyStrc* pProperty, int nUnused); + }; } diff --git a/include/diablo2/structures/unit.h b/include/diablo2/structures/unit.h index 965ce97..917af82 100644 --- a/include/diablo2/structures/unit.h +++ b/include/diablo2/structures/unit.h @@ -22,6 +22,8 @@ namespace diablo2 { struct statslistex; struct quest_record; struct npc_record; + + enum class unit_type_t : int32_t { UNIT_TYPE_PLAYER = 0, @@ -74,6 +76,8 @@ namespace diablo2 { ITEMFLAG_ITEM = 0x08000000 }; + + struct unit { unit_type_t type; diff --git a/src/d2tweaks/client/modules/autosort/autosort_client.cpp b/src/d2tweaks/client/modules/autosort/autosort_client.cpp index 6cede75..87c370e 100644 --- a/src/d2tweaks/client/modules/autosort/autosort_client.cpp +++ b/src/d2tweaks/client/modules/autosort/autosort_client.cpp @@ -342,6 +342,26 @@ public: float manaPercentage = static_cast(statMana) / static_cast(statMaxMana); float staminaPercentage = static_cast(statStamina) / static_cast(statMaxStamina); + //spdlog::info("healthPercentage: {}", healthPercentage); + + + // Define default bar color + DWORD barColor = 0; + + // Determine bar color based on health percentage + if (healthPercentage > .80) { + barColor = 118; + } + else if (healthPercentage > .50) { + barColor = 13; + } + else { + barColor = 5; + } + + //spdlog::info("barColor: {}", barColor); + + // Define the dimensions for the bars int barWidth = 200; // Width of the bars int barHeight = 16; // Height of the bars @@ -362,20 +382,21 @@ public: int filledManaWidth = static_cast(manaPercentage * barWidth); int filledStaminaWidth = static_cast(staminaPercentage * barWidth); + // at 345 we need to minus the width of the text + int sWCenter = barX + 100 - (diablo2::d2_win::get_text_pixel_width(const_cast(mana.c_str())) / 2); + HWND diabloIIWnd = FindDiabloIIWindow(); // Draw the filled HP bar - diablo2::d2_gfx::draw_filled_rect(barX, barY_HP, barX + filledHPWidth, barY_HP + barHeight, 10, 255); + diablo2::d2_gfx::draw_filled_rect(barX, barY_HP, barX + filledHPWidth, barY_HP + barHeight, barColor, 255); //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(life.c_str()), barX + 20, barY_HP + 15, stat.colorStatValue, 0); - - + diablo2::d2_win::draw_text(const_cast(life.c_str()), sWCenter, barY_HP + 15, stat.colorStatValue, 0); // Draw the filled Mana bar - diablo2::d2_gfx::draw_filled_rect(barX, barY_Mana, barX + filledManaWidth, barY_Mana + barHeight, 156, 255); + diablo2::d2_gfx::draw_filled_rect(barX, barY_Mana, barX + filledManaWidth, barY_Mana + barHeight, 140, 255); //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(mana.c_str()), barX + 20, barY_Mana + 15, stat.colorStatValue, 0); + diablo2::d2_win::draw_text(const_cast(mana.c_str()), sWCenter, barY_Mana + 15, stat.colorStatValue, 0); /* // Define the number of separators diff --git a/src/d2tweaks/client/modules/damage_display/damage_display_client.cpp b/src/d2tweaks/client/modules/damage_display/damage_display_client.cpp index 915e6e7..bccf033 100644 --- a/src/d2tweaks/client/modules/damage_display/damage_display_client.cpp +++ b/src/d2tweaks/client/modules/damage_display/damage_display_client.cpp @@ -235,6 +235,20 @@ static void draw_damage_labels() { uint32_t textX = mx; uint32_t textY = my; + // Define default bar color + diablo2::ui_color_t barColor; + + // Determine bar color based on health percentage + if (healthPercentage > .80) { + barColor = diablo2::ui_color_t::UI_COLOR_DARK_GREEN; + } + else if (healthPercentage > .50) { + barColor = diablo2::ui_color_t::UI_COLOR_DARK_GOLD; + } + else { + barColor = diablo2::ui_color_t::UI_COLOR_RED; + } + // Draw the combined text (health percentage and bar text) //diablo2::d2_win::draw_text(const_cast(combinedTcombinedTextext.c_str()), textX, textY, textColor, 0); //diablo2::d2_win::draw_boxed_text(const_cast(fractionStr.c_str()), textX + label->unit_width/2, textY - 12, 0, 0, textColor); @@ -248,12 +262,16 @@ static void draw_damage_labels() { int _barHeight = GetPrivateProfileIntA("Options", "barHeight", 0, "./D2Tweaks.ini"); - diablo2::d2_win::draw_text(const_cast(combinedText.c_str()), textX, textY, textColor, 0); - diablo2::d2_gfx::draw_filled_rect(textX, textY, textX + healthPercentage * 60, textY + _barHeight, 9, 255); + diablo2::d2_win::set_current_font(diablo2::UI_FONT_6); // Set font to FONT16 + diablo2::d2_win::draw_text(const_cast(combinedText.c_str()), textX, textY, barColor, 0); + diablo2::d2_gfx::draw_filled_rect(textX, textY, textX + healthPercentage * 60, textY + _barHeight, 5, 255); const auto offset = static_cast(lerp(static_cast(label->unit_height) + 5.f, static_cast(label->unit_height) + 30.f, static_cast(delta) / static_cast(DISPLAY_TIME))); my -= offset; + + + // Draw damage label std::wstring dmgText = L" " + std::to_wstring(label->damage) + L" "; const wchar_t* dmgTextPtr = dmgText.c_str(); diff --git a/src/d2tweaks/ui/ui_manager.cpp b/src/d2tweaks/ui/ui_manager.cpp index a63e926..f8f3750 100644 --- a/src/d2tweaks/ui/ui_manager.cpp +++ b/src/d2tweaks/ui/ui_manager.cpp @@ -19,6 +19,53 @@ #include +#include + +#include + +#include + + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + diablo2::structures::unit* g_item1; static LRESULT(__stdcall* g_wnd_proc_original)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); @@ -84,6 +131,8 @@ struct D2InventoryGridInfoStrc WORD pad0x16; //0x16 }; + + LRESULT d2_tweaks::ui::ui_manager::wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static auto& instance = singleton::instance(); @@ -95,7 +144,7 @@ LRESULT d2_tweaks::ui::ui_manager::wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, block = true; // block the game from processing this key } - // Send item move packet + // Send item move packet + transmute packet for certain codes if (wParam == 'Z') { // Call the item_click function using the function pointer const auto g_hoverItem = (*reinterpret_cast(diablo2::d2_client::get_base() + 0x1158F4)); @@ -121,9 +170,363 @@ LRESULT d2_tweaks::ui::ui_manager::wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, diablo2::d2_client::send_to_server(&packet, sizeof packet); (*reinterpret_cast(diablo2::d2_client::get_base() + 0x1158F4)) = nullptr; } + + + if (g_hoverItem != 0) { + const auto record = diablo2::d2_common::get_item_record(g_hoverItem->data_record_index); + char* normCode = record->string_code; + if (strncmp(normCode, "gcv", 3) == 0 || + strncmp(normCode, "gcw", 3) == 0 || + strncmp(normCode, "gcg", 3) == 0 || + strncmp(normCode, "gcr", 3) == 0 || + strncmp(normCode, "gcb", 3) == 0 || + strncmp(normCode, "skc", 3) == 0 || + strncmp(normCode, "gcy", 3) == 0 || + strncmp(normCode, "gfv", 3) == 0 || + strncmp(normCode, "gfw", 3) == 0 || + strncmp(normCode, "gfg", 3) == 0 || + strncmp(normCode, "gfr", 3) == 0 || + strncmp(normCode, "gfb", 3) == 0 || + strncmp(normCode, "skf", 3) == 0 || + strncmp(normCode, "gfy", 3) == 0 || + strncmp(normCode, "gsv", 3) == 0 || + strncmp(normCode, "gsw", 3) == 0 || + strncmp(normCode, "gsg", 3) == 0 || + strncmp(normCode, "gsr", 3) == 0 || + strncmp(normCode, "gsb", 3) == 0 || + strncmp(normCode, "sku", 3) == 0 || + strncmp(normCode, "gsy", 3) == 0 || + strncmp(normCode, "gzv", 3) == 0 || + strncmp(normCode, "glw", 3) == 0 || + strncmp(normCode, "glg", 3) == 0 || + strncmp(normCode, "glr", 3) == 0 || + strncmp(normCode, "glb", 3) == 0 || + strncmp(normCode, "skl", 3) == 0 || + strncmp(normCode, "gly", 3) == 0 || + strncmp(normCode, "gpv", 3) == 0 || + strncmp(normCode, "gpw", 3) == 0 || + strncmp(normCode, "gpg", 3) == 0 || + strncmp(normCode, "gpr", 3) == 0 || + strncmp(normCode, "gpb", 3) == 0 || + strncmp(normCode, "skz", 3) == 0 || + strncmp(normCode, "gpy", 3) == 0 || + strncmp(normCode, "ib1", 3) == 0 || + // Runes + strncmp(normCode, "r01", 3) == 0 || + strncmp(normCode, "r02", 3) == 0 || + strncmp(normCode, "r03", 3) == 0 || + strncmp(normCode, "r04", 3) == 0 || + strncmp(normCode, "r05", 3) == 0 || + strncmp(normCode, "r06", 3) == 0 || + strncmp(normCode, "r07", 3) == 0 || + strncmp(normCode, "r08", 3) == 0 || + strncmp(normCode, "r09", 3) == 0 || + strncmp(normCode, "r10", 3) == 0 || + strncmp(normCode, "r11", 3) == 0 || + strncmp(normCode, "r12", 3) == 0 || + strncmp(normCode, "r13", 3) == 0 || + strncmp(normCode, "r14", 3) == 0 || + strncmp(normCode, "r15", 3) == 0 || + strncmp(normCode, "r16", 3) == 0 || + strncmp(normCode, "r17", 3) == 0 || + strncmp(normCode, "r18", 3) == 0 || + strncmp(normCode, "r19", 3) == 0 || + strncmp(normCode, "r20", 3) == 0 || + strncmp(normCode, "r21", 3) == 0 || + strncmp(normCode, "r22", 3) == 0 || + strncmp(normCode, "r23", 3) == 0 || + strncmp(normCode, "r24", 3) == 0 || + strncmp(normCode, "r25", 3) == 0 || + strncmp(normCode, "r26", 3) == 0 || + strncmp(normCode, "r27", 3) == 0 || + strncmp(normCode, "r28", 3) == 0 || + strncmp(normCode, "r29", 3) == 0 || + strncmp(normCode, "r30", 3) == 0 || + strncmp(normCode, "r31", 3) == 0 || + strncmp(normCode, "r32", 3) == 0 || + strncmp(normCode, "r33", 3) == 0 || + strncmp(normCode, "ib2", 3) == 0 + + ) { + + char currentPage = diablo2::d2_common::get_item_page(g_hoverItem); + + // Create the packet + static d2_tweaks::common::item_move_cs packet; + packet.item_guid = g_hoverItem->guid; + + if (currentPage == 0) { //item is in inventory + if (diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_STASH)) + packet.target_page = 4; + + if (diablo2::d2_client::get_ui_window_state(diablo2::UI_WINDOW_CUBE)) + packet.target_page = 3; + } + else { + packet.target_page = 0; + } + + diablo2::d2_client::send_to_server(&packet, sizeof packet); + (*reinterpret_cast(diablo2::d2_client::get_base() + 0x1158F4)) = nullptr; + diablo2::d2_client::send_to_server_7(0x4F, 0x18, 0, 0); + } + } + block = true; // block the game from processing this key } + if (wParam == 'G') { + const auto g_hoverItem = *reinterpret_cast(diablo2::d2_client::get_base() + 0x1158F4); + if (g_hoverItem != nullptr) { + const auto record = diablo2::d2_common::get_item_record(g_hoverItem->data_record_index); + char* normCode = record->string_code; + + const auto player = diablo2::d2_client::get_local_player(); + + std::vector items; + diablo2::structures::unit* gemBag{}; + + // get the gembag item + for (auto item = player->inventory->first_item; item != nullptr; item = item->item_data->pt_next_item) { + const auto record = diablo2::d2_common::get_item_record(item->data_record_index); + if (record->type == 101) { + gemBag = item; + } + } + + // 378 is ruby + // 379 is amathyst + // 380 is diamond + // 381 is emerald + // 382 is saphhire + // 383 is topaz + // 384 is skull + + // 385 is El Runes + // 386 is Sol Runes + // 387 is Mal Runes + + // properties.txt row number - 3 + + if (strncmp(normCode, "gcv", 3) == 0) { // Use strncmp for string comparison + int32_t stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + MessageBoxA(0, std::to_string(stat).c_str(), "stat", 0); + + stat++; + + + D2PropertyStrc itemProperty = {}; + + itemProperty.nProperty = 382 - 3; + itemProperty.nLayer = 0; + itemProperty.nMin = 1; + itemProperty.nMax = 1; + + + //diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat, 0); + diablo2::d2_common::add_property(gemBag, &itemProperty, 0); + + + + + int32_t stat1 = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + MessageBoxA(0, std::to_string(stat1).c_str(), "stat", 0); + } + + + + + // check to see if gembag is actually right + //const auto bagrecord = diablo2::d2_common::get_item_record(gemBag->data_record_index); + //char* bagcode = bagrecord->string_code; + //MessageBoxA(0, bagcode, "bag code", 0); + + + //if (normCode == "gcv") { + // int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + // diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 1, 0); + // MessageBoxA(0, normCode, "normCode", 0); + //} + + + + + } + + + + + /* + for (auto item = player->inventory->first_item; item != nullptr; item = item->item_data->pt_next_item) { + const auto record = diablo2::d2_common::get_item_record(item->data_record_index); + + if (record->type == 101) { + gemBag = item; + MessageBoxA(0, "Gem Bag Found", "Gem Bag Found", 0); + + const auto record = diablo2::d2_common::get_item_record(item->data_record_index); + + char* normCode = record->string_code; + + MessageBoxA(0, normCode, "normCode", 0); + + if (normCode == "gcv") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 1, 0); + MessageBoxA(0, normCode, "normCode", 0); + } + else if (normCode == "gcy") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, stat + 1, 0); + } + else if (normCode == "gcb") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, stat + 1, 0); + } + else if (normCode == "gcr") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, stat + 1, 0); + } + else if (normCode == "gcg") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, stat + 1, 0); + } + else if (normCode == "gcw") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, stat + 1, 0); + } + else if (normCode == "skc") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, stat + 1, 0); + } + + + + if (normCode == "gfv") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 3, 0); + } + else if (normCode == "gfy") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, stat + 3, 0); + } + else if (normCode == "gfb") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, stat + 3, 0); + } + else if (normCode == "gfr") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, stat + 3, 0); + } + else if (normCode == "gfg") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, stat + 3, 0); + } + else if (normCode == "gfw") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, stat + 3, 0); + } + else if (normCode == "skf") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, stat + 3, 0); + } + + + if (normCode == "gsv") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 9, 0); + } + else if (normCode == "gsy") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, stat + 9, 0); + } + else if (normCode == "gsb") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, stat + 9, 0); + } + else if (normCode == "gsr") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, stat + 9, 0); + } + else if (normCode == "gsg") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, stat + 9, 0); + } + else if (normCode == "gsw") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, stat + 9, 0); + } + else if (normCode == "sku") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, stat + 9, 0); + } + + + if (normCode == "gzv") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 27, 0); + } + else if (normCode == "gly") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, stat + 27, 0); + } + else if (normCode == "glb") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, stat + 27, 0); + } + else if (normCode == "glr") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, stat + 27, 0); + } + else if (normCode == "glg") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, stat + 27, 0); + } + else if (normCode == "glw") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, stat + 27, 0); + } + else if (normCode == "skl") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, stat + 27, 0); + } + + + if (normCode == "gpv") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 81, 0); + } + else if (normCode == "gpy") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Topaz, stat + 81, 0); + } + else if (normCode == "gpb") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Sapphire, stat + 81, 0); + } + else if (normCode == "gpr") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Ruby, stat + 81, 0); + } + else if (normCode == "gpg") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Emerald, stat + 81, 0); + } + else if (normCode == "gpw") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Diamond, stat + 81, 0); + } + else if (normCode == "skz") { + int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, NULL); + diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Skull, stat + 81, 0); + } + + } + + } + */ + } + switch (msg) { @@ -141,6 +544,91 @@ LRESULT d2_tweaks::ui::ui_manager::wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, case WM_RBUTTONDOWN: { + + const auto g_hoverItem = *reinterpret_cast(diablo2::d2_client::get_base() + 0x1158F4); + if (g_hoverItem != nullptr) { + const auto record = diablo2::d2_common::get_item_record(g_hoverItem->data_record_index); + char* normCode = record->string_code; + + const auto player = diablo2::d2_client::get_local_player(); + + + const auto pInventory = player->inventory; + + std::vector items; + diablo2::structures::unit* gemBag{}; + + // get the gembag item + for (auto item = player->inventory->first_item; item != nullptr; item = item->item_data->pt_next_item) { + const auto record = diablo2::d2_common::get_item_record(item->data_record_index); + if (record->type == 101) { + gemBag = item; + } + } + + // 378 is ruby + // 379 is amathyst + // 380 is diamond + // 381 is emerald + // 382 is saphhire + // 383 is topaz + // 384 is skull + + // 385 is El Runes + // 386 is Sol Runes + // 387 is Mal Runes + + // properties.txt row number - 3 + + if (strncmp(normCode, "gcv", 3) == 0) { // Use strncmp for string comparison + int32_t stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + //MessageBoxA(0, std::to_string(stat).c_str(), "stat", 0); + + stat++; + + + D2PropertyStrc itemProperty = {}; + + itemProperty.nProperty = 382 - 3; + itemProperty.nLayer = 0; + itemProperty.nMin = 1; + itemProperty.nMax = 1; + + + //diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat, 0); + diablo2::d2_common::add_property(gemBag, &itemProperty, 0); + + + diablo2::d2_common::inv_remove_item(pInventory, g_hoverItem); + + + + int32_t stat1 = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + //MessageBoxA(0, std::to_string(stat1).c_str(), "stat", 0); + } + + + + + // check to see if gembag is actually right + //const auto bagrecord = diablo2::d2_common::get_item_record(gemBag->data_record_index); + //char* bagcode = bagrecord->string_code; + //MessageBoxA(0, bagcode, "bag code", 0); + + + //if (normCode == "gcv") { + // int stat = diablo2::d2_common::get_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, NULL); + // diablo2::d2_common::set_stat(gemBag, diablo2::unit_stats_t::UNIT_STAT_gembag_Amethyst, stat + 1, 0); + // MessageBoxA(0, normCode, "normCode", 0); + //} + + + + + } + + + block = instance.process_right_mouse(false); break; } diff --git a/src/diablo2/d2common.cpp b/src/diablo2/d2common.cpp index a8eb3aa..b6d1078 100644 --- a/src/diablo2/d2common.cpp +++ b/src/diablo2/d2common.cpp @@ -1,5 +1,6 @@ #include #include +#include char* diablo2::d2_common::get_base() { static auto base = reinterpret_cast(GetModuleHandle("d2common.dll")); @@ -249,4 +250,9 @@ void diablo2::d2_common::update_trade(structures::inventory* inventory, structur //void diablo2::d2_common::set_item_flags(structures::unit* item, diablo2::structures::itemflags_t dwFlag, bool bSet) { // static wrap_func_std_import set_item_flags(10708, get_base()); // set_item_flags(item, dwFlag, bSet); -//} \ No newline at end of file +//} + +void diablo2::d2_common::add_property(structures::unit* item, D2PropertyStrc* prop, int nUnused) { + static wrap_func_std_import add_property(10868, get_base()); + add_property(item, prop, nUnused); +} \ No newline at end of file