Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Хп бары, postreceivednetmessage

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
706
Реакции
115
Первый вопрос - можно ли как то узнать видно ли хп бар у героя? искал в шеме нетвары и в дилибе, там нашёл функцию CHudHealthBars::ShouldDraw, но такого класса сейчас вообще нет. При открытой консоли/меню:
1661352107503.png


Второй вопрос: почему в хуке postreceivednetmessage bits всегда -1? ну и конечно же при вызове getnetmessageinfo происходит краш. индекс - 93, вроде верный(также пробовал с 88 индексом, тоже самое. thisptr валидный вроде
1661396908709.png
)
1661353131643.png

для getnetmessage пробовал также 13,14,15,16 индекс

info = ((NetMessageInfo_t*(__fastcall*)(CNetworkMessages*, NetMessageHandle_t*))
util::vmt((uintptr_t)networkMessages, 16))(networkMessages, messageHandle
);
так же пробовал вызывать вот эту функцию
GdqltBb.png

CTDAErp.png

(16 индекс у NetMessageHandle)
thLHs6l.png
 
Последнее редактирование:
//old shitcode VVV
C++:
Expand Collapse Copy
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
Expand Collapse Copy
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
 
//old shitcode VVV
C++:
Expand Collapse Copy
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
Expand Collapse Copy
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
спасибо, посмотрю. а с хп барами знаешь как делать? типо мне нужно узнать рисует ли щас игра хп бар у героя или нет
 
спасибо, посмотрю. а с хп барами знаешь как делать? типо мне нужно узнать рисует ли щас игра хп бар у героя или нет
его всегда рисует. просто интерфейс поверх хп бара рисуется.
 
его всегда рисует. просто интерфейс поверх хп бара рисуется.
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
1661430355453.png


но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
Expand Collapse Copy
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
1661435539347.png

upd1: да, всё таки был неверный индекс

и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
1661431077343.png

?))
 
Последнее редактирование:
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
Посмотреть вложение 218247

но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
Expand Collapse Copy
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
Посмотреть вложение 218253
и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
Посмотреть вложение 218248
?))
у CBaseAbility есть нетвар называется вроже in ability state или что то такое открой в иде посмотри
 
окей понял.
посмотрел postreceivednetmessage, вроде приходят пакеты нормальные
Посмотреть вложение 218247

но тут, при создании CUtlString крашит в tier0.dll(странно) буду искать ошибку, может вмт индекс неверный.

//CUtlString data;
//auto s = rdx->protobufBinding->ToString(r8, &data);
//std::cout << s << " " << s << std::endl;
upd: сделал как у лвсс:

C++:
Expand Collapse Copy
    CUtlString data;
    data.m_Memory.m_pMemory = new uint8_t[4096];
    data.m_Memory.m_nAllocationCount = 4096;
    data.m_Memory.m_nGrowSize = 4096;
    std::cout << rdx->protobufBinding->ToString(r8, &data) << std::endl;
тоже в тир 0 крашит
Посмотреть вложение 218253
upd1: да, всё таки был неверный индекс

и ещё вопрос, чтобы миллион тредов не создавать, есть ли нетвар какой-то или что-то такое, чтобы получить channeling(ну типо что герой применяет(реарм например
Посмотреть вложение 218248
?))
так чекни в дампе шемы нетвары)
1661508941100.png
 
//old shitcode VVV
C++:
Expand Collapse Copy
    static inline constexpr auto PostReceivedMessage_VFTable_Index = 86;//maybe old
static return_type Hook(
            CNetworkChannel* rcx,
            CNetworkSerializerPB* rdx,
            google::protobuf::Message* r8,
            NetChannelBufType_t* r9
        ) noexcept
C++:
Expand Collapse Copy
if (rdx->protobufBinding->GetName().contains("CUserMsg_ParticleManager"))
{
    Logger::LogInfo("Receiving %s: %s\n", rdx->protobufBinding->GetName().data(),
                    rdx->protobufBinding->ToString(r8).data());
}
а как из партикл менеджера пакета этого получить его имя, например particles/items_fx/necronomicon_true_sight.vpcf

