• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Усилитель маг урона

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
364
Реакции
24
Я пробовал найти функцию в доте которая бы давала спелламп. Но единственное что из хорошего нашел так это базовое значение брони, магЗащиты, скорость передвижения. А вот магамп никак не могу найти. очень не хочу делать ручную калькулацию по каждым источникам.
 
Я пробовал найти функцию в доте которая бы давала спелламп. Но единственное что из хорошего нашел так это базовое значение брони, магЗащиты, скорость передвижения. А вот магамп никак не могу найти. очень не хочу делать ручную калькулацию по каждым источникам.
хвбп на текст лейбла(DOTAHud -> DOTATooltipManager#Tooltips -> DOTATooltipUnitDamageArmor#DOTAHUDDamageArmorTooltip -> Panel.TooltipRow -> TooltipContents#Contents -> Panel#AttackDefenseContainer -> Panel#AttackContainer -> Panel#SpellAmpRow -> Panel.LeftRightFlow -> Label#SpellAmp)
1727785900243.png

1727785984495.png

1727785925410.png
 
  • Мне нравится
Реакции: lu4
хвбп на текст лейбла(DOTAHud -> DOTATooltipManager#Tooltips -> DOTATooltipUnitDamageArmor#DOTAHUDDamageArmorTooltip -> Panel.TooltipRow -> TooltipContents#Contents -> Panel#AttackDefenseContainer -> Panel#AttackContainer -> Panel#SpellAmpRow -> Panel.LeftRightFlow -> Label#SpellAmp)
Посмотреть вложение 287023
Посмотреть вложение 287025
Посмотреть вложение 287024

Ставил бп на значение 0.0% и когда ловилось то оно меня постояно ( в чит енджине) перенаправляло на tier0.dll или панорама на какие-то функции.Я немного поразмыслил мозгами и почему то мне кажется что оно чето похоже на функцию GetDamageBonus. Или это хуевое направление?Я конкретно имею в виду модификаторы. Конечно это всеравно хуевина связанная с расчетами. Кстати это значение SpellAmpLabel оно токо обновляется когда я мышкой навожу на панельку
WPApwme.png
Ты говорил вроде что хорошим источником является документалка валве. Я вот смотрю нашел функу пытаюсь её найти в клиенте но чето нихера не выходит. Они ее спрятали или что?
 
Ставил бп на значение 0.0% и когда ловилось то оно меня постояно ( в чит енджине) перенаправляло на tier0.dll или панорама на какие-то функции.Я немного поразмыслил мозгами и почему то мне кажется что оно чето похоже на функцию GetDamageBonus. Или это хуевое направление?Я конкретно имею в виду модификаторы. Конечно это всеравно хуевина связанная с расчетами. Кстати это значение SpellAmpLabel оно токо обновляется когда я мышкой навожу на панельку
WPApwme.png
Ты говорил вроде что хорошим источником является документалка валве. Я вот смотрю нашел функу пытаюсь её найти в клиенте но чето нихера не выходит. Они ее спрятали или что?
ну логично что тебя на tier0 перенаправляло(не будет же сам клиентский код руками напрямую в буфере строки символы менять). ты не хочешь по коллстеку ниже посмотреть кто эти функции вызывает, нет?) (тебе клиент нужен)
1727810897976.png

тот скрин что ты скинул это документация по серверной апи(для людей которые плагины кастомки и тд делают). поэтому ты ее в клиенте найти не можешь.
 
Последнее редактирование:
ну логично что тебя на tier0 перенаправляло(не будет же сам клиентский код руками напрямую в буфере строки символы менять). ты не хочешь по коллстеку ниже посмотреть кто эти функции вызывает, нет?) (тебе клиент нужен)
Посмотреть вложение 287053
тот скрин что ты скинул это документация по серверной апи(для людей которые плагины кастомки и тд делают). поэтому ты ее в клиенте найти не можешь.
я не умею ставить бп в x64dbg. ты ставишь бп на само значение (текст 0.0%) ?
 
на символы текста да, на один байт(на первый). в дампе пкм -> breakpoint->hardware, write->byte
ебать я мозг включил и походу врубил как это работает. Благодаря тебе и дилибам. Подскажешь как в шеме найти описание модификаторов? видать в функцию передается какая-то константная:
AttackSpeed:
TV5rIsz.png

BaseSpellAmp(но функции кстати разные)
dSf1afw.png

немогу выяснить что за третий параметр
 
Последнее редактирование:
ебать я мозг включил и походу врубил как это работает. Благодаря тебе и дилибам. Подскажешь как в шеме найти описание модификаторов? видать в функцию передается какая-то константная:
AttackSpeed:
TV5rIsz.png

BaseSpellAmp(но функции кстати разные)
dSf1afw.png

