Yea PlayerData is severly outdated. Due to its size it's a real pain in the ass to update. I'll see if I can automatically find these fields for you though. If not then you can write your own scanner going through the bytes in PlayerData to find where your hero name is. LifePercentage could be done via attributes instead I guess.
i am completely new here. just installed visual studio for updating the d3helper project. i am kinda lost without any short example how to find the values myself.
How can i get Values by an AttributeId from PlayerData?
------------------
i need the offset or solution to get values by attributeId for this :
public int xA0F4_PowerCast { get { return Read<int>(0xA0F4); } } // Used at least for TP.
public int x9650_Level { get { return Read<int>(0x9650); } }
public int x9654_AltLevel { get { return Read<int>(0x9654); } }
public float x9640_LifePercentage { get { return Read<float>(0x9640); } }
public int xA0E8_PowerUse { get { return Read<int>(0xA0E; } } //resurect
------------
Thank you for your help
Attrib is used on Acd ( ActorCommonData), in your case the player acd (check Enigma AcdHelper.getLocal() I think its called). Since the size changed on PlayerData most properties will be shifted = changed adress.
How I "walk" an adress finding the valueCode:Level = 0xA50C, AltLevel = 0xA510 LifePercent = 0xA4FC
usageCode:public static void Walk<T>(int Address, int size) { int Iteration = 0; do { try { Take("0x"+ Iteration.ToString("X4") + " = " + Engine.Current.Read<T>(Address + Iteration)); Iteration += 0x04; } catch{ } // Will be thrown when trying to read a bad struct e.g RefString (typeof T) } while (Iteration < size) ; MakeFile("offset"); }
Code:Debug.GetDDump.Walk<int>(Enigma.Current.ObjectManager.Storage.PlayerDataManager.Dereference().x0038_Items.FirstOrDefault().Address, Enigma.D3.PlayerData.SizeOf);
HeroName and LifePercentage fixed: https://subversion.assembla.com/svn/...ted/Globals.cs
Level and AltLevel I should be able to fix as well. The others might require something else, like a tracker that diffs PlayerData to detect changes, and then go use some skills.
Level and AltLevel you can derive from the LifePercentage offset. +0x10 for Level, +0x14 for AltLevel (see bottom of https://subversion.assembla.com/svn/.../PlayerData.cs).
I've added a new project called Enigma.D3.ObjectDiffer. Using a TP I see the following 3 offsets being set to what I assume is the PowerSNO for TP.
0xB044 = 0x2EC66
0xB048 = 0x2EC66 (PowerUse?)
0xB054 = 0x2EC66 (PowerCast?)
Thanks so much for taking on this project. Once you figure how to get the offsets, please post some instructions for how you got them and updated the program. I do not know anything about programming, otherwise I would attempt it myself, but I love the program, and don't want to see it die. I can't even play my EB wiz without D3Helper.
Thanks for your work on the project, and please share with us if you get it up and working!
anyone can check if "x184_ActorType" is still correct in current version? Its from here: ActorCommonData.Local.x184_ActorType
Make sure the size of PlayerData is set correct (assuming you're using a modified Enigma.D3). https://subversion.assembla.com/svn/...ted/Globals.cs
I am using the PlayerData from your SVN and the correct size.
i noticed following. when i am solo in game everything works fine. As soon as i am in a party with 4player "x184_ActorType" is always "Monster".
solo: ActorCommonData.Local.x184_ActorType = "Player"
4player: ActorCommonData.Local.x184_ActorType = "Monster"
Maybe ActorCommonData.Local returns the wrong Struct when in party?
var localACD = ActorCommonData.Local;
if (localACD != null)
{
if (localACD.x000_Id != -1 && localACD.x184_ActorType == Enigma.D3.Enums.ActorType.Player)
{
//this code never runs here when in party because localACD.x184_ActorType == Enigma.D3.Enums.ActorType.Monster
Hey all looking for a little help, what I want to do is track monsters, the players current level. So what I'm currently doing is looping over each ACD item in ActorCommonDataHelper.EnumerateMonsters() checking if its has hp > 1 and if it's of ActorType.Monster
Now this seems to work as I get output however I'm assuming its only in a specific radius? I'm not sure how this works tbh is there a way to see every monster on that level or only ones within your current radius?