Code:
__int64 __fastcall Script_UnitName(__int64 a1)
{
__int64 v1; // r12
ClientServices *v3; // rbx
__int64 v4; // rax
__int64 v5; // rax
__int64 v6; // rcx
__int16 v7; // ax
__int64 v8; // rbx
ItemRecSparse_C *v9; // rdi
__int64 v10; // rax
_BYTE *v11; // rax
__int64 v12; // rax
__int64 v13; // rax
_BYTE *v14; // rax
char *v15; // rax
int v16; // [rsp+0h] [rbp-50h]
int v17; // [rsp+8h] [rbp-48h]
unsigned __int64 v18; // [rsp+10h] [rbp-40h]
__int64 v19; // [rsp+18h] [rbp-38h]
unsigned __int64 v20; // [rsp+20h] [rbp-30h]
char *v21; // [rsp+28h] [rbp-28h]
v1 = a1;
if ( !(unsigned int)lua_isstring(a1, 1LL) )
{
luaL_error(a1);
return 0LL;
}
v3 = (ClientServices *)lua_tolstring(a1, 1LL, 0LL);
if ( !v3 )
{
v17 = 286331153;
v16 = 0;
SErrDisplayError(-2062548992, (unsigned __int64)"../../../Storm/H/SStr.inl", 61);
}
if ( !strcasecmp((const char *)v3, "player") )
{
v4 = ClientServices::GetCharacterName(v3);
lua_pushstring(a1, v4);
lua_pushnil(a1);
return 2LL;
}
v21 = 0LL;
v18 = 0LL;
Script_GetGUIDFromToken((const char *)v3, &v18, 0, 0);
v20 = v18;
if ( v18 && v18 != -2LL )
{
v5 = ClntObjMgrObjectPtr(v18);
v6 = v5;
if ( v5 )
{
v7 = *(_WORD *)(*(_QWORD *)(v5 + 16) + 16LL);
if ( v7 & 8 )
{
v8 = CGUnit_C::GetUnitNameExposed((CGUnit_C *)v6, (const char **)&v21, 1);
goto LABEL_19;
}
if ( v7 & 0x20 )
{
v8 = CGGameObject_C::GetName((CGGameObject_C *)v6);
goto LABEL_19;
}
if ( v7 & 2 )
{
v19 = 0LL;
v9 = (ItemRecSparse_C *)WowClientDB2<ItemRecSparse_C>::GetRecord(
&g_itemSparseDB,
*(unsigned int *)(*(_QWORD *)(v6 + 16) + 20LL),
&v19,
0LL,
0LL,
0LL,
v16,
v17);
if ( v9 )
{
v8 = ItemRecSparse_C::GetName(v9, 0);
goto LABEL_19;
}
}
else if ( (v7 & 0x80u) != 0 )
{
v18 = **(_QWORD **)(v6 + 384);
v10 = DBCache<NameCache,unsigned long long,CHashKeyGUID,NameCacheXInfo>::GetRecord(
&g_nameDBCache,
v18,
&v18,
NameQueryCallback,
0LL,
1LL,
v16,
v17);
if ( v10 )
{
v8 = v10;
v11 = (_BYTE *)DBCache<RealmCache,unsigned int,HASHKEY_DWORD,NullXInfo>::GetRecord(
&g_realmDBCache,
*(unsigned int *)(v10 + 56),
&v18,
NameQueryCallback,
0LL,
1LL);
if ( v11 )
{
if ( !*v11 )
v21 = v11 + 264;
}
goto LABEL_19;
}
}
}
else
{
v12 = CGPartyMemberStateRepository::FindPetState(
(CGPartyMemberStateRepository *)&v20,
(size_t *)((char *)&_mh_execute_header_0 + 1));
v8 = v12 + 8;
if ( v12 )
goto LABEL_19;
if ( (v20 & 0xF0F0000000000000LL) == -1134907106097364992LL )
{
v8 = DBCache<PetNameCache,int,HASHKEY_DWORD,NullXInfo>::GetRecord(
&g_petNameCache,
(v20 >> 24) & 0xFFFFFFF,
&v20,
NameQueryCallback,
0LL,
1LL,
v16,
v17);
if ( v8 )
goto LABEL_19;
}
else if ( !(v20 & 0xF000000000000000LL) )
{
if ( v20 & 0xF07FFFFFFFFFFFFFLL )
{
v13 = DBCache<NameCache,unsigned long long,CHashKeyGUID,NameCacheXInfo>::GetRecord(
&g_nameDBCache,
v20,
&v20,
NameQueryCallback,
0LL,
1LL,
v16,
v17);
v8 = v13;
if ( v13 )
{
v14 = (_BYTE *)DBCache<RealmCache,unsigned int,HASHKEY_DWORD,NullXInfo>::GetRecord(
&g_realmDBCache,
*(unsigned int *)(v13 + 56),
&v20,
NameQueryCallback,
0LL,
1LL);
if ( !v14 || *v14 )
v15 = "";
else
v15 = v14 + 264;
v21 = v15;
LABEL_19:
if ( v8 )
goto LABEL_16;
goto LABEL_15;
}
}
}
}
LABEL_15:
v8 = FrameScript_GetText("UNKNOWNOBJECT");
LABEL_16:
lua_pushstring(v1, v8);
lua_pushstring(v1, v21);
return 2LL;
}
lua_pushnil(a1);
lua_pushnil(a1);
return 2LL;
}
Code:
__int64 __fastcall sub_1673010(__int64 a1)
{
__int64 v1; // rsi
__int64 v3; // rbx
__int64 v4; // rax
__int64 v5; // rax
__int64 v6; // rcx
unsigned int v7; // edx
__int64 v8; // rcx
__int64 v9; // rax
__int64 v10; // rax
__int64 v11; // rbx
__int64 v12; // rdi
__int64 v13; // rax
_BYTE *v14; // rax
__int64 v15; // rax
unsigned __int64 v16; // rax
__int64 v17; // rax
_BYTE *v18; // rax
char v19; // al
__int64 v20; // rax
__int64 v21; // [rsp+30h] [rbp-D0h]
unsigned __int64 v22; // [rsp+38h] [rbp-C8h]
__int64 v23; // [rsp+40h] [rbp-C0h]
__int64 v24; // [rsp+48h] [rbp-B8h]
__int128 v25; // [rsp+50h] [rbp-B0h]
char v26; // [rsp+60h] [rbp-A0h]
char v27; // [rsp+1C8h] [rbp+C8h]
const CHAR *v28; // [rsp+1D0h] [rbp+D0h]
v1 = a1;
if ( !(unsigned int)sub_1D8850(a1, 1i64) )
{
sub_19B5970(v1, aUsageUnitnameU);
return 0i64;
}
v3 = sub_1D9A80(v1, 1i64);
if ( (unsigned int)sub_265440(v3, aPlayer_0) )
{
v28 = 0i64;
sub_1681590(&v21, v3, 0i64);
if ( !(v22 >> 58) || v21 == 11 && v22 == 0x400000000000000i64 )
{
sub_1D8DF0(v1);
sub_1D8DF0(v1);
return 2i64;
}
v5 = sub_FB1E20(&v21, 1i64, aDBuildserverWo_409, 1777i64);
if ( v5 )
{
v6 = *(unsigned __int8 *)(v5 + 16);
v7 = dword_21F13F0[v6];
v8 = (unsigned int)dword_21F13F0[v6] >> 5;
if ( v8 & 1 )
{
v9 = sub_D72600(v5, &v28, 1i64);
}
else
{
if ( !(v7 & 0x100) )
{
if ( (v7 >> 1) & 1 )
{
v10 = sub_486230(&off_2901B60, *(unsigned int *)(v5 + 152), 0i64, &v27);
v11 = v10;
if ( !v10 )
goto LABEL_38;
sub_38B640(v10);
if ( !v11 )
goto LABEL_38;
v12 = sub_3526F0(v11, 0i64);
sub_38B800(v11);
}
else
{
if ( !((v7 >> 10) & 1) )
goto LABEL_38;
v25 = *(_OWORD *)(v5 + 288);
v13 = sub_565D00(&off_25A0BE0, &v25, sub_167D690, 0i64);
if ( !v13 )
goto LABEL_38;
v23 = 0i64;
v24 = 0i64;
v12 = v13 + 1;
v14 = (_BYTE *)sub_564F80((__int64)&off_25A0B80);
if ( v14 && !*v14 )
v28 = v14 + 264;
}
goto LABEL_37;
}
v9 = sub_E0B770(v5);
}
}
else
{
v15 = sub_1533CF0(&v21);
if ( v15 )
{
v12 = v15 + 16;
goto LABEL_37;
}
v16 = v22 >> 58;
if ( v22 >> 58 == 10 )
{
v12 = sub_569540(&off_25A0F00, &v21, sub_167D690, 0i64);
if ( !v12 )
goto LABEL_38;
goto LABEL_37;
}
if ( (_DWORD)v16 == 2 )
{
sub_2579A0(&v26, 0i64, 306i64);
sub_1681D60(v3, 0, (unsigned __int64)&v26);
v17 = sub_565D00(&off_25A0BE0, &v21, sub_167D690, 0i64);
if ( !v17 )
goto LABEL_38;
v23 = 0i64;
v24 = 0i64;
v12 = v17 + 1;
v18 = (_BYTE *)sub_564F80((__int64)&off_25A0B80);
if ( !v18 || *v18 )
v28 = &ValueName;
else
v28 = v18 + 264;
goto LABEL_37;
}
if ( (_DWORD)v16 != 20 )
goto LABEL_38;
v19 = sub_EC6090();
v20 = sub_FB1DA0(&v21, (unsigned int)v19, aDBuildserverWo_409, 1816i64);
if ( !v20 )
goto LABEL_38;
v9 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(v20 + 48) + 120i64))(*(_QWORD *)(v20 + 48));
}
v12 = v9;
LABEL_37:
if ( v12 )
{
LABEL_39:
sub_1D8E30(v1, v12);
sub_1D8E30(v1, v28);
return 2i64;
}
LABEL_38:
v12 = sub_517AB0(v8);
goto LABEL_39;
}
v4 = sub_1C2790();
sub_1D8E30(v1, v4);
sub_1D8DF0(v1);
return 2i64;
}
At present, I am comparing like this, trying to find CGGameObject_C::GetName
So...
sub_FB1E20(__int64 a1, int a2) = ClntObjMgrObjectPtr@<rax>(char a1@<bl>, unsigned __int64 a2@<rdi>, int a3@<esi>)
sub_1C2790 = ClientServices::GetCharacterName(void)
sub_565D00(__int64 a1, __int64 a2, void (__fastcall *a3)(_QWORD, _QWORD, _QWORD, _QWORD), __int64 a4) = WowClientDB2<ItemRecSparse_C>::GetRecord(__int64 a1, signed int a2, _QWORD *a3, void (__fastcall *a4)(_QWORD, _QWORD, _QWORD, _QWORD), __int64 a5, char a6)
sub_E0B770(__int64 a1) = CGGameObject_C::GetName(CGGameObject_C *this)??
Code:
.text:0000000000E0B770
.text:0000000000E0B770 ; =============== S U B R O U T I N E =======================================
.text:0000000000E0B770
.text:0000000000E0B770
.text:0000000000E0B770 sub_E0B770 proc near ; CODE XREF: sub_1487D90+62↓p
.text:0000000000E0B770 ; sub_165C7B0+D7↓p ...
.text:0000000000E0B770 48 8B 81 08 01 00 00 mov rax, [rcx+108h]
.text:0000000000E0B777 48 85 C0 test rax, rax
.text:0000000000E0B77A 74 08 jz short loc_E0B784
.text:0000000000E0B77C 48 8B 80 E0 00 00 00 mov rax, [rax+0E0h]
.text:0000000000E0B783 C3 retn
.text:0000000000E0B784 ; ---------------------------------------------------------------------------
.text:0000000000E0B784
.text:0000000000E0B784 loc_E0B784: ; CODE XREF: sub_E0B770+A↑j
.text:0000000000E0B784 48 8D 05 E6 EF 2C 01 lea rax, ValueName
.text:0000000000E0B78B C3 retn
.text:0000000000E0B78B sub_E0B770 endp
.text:0000000000E0B78B
.text:0000000000E0B78B ; ---------------------------------------------------------------------------
.text:0000000000E0B78C CC CC CC CC align 10h
but I still can't find the offset I want . it's toooooooooo SAD AND BAD !
There must be something wrong...