Объявления

Друзья, если не получается зарегистрироваться, напишите на почту 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 » 30 мар 2021, 18:43

На примере Fireball:

Код: Выделить всё
  [A] [B]
[C] [D] [E]
  [F] [G]

Проверяем равенство указателей C и D. Если C == D, мы имеем дело с двугексовым отрядом и на следующей итерации сразу переходим к Е. Если на C - только часть двугексового отряда, то, разумеется, C != D и мы переходим к D. Следующий гекс для E будет F (мы идём не по номерам гексов, а по заранее подготовленному массиву номеров, входящих в область заклинания). Равенство E == F невозможно. Даже проверять на выход за границы поля не нужно, только на 0 (если гекс пуст, скипаем его).
Последний раз редактировалось AlexSpl 30 мар 2021, 18:57, всего редактировалось 1 раз.
Вернуться к началу

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 » 30 мар 2021, 18:56

А что там по нейтралам? Сказочные драконы? Нужно отражать, например, Ослепление Единорогов или Проклятие Мумий? Мне кажется, абилки лучше не трогать.
Вернуться к началу

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

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

Сообщение Rolex » 30 мар 2021, 19:14

AlexSpl писал(а):

Проверяем равенство указателей C и D. Если C == D, мы имеем дело с двугексовым отрядом и на следующей итерации сразу переходим к Е. Если на C - только часть двугексового отряда, то, разумеется, C != D и мы переходим к D. Следующий гекс для E будет F (мы идём не по номерам гексов, а по заранее подготовленному массиву номеров, входящих в область заклинания). Равенство E == F невозможно. Даже проверять на выход за границы поля не нужно, только на 0 (если гекс пуст, скипаем его).

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

AlexSpl писал(а):

А что там по нейтралам? Сказочные драконы? Нужно отражать, например, Ослепление Единорогов или Проклятие Мумий? Мне кажется, абилки лучше не трогать.

Есть еще Окаменение Медуз, Старость Призрачных драконов, Парализующее жало Скорпикор, Отравление ядом Выверн-Монархов. Со сказочными конечно интересно, у них атака заклом идет, хм... :smile5:

PS: Думаю нужно делать аналогично Антимагии. Если у Антимагии есть защита от вышеперечисленных заклов, значит и Зеркало должно их отражать!
Последний раз редактировалось Rolex 30 мар 2021, 19:20, всего редактировалось 2 раз(а).
Вернуться к началу

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 » 30 мар 2021, 19:18

Абилки точно не стоит отражать, хотя прикольно бы было.

Разницу между воспроизведением звука Death Ripple не слышу. Может, используются другие параметры воспроизведения или даже функция? Но звук точно один и тот же. В ресурсах же один Deathrip.wav?
Вернуться к началу

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

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

Сообщение Rolex » 30 мар 2021, 19:19

AlexSpl писал(а):

Абилки точно не стоит отражать, хотя прикольно бы было.

А если существо под Экспертной Антимагией у него есть защита от абилки-закла? Надо проверить.
Вернуться к началу

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 » 30 мар 2021, 19:23

По идее, должна быть. Но в оригинале Magic Mirror точно не перенаправляет магию монстров. Вот не помню, а резист против абилок работает?

Проверил звук для прощадных ударных. Его нет для всех заклинаний этой группы.

Вот так воспроизводится:

Код: Выделить всё
void __stdcall areaReflection(HiHook* h, _BattleMgr_* battleMgr, int hex, int spell, int a3, int a4)
{
    memcpy(AnimateStack, needSpellAnim, 40);
    CALL_5(void, __thiscall, h->GetDefaultFunc(), battleMgr, hex, spell, a3, a4);
    playResistAndMagicMirror();

    // Если заклинание отражено
    if ( redirectAreaSpell )
    {
        showMagicMirrorAnim = false;
        showMagicResistAnim = false;
        memset(needMagicMirrorAnim, false, 40);
        memset(needMagicResistAnim, false, 40);

        CALL_3(void, __fastcall, 0x59A890, o_Spell[spell].wav_name, -1, 3);
        CALL_5(void, __thiscall, h->GetDefaultFunc(), battleMgr, getHexId(spell), spell, a3, a4);
        playResistAndMagicMirror();
    }
}
Последний раз редактировалось AlexSpl 30 мар 2021, 19:33, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение Rolex » 30 мар 2021, 19:32

AlexSpl писал(а):

Проверил звук для прощадных ударных. Его нет для всех заклинаний этой группы.

