C++ Grab local_player in cs2 whitout updating it everytime after a new cs update

  • Автор темы Автор темы bossul
  • Дата начала Дата начала
Участник
Участник
Статус
Оффлайн
Регистрация
6 Апр 2021
Сообщения
354
Реакции
219
C++:
Expand Collapse Copy
for (int i = 1; i <= 64; ++i) {
    c_cs_player_controller* p_player_local = i::ent_system::get_base_entity<c_cs_player_controller>(i);
    auto local_player = p_player_local->is_local_player_controller();
}

// put this where u have m_pawn / c_cs_player_controller
schema(is_local_player_controller, "CBasePlayerController", "m_bIsLocalPlayerController", bool);
 
C++:
Expand Collapse Copy
for (int i = 1; i <= 64; ++i) {
    c_cs_player_controller* p_player_local = i::ent_system::get_base_entity<c_cs_player_controller>(i);
    auto local_player = p_player_local->is_local_player_controller();
}

// put this where u have m_pawn / c_cs_player_controller
schema(is_local_player_controller, "CBasePlayerController", "m_bIsLocalPlayerController", bool);
Во первых найс репост с UC без кредитов, во вторых это гетто способ.
C++:
Expand Collapse Copy
// credits https://www.unknowncheats.me/forum/3712663-post199.html (no ad)
ctx::local_player = SIG("client.dll", "48 8B 0D ? ? ? ? 48 85 C9 74 29 B2 01")
                          .absolute()
                          .cast<sdk::c_cs_player_controller **>();

// dereference local_player pointer when you need it
// credits "wok-csgo 2.1"
fw::sdk::c_cs_player_controller *c_local_player::operator->() const { return *m_data.m_local; }
ctx::local_player->m_iTeamNum()
 
Последнее редактирование:
Во первых найс репост с UC без кредитов, во вторых это гетто способ.
C++:
Expand Collapse Copy
// credits https://www.unknowncheats.me/forum/3712663-post199.html (no ad)
ctx::local_player = SIG("client.dll", "48 8B 0D ? ? ? ? 48 85 C9 74 29 B2 01")
                          .absolute()
                          .cast<sdk::c_cs_player_controller **>();

// dereference local_player pointer when you need it
// credits "wok-csgo 2.1"
fw::sdk::c_cs_player_controller *c_local_player::operator->() const { return *m_data.m_local; }
ctx::local_player->m_iTeamNum()
yeah that works like that too
 
GetLocalPlayerController/GetLocalPlayerPawn лежащие в EngineClient: да да пошли мы нахуй
я экстернал, поэтому вообще не подумал даже о них, а так да. а вообще, что угодно лишь бы не итерация по контроллерам чтобы найти локал. плюс, если уж на то пошло, глобалварсы всегда лежат в одном месте, т.е. один дереф даже в интернале, по идее будет проще чем вызов рандомных функций в которые валв потом рандомно по рофлу добавят ретаддр чек или ещё какой нибудь мусор, имхо.
 
глобалварсы всегда лежат в одном месте
Глобалварсы лежат внутри CNetworkGameClient, который перевыделяется при каждом коннекте.
Поэтому откуда гарантия что он лежит по одному и тому же адресу?
Глобалварс в котором лежит локал плеер контроллер
В глобалварсах этого нет, сама структурка очень маленькая.
То что вы читаете индекс локальной сущности вообще из m_SplitScreenClients, который идет после глобалварсов, внутри того же CNetworkGameClient
 
Назад
Сверху Снизу