Гайд Продолжение. панорама - меню и кд абилок врагов

Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
326
Реакции[?]
24
Поинты[?]
12K
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тоесть ты хочешь сказать, что тут есть BloadLayoutfromstring ???


я вижу что там Load layout file %s только не уверен что это оно

Посмотреть вложение 194510
BLoadLayoutFromString -- это обертка для джаваскрипта над функциями из этой самой дллки, из этого самого класса.
Открой libparticles.dylib, слева, где функции, введи IUIPanel::LoadLayoutFromStringAsync. Посмотри её псевдокод, возьми индекс функции и иди по такому же индексу в актуальной particles.dll. Ну и сравнивай псевдокод. Не похож -- смотри следующую и так далее. Или предыдущую.
Там по передаваемым в переменную параметрам можно легко понять, вроде там нет других с такими же.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
326
Реакции[?]
24
Поинты[?]
12K
BLoadLayoutFromString -- это обертка для джаваскрипта над функциями из этой самой дллки, из этого самого класса.
Открой libparticles.dylib, слева, где функции, введи IUIPanel::LoadLayoutFromStringAsync. Посмотри её псевдокод, возьми индекс функции и иди по такому же индексу в актуальной particles.dll. Ну и сравнивай псевдокод. Не похож -- смотри следующую и так далее. Или предыдущую.
Там по передаваемым в переменную параметрам можно легко понять, вроде там нет других с такими же.
А ты уверен что она там есть? ЧТо её вальве не убрали? Ты её юзаешь??
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
А ты уверен что она там есть? ЧТо её вальве не убрали? Ты её юзаешь??
я тебе говорил посмотри из дилибов/старых длл(где есть эта функа из апи) код этой функи из апи( BLoadLayoutFromString) что она там внутри вызывает(видимо LoadLayoutFromStringAsync, я не чекал), а ты мне не веришь
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
326
Реакции[?]
24
Поинты[?]
12K
я тебе говорил посмотри из дилибов/старых длл(где есть эта функа из апи) код этой функи из апи( BLoadLayoutFromString) что она там внутри вызывает(видимо LoadLayoutFromStringAsync, я не чекал), а ты мне не веришь
Пожалуйста, авторизуйтесь для просмотра ссылки.
Попробовал значит я пореверсить функции внутри обертки BLoadLayoutFileFromString. Только нихуя не выйшло. По крайней мере я уверен что на 17-й и 18-й функции CUIPanel там какаято параша а не функции связанные с загрузкой Layout'a
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Пожалуйста, авторизуйтесь для просмотра ссылки.
Попробовал значит я пореверсить функции внутри обертки BLoadLayoutFileFromString. Только нихуя не выйшло. По крайней мере я уверен что на 17-й и 18-й функции CUIPanel там какаято параша а не функции связанные с загрузкой Layout'a
Пожалуйста, авторизуйтесь для просмотра ссылки.
ну значит я тебя наебал сорри(ну я говорил что не чекал так что еще раз сорри). BLoadLayoutFileFromString не вызывает LoadLayoutFromStringAsync, они просто делают одну и ту же вещь просто чуть чуть по-разному. поищи теперь LoadLayoutFromStringAsync. альтернативно как варик можешь просто в файлики запихать свои хмлы. и с файликов уже грузить. либо директикс.
Wolf49406, а ты уверен что она щас в данном патче есть эта LoadLayoutFromStringAsync? ты тестил, искал(в данном патче)? а то мало что там у лвсс написано. он эту функу сам не юзает кста, он через файлики грузит. не вижу что мешает вальвам удалить к хуям эту функу с учетом того что они все лейауты в файликах хранят.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну значит я тебя наебал сорри(ну я говорил что не чекал так что еще раз сорри). BLoadLayoutFileFromString не вызывает LoadLayoutFromStringAsync, они просто делают одну и ту же вещь просто чуть чуть по-разному. поищи теперь LoadLayoutFromStringAsync. альтернативно как варик можешь просто в файлики запихать свои хмлы. и с файликов уже грузить. либо директикс.
Wolf49406, а ты уверен что она щас в данном патче есть эта LoadLayoutFromStringAsync? ты тестил, искал(в данном патче)? а то мало что там у лвсс написано. он эту функу сам не юзает кста, он через файлики грузит. не вижу что мешает вальвам удалить к хуям эту функу с учетом того что они все лейауты в файликах хранят.
Да хрен его знает, я сам через файл гружу. Проще и удобней. Но в целом у меня как у LWSS чекаются изменения в виртуалках, вроде давно уже панораму не меняли.
Ну т.е. может и меняли, но кол.во функций не менялось, ничего не ломалось.

