Код:
enum GroupMemberFlags
{
MEMBER_STATUS_OFFLINE = 0x0000,
MEMBER_STATUS_ONLINE = 0x0001, // Lua_UnitIsConnected
MEMBER_STATUS_PVP = 0x0002, // Lua_UnitIsPVP
MEMBER_STATUS_DEAD = 0x0004, // Lua_UnitIsDead
MEMBER_STATUS_GHOST = 0x0008, // Lua_UnitIsGhost
MEMBER_STATUS_PVP_FFA = 0x0010, // Lua_UnitIsPVPFreeForAll
MEMBER_STATUS_UNK3 = 0x0020, // used in calls from Lua_GetPlayerMapPosition/Lua_GetBattlefieldFlagPosition
MEMBER_STATUS_AFK = 0x0040, // Lua_UnitIsAFK
MEMBER_STATUS_DND = 0x0080, // Lua_UnitIsDND
MEMBER_STATUS_RAF = 0x0100, // Lua_IsReferAFriendLinked
MEMBER_STATUS_UNK4 = 0x0200, // something to do with vehicles
};
Код:
char __stdcall Is_RAF_Player(WGUID guid)
{
void *v1; // eax@1
unsigned int v2; // eax@2
GroupMemberInfo *groupInfo; // eax@3
SosialInfo *socialInfo; // eax@8
v1 = ClntObjMgrGetObjectPtr(guid, TYPEMASK_PLAYER, ".\\Player_C.cpp", 15314);
if ( v1 )
{
v2 = (*(_DWORD *)(*((_DWORD *)v1 + 62) + 356) >> 6) & 1;// UNIT_DYNAMIC_FLAGS & 0x40
}
else
{
groupInfo = (GroupMemberInfo *)GetPartyMemberInfoByGuid((int)&guid);
if ( (groupInfo || (groupInfo = (GroupMemberInfo *)GetRaidMemberInfoByGuid(&guid)) != 0)
&& groupInfo->StatusFlags & 0x100 )
{
LOBYTE(v2) = 1;
}
else
{
if ( g_socialList && (socialInfo = (SosialInfo *)GetSocialInfoByGuid(g_socialList, *(_QWORD *)&guid)) != 0 )
v2 = ((unsigned int)socialInfo->SocialFlags >> 3) & 1;// SocialFlags & 0x08
else
LOBYTE(v2) = 0;
}
}
return v2;
}