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

Вопрос Панорам0чка

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
706
Реакции
115
Что за приколы с панорамой? Я почему-то не могу получить child`ов у панельки:

C++:
Expand Collapse Copy
auto ui_engine = IPanoramaUIEngine::GetInterface( )->m_pUIEngine;
for ( const auto& thispanel : ui_engine->GetPanelList( )->slots ) {

    if ( ui_engine->IsValidPanelPointer( thispanel.panel )
         && !util::fast_strcmp( (char*)thispanel.panel->GetNameID( ), "DashboardCore" ) ) {
            for ( short child_idx = 0; child_idx < thispanel.panel->GetChildCount( ); child_idx++ ) {
                auto child = thispanel.panel->GetChild( child_idx );
                if ( ui_engine->IsValidPanelPointer( child ) ) {
                    std::cout << child->GetNameID( ) << std::endl;
                }
            }
        }
    }

Просто проверка IsValidPanelPointer не проходит(то есть child = 0x0), я ваще не могу понять в чем дело, индексы верные(54 и 61 соответственно). thispanel.panel->GetChildCount( ) возвращает 3
 
Я нашел решение проблемы, в этой функции(в иде) почему-то неверный оффсет на список чилдов:
1681463652110.png

А в реальности на 0x40 там лежит 0x0, а на 0x30, как я понял список чилдов:
Screenshot_3.png

Ну я и скопировал код из иды и заменил оффсет на 0x30, заработало

C++:
Expand Collapse Copy
CUIPanel* GetChildRebuild( int a2 ) {
    const auto v2 = Member<std::uintptr_t>( 0x30 );
    if ( v2 && a2 >= 0 && a2 < *reinterpret_cast<std::uintptr_t*>( v2 ) )
        return *reinterpret_cast<CUIPanel**>( v2 + 8 * a2 );
    else
        return 0;
    }
1681463919830.png

Максимально странно, что в самой функции доты неверный оффсет, хотя идб новая. Теперь буду знать что оффсет из оригинальной функции может быть неверный.
 
Что за приколы с панорамой? Я почему-то не могу получить child`ов у панельки:

C++:
Expand Collapse Copy
auto ui_engine = IPanoramaUIEngine::GetInterface( )->m_pUIEngine;
for ( const auto& thispanel : ui_engine->GetPanelList( )->slots ) {

    if ( ui_engine->IsValidPanelPointer( thispanel.panel )
         && !util::fast_strcmp( (char*)thispanel.panel->GetNameID( ), "DashboardCore" ) ) {
            for ( short child_idx = 0; child_idx < thispanel.panel->GetChildCount( ); child_idx++ ) {
                auto child = thispanel.panel->GetChild( child_idx );
                if ( ui_engine->IsValidPanelPointer( child ) ) {
                    std::cout << child->GetNameID( ) << std::endl;
                }
            }
        }
    }

Просто проверка IsValidPanelPointer не проходит(то есть child = 0x0), я ваще не могу понять в чем дело, индексы верные(54 и 61 соответственно). thispanel.panel->GetChildCount( ) возвращает 3
Так чилдрены лежат в CUtlVector<CUIPanel*> на 0x28
 
на будущее ты всегда можешь панельку в реклассе открыть и потыкать, указатель на панельку какую-нибудь можешь найти в панорама дебагере
с х64дбг подгружаешь доту(без сцилахайдов всяких - дота должна видеть что ты с дебагера), жмёшь ф6, тыкаешь Show Dev Info и адреса видны
1681493731902.png
 
на будущее ты всегда можешь панельку в реклассе открыть и потыкать, указатель на панельку какую-нибудь можешь найти в панорама дебагере
с х64дбг подгружаешь доту(без сцилахайдов всяких - дота должна видеть что ты с дебагера), жмёшь ф6, тыкаешь Show Dev Info и адреса видны
Посмотреть вложение 244738
Не волнуйся, он уже знает про -dev
Больше интересно, какого хрена классы представлены uint16_t, а методы типа GetAttribute ни возвращают, ни принимают заявленные значения
Никогда не понимал ни доту ни варкрафт, лучше побегать пострелять или попроходить что-то от 1-3лица
Shooter fan vs MOBA Enjoyer
В игре думать надо, тем и хороша(ну правда 80% людей даже не понимает, что в ней делать + вальв уёбки со своим балансом и 50% системой)
 
Назад
Сверху Снизу