Я допер в чем дело. В оригинале изначально проигрывается звук получения существами урона, а уже после анимация закла и ее звук. А у вас получается звук получения существами урона где-то потерялся.
***
UPD: Пересобрал код и проблема решилась. Хз, что там было. Также проверил FIREBALL (Огненный шар) в оригинале. Там так и есть, звук идет с опозданием уже под конец анимации. В общем эти вопросы закрыты. Остались нейтрали, оптимизация кода и ... плагин готов.
Последний раз редактировалось Rolex 30 мар 2021, 21:10, всего редактировалось 2 раз(а).
Вернуться к началу

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

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

Сообщение Rolex » 30 мар 2021, 20:24

Такс, проверил. В общем выставил оригинальному Зеркалу 100% вероятность отражения и проверил отражает ли оно абилки-заклы существ. Итого ничего не отражает ни абилки с обычными заклами, которые есть в книге, ни уж тем более уникальные абилки существ, которых нет в книге заклинаний.

А вот с Антимагией интересней. Антимагия блочит все абилки-заклы существ, которые есть в книге, причем даже Сказочный дракон не может атаковать заклом существо с Антимагией, только обычной атакой. И в то же время Антимагия пропускает уникальные заклы-абилки, которые присущи только лишь отдельным существам (Окаменение, Паралич, Болезнь, Старение, Яд).

Что касается резиста, то он работает только против заклов Чародея. Ибо у них уникальное направление каждые 3 раунда, которое не есть частью атаки. У всех остальных существ абилка-закл - это часть атаки и в таком случае резист не работает.

Таким образом прихожу к выводу, что надо делать как с Антимагией, уникальные заклы-абилки мы не отражаем (Окаменение, Паралич, Болезнь, Старение, Яд), а те что есть в книге (Слепота, Проклятие, Слабость) - отражаем. Единороги/Боевые единороги - Слепота, Черные рыцари/Рыцари Смерти/Мумии - Проклятие, Ядовитые змии - Слабость. А Снятие заклинаний Змиев и Ядовитых змиев получается отражать ненужно, оно если накладывается, то должно снимать Зеркало с отряда, который был атакован Змием. Диспел снимает все, а потому его не отражаем.

Заклы Чародея получается итак сейчас отражаються, так как он кастует массово как на свои, так и на вражеские отряды и это идет как направление закла, а не атака. И получается еще нужно отражать и Удар молнии Громовой птицы и Огненный щит Султана ифритов (то есть те заклы, которые есть в книге заклинаний). Хотя нет, щит Ифритов ненужно, его Антимагия не блочит, а вот Удар молнии Громовых птиц нужно, он блочится Антимагией. :smile5: И ... если следовать логике Антимагии, то по идее мы должны отражать и атаку Сказочного дракона заклом. :smile1:

UPD: Заклы Сказочного дракона, также как и Чародея получается Зеркало итак сейчас отражает. С ними ничего делать ненужно. То есть по сути нужно сделать отражение 4 заклов (Слепота, Проклятие, Слабость и Удар молнии).
Вернуться к началу

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 » 31 мар 2021, 12:32

Решил переписать Ваш код через vector<_BattleStack_*> stackVector. Не понимаю этот участок:

Код: Выделить всё
combatPowerOfStacks.resize(count);
combatPowerOfStacksIsSpell.resize(countIsSpell);

sort(combatPowerOfStacks.begin(), combatPowerOfStacks.end(), my_cmp);
sort(combatPowerOfStacksIsSpell.begin(), combatPowerOfStacksIsSpell.end(), my_cmp);

for (int i = 0; i < countIsSpell; ++i)
{
    _BattleStack_* stack = &o_BattleMgr->stack[o_BattleMgr->current_side][combatPowerOfStacksIsSpell[i].second];
    combatPowerOfStacksIsSpell[i].first = stack->active_spell_duration[spell];
}

sort(combatPowerOfStacksIsSpell.begin(), combatPowerOfStacksIsSpell.end(), my_cmp);

Первый вектор, куда попали отряды, на которых не висит заклинание spell, cортируем по убыванию Fight Value. Второй вектор, куда попали отряды, на которых висит заклинание spell, также сортируем по убыванию. Затем в цикле проходим по второму вектору и заполняем first продолжительностью заклинания. Потом сортируем этот вектор по убыванию продолжительности. Зачем тогда мы его сортировали по убыванию Fight Value до этого?
Вернуться к началу

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

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

Сообщение Rolex » 31 мар 2021, 12:45

AlexSpl писал(а):

Потом сортируем этот вектор по убыванию продолжительности. Зачем тогда мы его сортировали по убыванию Fight Value до этого?

Чтобы в случае, когда на 2-х или более отрядах стоит закл с одинаковой продолжительностю, при повторном касте приоритет отдавался отряду с более высоким Fight Value.
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 1

cron