немогу выяснить что за третий параметр
schema\client.dll\enums\modifierfunction.txt
Код:
Expand Collapse Copy
    MODIFIER_PROPERTY_ATTACKSPEED_BASE_OVERRIDE = 29,
        ^MScriptDescription "GetModifierAttackSpeedBaseOverride"
    ...
    MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE_UNIQUE = 47,
        ^MScriptDescription "GetModifierSpellAmplify_PercentageUnique"
третий парам это скорее всего адрес инта где лежит -1(нужен для модифаерфункции вроде)
old
C++:
Expand Collapse Copy
class ModifierFunction
{
    CDOTA_Buff* buff{};
    void* func{};
    void* unk{};
public:
    float Get() const noexcept
    {
        struct result
        {
            int has_result{};
            float float_result{};
            void* unk1{};
            void* unk2{};
        };
        if (func)
        {
            result _result{};
            std::uint32_t unk{ std::numeric_limits<std::uint32_t>::max() };
            reinterpret_cast<void* (*)(CDOTA_Buff*, result*, void*)>(func)(buff, &_result, &unk);
            if (_result.has_result)
                return _result.float_result;
        }
        return 0.0f;
    }
};
...
    CUtlVector<ModifierFunction>* CDOTA_ModifierManager::GetModifierFunction(modifierfunction id) const noexcept
    {
        if (const auto index = modifierfunction_indexes[id];
            index != modifierfunction::MODIFIER_FUNCTION_INVALID)
        {
            if(index < modifierfunctions.size())
                return &modifierfunctions.at(index);
        }
        return nullptr;
    }
 
schema\client.dll\enums\modifierfunction.txt
Код:
Expand Collapse Copy
    MODIFIER_PROPERTY_ATTACKSPEED_BASE_OVERRIDE = 29,
        ^MScriptDescription "GetModifierAttackSpeedBaseOverride"
    ...
    MODIFIER_PROPERTY_SPELL_AMPLIFY_PERCENTAGE_UNIQUE = 47,
        ^MScriptDescription "GetModifierSpellAmplify_PercentageUnique"
третий парам это скорее всего адрес инта где лежит -1(нужен для модифаерфункции вроде)
old
C++:
Expand Collapse Copy
class ModifierFunction
{
    CDOTA_Buff* buff{};
    void* func{};
    void* unk{};
public:
    float Get() const noexcept
    {
        struct result
        {
            int has_result{};
            float float_result{};
            void* unk1{};
            void* unk2{};
        };
        if (func)
        {
            result _result{};
            std::uint32_t unk{ std::numeric_limits<std::uint32_t>::max() };
            reinterpret_cast<void* (*)(CDOTA_Buff*, result*, void*)>(func)(buff, &_result, &unk);
            if (_result.has_result)
                return _result.float_result;
        }
        return 0.0f;
    }
};
...
    CUtlVector<ModifierFunction>* CDOTA_ModifierManager::GetModifierFunction(modifierfunction id) const noexcept
    {
        if (const auto index = modifierfunction_indexes[id];
            index != modifierfunction::MODIFIER_FUNCTION_INVALID)
        {
            if(index < modifierfunctions.size())
                return &modifierfunctions.at(index);
        }
        return nullptr;
    }
У меня почемут ебашит ошибку Run-Time Check Failure #2 - Stack around the variable 'Result' was corrupted.

C++:
Expand Collapse Copy
float GetValue()
    {
        
        struct param
        {
            int resultInt;
            float resultFloat;
            void* unk{};
            void* unk1{};
        }Result; 
        struct argument
        {
            int a = -1;
            int b = 0;
        }arg;
         
        if (functionmodifier)
        {
            param* result = (param*)(*(__int64(__fastcall*)(CDOTA_Buff*, param*,argument*))(functionmodifier))(buff, &Result,&arg);
            return result->resultFloat;
        }
        return 0.0;
    }
 
У меня почемут ебашит ошибку Run-Time Check Failure #2 - Stack around the variable 'Result' was corrupted.

C++:
Expand Collapse Copy
float GetValue()
    {
       
        struct param
        {
            int resultInt;
            float resultFloat;
            void* unk{};
            void* unk1{};
        }Result;
        struct argument
        {
            int a = -1;
            int b = 0;
        }arg;
        
        if (functionmodifier)
        {
            param* result = (param*)(*(__int64(__fastcall*)(CDOTA_Buff*, param*,argument*))(functionmodifier))(buff, &Result,&arg);
            return result->resultFloat;
        }
        return 0.0;
    }
хот фикс


C++:
Expand Collapse Copy
        struct param
        {
            int resultInt;
            float resultFloat;
            void* unk{};
            void* unk1{};
            void* unk2{};
        }Result;
 
Назад
Сверху Снизу