Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 06 апр 2021, 15:34

Вы, наверное, плагин забыли подключить. Ещё легко не заметить, если рядом отряды (могут заслонять/можно спутать).
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 06 апр 2021, 15:39

Да, Проклятие я проверял без плагина. С плагином ок. Получается это баг оригинала, который наш плагин исправляет в том числе. Я еще сегодня тщательно потестирую плагин по всем фронтам.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 06 апр 2021, 18:00

Забыли удалить showDebugInfo.

И еще, Вы случайно закинули мой последний цикл в Ваш основной цикл hex. Он шел отдельно, вынесите его за пределы hex.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 06 апр 2021, 18:50

showDebugInfo() пусть остаётся на всякий. Мы же не вызываем её, а когда понадобится - она уже есть.

Код: Выделить всё
struct _BattleStackEx_ : public _BattleStack_
{
    int getMonsterSpell();
    bool approvedTarget(const int spell);
    bool magicMirrorLucky(const int spell);
    _BattleStackEx_* getStackToRedirect(const int spell, const bool massCast = true);
    int calcMagicDamage(const int spell, const _Hero_* attHero, const _Hero_* defHero);

    inline int current_health() {
        return this->count_current * this->full_hp - this->lost_hp;
    }
    inline int full_health() {
        return this->count_current * this->full_hp;
    }
    inline int fightValue() {
        return this->creature.fight_value * this->count_current;
    };
    inline double damageFightValue(const int spell, const int spellDamage) {
        return this->getMagicVulnerability(spell) * min((double)spellDamage / this->full_hp,
            this->count_current - (double)this->lost_hp / this->full_hp) * this->creature.fight_value;
    };
    inline int onesFightValue(const int spellDamage) {
        return spellDamage >= this->current_health() && spellDamage < this->full_health() ? this->creature.fight_value : 0;
    };
    inline float getMagicVulnerability(const int spell) {
        return CALL_7(float, __thiscall, 0x5A83A0, o_BattleMgr, spell, o_BattleMgr->current_side, this, 1, 1, 0);
    };
    inline int getHitChance(const int spell) {
        return (int)(100 * getMagicVulnerability(spell));
    }
    inline bool isImmuneTo(const int spell) {
        return getMagicVulnerability(spell) == 0;
    };
    inline void playAnimation(const int id) {
        CALL_5(void, __thiscall, 0x4963C0, o_BattleMgr, id, this, 100, 0);
    }
};

Посмотрите метод onesFightValue(). Я правильно его переписал?
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 06 апр 2021, 19:12

Код: Выделить всё
( spellDamage % stack->full_hp != 0 && spellDamage / stack->full_hp < stack->count_current && spellDamage % stack->full_hp >= stack->full_hp - stack->lost_hp )


Код: Выделить всё
return spellDamage >= this->current_health() && spellDamage < this->full_health() ? this->creature.fight_value : 0;


А в вашеми случае в spellDamage уже находится остаток от деления на stack->full_hp?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 06 апр 2021, 19:17

Что такое остаток от деления на Full HP? Это здоровье верхнего существа в отряде (стеке). Мы сравниваем урон от заклинания с текущим и полным здоровьем всего отряда, если урон не меньше текущего здоровья всего отряда, но меньше полного здоровья всего отряда, то возвращаем fight_value существа из этого отряда, иначе 0. Логика у Вас такая?
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 06 апр 2021, 19:29

Логика такая:
Если Урон от закла не убьет целое кол-во существ, то есть останеется неполное здоровье верхнего существа + урон от закла не убьет весь отряд, то есть урон будет строго меньше общего здоровья отряда + тот остаток от деления полного урона от закла на полное здоровье существа будет более, либо равен остатку здоровья верхнего сещества, то суммируем Fight Value этого существа.

***

UPD: То есть если урон от закла 1600 и у нас 5 титанов, но у верхнего осталось 100 ед здоровья, то этот стек нам не выгодно брать. Нам выгодней взять тогда стек с другой группы с полным здоровьем.
Последний раз редактировалось Rolex 06 апр 2021, 19:42, всего редактировалось 6 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 06 апр 2021, 19:32

Тогда это одно и то же. Урон 290. Здоровье отряда 260 + 14, полное 300. 260 + 14 <= 290 < 300.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 06 апр 2021, 20:02

AlexSpl, я вот думаю что в NewTarget для ударных спеллов оптимально будет сделать выбор цели по тому же принципу, что и для площадных. Нужно сделать разделение при выборе цели для ударных спеллов и для обычных. Поскольку цель одна, то тут все просто. То есть если спелл ударный, то сравниваем не Fight Value всего кол-ва существ в отряде, а того кол-ва (или ее части), которое может уничтожить направленный ударный закл. Ну а для неударных заклов, вроде Слепоты, оставляем все, как есть, то есть по общей силе всего отряда. Следовательно масскаст мы вообще не трогаем. Что скажите?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 06 апр 2021, 22:04

Почему бы и нет? В dataInit() у нас есть spell, если это ударный, заполняем stackVector по другому алгоритму, и готово.
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2