Hello everyone,
I'm developing a script in Python (`ctypes`) to read information from players in arena in WoW 3.3.5a (Build 12340), focusing on the **Warmane** server. The aim is to calculate the total resilience (items, enchants and gems).
Current Progress and Logic
Most of the memory reading is working:
1. reading GUIDs via Object Manager (OM).
2. Reading visible ItemID/EnchantID from the player descriptor (`player_desc_ptr + 0x46C`, step .
3. Reading GUIDs from equipped items (`player_desc_ptr + 0x510`, step .
4. **Search for the Item descriptor (`item_desc_ptr`) via the item's GUID, iterating through the OM (confirmed to work, TypeID=1).
The Problem - Reading the Gems
The difficulty lies in obtaining the **Enchantment IDs** of the set gems.
* Based on multiple sources (dumps of structures such as `eItemFields`, discussions of TC/Mangos), the Enchantment IDs of the gems (slots 2, 3, 4) should be in the following offsets relative to `item_desc_ptr`:
* Gem 1 (Slot Enc. 2): `item_desc_ptr + 0x70` (listed as `ITEM_FIELD_ENCHANTMENT_3_1`).
* Gem 2 (Slot Enc. 3): `item_desc_ptr + 0x7C` (listed as `ITEM_FIELD_ENCHANTMENT_4_1`)
* Gem 3 (Slot Enc. 4): `item_desc_ptr + 0x88` (listed as `ITEM_FIELD_ENCHANTMENT_5_1`)
* When reading `uint32` from these offsets (`0x70`, `0x7C`, `0x88`) after getting a valid `item_desc_ptr` in **Warmane**, the values returned are **not** Gem Enchantment IDs. I'm getting very large numbers (e.g. 592.xxx.xxx), which don't make sense as IDs. The search for `item_desc_ptr` is working (we found the correct Item object with TypeID 1), but the data in these specific offsets looks wrong.
Help Request (Specific to Warmane/3.3.5a):
Given that the standard offsets `0x70`, `0x7C`, `0x88` look correct in theory, but fail in practice in Warmane:
1. Does anyone have experience with the **specific** reading of these fields (enchantment/gema slots) in the 3.3.5a client connected to **Warmane**? Are there any known modifications or a different structure to these offsets in this environment?
2. Could there be some extra **direction** (e.g. `0x70` contains a pointer to the real ID)?
3. Is there any **other reliable** way to get the Enchantment IDs of the equipped gems by reading the memory of the 3.3.5a (Warmane) client? Perhaps through another internal structure or function?
I already have the mapping `Enchantment ID -> Resilience` ready. I just need to be able to read the correct memory ID. Any hint, validated offset for Warmane, or code snippet/pseudo-code demonstrating the correct reading would be greatly appreciated.
Thanks!







