Вопрос Способности

  • Автор темы Автор темы Ltedz
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
20 Дек 2022
Сообщения
4
Реакции
0
Как скастовать скилл? Допустим ульт зевса
Или же получить его абсолютный урон, или же хотя бы уровень прокачки
 
Как скастовать скилл? Допустим ульт зевса
Или же получить его абсолютный урон, или же хотя бы уровень прокачки
через PrepareUnitOrders отдаются приказы(хождение по карте, покупка шмоток, каст абилок, атака и т.д.); абилки лежат в C_DOTA_BaseNPC::m_vecAbilities; левел это C_DOTABaseAbility::m_iLevel; со статами(дамаг манакост блаблабла) всё сложно, у абилки есть копия оригинальных данных из скрипта, а у самих героев есть модификаторы(и другие абилки - например таланты и т.д.) которые влияют на эти статы(при чем и у кастера и у цели, например у кастера может быть увеличение маг урона, а у цели есть маг резист, и т.д.). игра это не хранит явным образом и оно перевычисляется по надобности(зачастую есть готовые функции которые это вычисляют, реверси).
 
Урон, ренж и прочее с учетом всех приколов через GetLevelSpecialValueFor можно получить. Прям так и хреначишь:
GetLevelSpecialValueFor<int>("AbilityCastRange")

C++:
Expand Collapse Copy
using GetLevelSpecialValueForFn = float(__fastcall*)(void* thisptr, const char* value, int level, void* unk1, bool noOverride, bool* result);

template<typename T = float>
T GetLevelSpecialValueFor(const char* value, int level = -1) {
     return (T)GetLevelSpecialValueForFunc(this, value, level, nullptr, 0, nullptr);
}
 
Назад
Сверху Снизу