Цитата:
![](styles/prosilver/theme/images/openq.png)
![](styles/prosilver/theme/images/closeq.png)
Ну т.е. как в четвёрке. Я предлагал, вроде бы это ничем не закончилось.
Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! ![]() Добро пожаловать на геройский форум! ![]() |
Re: Программа для разведкиЦитата: ![]() ![]() Ну т.е. как в четвёрке. Я предлагал, вроде бы это ничем не закончилось. |
Re: Программа для разведкиПока разбирался как строятся деревья, ломал голову, почему по моим расчетам все классы считаются правильно, кроме навигаторов, и обнаружил, что в HCTRAITS.TXT у меня для них лога 6, разведка 3, навигация 2. А в Физмиге, на который я ориентировался, лога 3, разведка 2, навигация 6)
|
Re: Программа для разведкиHotA многие значения из HotA.dat берёт. Если уверены, что веса вторичных навыков точно берутся из HCTRAITS.TXT, то у Навигаторов однозначный баг (должны быть, как FizMiG'е, ибо Навигаторы должны уметь плавать). Другое дело, зачем им Навигация на картах без воды (а почти все играют именно такие карты)?
![]() |
Re: Программа для разведкиПроверил. Что с опцией "Без воды", что с опцией "Острова" веса у класса Navigator одинаковые:
Однозначно баг с весом вторичного навыка Navigation. * * * Или неудачное название класса. Для класса Captain вес Navigation уже 6:
В FizMiG'е для обоих классов Cove вес Navigation указан 6. Более того, в официальной документации HotA вес Navigation тоже указан 6 для обоих классов ![]() |
Re: Программа для разведкиРазбираюсь дальше в генерации на основании этого обсуждения:
http://heroescommunity.com/viewthread.p ... enumber=12 Некоторые вопросы возникли по переменной SEC. Опытным путем у меня получилось, что при расчете левого слота (апгрейд навыка, кроме магии) или генерации нового навыка в левый слот (если все навыки уже экспертны), для расчета правого слота нужно использовать значение SEC, измененное после генерации левого слота при вызове _rand. Но, если в левый слот апгрейдится магия, то при ее расчете значение SEC наоборот не нужно обновлять и для расчета правого слота использовать исходное, что мне показалось не очень логичным. Или я что-то не так понимаю? Т.к. пока я не убрал обновление переменной SEC при расчете апгрейда магии, правый слот у меня рассчитывался некорректно, когда в левый идет апгрейд магии. |
Re: Программа для разведкиСм. эти две процедуры:
С магией, которая идёт "внепланово", действительно исключение. В этом случае веса грейдов всех школ приравниваются к 1, т.е. школы выпадают равновероятно. Цитата: ![]() ![]() Это справедливо не только для "внеплановых" школ. Обратите внимание на строчку if SkLearnt[i] = 0 then inc(SUM_W, Weights.SW[i]) else inc(SUM_W); в цикле по навыкам. Для грейдов вес равен 1. Неочевидное исключение, но если его учесть, всё должно у Вас завестись ![]() Weights.SR[i], если не догадались, это булевый массив запрещённых навыков. Так что тоже учитывайте. В HotA, например, запрещён навык Resistance (не знаю, правда, на всех ли картах или есть исключения). Герои с Resistance забанены или исправлены. H3LastSSkill - это последний навык (27 - для SoD, 28 - для HotA), т.е. алгоритм будет строить деревья и в случае появления новых вторичных навыков.
Этот код гарантирует грейд навыка (параметры 1 и 3 - это диапазон ступеней, которые следует рассматривать: [1; 3)). И только если нет навыков, которые ещё можно грейдить, пытается выбрать новый ([0; 3)). Очень полезный апгрейд алгоритма прокачки Героев 2, где герою грейд навыка не гарантирован, и поэтому, например, там можно получить Basic Logistics и ходить с ней несколько уровней подряд ![]() Алгоритм очень гибкий, кстати. Достаточно поменять верхний лимит: MaxLvl = 3 на 5, например, и он будет генерить навыки с 5-ю ступенями (это сделано в ACM - Advanced Classes Mod - достаточно известном моде для ERA). Можно ещё гарантировать грейд в Героях 2 (отличная идея для плагина). Можно предлагать на левел-апе 3 или 4 навыка на выбор, просто добавив аргументы и закопипастив код генерации навыка в слот ![]() |
Re: Программа для разведки![]() ![]() Интересно, зачем всё-таки автор алгоритма генерации навыков на левел-апе сделал грейды вторичных навыков выпадающими равновероятно? Ведь веса никто не отменял, и, скажем, если у героя класса Navigator есть Advanced Logistics (W = 6) и Advanced Eagle Eye (W = 2), то в левый слот попадёт Expert Logistics или Expert Eagle Eye с одинаковой вероятностью 50% ![]() Этот момент как может сыграть игроку на руку, так и замедлить прокачку в зависимости от навыков. Например, в примере выше нам совершенно не нужно фифти-фифти с Орлоглазом. Но! Если герою удалось выучить очень полезный навык, вес которого для класса данного героя мал, то загрейдить такой навык будет уже куда легче. Последний раз редактировалось AlexSpl 25 ноя 2023, 00:27, всего редактировалось 1 раз.
|
Re: Программа для разведкиЯ что-то думал, что равновероятный апгрейд навыков только для магических школ при магическом исключении. Вы же сами писали тут http://heroescommunity.com/viewthread.php3?TID=17812&PID=724354#focus:
Цитата: ![]() ![]() Let's assume Barbarian (lvl1) has Basic Logistics (W = 7), Advanced Eagle Eye (W = 2) and Basic Necromancy (W = 1). Don't laugh! SUM = W(LOG) + W(EAGLE) + W(NECRO) = 10. Now let's roll SUM-sided dice (In this particular case - 10-sided dice)! Q = SEC mod SUM + 1 (1 <= Q <= SUM). Let Q = 8, for example. Subtract the weights of the skills from this value (Q) one after another until you get 0 or negative result. 8 - W(LOG) = 8 - 7 = 1 > 0 1 - W(EAGLE) = 1 - 2 = -1 < 0 => Expert Eagle Eye will be placed in the left slot. As you can see, if Q = 10 then our hero gets Advanced Necromancy (1 case out of 10), if Q = 8 or 9 then our hero gets Expert Eagle Eye (2 cases out 10), if Q <= 7 then Advanced Logistics will be offered (7 cases out 10). т.е. 7 шансов на логу, 2 на орлоглаз и 1 на некромантию. Или это неверная информация? |
Re: Программа для разведкиТакже понял свою ошибку в расчетах, посмотрев Ваш код. Я вызывал rand и перерасчитывал значение SEC каждый раз, когда определял навык. А нужно вызывать, только если сумма весов больше единицы
![]() |
Re: Программа для разведкиЦитата: ![]() ![]() Или это неверная информация? Верная ![]() ![]() "Внеплановые" магические школы:
Обычный выбор навыков:
В первом случае грейды всех "внеплановых" магических школ действительно получают вес 1, т.к. выполняется ветка else inc(SUM_W); Во втором случае всё иначе. Фрагменты кода очень похожи, но делают разные вещи. Здесь мы видим, что если навык не запрещён и его вес не равен 0, то к сумме добавляется его вес. В противном случае - прибавляется 1. А противный случай - это не грейды, как мне показалось. Противный случай - это когда навык запрещён или имеет нулевой вес, но герой его знает. Это сделано для того, чтобы такие навыки грейдились, а не "зависали", если герою как-то удалось их получить. Вес Necromancy в примере выше 1 именно поэтому (для Варвара вес Necromancy равен 0). Поэтому отставить новое исключение ![]() |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2