-
Legendary
Originally Posted by
garfild
Hello guys, sorry to interupt you in here, but I would like to ask you how or where to get actual x64 offsets... I tried Enigma files, but there is only x32 offsets. Could you please tell me the method, how to find offsets by myself? Tomorrow is the Necro and I can not play without zoomhack anymore. Very appreciated, thanks!
You can find 64-bit offsets in the MemoryModel project (Enigma.D3.Memory going obsolete)
Enigma.D3/SymbolTable.X64.cs at master * Enigma32/Enigma.D3 * GitHub
32-bit symbols updated for new patch but my (private) generator didn't handle 64-bit as well as it did 32-bit so I'll need to load up IDA for this one.
-
Post Thanks / Like - 1 Thanks
johnbl (1 members gave Thanks to enigma32 for this useful post)
-
Active Member
thanks guys for offsets,, Diablo is playable again!
-
Member
So now that we can't get the hotbar button data to see which SnoPowerId is assigned to which slot (and the rune), how do we determine this information? I'm really sad to see this all zero'd out, along with ActiveSkillSavedData.... Is there another way to do this that I'm missing?
-
Legendary
Enigma.D3.Memory is going obsolete!
This means updates and fixes to it are low priority and might stop at any time!
It covers way too many structures and is a pain in the ass to update after patches. Also, it only works with 32-bit unless I also write a 64-bit version of the library.
Enigma.D3.MemoryModel will replace it. The way it's built (by using a static SymbolTable instance), it can support both 32-bit and 64-bit version of D3. There are pros and cons compared to the Memory project, but what matters is that it's easier to maintain as it only exposes an API for things I know someone actually use. If something has been removed that you need and it worked using Memory, please let me know so I can evaluate if it's something I can add back and support in MemoryModel, alternatively ApplicationModel. There I intend to have utility classes and a simplified API (former helpers) so you don't have to read data from exact memory paths.
Converting from Memory to MemoryModel might not be a straightforward task. I've done so with my "MapHack" and it took some rewrite to make it work. But it resulted in less and cleaner application code 
Originally Posted by
owen654321
So now that we can't get the hotbar button data to see which SnoPowerId is assigned to which slot (and the rune), how do we determine this information? I'm really sad to see this all zero'd out, along with ActiveSkillSavedData.... Is there another way to do this that I'm missing?
I'll look into this. I can probably get ActiveSkillSavedData added and flesh out HotkeyPreferences with some members.
-
Post Thanks / Like - 1 Thanks
d2k2 (1 members gave Thanks to enigma32 for this useful post)
-
Contributor
Originally Posted by
owen654321
So now that we can't get the hotbar button data to see which SnoPowerId is assigned to which slot (and the rune), how do we determine this information? I'm really sad to see this all zero'd out, along with ActiveSkillSavedData.... Is there another way to do this that I'm missing?
Thats because the offset has shifted ( another memory address ). In X64 the new offset is 0x124 ( from X00A0 ). I haven't updated 32 bit, so not sure about its offset.
-
Contributor
-
Active Member
Originally Posted by
enigma32
Enigma.D3.Memory is going obsolete!
This means updates and fixes to it are
low priority and might stop at any time!
It covers way too many structures and is a pain in the ass to update after patches. Also, it only works with 32-bit unless I also write a 64-bit version of the library.
Enigma.D3.MemoryModel will replace it. The way it's built (by using a static
SymbolTable instance), it can support both 32-bit and 64-bit version of D3. There are pros and cons compared to the Memory project, but what matters is that it's easier to maintain as it only exposes an API for things I know someone actually use. If something has been removed that you need and it worked using Memory, please let me know so I can evaluate if it's something I can add back and support in MemoryModel, alternatively ApplicationModel. There I intend to have utility classes and a simplified API (former helpers) so you don't have to read data from exact memory paths.
Converting from Memory to MemoryModel might not be a straightforward task. I've done so with my "MapHack" and it took some rewrite to make it work. But it resulted in less and cleaner application code
I'll look into this. I can probably get ActiveSkillSavedData added and flesh out HotkeyPreferences with some members.
i would a appreciate a small documentation or example how to port to the new MemoryModel drom D3.Memory. I am already lost in the current framework structure.
At least some explainations for the "straight forwards" parts.
-
Member
For those holdouts:
public ServerData x00A0_ServerData { get { return Read<ServerData>(0x0104); } }
[ArraySize(6)]
public HotbarButtonData[] x0000_HotbarButtonData { get { return Read<HotbarButtonData>(0x0008, 6); } } // was 0x0000
-
Legendary
Originally Posted by
owen654321
For those holdouts:
public ServerData x00A0_ServerData { get { return Read<ServerData>(0x0104); } }
[ArraySize(6)]
public HotbarButtonData[] x0000_HotbarButtonData { get { return Read<HotbarButtonData>(0x0008, 6); } } // was 0x0000
Is there a benefit to using HotbarButtonData instead of ActiveSkillSavedData? Offset to ServerData updated Update ServerData offset * Enigma32/Enigma.D3@6b8aeb4 * GitHub
-
Active Member
Originally Posted by
enigma32
its important for the order of the skills. d3helper currently using a workaround(which doesnt work anymore) to read the PowerSnoId from the UXIcon of the Hotbar. Otherwise d3helper would press the wrong buttons.
it would be nice if there would be a way doing it with the Framework
see UXIcon:
public int x1464_PowerSnoId { get { return Read<int>(0x1464); } } //seems to be outdated for a long time. was 0x166C in patch <= 2.5.0
Last edited by d2k2; 07-02-2017 at 04:10 AM.
-
Legendary
Originally Posted by
d2k2
its important for the order of the skills. d3helper currently using a workaround(which doesnt work anymore) to read the PowerSnoId from the UXIcon of the Hotbar. Otherwise d3helper would press the wrong buttons.
it would be nice if there would be a way doing it with the Framework
see UXIcon:
public int x1464_PowerSnoId { get { return Read<int>(0x1464); } } //seems to be outdated for a long time. was 0x166C in patch <= 2.5.0
I assumed the array of ActiveSkillData was in the order they were displayed on action bar.. guess it's the HotbarButtonData[] they use for the UI. I'll get that added, and I'll add basic UI lookup to MemoryModel (like just getting the control address).
-
Active Member
public long GetCurrency(CurrencyType type)
{
const int size = 24; // { int index, int 0, long value, int 0, int 0 }
const int offset = 8;
return Read<long>(0x8D18 + size * (int)type + offset); //edit: 0x9D08 for Patch 2.6.0
}
anyone knows the offsets for patch 2.6.0 to read the Bloodshards and Gold amount?
edit:
0x9D08 for patch 2.6.0
Last edited by d2k2; 07-03-2017 at 11:51 AM.
-
Active Member
i started to check if i can replace D3.Memory by D3.MemoryModel in d3helper project ( here is the MemoryModel Branch : GitHub - d2k2-git/D3Helper.Public at MemoryModel)
seems to be a lot of work.
how to translate this?
int video_width = Engine.Current.VideoPreferences.x0C_DisplayMode.x20_Width;
int video_height = Engine.Current.VideoPreferences.x0C_DisplayMode.x24_Height;
with
MemoryContext.Current.DataSegment.VideoPreferences...?
----
how to translate this to D3.MemoryModel ?
UIManager.Instance.x0A30_MouseOver.x008_Name
---
i have no idea how to replace this with MemoryModel. This seems to be need to get selectedAttackableAcd
var ListB = Engine.Current.ObjectManager.xA30_PlayerInput.Dereference().x00_ListB_Of_ActorId .ToList();
var selectedtype = Engine.Current.ObjectManager.xA30_PlayerInput.Dereference().x14_StructStart_Min5 6Bytes;
---
how to translate this to MemoryModell?
ObjectManager.Instance.x038_Counter_CurrentFrame;
---
Translate to MemoryModel?
Enigma.D3.PlayerData.GetHeroId();
---
Translate to MemoryModel?
Enigma.D3.PlayerData.GetPowerUse();
---
How to replace Enigma.D3.PlayerData.GetActiveSkills() with MemoryModel?
Is "Enigma.D3.PlayerData.ActiveSkillSavedData[].x00_PowerSnoId" same as "Enigma.D3.MemoryModel.Core.ActiveSkillSavedData[].PowerSNO" ?
Is "Enigma.D3.PlayerData.ActiveSkillSavedData[].x04_RuneId" same as "Enigma.D3.MemoryModel.Core.ActiveSkillSavedData[].Modifier" ?
--
How to replace "Enigma.D3.PlayerData.GetPassivePowerSnoIds()" with MemoryModel?
--
Last edited by d2k2; 07-03-2017 at 10:03 AM.
-
Post Thanks / Like - 1 Thanks
johnbl (1 members gave Thanks to d2k2 for this useful post)
-
Legendary
Originally Posted by
d2k2
Thanks, now I have an "interface" that I can implement 
Window/Client size is better retrieved using Win32 API (example Enigma.D3/OverlayWindow.cs at 926b157bccae5f6cc2f809f336db034aa2dd40e7 * Enigma32/Enigma.D3 * GitHub).
UI MouseOver not implemented yet.
Targeted ACD not implemented yet.
CurrentFrame replaced by
RenderTick when needing a counter that ticks as long as rendering does something
Enigma.D3/ObjectManager.cs at 926b157bccae5f6cc2f809f336db034aa2dd40e7 * Enigma32/Enigma.D3 * GitHub
GameTick when needing a counter that's updated based on game logic updates, controlled by server
Enigma.D3/ObjectManager.cs at 926b157bccae5f6cc2f809f336db034aa2dd40e7 * Enigma32/Enigma.D3 * GitHub
HeroID not implemented yet.
Currently used Power not implemented yet.
Active and Passive Skills can be retrieved from PlayerSavedData Enigma.D3/PlayerSavedData.cs at 746735e9a000b1138b85e91febdddcfb393efd99 * Enigma32/Enigma.D3 * GitHub
Yes,
PowerSNO == PowerSnoId
Modifier == RuneId
-
Post Thanks / Like - 2 Thanks
d2k2,
johnbl (2 members gave Thanks to enigma32 for this useful post)
-
Active Member
Thank you for your Help Enigma. I made some Progress (Commits * d2k2-git/D3Helper.Public * GitHub) But still a lot to do i guess
I need more Information. How to replace this parts with MemoryModel?
var PlayerDataCollection = PlayerDataManager.Instance.x0038_Items;
var acdcontainer = ActorCommonData.Container.ToList();
is ActorCommonData.x0D0_WorldPosX same as ACD.Position.X ?
what is ActorCommonData.x114_ItemLocation in MemoryModel?
acd.x190_Flags_Is_Trail_Proxy_Etc
GetAttributeValue for ACD seems to be very important.
public static bool IsAncient(ActorCommonData acd)
{
return (int) acd.GetAttributeValue(AttributeId.AncientRank) == 1;
}
Last edited by d2k2; 07-04-2017 at 07:14 AM.