Доброго времени суток!
Структуры:
struct SMessage
{
int type;
int msgType;
DWORD64 serverTime;
int opcode;
bool instant;
};
struct SHoldEntityMessage : SMessage
{
unsigned int entityId;
unsigned int playerId;
CryStringT itemName;
};
void Resync(CGameObject* pGameObject, EntityId m_pEntityId, EntityId pEntityId, DWORD64 dwTime)
{
int z = -1;
SHoldEntityMessage msg;
ZeroMemory(&msg, sizeof(SHoldEntityMessage));
msg.type = 10;
msg.msgType = 0;
msg.instant = 0;
msg.opcode = -1;
msg.entityId = pEntityId; //
msg.playerId = m_pEntityId; //
msg.itemName.m_str = "";
msg.itemName.m_header = &z;
msg.serverTime = dwTime;
VOID* v1 = pGameObject->Create(msg);
if (v1 and v1 != 0)
{
_InterlockedIncrement((volatile unsigned __int32*)((__int64)v1 + 0x38));
pGameObject->InvokeRMI(&v1, 256, -1);
}
}
class CGameObject
{
public:
int GetEntityId() { return *(int*)((uint64_t)this + 0x8);}
void InvokeRMI(VOID** pBody, int iRMI, int channel) { VirtualFunction<void(__fastcall*)(VOID*, VOID**, int, int)>(this, 448 / 8)(this, pBody, iRMI, channel); }
using fnCall = VOID*(__fastcall*)(VOID*, unsigned int, SHoldEntityMessage*, __int64*, int, int);
VOID* Create(SM_Network::SHoldEntityMessage pMessage) { return fnCall(0x1417208A0)(
*(VOID**)0x142175000, // Allocator
GetEntityId(),
&pMessage,
nullptr,
0,
0); }
};
Вызов:
EntityId pEntityId = pActor->GetEntityId();
Resync(pGameObject, 0, pEntityId, pGameFramework->GetServerTime()); // Берем врага в руки (телепорт)
if ((GetDistance(mActor->GetPosition(), pActor->GetPosition()) <= 2.5f))
{
Resync(pGameObject, pEntityId, 0, pGameFramework->GetServerTime()); // Отпускаем
}