C++:
Expand Collapse Copy
if (util::fast_strstr(rdx->unscopedName, "CUserMsg_ParticleManager")) {
    CUserMsg_ParticleManager* msg = static_cast<CUserMsg_ParticleManager*>(r8);   
}
у msg нету .name(), или подобного, только .has всякие есть
 
а как из партикл менеджера пакета этого получить его имя, например particles/items_fx/necronomicon_true_sight.vpcf

C++:
Expand Collapse Copy
if (util::fast_strstr(rdx->unscopedName, "CUserMsg_ParticleManager")) {
    CUserMsg_ParticleManager* msg = static_cast<CUserMsg_ParticleManager*>(r8);  
}
у msg нету .name(), или подобного, только .has всякие есть
 
а где гетресурсбайхеш найти? его нет ни в resourcesystem.dll, ни в client.dll или это самодельная функа?
Посмотреть вложение 220957
C++:
Expand Collapse Copy
    //mb old
    static inline constexpr auto GetResourceByHash_VMT_Index = 32;
    template<ResourceType_t resource_type>
    auto GetResourceByHash(const ResourceID_t& id) const
    {
        Logger::LogMessage("rsrc id -> 0x%p\n", id.GetHash());
        return CallVFunc<GetResourceByHash_VMT_Index, CResourceInfo*>(id, resource_type.Get());
    }
 
C++:
Expand Collapse Copy
    //mb old
    static inline constexpr auto GetResourceByHash_VMT_Index = 32;
    template<ResourceType_t resource_type>
    auto GetResourceByHash(const ResourceID_t& id) const
    {
        Logger::LogMessage("rsrc id -> 0x%p\n", id.GetHash());
        return CallVFunc<GetResourceByHash_VMT_Index, CResourceInfo*>(id, resource_type.Get());
    }
почему-то 0 возвращает функа эта
1663235491641.png

1663235609875.png

C++:
Expand Collapse Copy
g_pResourceSystem = static_cast<C_ResourceSystem*>(util::get_interface("resourcesystem.dll", "ResourceSystem013"));


if (C_BaseEntity* entity = reinterpret_cast<C_BaseEntity*>(g_pGameEntitySystem->GetBaseEntity(ent_idx)); entity->DoesExists()) {

    std::cout << g_pResourceSystem->FindResourceById(created_particle.particle_name_index(), (uintptr_t)"vpcf") << std::endl;
    std::cout << "particle created. index: " << particle->index() << " | entity: " << entity->Schema_DynamicBinding()->binary_name << std::endl;
}
 
почему-то 0 возвращает функа эта
Посмотреть вложение 221038
Посмотреть вложение 221039
C++:
Expand Collapse Copy
g_pResourceSystem = static_cast<C_ResourceSystem*>(util::get_interface("resourcesystem.dll", "ResourceSystem013"));


if (C_BaseEntity* entity = reinterpret_cast<C_BaseEntity*>(g_pGameEntitySystem->GetBaseEntity(ent_idx)); entity->DoesExists()) {

    std::cout << g_pResourceSystem->FindResourceById(created_particle.particle_name_index(), (uintptr_t)"vpcf") << std::endl;
    std::cout << "particle created. index: " << particle->index() << " | entity: " << entity->Schema_DynamicBinding()->binary_name << std::endl;
}
у меня все работает
ты наверно неправильно вызываешь. функция не конст чар принимает она принимает std::uint64_t(другими словами, восемь символов)
C++:
Expand Collapse Copy
const auto* rsrc = CResourceSystem::GetInstance().GetResourceByHash<"vpcf">(MurmurHash64{ 0xE1863545BB64B997 });
if (rsrc)
{
    if (!rsrc->GetName().empty())
        Logger::LogInfo("CResourceSystem rsrc: %s -> 0x%p\n", rsrc->GetName().data(), rsrc);
}
CResourceSystem rsrc: particles/generic_gameplay/damage_flash.vpcf -> 0x00000246F4983940
C++:
Expand Collapse Copy
export
template<std::size_t Size>
class ResourceType_t
{
public:
    std::array<char, 8> value{};