не вижу что мешает вальвам удалить к хуям эту функу
А что им мешает из vpk удалить иконки из альфа-версии доты, которые в паинте нарисованы? :D
Потом удивляются, а че это дота столько весит. Так там легаси тянется с самого появления доты.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
326
Реакции[?]
24
Поинты[?]
12K
Да хрен его знает, я сам через файл гружу. Проще и удобней. Но в целом у меня как у LWSS чекаются изменения в виртуалках, вроде давно уже панораму не меняли.
Ну т.е. может и меняли, но кол.во функций не менялось, ничего не ломалось.



А что им мешает из vpk удалить иконки из альфа-версии доты, которые в паинте нарисованы? :D
Потом удивляются, а че это дота столько весит. Так там легаси тянется с самого появления доты.
Через LoadLayoutFile ? Как ты передаешь путь к файлу?
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
фух заебался, давно панораму не трогал.
C++:
class CUIPanelRAII;
class CUIPanel : public VClass
{
public:
    static CUIPanelRAII Create(const std::string_view& id);
    void LoadLayout(const std::string_view& url, bool option)
    {
        CallVFunc<13>(url.data(), option);
    }
    std::string_view GetName() const noexcept
    {
        const auto result = Member<const char*>(0x10);
        if (result)
            return { result };
        return {};
    }
    void RemoveAndDeleteChildren()
    {
        CallVFunc<50>();
    }
};

class CUIPanelRAII
{
public:
    CUIPanel& panel;
    ~CUIPanelRAII() noexcept
    {
        try {
            panel.RemoveAndDeleteChildren();
        }
        catch (...) {}
    }
};

class CPanel2D : public VClass
{
public:
    auto& GetUI()
    {
        auto result = Member<CUIPanel*>(0x8);
        if(!result)
            throw std::runtime_error{ "CPanel2D::GetUI returned nullptr!" };
        return *result;
    }
};

class CTopLevelWindowSource2 : public VClass
{
public:
    std::string_view GetName() const noexcept
    {
        const auto result = Member<const char*>(0x160);
        if (result)
            return { result };
        return {};
    }
    
    CUIPanel& GetPanoramaView() const
    {
        if (const auto intermediate_result = Member<CUIPanel**>(0x88); intermediate_result)
            if (const auto result = *intermediate_result; result)
                return *result;
        throw std::runtime_error{ "CTopLevelWindowSource2::GetPanoramaView is nullptr!" };
    }
};

class CUIEngineSource2 : public VClass
{
public:
    auto& GetTopLevelWindows() const noexcept
    {
        return Member<CUtlVector<CTopLevelWindowSource2*>>(0x60);
    }
    auto& GetDotaHUD()
    {
        const auto& windows = GetTopLevelWindows();
        if (
            const auto match = std::ranges::find_if(windows, [](const auto& window)
                {
                    if(window)
                        return window->GetName() == "DotaHud";
                    return false;
                });
            match != windows.end() && match != nullptr
            )
            if(const auto ptr = *match; ptr)
                return *ptr;

        throw std::runtime_error{"DotaHud top level window not found!"};
    }

    auto MakeSymbol(const std::string_view& string) const
    {
        return CallVFunc<120, std::uint16_t>(string.data());
    }
protected:
    friend class CUIPanel;
    auto& CreatePanel(const std::string_view& symbol_str, const std::string_view& id, const CUIPanel& parent)
    {
        const auto symbol = MakeSymbol(symbol_str);
        auto result = CallVFunc<29, CPanel2D*>(&symbol, id.data(), &parent);
        if(!result)
            throw std::runtime_error{ "PanoramaUI::CreatePanel returned nullptr!" };
        return *result;
    }
};

class CPanoramaUIEngine : public VClass
{
public:
    static auto& Create()
    {
        static auto ptr = CreateInterface<CPanoramaUIEngine*>("panorama.dll", "PanoramaUIEngine");
        return *ptr;
    }
    CUIEngineSource2& GetPanoramaSource2()
    {
        auto result = Member<CUIEngineSource2*>(0x28);
        if (!result)
            throw std::runtime_error{"PanoramaUI::CUIEngineSource2 is nullptr!"};
        return *result;
    }
};

