Hey.
I plan to post several offsets that I found in this thread - perhaps, while the PoeHelper is released, they will help someone
TerrainData [updated for 3.13.0c]
sorry for the late update - i was sleeping
Code:
public long address {get{
var one = ui.M.Read<long>(ui.M.AddressOfProcess + 0x02516E28); // =>0x02516E18
var two = ui.M.Read<long>(one + 0x30);
return two + 0x660 - 0x18;
}
}
public TerrainData data => ui.M.Read<TerrainData>(address);
the old TerrainData structure works fine with this offset
Code:
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct TerrainData {
[FieldOffset(0x18)] public long NumCols;
[FieldOffset(0x20)] public long NumRows;
[FieldOffset(0xd8)] public NativePtrArray LayerMelee;
[FieldOffset(0xf0)] public NativePtrArray LayerRanged;
[FieldOffset(0x108)] public int BytesPerRow;
}
public long login_root_addres {
get {
var one = M.Read<long>(M.AddressOfProcess + 0x02516DD8);
var two = M.Read<long>(one + 0x118);
return M.Read<long>(two + 0x90);
}
}
public Element LoginRoot => GetObject<Element>(login_root_addres);
public Element Login_panel {
get {
var one = LoginRoot.Children.FirstOrDefault(c => c.Children.Count == 8);
if(one==null) return null;
var too = one.Children.FirstOrDefault(c => c.Children.Count == 22);
return too;
}
}
public HeroFrame Hero_panel {
get {
if(LoginRoot == null)
return null;
else return GetObject<HeroFrame>(LoginRoot.GetChildAtIndex(3).Address);
}
}
public class HeroFrame :Element {
Element _el = null;
public HeroesList heroes_list { get { if(heroes_frame == null)
return null;
return GetObject<HeroesList>(heroes_frame.GetChildFromIndices(1, 1).Address);
} }
public Element play_btn => heroes_frame?.GetChildFromIndices(3,1);
Element heroes_frame {
get {
_el = GetChildFromIndices(0, 1, 0, 0, 1);
return (_el != null)? _el: null;
}
}
}
public class HeroesList :Element {
public HeroElement GetSelectedHeroElement() {
foreach(var e in Children) {
var ha = e.Address.ToString("X"); // for debug in CE
if(e.IsVisibleLocal && M.Read<byte>(e.Address + 0x114) == 0xff) {
var he = GetObject<HeroElement>(e.Address);
return he;
}
}
return null;
}
}
public class HeroElement :Element {
public string hero_name=> GetChildFromIndices(0, 2)?.Text;
public string league => GetChildFromIndices(0, 5)?.Text;
public string lvl => GetChildFromIndices(0, 4)?.Text;
public override string ToString() {
return hero_name + "[" + lvl + "] " + league;
}
}