    constexpr ResourceType_t() = default;
    constexpr ResourceType_t(const char(&Str)[Size])
    {
        static_assert((Size - 1/*null terminator*/) <= 8,
            "ResourceType_t requires a string not more than 8 characters in size!");
        std::ranges::copy(Str, value.begin());
    }
public:
    constexpr const auto& Get() const noexcept { return *reinterpret_cast<const std::uint64_t*>(value.data()); }
};
 
у меня все работает
ты наверно неправильно вызываешь. функция не конст чар принимает она принимает std::uint64_t(другими словами, восемь символов)
C++:
Expand Collapse Copy
const auto* rsrc = CResourceSystem::GetInstance().GetResourceByHash<"vpcf">(MurmurHash64{ 0xE1863545BB64B997 });
if (rsrc)
{
    if (!rsrc->GetName().empty())
        Logger::LogInfo("CResourceSystem rsrc: %s -> 0x%p\n", rsrc->GetName().data(), rsrc);
}
CResourceSystem rsrc: particles/generic_gameplay/damage_flash.vpcf -> 0x00000246F4983940
C++:
Expand Collapse Copy
export
template<std::size_t Size>
class ResourceType_t
{
public:
    std::array<char, 8> value{};

    constexpr ResourceType_t() = default;
    constexpr ResourceType_t(const char(&Str)[Size])
    {
        static_assert((Size - 1/*null terminator*/) <= 8,
            "ResourceType_t requires a string not more than 8 characters in size!");
        std::ranges::copy(Str, value.begin());
    }
public:
    constexpr const auto& Get() const noexcept { return *reinterpret_cast<const std::uint64_t*>(value.data()); }
};
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
Expand Collapse Copy
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
 
Последнее редактирование:
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
Expand Collapse Copy
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
дебажь логай и узнаешь почему крашит
по поводу дровки - пологай сообщения которые приходят в момент мультишота
 
окей, у меня получилось, но телепорты, и некоторые другие партикли(например мультишот дровки который и так видно сквозь туман войны) не приходят а ещё я не очень пойму как мне получить позицию партикла(контрол поинт) из этого(хотя впринцепе я могу брать позицию энтити в теории)

а ещё, знаешь почему крашит при получении имени квара?

C++:
Expand Collapse Copy
        if (util::fast_strstr(rdx->unscopedName, "CNETMsg_SetConVar")) {
            if (CNETMsg_SetConVar* vars = static_cast<CNETMsg_SetConVar*>(r8); vars->has_convars()) {
                for (auto& z1 : vars->convars().cvars()) {
                    if (z1.has_name()) std::cout << z1.name();
                    std::cout << std::endl;
                    if (z1.has_value()) std::cout << z1.value();
                    std::cout << std::endl;
                }
            }
        }
очевидно что у тебя не будет тут позиции, тк это создание партикли, запиши id (оно есть и в создание и в контрл поинте) в std::map (можно и по другому конечно) и просто смотри когда юзается ивент сет контр поинт, сетай его в мапе, потом итерируй где нибудь в имгуе и рисуй

этого(хотя впринцепе я могу брать позицию энтити в теории)


не получится, ентити дормант в тумане войны и там будет ее старый absOrigin, который она имела до захода в ноу вижен

очень хуйвый код, да и старый (мб там все уже по другому)

