-
-
Post Thanks / Like - 1 Thanks
Narache (1 members gave Thanks to Razzue for this useful post)
-
Why is it 41794, have you updated it?
I'm still here at 41510. I am in China.
-
-
Well, the Chinese side should also update in a few days. This is much better than it was ten years ago. Back then, for various reasons, we played TBC with 3.0 talent for more than a year~:bouaaaah:
-
-
Elite User
Avid Ailurophile


Originally Posted by
Ikse
Hello, do you have any idea of the address of the AutoRepeatSpellId ? Cannot find it.
Thank you anyway for the dump you rock

Code:
48 89 74 24 ?? 57 48 83 EC ?? 33 FF C7 44 24 ?? ?? ?? ?? ??
Code:
ScriptIsAutoRepeatSpell => V == 1? 0x161EF80 : V == 2? 0x1687E00 : 0x0;
also updated dumper on git for basic script/function scanning(just returns exactly where the pattern points).
That pattern "should" point you in the right direction if you dump latest patches :P
not that i ever use it though :shrug:
Last edited by Razzue; 01-16-2022 at 09:50 AM.
-
Post Thanks / Like - 2 Thanks
Narache,
Ikse (2 members gave Thanks to Razzue for this useful post)
-
-
Member
Anyone noticed a change in the offsets for the PlayerNameCachePointer?
PlayerNameGUIDOffset = 0x20,
PlayerNameStringOffset = 0x31,
PlayerNameCacheNext = 0x0,
PlayerNameCachePointer = 0x2B1EB18,
-
Elite User
Avid Ailurophile


Originally Posted by
Buntstift
Anyone noticed a change in the offsets for the PlayerNameCachePointer?
PlayerNameGUIDOffset = 0x20,
PlayerNameStringOffset = 0x31,
PlayerNameCacheNext = 0x0,
PlayerNameCachePointer = 0x2B1EB18,
Code:
if (null == _playerNames)
_playerNames = new Dictionary<GUID, string>();
var Base = Ven.Read<IntPtr>((Client.Base + Offsets.PlayerNameCache.Base) + Offsets.PlayerNameCache.Offset);
var Count = Ven.Read<int>(Client.Base + Offsets.PlayerNameCache.Base + Offsets.PlayerNameCache.Count);
if (Count == 0 || Base == IntPtr.Zero) return false;
for (int i = 0; i < Count; i++)
{
var Entry = Ven.Read<IntPtr>(Base + (0x8 * i));
if (Entry == IntPtr.Zero) continue;
var _g = Ven.Read<GUID>(Entry + Offsets.PlayerNameCache.Guid);
var _n = Ven.ReadUtf8String(Entry + Offsets.PlayerNameCache.Name);
if (!_g.IsEmpty() && !string.IsNullOrEmpty(_n))
{
if (_playerNames.TryGetValue(_g, out var _s)) _s = _n;
else _playerNames.Add(_g, _n);
}
var Next = Ven.Read<IntPtr>(Entry + 0x0);
while (Next.ToInt64() % 2 == 0 && Next != IntPtr.Zero)
{
_g = Ven.Read<GUID>(Next + Offsets.PlayerNameCache.Guid);
_n = Ven.ReadUtf8String(Next + Offsets.PlayerNameCache.Name);
if (!_g.IsEmpty() && !string.IsNullOrEmpty(_n))
{
if (_playerNames.TryGetValue(_g, out var _s)) _s = _n;
else _playerNames.Add(_g, _n);
}
Next = Ven.Read<IntPtr>(Next + 0x0);
}
}
Code:
public class PlayerNameCache
{
public static int Base =>
Version == "1" ? 0x2B97DB0 :
Version == "2" ? 0x2AAF8A0 : 0x0;
public const int Guid = 0x8;
public const int Offset = 0x10;
public const int Count = 0x18;
public const int Name = 0x19;
}
Working fine for me in both
-
Post Thanks / Like - 1 Thanks
Buntstift (1 members gave Thanks to Razzue for this useful post)
-
I'm curious if for (int i = 0; i < Count; i++) will not miss some names that can't be obtained? Because I found that some names are actually stored beyond Count.
-
Elite User
Avid Ailurophile


Originally Posted by
qop1832
I'm curious if for (int i = 0; i < Count; i++) will not miss some names that can't be obtained? Because I found that some names are actually stored beyond Count.
Hence:
Code:
var Next = Ven.Read<IntPtr>(Entry + 0x0); while (Next.ToInt64() % 2 == 0 && Next != IntPtr.Zero)
{
_g = Ven.Read<GUID>(Next + Offsets.PlayerNameCache.Guid);
_n = Ven.ReadUtf8String(Next + Offsets.PlayerNameCache.Name);
if (!_g.IsEmpty() && !string.IsNullOrEmpty(_n))
{
if (_playerNames.TryGetValue(_g, out var _s)) _s = _n;
else _playerNames.Add(_g, _n);
}
Next = Ven.Read<IntPtr>(Next + 0x0); }
So far has put a name of every visible player on my overlay no problem :shrug:
-
Post Thanks / Like - 1 Thanks
Buntstift (1 members gave Thanks to Razzue for this useful post)