Объявления | ||
---|---|---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
|
Re: База данных IDA от void17The SIEGE_WEAPON flag is obtained directly from crtraits.txt, same as every other creature flag.
|
Re: База данных IDA от void17Классная тема. Как жаль что не появилась она лет так 5 назад.
Кстати, void_17, я видел вы в ВК делаете "Обучение". Я недавно малость делал такой "начальный гайд", но у вас это выходит куда лучше. http://wforum.heroes35.net/showthread.php?tid=5706 |
Re: База данных IDA от void17army::get_loss_combat_value():
Используется, например, для оценки эффективности ударных заклинаний и заклинаний, связанных с потерей здоровья. Пример - оценка заклинания/эффекта Poison:
* * * Метод type_AI_spellcaster::get_damage_value():
Вот это: return 2 * loss_combat_value - total_combat_value; по идее, означает, что AI не будет кастовать одиночное ударное заклинание на временно обездвиженные отряды, если заклинание уничтожает меньше половины отряда, чтобы не снимать эффект раньше времени (а Stone Gaze включили, наверное, из-за уполовинивания урона). И даже если заклинание уничтожает больше половины отряда, то ценность всё равно остаётся маленькой по сравнению с полной ценностью потерь. Получается, AI будет кастовать одиночные ударные заклинания на такие отряды, только если остальные окажутся достаточно слабыми. А при касте по площади отряды под Blind, Stone Gaze и Paralyze и вовсе могут отнимать ценность, что тоже логично. |
Re: База данных IDA от void17А вот как прекрасно выглядит оценка одиночных ударных заклинаний:
Правда, как писал RoseKavalier, type_enchant_data - хитрая структура: для разных типов заклинаний поля означают разные вещи. Здесь я задал имена полей для одиночных ударных заклинаний, чтобы было понятно. |
Re: База данных IDA от void17Выбор заклинания (основной свитч):
type_AI_spellcaster::consider_single_enchantment():
Функция была сломана из-за неправильного типа this (почему-то IDA упорно хочет combatManager*, но это не он). Последний раз редактировалось AlexSpl 25 ноя 2021, 01:51, всего редактировалось 3 раз(а).
|
Re: База данных IDA от void17igrik писал(а): Кстати, void_17, я видел вы в ВК делаете "Обучение". Я недавно малость делал такой "начальный гайд", но у вас это выходит куда лучше. http://wforum.heroes35.net/showthread.php?tid=5706 Подзабил на это дело с моим товарищем немного. Мыж студенты. Если кто-то захочет помочь — предложка открыта. |
Re: База данных IDA от void17AlexSPL, я смотрю вы уже прямо в базе комментите. Чтобы ничего не пропало, загрузите вашу версию моей базы на сервер as239, оттуда будем вместе работать поочередно. Все в дискорде есть.
|
Re: База данных IDA от void17Добавил ещё одну функцию, которая порядком напрягла, а может, косяк IDA. Всё время пытается исправить тип this на combatManager, имена локальных переменных постоянно сбрасывает, а если ошибёшься, нажмёшь Ctrl+Z, то точно откатит не только последнее. Не очень удобно работать. Я бы просто переписывал эти функции на С++, мне кажется, так даже лучше. В базе из-за "умного" компилятора много мусорных присваиваний, работа с вещественными типами ещё та заноза (ведь double передаётся в качестве аргумента двуми пушами), a потом в тексте появляются COERCE_DOUBLE() Лучше просто переписывать функции на C++, оптимизируя и убирая compiler-style фишки.
Кстати, разобрал type_enchant_data. Оказывается, это кусок type_spell_choice (первые пять полей):
В базе у type_spell_choice перепутаны поля. Начинает потихоньку складываться цельная картина каста AI. Уже в плагине поправил каст Explosion, Incineration и Death Cloud. * * * Ан нет, type_enchant_data заполняется для разных заклов по разному. Например, функция взвешивания ударных одиночных заклинаний превратилась в неправильную (тут по формуле урона можно контролировать):
Интересно, как на самом деле реализована структура type_enchant_data? Просто пять безликих полей DWORD? Меня вот это запутало: qmemcpy(&enchant_data, SpellChoice, sizeof(enchant_data)); Здесь реально идёт копирование пяти первых полей, но это для бафов/дебафов. Как видим из примера с оценкой ударных, она для них заполняется по-другому * * * В перечислителе SpellID пропущено заклинание Clone. Короче, я добавлю префиксы. И вместе со всеми правками залью базу. Конечно, не очень удобно работать поочерёдно, но как по-другому? |
Re: База данных IDA от void17Разбираю конструктор type_AI_spellcaster::type_AI_spellcaster(). Пришлось после того, как увидел оценку заклинания Fire Shield. Так вот, размер этого класса 1040 байт.
|
Re: База данных IDA от void17Цитата: Я, собственно, так и делаю по-тихоньку... Цитата: Зачем так делать? Давайте лучше как NWC пропишем просто class type_AI_spellcaster и сравняем. Мы все же на С++, а не С. Я и думаю переписать эти функции и записать в ai_combat.cpp. Почти доделал armygrp.cpp, кстати. Цитата: AlexSPL, я прошу вас ,умоляю, не поймите неправильно, давайте соблюдать оригинальное имя. Так будет проще эти самые .cpp/.h файлы переписывать, так как не придется каждый раз менять Army на army и т.д. Одно дело для себя писать, другое когда в команде работаем. Нужно ввести стандарты, чтобы код друг друга можно было без проблем копировать и обмениваться. upd.: я понял, вы в homm3.h пишите. Ну ладно, ваше право, но лучше давайте придерживатся стандарту И да, не меняйте, пожалуйста, имя указатель this, проще в файлик записывать. Последний раз редактировалось void_17 25 ноя 2021, 04:49, всего редактировалось 2 раз(а).
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2