C++:
Expand Collapse Copy
// old and 100% gavnokod
struct ParticleObject {
    int Index = 0;
    unsigned long long NameIndex = 0;
    string Name = "";
    string SpecName = "";
    CBaseEntity* Entity = nullptr;
    CBaseEntity* EntityForModifiers = nullptr;
    Vector Position = { 0, 0, 0 };
    Vector FromPos = { 0, 0, 0 };
    Vector ToPos = { 0, 0, 0 };
    bool HasPosition = false;
};
qweme_map<int, ParticleObject> ParticleList;
...

if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_CREATE) {
            ParticleObject obj;

            int index = Particle->index();
            unsigned long long name_index = 0;
            if (Particle->create_particle().has_particle_name_index())
                name_index = Particle->create_particle().particle_name_index();

            if (name_index) {
                const char* ResourceName = vmt.resourceSystem->GetResourceName(name_index);
                if (ResourceName)
                    obj.Name = string(ResourceName);
            }

            //std::cout << obj.Name << std::endl;

            uint32_t handle = Particle->create_particle().entity_handle();
            uint32_t handle_mod = Particle->create_particle().entity_handle_for_modifiers();

            CBaseEntity* entity = vmt.EntitySystem->FindEntityBySecondHandle(handle);
            CBaseEntity* entity_mod = vmt.EntitySystem->FindEntityBySecondHandle(handle_mod);

            obj.Index = index;
            obj.Entity = entity;
            obj.EntityForModifiers = entity_mod;
            obj.NameIndex = name_index;

            GameData.ParticleList.set(index, obj);

...
else if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_UPDATE) {
            int index = Particle->index();
            int control_point = Particle->update_particle().control_point();

            if (control_point == 0) {
                if (GameData.ParticleList.count(index)) {
                    ParticleObject tmObj = GameData.ParticleList.get(index);

                    CMsgVector pos = Particle->update_particle().position();
                    Vector Position;

                    Position.x = pos.x();
                    Position.y = pos.y();
                    Position.z = pos.z();

    
                    tmObj.Position = Position;
                    tmObj.HasPosition = true;

                    GameData.ParticleList.set(index, tmObj);

                    if (!GameData.ParticleToDrawList.count(index))
                        GameData.ParticleToDrawList.set(index, { GameData.ParticleList.get(index), vmt.GameRules->GameTime() });
                }
    }
 
Последнее редактирование:
очевидно что у тебя не будет тут позиции, тк это создание партикли, запиши id (оно есть и в создание и в контрл поинте) в std::map (можно и по другому конечно) и просто смотри когда юзается ивент сет контр поинт, сетай его в мапе, потом итерируй где нибудь в имгуе и рисуй




не получится, ентити дормант в тумане войны и там будет ее старый absOrigin, который она имела до захода в ноу вижен

очень хуйвый код, да и старый (мб там все уже по другому)

C++:
Expand Collapse Copy
// old and 100% gavnokod
struct ParticleObject {
    int Index = 0;
    unsigned long long NameIndex = 0;
    string Name = "";
    string SpecName = "";
    CBaseEntity* Entity = nullptr;
    CBaseEntity* EntityForModifiers = nullptr;
    Vector Position = { 0, 0, 0 };
    Vector FromPos = { 0, 0, 0 };
    Vector ToPos = { 0, 0, 0 };
    bool HasPosition = false;
};
qweme_map<int, ParticleObject> ParticleList;
...

if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_CREATE) {
            ParticleObject obj;

            int index = Particle->index();
            unsigned long long name_index = 0;
            if (Particle->create_particle().has_particle_name_index())
                name_index = Particle->create_particle().particle_name_index();

            if (name_index) {
                const char* ResourceName = vmt.resourceSystem->GetResourceName(name_index);
                if (ResourceName)
                    obj.Name = string(ResourceName);
            }

            //std::cout << obj.Name << std::endl;

            uint32_t handle = Particle->create_particle().entity_handle();
            uint32_t handle_mod = Particle->create_particle().entity_handle_for_modifiers();

            CBaseEntity* entity = vmt.EntitySystem->FindEntityBySecondHandle(handle);
            CBaseEntity* entity_mod = vmt.EntitySystem->FindEntityBySecondHandle(handle_mod);

            obj.Index = index;
            obj.Entity = entity;
            obj.EntityForModifiers = entity_mod;
            obj.NameIndex = name_index;

            GameData.ParticleList.set(index, obj);

...
else if (ParticleType == GAME_PARTICLE_MANAGER_EVENT_UPDATE) {
            int index = Particle->index();
            int control_point = Particle->update_particle().control_point();

            if (control_point == 0) {
                if (GameData.ParticleList.count(index)) {
                    ParticleObject tmObj = GameData.ParticleList.get(index);

                    CMsgVector pos = Particle->update_particle().position();
                    Vector Position;

                    Position.x = pos.x();
                    Position.y = pos.y();
                    Position.z = pos.z();


                    tmObj.Position = Position;
                    tmObj.HasPosition = true;

                    GameData.ParticleList.set(index, tmObj);

                    if (!GameData.ParticleToDrawList.count(index))
                        GameData.ParticleToDrawList.set(index, { GameData.ParticleList.get(index), vmt.GameRules->GameTime() });
                }
    }
я почекал, да там поменялось, теперь event_update(1) не приходит, только это приходит(не важно в тумане войны или нет)
0 - GAME_PARTICLE_MANAGER_EVENT_CREATE
5- GAME_PARTICLE_MANAGER_EVENT_UPDATE_ENT
7 - GAME_PARTICLE_MANAGER_EVENT_DESTROY
1663338553821.png

каст ульта сфа
 
что я делаю не так? (крашит после вызова SendNetMessage)
1664676851492.png

C++:
Expand Collapse Copy
const auto net_message = CNetworkMessages::GetInterface( )->FindNetworkMessage( "CDOTAClientMsg_CameraZoomAmount" );
CDOTAClientMsg_CameraZoomAmount message;
message.set_zoom_amount( static_cast<float>(global::camera_distance) );

hook::original::fpSendNetMessage( cheat_data.current_net_chan, net_message, &message, BUF_DEFAULT );
(net_message:
1664676793953.png
, current_net_chan:
1664676819755.png
- всё валидное, в реклассе проверил)
я думаю, что надо что-то ещё там заполнить, но не знаю что.

и почему в CDOTAUserMsg_ChatMessage и CDOTAClientMsg_ChatMessage приходят какие-то зашифрованные строки, и как их расшифровать?
 
что я делаю не так? (крашит после вызова SendNetMessage)
Посмотреть вложение 223005
C++:
Expand Collapse Copy
const auto net_message = CNetworkMessages::GetInterface( )->FindNetworkMessage( "CDOTAClientMsg_CameraZoomAmount" );
CDOTAClientMsg_CameraZoomAmount message;
message.set_zoom_amount( static_cast<float>(global::camera_distance) );

hook::original::fpSendNetMessage( cheat_data.current_net_chan, net_message, &message, BUF_DEFAULT );
(net_message:Посмотреть вложение 223003, current_net_chan:
Посмотреть вложение 223004- всё валидное, в реклассе проверил)
я думаю, что надо что-то ещё там заполнить, но не знаю что.

и почему в CDOTAUserMsg_ChatMessage и CDOTAClientMsg_ChatMessage приходят какие-то зашифрованные строки, и как их расшифровать?
у меня только один вопрос, нахуя тебя на сервер отправлять инфу о камере, ты думаешь она у тебя поменяется? мне кажется наоборот, габен за такую хуйню сразу бан вьебет
 
у меня только один вопрос, нахуя тебя на сервер отправлять инфу о камере, ты думаешь она у тебя поменяется? мне кажется наоборот, габен за такую хуйню сразу бан вьебет
накосячил немного, не global::camera_distance хотел отправлять а 1200.f, разницы всё равно нет(для теста).
 
Назад
Сверху Снизу