Объявления

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

Герои 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: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 13 авг 2023, 20:53

Цитата:
То есть я исправил Random(0, 100) на Random(0, 99) в функции philAI_QuickCombat.

Да, там тоже нужно.

Цитата:
Это значит, что одновременные сливы были предусмотрены разработчиками ? Насколько это корректно вписывается в игру ??

На практике без массовых заклов это невозможно, но код заставляет задуматься.

Кстати, вот это:

Цитата:
При сливе компа можно также наблюдать очень интересный эффект (впервые описанный VDV_forever): исчезает не только комп (без магии), но и нейтралы!

Цитата:
Колдунья Ариэль с артефактами (1-3-2-3) и 1 крестьянином (мораль/удача:
0/0) нападает на нейтральный отряд, состоящий из трёх крестьян.

Цитата:
Выпавшая грань | Эффект (вероятность, %)
0, 1 | Ариэль побеждает (2/101 = 1,98%);
2 | Ариэль и нейтралы истребляют друг друга (1/101 = 0,99%);
3, 4, …, 100 | Ариэль сливается (98/101 = 97,03%).

Я проверял на практике. Считаю, что если исход битвы не реализуем на практике (одновременный слив без магии), то его не должно быть и в результате быстрого боя.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 13 авг 2023, 21:01

Кстати, по поводу моих дальнейших прохождений карт Героев 1. Перестал проходить после 3-й карты. Как только прочитал вот это https://handbookhmm.ru/1-tactics стало грустно, как компа можно дурить. Например, совет ставить стрелковый стек справа, чтобы ИИ стеки путались друг у друга под ногами. Кстати, любовь к правому стеку есть у ИИ во всех частях Героев.
Вернуться к началу

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: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 13 авг 2023, 21:08

Ну, такие вещи уже стали фичами. Как, например, остановка пешеходов врага нашим отрядом. Без этого было бы скучно: в битвах, где нельзя закрыть стрелков, пешеходы противника прямиком бы шли к стрелкам. А так хоть какой-то шанс на победу при неравных силах. Можно обыграть это тем, что наш отряд "связывает боем" вражеский отряд. Минимум интересная механика. На таком маленьком поле боя не развернёшься особо. Тактик совсем мало останется, если без этих фишек играть.
Вернуться к началу

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: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 13 авг 2023, 21:54

Код: Выделить всё
int experienceValueForDefender = game_ExperienceValueOfStack(armyGroupA, heroA);
  if (isSiegeBattle)
      experienceValueForDefender += 500; // баг - это нужно добавлять в experienceValueForAttacker
...

Решил проверить начисление опыта за город/замок в Героях 1 при битве AI vs AI. Так вот, он там не начисляется. Нужно исправить :smile1:
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 13 авг 2023, 22:27

AlexSpl писал(а):

Решил проверить начисление опыта за город/замок в Героях 1 при битве AI vs AI. Так вот, он там не начисляется. Нужно исправить :smile1:


А зачем, если в Героях 1 так устроено ? Я вот, наоборот, думаю подсократить многие изменения, которые внес в DLL с изменениями геймплея для Героев 2. Оставлять только то, что реально нужно, а те изменения, без которых игра уж как-нибудь переживет, выпилить.

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: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 13 авг 2023, 22:34

Цитата:
А зачем, если в Героях 1 так устроено ?

В Героях 1, как и в других частях, положено за героя +500 опыта и за город/замок +500. Если герой атакует город/замок человека (битва реальная), то опыт начисляется нормально.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 13 авг 2023, 22:47

AlexSpl писал(а):

Это вообще очень странно. Сейчас пересматриваю philAI::ProbableOutcomeOfBattle() в Героях 1. Хочу всё-таки разобраться, откуда идея таких коэффициентов. Если найду логику, поделюсь позже :smile1:


Вообще, можно попробовать начать рассуждать с самого начала. Попробуем вывести формулу для силы отряда. Она прямо пропорциональна урону и прямо пропорциональная здоровью (показатели атаки и защиты неявно включим в урон и здоровье). Получаем Сила = Урон * Здоровье. Однако нетрудно понять, что при такой формуле сила существ не будет обладать свойством аддитивности - если мы в 2 раза увеличиваем число существ, то мы в 2 раза увеличиваем урон и в 2 раза здоровье, таким образом сила увеличивается в 4 раза. Свойством аддитивности обладает следующая формула (она же и верна, в скобочках заметим): Сила = SQRT (Урон * Здоровье). Такая формула используется в Героях 3, например. Можно предположить, что Фил прошел мимо этого очевидного решения и нагородил свою какую-то сложную формулу, в которую включил N с нелинейной зависимостью. Звучит немного неправдоподобно, но что еще предположить ?
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 14 авг 2023, 12:56

Посмотрел еще раз philAI_QuickCombat, philAI_ProbableOutcomeOfBattle, ваш документ "Теория слива".

Чего хотелось бы ? Адекватного итога - то есть должна быть исключена ненулевая вероятность победы стороны, которая намного слабее. Вот у вас в TE сторона, которая в 1,5 раза сильнее - никогда не проигрывает. Считаю, что это вполне правильно. Но вот то, что при этом эта сторона не несет никаких потерь - не очень реалистично. Можно предположить (интуитивно), что сторона, которая в 1,5 раза сильнее, понесет хотя бы 10-20 % потерь (и это довольно много).

