-
Contributor
Sorry, there are still some problems,I'm stupid
Code:
public string Name => this.PlatformReadStringPointer(0xC4, 0xD0, maxLength: 512).Dereference();
Hero name cannot be read,Isn't it D0+08= D8?
[[[[0x141DDFCC0]+0x20]+0x140]+0xD8]
Also, I did not see the offsets for hero season
Can you tell me the offset? Or where should I find it on your Github?
Others have been successful, such as level, plglevek, Hsolorank, hero class, Gender, and hc
Last edited by SeaDragon; 07-15-2017 at 06:19 AM.
-
Legendary
Originally Posted by
SeaDragon
Sorry, there are still some problems,I'm stupid
Code:
public string Name => this.PlatformReadStringPointer(0xC4, 0xD0, maxLength: 512).Dereference();
Hero name cannot be read,Isn't it D0+08= D8?
[[[[0x141DDFCC0]+0x20]+0x140]+0xD8]
Also, I did not see the offsets for hero season
Can you tell me the offset? Or where should I find it on your Github?
Others have been successful, such as level, plglevek, Hsolorank, hero class, Gender, and hc
[[[[0x141DDFCC0]+0x20]+0x140]+0xD8] gives you the string pointer, so you can add an offset of 0 to it to make it dereference the pointer and get you to the actual data.
So [[[[[0x141DDFCC0]+0x20]+0x140]+0xD8]+0x00]
Hero season you get to figure out yourself, it's not in my github.
-
Contributor
-
Active Member
The Attribute Enum function in D3.MemoryModell is 4x slower than in old D3.Memory. Any Idea how i can optimize it?
D3.Memory -> 30ms
D3.MemoryModel -> 120ms
=> Enigma.D3/AttributeReader.cs at 7cae5ea6eea3d7d569d5a5033396ea4508bb3789 * Enigma32/Enigma.D3 * GitHub
This is the function in d3helper using the Enum function of MemoryModel:
=> D3Helper.Public/IC_Player.cs at 3d750aaac502338d740603e5a5971c5d6f68ba95 * d2k2-git/D3Helper.Public * GitHub
edit: fixed with lates commit
Last edited by d2k2; 07-17-2017 at 10:02 AM.
-
Contributor
Originally Posted by
enigma32
You can now do the first part.
Code:
var map = ctx.DataSegment.ObjectManager.UIManager.PtrControlsMap.Dereference();
var control = map["name.of.control"]
once i try to cast it as UXcontrol after doing it, i get an error cause it confilcts when i reference "Enigma.d3.memory"
Last edited by dabnoj; 07-18-2017 at 10:27 AM.
Reason: wrong quote
-
Active Member
Originally Posted by
dabnoj
once i try to cast it as UXcontrol after doing it, i get an error cause it confilcts when i reference "Enigma.d3.memory"
Don't mix Enigma.D3.Memory and Enigma.D3.MemoryModel in same project.
UXControl is not implemented yet in Enigma.D3.MemoryModel. check my solution in the issue thread on github.
-
Post Thanks / Like - 1 Thanks
dabnoj (1 members gave Thanks to d2k2 for this useful post)
-
Member
So here are the new offsets:
public const int VideoPreferences = 0x01EECE60;
public const int SoundPreferences = 0x01EECF00;
public const int HotkeyPreferences = 0x01EECF50;
public const int GameplayPreferences = 0x01EED3D0;
public const int SocialPreferences = 0x01EED438;
public const int ChatPreferences = 0x01EED468;
public const int LevelArea = 0x020D5140;
public const int LevelAreaName = 0x020D5148;
public const int MapActId = 0x020D5430;
public const int SNOGroupsByCode = 0x02146828;
public const int SNOGroups = 0x02146824;
public const int ObjectManager = 0x02146A70;
public const int ApplicationLoopCount = 0x02146AEC;
public const int LocalData = 0x02147D20;
public const int AttributeDescriptors = 0x0219EDD0;
public const int ContainerManager = 0x0221180C;
public const int MessageDescriptor = 0x02211818;
These are the updates to the x86 memory model. Note that some were not updated/missing;
DataSegment.VideoPreferences = 0x01EECE60;
DataSegment.SoundPreferences = 0x01EECF00;
DataSegment.HotkeyPreferences = 0x01EECF50;
DataSegment.GameplayPreferences = 0x01EED3D0;
DataSegment.SocialPreferences = 0x01EED438;
DataSegment.ChatPreferences = 0x01EED468;
DataSegment.LevelArea = 0x020D5140;
DataSegment.LevelAreaName = 0x020D5148;
DataSegment.MapActID = 0x020D5430;
DataSegment.SNOGroupsByCode = 0x02146828;
DataSegment.SNOGroups = 0x02146824;
DataSegment.ObjectManager = 0x02146A70;
DataSegment.ApplicationLoopCount = 0x02146AEC;
DataSegment.LocalData = 0x02147D20;
DataSegment.AttributeDescriptors = 0x0219EDD0;
DataSegment.ContainerManager = 0x0221180C;
DataSegment.MessageDescriptor = 0x02211818;
DataSegment.Address = 0x0000000001e7e000;
DataSegment.AttributeDescriptors = 0x000000000219edd0;
DataSegment.AttributeDescriptorsCount = 0x000005b9;
DataSegment.LevelAreaNameLength = 0x80;
DataSegment.LocalData = 0x0000000002147d20;
DataSegment.MemoryManager = 0x1E9B870; // NOT YET UPDATED
DataSegment.MessageDescriptor = 0x0000000002211818;
DataSegment.ObjectManager = 0x0000000002146a70;
DataSegment.SNOGroups = 0x0000000002146824;
DataSegment.SNOGroupsByCode = 0x0000000002146828;
DataSegment.ScreenManagerRoot = 0x20D5668; // NOT YET UPDATED 0x0000000000000000 ulong
DataSegment.SocialPreferences = 0x0000000001eed438;
DataSegment.SoundPreferences = 0x0000000001eecf00;
DataSegment.TrickleManager = 0x2123964; // NOT YET UPDATED 0x0000000000000000 ulong
DataSegment.VideoPreferences = 0x0000000001eece60;
-
Active Member
Hello,
anyone has an Idea how to get the DisplayedName(LocalizedName) of an Item?
ACD.Name returns some kind of internal name.
Do I need something like a translation list? How to get this list?
-
Member
hi D2k2, we need some news about your d3Helper project ! Hope you didnt leave this :s
-
Legendary
I removed all Enigma.D3.Memory-based projects and applications I don't really see anyone having a use for.
If anyone needs it, they're still in GitHub - Enigma32/Enigma.D3 at legacy
-
Contributor
Originally Posted by
d2k2
Hello,
anyone has an Idea how to get the DisplayedName(LocalizedName) of an Item?
ACD.Name returns some kind of internal name.
Do I need something like a translation list? How to get this list?
ACD.Name is the "item group name".
If you want the display name for the item (ACD) you need to use ACD.GameBalanceId.
Then you need to read all Gamebalance.Items[] and check where Gamebalance.Items[].Item.x100 == Acd.GameBalanceId.
In that entry you have the x00_Name (thats the real "item name", still not the display name). After that you need to load the stringlist and get the stringlist entry where "real item name == stringlistentry.x00".
Hopefully you'll understand :P
-
Post Thanks / Like - 1 Thanks
d2k2 (1 members gave Thanks to Dolphe for this useful post)
-
Active Member
Originally Posted by
Dolphe
ACD.Name is the "item group name".
If you want the display name for the item (ACD) you need to use ACD.GameBalanceId.
Then you need to read all Gamebalance.Items[] and check where Gamebalance.Items[].Item.x100 == Acd.GameBalanceId.
In that entry you have the x00_Name (thats the real "item name", still not the display name). After that you need to load the stringlist and get the stringlist entry where "real item name == stringlistentry.x00".
Hopefully you'll understand :P
Thanks for your answear. I guess "GameBalance" is not implemented (yet) in MemoryModel? I was thinking about resolving the display name over the SNOid and a csv file. but i also dont know how to generate this csv files myself.
-
Contributor
Originally Posted by
d2k2
Thanks for your answear. I guess "GameBalance" is not implemented (yet) in MemoryModel? I was thinking about resolving the display name over the SNOid and a csv file. but i also dont know how to generate this csv files myself.
This is how I generate all items ( legendary only )
Code:
public static void GetItems()
{
Dictionary<string, int> Items = new Dictionary<string, int>();
HashSet<int> Allowed = new HashSet<int>() { 19750, 19753, 19754, 170627 };
Values<Enigma.D3.Assets.GameBalance>.InvokeMethod().ForEach(x => {
if (Allowed.Contains(x.x000_Header.x00_SnoId))
x.x028_Items.x08_Items.ToList().ForEach(f => Items.Add(f.x000_Text, f.x100));
});
Values<Enigma.D3.Assets.StringList>.InvokeMethod().ForEach(x => x.x10_StringTableEntries.ToList().ForEach(f =>
{
if (Items.Keys.Contains(f.x00_Text))
{
string Text = f.x00_Text.ToLower();
string Desc = f.x10_Text.ToLower();
// Text.Contains("unique")
if (!UniqueItemsController.Exists(f.x00_Text.ToLower()) && !Desc.Contains("lore") && !Desc.Contains("temp") && !Desc.Contains("test"))
{
Take(String.Format(
"UniqueItemsController.Add({0}, \"{1}\", \"{2}\", {3}, {4});",
Items[f.x00_Text],
f.x10_Text,
f.x00_Text.ToLower(),
"UniqueItemType." + (FK.UI.UniqueItemType)SNO.TryGet(Items[f.x00_Text]).ItemType,
SNO.TryGet(Items[f.x00_Text]).SetItem.ToString().ToLower()
));
}
}
}));
MakeFile("Items");
}
Last edited by Dolphe; 07-25-2017 at 03:58 AM.
-
Post Thanks / Like - 1 Thanks
d2k2 (1 members gave Thanks to Dolphe for this useful post)
-
Member
First of all thanks @enigma32 and all contributors for keeping this project alive and running You've made really good job!
I was able to find player's active skill under right mouse button and it's SNO:
Code:
ctx.DataSegment.ObjectManager.PlayerDataManager[0].PlayerSavedData.ActiveSkillSavedData[1].PowerSNO
But I have got a question here. Where do I find more precise information about this skill? For example if it's off cooldown or what's the remaining cd time?
-
Active Member
Originally Posted by
kjata
First of all thanks @enigma32 and all contributors for keeping this project alive and running
You've made really good job!
I was able to find player's active skill under right mouse button and it's SNO:
Code:
ctx.DataSegment.ObjectManager.PlayerDataManager[0].PlayerSavedData.ActiveSkillSavedData[1].PowerSNO
But I have got a question here. Where do I find more precise information about this skill? For example if it's off cooldown or what's the remaining cd time?
var cooldown_time = AttributeReader.Instance.GetAttributeValue(localacd.FastAttribGroupID, Enigma.D3.Enums.AttributeId.PowerCooldown, powersnoid);
-1 if not on cooldown