Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Поясните пожалуйста

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
20 Дек 2025
Сообщения
13
Реакции
0
Всем привет, сегодня задался вопросом по получении PlayerPawn.Я делаю это так:
Код:
Expand Collapse Copy
    CPlayerController* pController = *(CPlayerController**)(EntityList + (112 * i));
    if (!pController || pController == lController) continue;

    u32 pawnHandle = pController->_GetPawnHandle(); if (!pawnHandle) continue;

    u32 pawnIndex = pawnHandle & 0x7FFF;

    CPlayerPawn* pPawn = *(CPlayerPawn**)(EntityList + pawnIndex * 112);    if (!pPawn) continue;
и это работает. Я понимаю что это не правильно, потому что я использую линейную память, но как я думаю единственный -, это тут
Код:
Expand Collapse Copy
CPlayerPawn* pPawn = *(CPlayerPawn**)(EntityList + pawnIndex * 112);
Так скажите мне, можно ли использовать этот способ, или все же использовать как это делает движок?
Вот как у меня это выглядит в дизассемблере:
Код:
Expand Collapse Copy
__int64 __fastcall f_GetPawnFromController(__int64 PlayerController)
{
  int CPawnHandle; // edx
  __int64 PointerChunk; // r9
  _DWORD *slot; // rax

  CPawnHandle = *(_DWORD *)(PlayerController + 0x6B4);
  if ( CPawnHandle == -1 || !ptr2CEntitySystem )
    return 0LL;
  if ( CPawnHandle != -2
    && (PointerChunk = *(_QWORD *)(ptr2CEntitySystem + 8 * ((unsigned __int64)(CPawnHandle & 0x7FFF) >> 9))) != 0
    && (slot = (_DWORD *)(PointerChunk + 0x70LL * (CPawnHandle & 0x1FF))) != 0LL )
  {
    if ( slot[4] != CPawnHandle )
      slot = 0LL;
  }
  else
  {
    slot = 0LL;
  }
  if ( slot )
    return *(_QWORD *)slot;
  else
    return 0LL;
}
 
почти во всех читах не восстанавливается логика функции с помощью смешений а просто напрямую вызывается с помощью патерна или индекса в виртуальной таблице, можешь просто прогнать через паттерн свой контроллер и на выходе получит павн
 
Последнее редактирование:
почти во всех читах не восстанавливается логика функции с помощью смешений а просто напрямую вызывается с помощью патерна или индекса в виртуальной таблице, можешь просто прогнать через паттерн свой контроллер и на выходе получит павн
сначала я и хотел использовать f_GetPawnFromController для получения pawn, но подумал, вызывать функцию через хук по 10 раз в секунду такое себе, думаешь лучше будет так?
 
сначала я и хотел использовать f_GetPawnFromController для получения pawn, но подумал, вызывать функцию через хук по 10 раз в секунду такое себе, думаешь лучше будет так?
я получаю через схему СHandle<CCS_PlayerPawn> CBasePlayerController m_hPawn
 
Назад
Сверху Снизу