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

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

C++:
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
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
Я нашел решение проблемы, в этой функции(в иде) почему-то неверный оффсет на список чилдов:
1681463652110.png
А в реальности на 0x40 там лежит 0x0, а на 0x30, как я понял список чилдов:
Screenshot_3.png
Ну я и скопировал код из иды и заменил оффсет на 0x30, заработало

C++:
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
Максимально странно, что в самой функции доты неверный оффсет, хотя идб новая. Теперь буду знать что оффсет из оригинальной функции может быть неверный.
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Что за приколы с панорамой? Я почему-то не могу получить child`ов у панельки:

C++:
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
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
на будущее ты всегда можешь панельку в реклассе открыть и потыкать, указатель на панельку какую-нибудь можешь найти в панорама дебагере
с х64дбг подгружаешь доту(без сцилахайдов всяких - дота должна видеть что ты с дебагера), жмёшь ф6, тыкаешь Show Dev Info и адреса видны
1681493731902.png
 
anonymous
Участник
Статус
Оффлайн
Регистрация
18 Окт 2022
Сообщения
607
Реакции[?]
216
Поинты[?]
144K
Никогда не понимал ни доту ни варкрафт, лучше побегать пострелять или попроходить что-то от 1-3лица
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
на будущее ты всегда можешь панельку в реклассе открыть и потыкать, указатель на панельку какую-нибудь можешь найти в панорама дебагере
с х64дбг подгружаешь доту(без сцилахайдов всяких - дота должна видеть что ты с дебагера), жмёшь ф6, тыкаешь Show Dev Info и адреса видны
Посмотреть вложение 244738
Не волнуйся, он уже знает про -dev
Больше интересно, какого хрена классы представлены uint16_t, а методы типа GetAttribute ни возвращают, ни принимают заявленные значения
Никогда не понимал ни доту ни варкрафт, лучше побегать пострелять или попроходить что-то от 1-3лица
Shooter fan vs MOBA Enjoyer
В игре думать надо, тем и хороша(ну правда 80% людей даже не понимает, что в ней делать + вальв уёбки со своим балансом и 50% системой)
 
Сверху Снизу