-
Active Member
Originally Posted by
hefero
I tried getting the control with the UXHelper from the issues section, like this:
UXControl chatMessageUi = UXHelper.GetControl<UXControl>("Root.NormalLayer.chatoutput_dialog_backgroundScr een.chat_content.MessageListContainer.chat_messagelist");
But nothing comes as label_text.
One thing I noticed is that the Chat Messages always start and end with specific Color Codes, like this
{c:ffaaaaff} Party messages {/c}
{c:ffff80ff} Whisper messages {/c}
{c:ff40ff40} Clan messages {/c}
If you scan the memory for those Color Codes you find the messages, so maybe that could be useful somehow to retrieve the messages.
see here, code your own UXHelper class, the 32bit offset are same as in legacy code. just add the 64bit offsets:
How to access UXhelpers to get UIrects from MemoryContext * Issue #21 * Enigma32/Enigma.D3 * GitHub
-
Active Member
Anyone has already the x64 Offsets for Patch 2.6.1. ?
I would like to do it myself. But i have no idea how. Is there any tutorial?
Enigma.D3/SymbolTable.X64.cs at master * Enigma32/Enigma.D3 * GitHub
Edit:
Anyone has the "diablo iii64.exe" from previous patch(es) ?
Last edited by d2k2; 10-26-2017 at 06:32 AM.
-
Member
Such a great library, thanks for all your work Enigma.
Last edited by ZenDraL; 12-23-2017 at 08:30 PM.
-
Active Member
i was able to find out some basic x64 offsets. but i dont know how to check if some structures changed:
Code:
Version = new Version(2, 6, 1, 47710);
Platform = Platform.X64;
DataSegment.Address = 0x141AF1000; // new
DataSegment.VideoPreferences = 0x141B7E150; // new
DataSegment.SoundPreferences = 0x141B7E1F0; // new
DataSegment.HotkeyPreferences = 0x141B7E240; // new
DataSegment.GameplayPreferences = 0x141B7E6C0; // new
DataSegment.SocialPreferences = 0x141B7E728; // new
DataSegment.ChatPreferences = 0x141B7E758; // new
DataSegment.LevelArea = 0x141D738B8; // new
DataSegment.LevelAreaName = 0x141D738C0; // new
DataSegment.LevelAreaNameLength = 0x80; //no idea how to update this
DataSegment.MapActID = 0x141D73BC8; // new
DataSegment.ScreenManagerRoot = 0x141D73DF0; // new
DataSegment.TrickleManager = 0x141DC6CC0; // new
DataSegment.LocalData = 0x141DF3C28; // new
DataSegment.ObjectManager = 0x141DF3D30; // new
DataSegment.ApplicationLoopCount = 0x141DF3DB4; // new
DataSegment.AttributeDescriptors = 0x141E67870; // new
DataSegment.AttributeDescriptorsCount = 0x5BB; // new
DataSegment.MemoryManager = 0x141F02540; // new
DataSegment.SNOFiles = 0x141DEE150; // new
DataSegment.SNOGroups = 0x141DF1B20; // new
DataSegment.SNOGroupsByCode = 0x141DF18F0; // new
DataSegment.ContainerManager = 0x141F05E60; // new
DataSegment.MessageDescriptor = 0x141369B58; // new
Last edited by d2k2; 10-26-2017 at 04:06 PM.
-
Active Member
It seems some users from ros-bot forums were able to find the updated offsets for 32-bit: GitHub - reks-scripts/D3Helper-Reks-MageMod
-
Member
Last edited by jackspiders; 10-28-2017 at 06:29 AM.
-
Active Member
Last edited by d2k2; 11-11-2017 at 08:20 AM.
-
Post Thanks / Like - 2 Thanks
-
Member
I have a question about this. I've also successfully recorded all navigation data and create maps like the one above. However, I was using the scene id + the Minimum mesh X/Y offset as a unique identifier for any particular scene. Of course I'm storing the Level Area Sno Ids as well. But the Level Area Sno Id as well as the world id seems to change. So when I try to load a saved "Level Area" that contains the scene id for the x/y coordinate, I get back a lot of overlapped data. Basically, if I filter by level area sno id, I get back scenes which don't belong in that level area at all. Rendering all the scenes in the level area, it almost looks like multiple level areas have been overlaid on top of each other. I must be missing some unique identifier. My question is -- is there a unique identifier that I can get at runtime to narrow down the list of scenes I should load/show for the given level area? I'm persisting everything to disk, but it seems like I'm missing part of the identifier for a unique key for a level area identifier that remains constant across reloads of the client.
-
Member
Here is an example of what I'm talking about? Could it just be that I'm not taking into account the Z-coordinates?
-
Active Member
From previous forum post i see that the offset for BattleTag in 64Bit is following:
battletag offset = [[[[ScreenManager]+0x20]+0x140]+0xB0]+0x28]
i was able to use this info to read the Battletag with Enigma Framework:
Code:
//64Bit ReadChain for BattleTag
Enigma.Memory.MemoryAddress[] path = new Enigma.Memory.MemoryAddress[]{ SymbolTable.Current.DataSegment.ScreenManagerRoot, 0x20, 0x140, 0xB0, 0x28};
Enigma.Memory.MemoryObject sp = MemoryContext.Current.Memory.Reader.Read<Enigma.Memory.MemoryObject>(path);
string battletag = sp.ReadString(0, 256, System.Text.Encoding.ASCII);
I would like to learn how to find this offsets myself.
When i search my battletag inside the memory with CheatEngine, i will find like over 10 locations where it can be.
Could someone explain me how i find and inspect the correct location in order to get the pointers which are leading to the ScreenManager base offset? Excuse me if this question in the wrong topic.
-
Active Member
I noticed, that when i am using the AttributeCache in my application, that the number of MemoryReads per Second (MemoryContext.Current.Memory.Reader.TotalReadCount) wents significant down, but the CPU usage goes much higher.
Does updating the AttributeCache cost a lot of CPU? how often should i update?
nvm. probably my mistake. i noticed that AttributeCache.Current is "ThreadStatic", and it was probably not used in other threads :S
i also notice, that die AttributeCache is not working properly shared on multi threads. had to turn it off again.
Last edited by d2k2; 12-14-2017 at 05:42 AM.
-
Member
Trying to build the source from github but get a few errors[20] (and one warning).
Severity Code Description Project File Line Suppression State
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1519 Invalid token 'throw' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1520 Method must have a return type Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.MemoryModel.Caching E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\bin\Release\Enigma.D3 .MemoryModel.Caching.dll' could not be found Enigma.D3.ApplicationModel E:\projects\Enigma.D3\trunk\Enigma.D3.ApplicationModel\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.ApplicationModel E:\projects\Enigma.D3\trunk\Enigma.D3.ApplicationModel\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\bin\Release\Enigma.D3 .MemoryModel.Caching.dll' could not be found Enigma.D3.MapHack E:\projects\Enigma.D3\trunk\Enigma.D3.MapHack\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.MapHack E:\projects\Enigma.D3\trunk\Enigma.D3.MapHack\CSC 1 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1026 ) expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1003 Syntax error, ',' expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1003 Syntax error, ',' expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token '.' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token ')' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token ')' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 99 Active
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 99 Active
Error CS0501 'MemoryContext.MemoryContext(MemoryReader)' must declare a body because it is not marked abstract, extern, or partial Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 94 Active
Warning CS0162 Unreachable code detected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 100 Active
This is just a clean grab from the site.
I am using VS 2015
I have added the Microsoft.Net.Compilers [2.6.0] package but no help.
What am I missing?
-
Active Member
Originally Posted by
clogs
Trying to build the source from github but get a few errors[20] (and one warning).
Severity Code Description Project File Line Suppression State
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1519 Invalid token 'throw' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS1520 Method must have a return type Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\Segments\DataSegment.cs 18 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.MemoryModel.Caching E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\bin\Release\Enigma.D3 .MemoryModel.Caching.dll' could not be found Enigma.D3.ApplicationModel E:\projects\Enigma.D3\trunk\Enigma.D3.ApplicationModel\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.ApplicationModel E:\projects\Enigma.D3\trunk\Enigma.D3.ApplicationModel\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel.Caching\bin\Release\Enigma.D3 .MemoryModel.Caching.dll' could not be found Enigma.D3.MapHack E:\projects\Enigma.D3\trunk\Enigma.D3.MapHack\CSC 1 Active
Error CS0006 Metadata file 'E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\bin\Release\Enigma.D3.MemoryM odel.dll' could not be found Enigma.D3.MapHack E:\projects\Enigma.D3\trunk\Enigma.D3.MapHack\CSC 1 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1026 ) expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1003 Syntax error, ',' expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1003 Syntax error, ',' expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token '.' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token ')' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1519 Invalid token ')' in class, struct, or interface member declaration Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 95 Active
Error CS1525 Invalid expression term 'throw' Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 99 Active
Error CS1002 ; expected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 99 Active
Error CS0501 'MemoryContext.MemoryContext(MemoryReader)' must declare a body because it is not marked abstract, extern, or partial Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 94 Active
Warning CS0162 Unreachable code detected Enigma.D3.MemoryModel E:\projects\Enigma.D3\trunk\Enigma.D3.MemoryModel\MemoryContext.cs 100 Active
This is just a clean grab from the site.
I am using VS 2015
I have added the Microsoft.Net.Compilers [2.6.0] package but no help.
What am I missing?
i am using VS 2016 and 2017. no problems here.
-
Member
Any chance for updates to the 32 bit offsets from the latest patch?
-
Contributor
Originally Posted by
d2k2
edit:
i was playing around to find a way to get the NavCells of the current Scenes.
var scenes= MemoryContext.Current.DataSegment.ObjectManager.Scenes.Where(x => x.ID > 0);
According to this
post ([C#] Enigma.D3) the Scenes containes MeshMinX,MeshMinY,MeshMaxX,MeshMaxY data.
you need MeshMinX MeshMinY to connect the Scenes togehter. The current Framework is Missing this Offests:
Code:
public static float GetMeshMinX(this Enigma.D3.MemoryModel.Core.Scene scene)
{
return scene.PlatformRead<float>(0x0FC, 0x0FC + 4);
}
public static float GetMeshMinY(this Enigma.D3.MemoryModel.Core.Scene scene)
{
return scene.PlatformRead<float>(0x100, 0x100 + 4);
}
Maybe you can add this offsets Enigma?
are the offsets of the two functions you posted still up-to-date? and how would the GetMeshMaxX and GetMeshMaxY look like?