- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 703
- Реакции
- 21
Здорово, реверсеры. Если вы все еще мучаетесь с m_pClippingWeapon или ищете более стабильный вариант для получения ID активного ствола в руках, притащил вам рабочий метод через m_pWeaponServices. Это база для тех, кто пилит свой external на CS2 и хочет иметь нормальный чекер индекса без лишних костылей.
Логика тут простая: заходим в WeaponServices пешки, вытягиваем хендл активного оружия, а затем через dwEntityList находим нужную пушку. В итоге добираемся до ItemDefinitionIndex через AttributeManager. Метод проверенный, живет дольше, чем прямые линки, которые Valve любят ломать в микро-патчах.
Сам код получения ID:
Вспомогательная функция GetEntityFromHandle:
Юзайте, пока Габен опять все не перелопатил. Если есть варианты как сократить цепочку чтений, пишите в тред.
Логика тут простая: заходим в WeaponServices пешки, вытягиваем хендл активного оружия, а затем через dwEntityList находим нужную пушку. В итоге добираемся до ItemDefinitionIndex через AttributeManager. Метод проверенный, живет дольше, чем прямые линки, которые Valve любят ломать в микро-патчах.
Сам код получения ID:
Код:
auto m_pWeaponServices = read<uintptr_t>(playerPawn + Offset.BasePlayerPawn.m_pWeaponServices);
auto activeWeaponHandle = read<uint32_t>(m_pWeaponServices + Offset.BasePlayerPawn.m_hActiveWeapon);
auto entityList = read<uintptr_t>(base + Offset.Client.dwEntityList);
uintptr_t weapon = GetEntityByIndex(entityList, activeWeaponHandle);
auto weaponID = read<uint16_t>(weapon + Offset.EconItem.m_iItemDefinitionIndex + Offset.AttributeContainer.m_Item + Offset.EconEntity.m_AttributeManager);
Вспомогательная функция GetEntityFromHandle:
Код:
uintptr_t GetEntityFromHandle(uintptr_t entityListBase, uint32_t handle) {
if (entityListBase == 0 || handle == 0xFFFFFFFF) return 0;
uintptr_t listEntry = MemMan.ReadMem<uintptr_t>(entityListBase + 0x10 + 8 * ((handle & 0x7FFF) >> 9));
if (listEntry == 0) return 0;
uintptr_t entity = MemMan.ReadMem<uintptr_t>(listEntry + 0x70 * (handle & 0x1FF));
return entity;
}
Если кому-то лень самому забивать маппинг для неймов в ESP или логах, держите готовый список индексов:
Код:
inline std::map<int, std::string> weapon_name_map = {
{1, "deagle"},
{2, "elite"},
{3, "fiveseven"},
{4, "glock"},
{7, "ak47"},
{8, "aug"},
{9, "awp"},
{10, "famas"},
{11, "g3sg1"},
{13, "galilar"},
{14, "m249"},
{16, "m4a1"},
{17, "mac10"},
{19, "p90"},
{24, "ump"},
{25, "xm1014"},
{26, "bizon"},
{27, "mag7"},
{28, "negev"},
{29, "sawedoff"},
{30, "tec9"},
{31, "taser"},
{32, "hkp2000"},
{33, "mp7"},
{34, "mp9"},
{35, "nova"},
{36, "p250"},
{38, "scar20"},
{39, "sg556"},
{40, "ssg08"},
{42, "knife"},
{43, "flashbang"},
{44, "hegrenade"},
{45, "smokegrenade"},
{46, "molotov"},
{47, "decoy"},
{48, "incgrenade"},
{49, "c4"},
{59, "knife"},
{60, "m4a1_silencer"},
{61, "usp_silencer"},
{63, "cz75a"},
{64, "revolver"},
{500, "knife"},
{505, "knife"},
{506, "knife"},
{507, "knife"},
{508, "knife"},
{509, "knife"},
{512, "knife"},
{514, "knife"},
{515, "knife"},
{516, "knife"},
{526, "knife"}
};
Юзайте, пока Габен опять все не перелопатил. Если есть варианты как сократить цепочку чтений, пишите в тред.