CUIPanelRAII CUIPanel::Create(const std::string_view& id)
{
    auto& panorama = CPanoramaUIEngine::Create().GetPanoramaSource2();
    return { panorama.CreatePanel("Panel", id, panorama.GetDotaHUD().GetPanoramaView()).GetUI() };
}
инит
C++:
Logger::Create();
            Logger::LogMessage("Injected at %s\n", FormatCurrentTime().data());

            BenchmarkTimePoint Init{};

            BenchmarkTimePoint patterns{};
            PatternDB::ScanPatterns();
            Logger::LogTiming("Pattern scan took %sms\n", patterns.GetElapsedMillisecondsAsString().data());

            auto& panorama = CPanoramaUIEngine::Create().GetPanoramaSource2();
            Logger::LogInfo("CPanoramaUIEngine: 0x%p\n", &CPanoramaUIEngine::Create());
            Logger::LogInfo("CUIEngineSource2: 0x%p\n", &panorama);
            CTopLevelWindowSource2& dotahud = panorama.GetDotaHUD();

            Logger::LogInfo("DotaHUD CTopLevelWindowSource2: 0x%p\n", &dotahud);
            Logger::LogInfo("DotaHUD CUIPanel: 0x%p\n", &dotahud.GetPanoramaView());

            auto my_panel_raii = CUIPanel::Create("MyTestPanel");
            Logger::LogInfo("MyTestPanel CUIPanel: 0x%p\n", &my_panel_raii.panel);
            my_panel_raii.panel.LoadLayout(R"xml(file://{resources}/mypanel.xml)xml", false);

            Logger::LogTiming("Initialization took %sms\n", Init.GetElapsedMillisecondsAsString().c_str());
        
            AwaitEjection();
            Logger::LogMessage("Ejected at %s\n", FormatCurrentTime().c_str());
1647730717300.png
через файлики решил грузиться. файлик(mypanel.vxml_c) положил в dota 2 beta\game\dota\panorama(это {resources}).
компилил так(не знаю есть ли способы легче не занимался особо этой хуйней, так для теста):
скачал воркшоп тулс в стиме(это длс для доты)
скачал
Пожалуйста, авторизуйтесь для просмотра ссылки.
шаблонную кастомку кр4(и закинул файлы куда надо из архива), потом зашел в dota 2 beta\content\dota_addons\barebones\panorama, закинул туда свой файлик(mypanel.xml)(<root><Panel><Label text="GayPanel"/></Panel></root>), потом зашел в dota 2 beta\content\dota_addons\barebones\panorama\layout\custom_game\custom_ui_manifest.xml там ближе к концу добавил строчку
<CustomUIElement type="Hud" layoutfile="file://{resources}/mypanel.xml" />
она подгружает мой хмл файлик в кастомку(нужно чтобы он скомпилился иначе его заингорит габен при сборке кастомки)
потом запускаю доту с тулсами(со стима) выбираю barebones, захожу в хаммер, file->open->dota 2 beta\content\dota_addons\barebones\maps\playground.vmap, дальше f9(или file->build map...) жду
дальше забираю свое говно из C:\Users\user\Desktop\Programs\Steam\steamapps\common\dota 2 beta\game\dota_addons\barebones\panorama
кидаю в dota 2 beta\game\dota\panorama
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Liberalist компилить файлики можно чуть проще, нужен только Workshop Tools DLC.
Скомпиленные будут в "C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota_addons\custom".

Bash:
@echo off
set Compiler="C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\bin\win64\resourcecompiler.exe"
set ModSrc="C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\content\dota_addons\custom\*.*"
%Compiler% -vpkincr -i %ModSrc% -f -r
 