Что еще не нравится в оригинальных philAI_QuickCombat и philAI_ProbableOutcomeOfBattle - виден ассиметричный подход к атакующему и защищающемуся. Если в случае битвы "герой ИИ - нейтралы" можно как-то обосновать такую ассиметричность, то в случае битвы двух ИИ героев - не очень. В чем ассиметричность ?
С одной стороны, в philAI_ProbableOutcomeOfBattle есть строки:
Код: Выделить всё
  if(*probWinnerA >= 0.08 )
  {
    if(*probWinnerA >= 0.12 )
    {
      if(*probWinnerA >= 0.2 )
      {
        if(*probWinnerA >= 0.3 )
        {
          if(*probWinnerA < 0.4 )
            *probWinnerA -= 0.02;
        }
        else
        {
          *probWinnerA -= 0.04;
        }
      }
      else
      {
        *probWinnerA -= 0.05;
      }
    }
    else
    {
      *probWinnerA -= 0.07000000000000001;
    }
  }
  else
  {
    probWinnerA = 0;
  }


И это почему-то применяется только к нижней границе probWinnerA, когда атакующий скорее всего проиграет (можно было бы сделать симметрично для верхней границы, но наоборот, с прибавкой, вплоть до probWinnerA = 1.0).

а в philAI_QuickCombat есть строки
Код: Выделить всё
  if(isAttackerWin && probWinnerA > 0.6)
    probDelta = (probWinnerA + 0.65) * probDelta;
  if(probDelta > 1.0)
    probDelta = 1.0;


И это применяется только к атакующей стороне.

Мои предложения:
1) Выпилить кусок в philAI_ProbableOutcomeOfBattle начинающийся с
Цитата:
if(*probWinnerA >= 0.08 )

2) Изменить кусок в philAI_QuickCombat (с оригинала выше вот на это):
Код: Выделить всё
  if(isAttackerWin && probWinnerA > 0.6)
    probDelta = (probWinnerA + 0.65) * probDelta;
  if(!isAttackerWin && probWinnerD > 0.6)
    probDelta = (probWinnerD + 0.65) * probDelta;
  if(probDelta > 1.0)
    probDelta = 1.0;

3) самое интересное, изменить в philAI_QuickCombat
вот это
Цитата:
float probWinnerD = (float)Random(0, 100) / 100.0;

на это
Цитата:
float probWinnerD = (float)Random(20, 80) / 100.0;


Таким образом сторона, которая существенно сильнее - не проиграет, и понесет некоторые потери (более-менее реалистично).
Или я чего-то не учел ??

***

Ну или
Цитата:
float probWinnerD = (float)Random(25, 75) / 100.0;

Тогда будет как вы задумывали - если коэф. победы > 75, то эта сторона не может проиграть.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 14 авг 2023, 14:06

AlexSpl,

а здесь тоже нужны коррекции ? (убрать проверки на 0.99 или 0.999 и задействовать только проверку isAttackerWin)

Код: Выделить всё
  if(!gbRetreatWin )
  {
    if(*casualtiesA <= 0.99 )
    {
      if(*casualtiesD > 0.99 )
        advManager_TransferArtifacts(heroD, heroA);
    }
    else
    {
      advManager_TransferArtifacts(heroA, heroD);
    }
  }
...

  hero* heroWinner = 0;
  hero* heroLoser = 0;

  if(isAttackerWin)
  {
    heroLoser = heroD;
   heroWinner = heroA;
  }
  else if(*casualtiesD <= 0.999 )
  {
    heroLoser = heroA;
   heroWinner = heroD;
  }
Вернуться к началу

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: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 14 авг 2023, 14:15

Цитата:
И это почему-то применяется только к нижней границе probWinnerA, когда атакующий скорее всего проиграет (можно было бы сделать симметрично для верхней границы, но наоборот, с прибавкой, вплоть до probWinnerA = 1.0).

Отличная идея. Это решение не только обеспечит симметричность, но и уберёт проблемы с погрешностями, возникающими, когда коэффициент победы близок к 1.0, но не равен 1.0. Заодно нужно убрать все сомнительные сравнения коэффициента победы с 0.99 и 0.999 и заменить их на сравнения с 1.0.

Цитата:
2) Изменить кусок в philAI_QuickCombat (с оригинала выше вот на это)

Логично. Поддерживаю. probWinnerD = 1 - probWinnerA ведь?

Цитата:
Тогда будет как вы задумывали - если коэф. победы > 75, то эта сторона не может проиграть.

Да, отличное решение :smile11: Думаю, эти три пункта сходу можно внедрять в игру.

Цитата:
Таким образом сторона, которая существенно сильнее - не проиграет, и понесет некоторые потери (более-менее реалистично).

Вот тут уже главная, на мой взгляд проблема. Почему я и убрал потери вовсе при С[w] > 0.75. На турнирах (сейчас уже почти не актуально) можно было "играть" с потерями. Даже если комп гарантированно выигрывает, он с большой вероятностью теряет минимум 1 воина (а при С[w] > 0.75 это будет далеко не 1 воин). И этой единицей может быть как самый слабый, так и самый сильный воин. На турнирах это неприемлемо, так как от героя с 10 Драконами, например, за несколько боёв с какими-нибудь гоблинами можно "наотщипывать" Драконов так, что их вообще у героя не останется. Если играть for fun и не проверять, что там теряет комп, то, может быть, и сносно. Хотя я против такого подхода. Поэтому три предложенных Вами пункта нужно дополнить четвёртым, который будет регулировать потери. В бою против жалких гоблинов или крестьян герой с Драконами не должен их терять ни с какой вероятностью. Да, если там гоблинов сотня, ещё можно подумать, но не на 20 гоблинах. В общем, нужно переделать armyGroup::DamageGroup(), причём серьёзно.

Цитата:
AlexSpl,

а здесь тоже нужны коррекции ? (убрать проверки на 0.99 или 0.999 и задействовать только проверку isAttackerWin)

Ответил заранее :smile1:
Вернуться к началу

Пред.След.

Вернуться в Техническая часть

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

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