Последнее редактирование:
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну а вообще, конечно, можно и не компилить, дота спокойно xml схавает :smirk:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Ну а вообще, конечно, можно и не компилить, дота спокойно xml схавает :smirk:
Пожалуйста, авторизуйтесь для просмотра ссылки.
а ты тестил?
мало ли че там у лвсс.
у меня например если сделать .xml файлик сырой
my_panel_raii.panel.LoadLayout(R"rawstr(file://{resources}/mytestpanel.xml)rawstr", false);
то будет пизда
[ResourceSystem] Error loading resource file "panorama/mytestpanel.vxml_c" (Error: ERROR_FILEOPEN: File not found)
WARNING: Local content might be corrupt or missing files
Unable to load layout file 'file://{resources}/mytestpanel.xml'. This may indicate a problem with your local install files and validating your install through the Steam client may resolve the issue.
1647776633500.png
если же переименовать файлик в mytestpanel.vxml_c(но оставить сырой нескомпиленный хмл) то уже выдает
[ResourceSystem] Error loading resource "panorama/mytestpanel.vxml" (Invalid header version: 15988 != 12)
WARNING: Local content might be corrupt or missing files
WARNING: Local content might be corrupt or missing files
Unable to load layout file 'file://{resources}/mytestpanel.xml'. This may indicate a problem with your local install files and validating your install through the Steam client may resolve the issue.
а если скомпиленный то все норм.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а ты тестил?
мало ли че там у лвсс.
у меня например если сделать .xml файлик сырой
my_panel_raii.panel.LoadLayout(R"rawstr(file://{resources}/mytestpanel.xml)rawstr", false);
то будет пизда
[ResourceSystem] Error loading resource file "panorama/mytestpanel.vxml_c" (Error: ERROR_FILEOPEN: File not found)
WARNING: Local content might be corrupt or missing files
Unable to load layout file 'file://{resources}/mytestpanel.xml'. This may indicate a problem with your local install files and validating your install through the Steam client may resolve the issue.
Посмотреть вложение 196652
если же переименовать файлик в mytestpanel.vxml_c(но оставить сырой нескомпиленный хмл) то уже выдает
[ResourceSystem] Error loading resource "panorama/mytestpanel.vxml" (Invalid header version: 15988 != 12)
WARNING: Local content might be corrupt or missing files
WARNING: Local content might be corrupt or missing files
Unable to load layout file 'file://{resources}/mytestpanel.xml'. This may indicate a problem with your local install files and validating your install through the Steam client may resolve the issue.
а если скомпиленный то все норм.
Не, не тестил, сам ток щас этот метод увидел. Может, ты его не так грузишь. У лвсс LoadLayoutFile("file:///tmp/filename.xml", true);
Без { resources }, из /tmp/ системной. Не из папки доты, т.е.
Может, в самом файле дело. Хотя тут из отличительного только R"zz( в начале.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Короч, дома буду, тоже попробую проверить.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Не, не тестил, сам ток щас этот метод увидел. Может, ты его не так грузишь. У лвсс LoadLayoutFile("file:///tmp/filename.xml", true);
Без { resources }, из /tmp/ системной. Не из папки доты, т.е.
Может, в самом файле дело. Хотя тут из отличительного только R"zz( в начале.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Короч, дома буду, тоже попробую проверить.
zz это тег просто для raw string literal
Пожалуйста, авторизуйтесь для просмотра ссылки.
он работает так что он ескейпит все что внутри(кавычки хуички и тд)
R"(тут можно "писать что угодно")"
но чтобы не было таких приколов
R"(а вот это уже пиздец)" будет)" <- тут видишь в тексте есть )" которое обозначает конец строки(но по факту это у меня просто часть строки)
для этого теги придумали(ну не ебу как они называются официально я тег называю мне похуй)
R"tag(myshit)")tag" <- тут начинается "tag( и заканчивается )tag"
так вот, если прописать полный путь к файлу
my_panel_raii.panel.LoadLayout(R"rawstr(file://C:\z.xml)rawstr", false);
то он ваще ахуевает и выдает
FixupResourceName: Illegal full path passed in ("c:\z.vxml")!
я так понял он токо из папки доты(dota 2 beta\...) грузить способен хз.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
zz это тег просто для raw string literal
Пожалуйста, авторизуйтесь для просмотра ссылки.
он работает так что он ескейпит все что внутри(кавычки хуички и тд)
R"(тут можно "писать что угодно")"
но чтобы не было таких приколов
R"(а вот это уже пиздец)" будет)" <- тут видишь в тексте есть )" которое обозначает конец строки(но по факту это у меня просто часть строки)
для этого теги придумали(ну не ебу как они называются официально я тег называю мне похуй)
R"tag(myshit)")tag" <- тут начинается "tag( и заканчивается )tag"
так вот, если прописать полный путь к файлу
my_panel_raii.panel.LoadLayout(R"rawstr(file://C:\z.xml)rawstr", false);
то он ваще ахуевает и выдает
FixupResourceName: Illegal full path passed in ("c:\z.vxml")!
я так понял он токо из папки доты(dota 2 beta\...) грузить способен хз.
А, так вот что это. Я такое для регулярок юзал, сам не до конца понимая, что делаю XD
А насчет пути -- хуй знаит, у lwss же работает. Хотя может под линуксом там всё это по-другому.
Ну это в общем-то не принципиально, можно на рантайме с сервера получать xml и в папку доты класть.
Главное, чтобы оно сырой xml обрабатывало нормально.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Разобрался, в чем дело. У лвсс мутки с filesystem.
Это CBaseFileSystem, интерфейс VFileSystem017 из filesystem_stdio.dll.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу