Цитата:
Ну т.е. как в четвёрке. Я предлагал, вроде бы это ничем не закончилось.
Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту 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 для обоих классов Но нужно, конечно, использовать веса, которые есть в игре реально, чтобы дерево считалось правильно. LMOracle читает веса из памяти, поэтому всё OK. |
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% Логично же дать Логистике вероятность 6/8, а Орлиному глазу - 2/8. Этот момент как может сыграть игроку на руку, так и замедлить прокачку в зависимости от навыков. Например, в примере выше нам совершенно не нужно фифти-фифти с Орлоглазом. Но! Если герою удалось выучить очень полезный навык, вес которого для класса данного героя мал, то загрейдить такой навык будет уже куда легче. Последний раз редактировалось 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 каждый раз, когда определял навык. А нужно вызывать, только если сумма весов больше единицы Соответственно, если сумма весов = 1, то и Q = автоматически 1, rand не вызывается (действительно, нечего ранодомить) и SEC остается старым для расчета правого навыка, а если больше единицы, то вызывается, и SEC уже новый при расчете правого навыка)
|
Re: Программа для разведкиЦитата: Или это неверная информация? Верная Старею Показалось, что обычный выбор грейда вторичных навыков осуществляется так же, как и выбор грейда "внеплановых" магических школ. Но сейчас посмотрел код внимательнее: "Внеплановые" магические школы:
Обычный выбор навыков:
В первом случае грейды всех "внеплановых" магических школ действительно получают вес 1, т.к. выполняется ветка else inc(SUM_W); Во втором случае всё иначе. Фрагменты кода очень похожи, но делают разные вещи. Здесь мы видим, что если навык не запрещён и его вес не равен 0, то к сумме добавляется его вес. В противном случае - прибавляется 1. А противный случай - это не грейды, как мне показалось. Противный случай - это когда навык запрещён или имеет нулевой вес, но герой его знает. Это сделано для того, чтобы такие навыки грейдились, а не "зависали", если герою как-то удалось их получить. Вес Necromancy в примере выше 1 именно поэтому (для Варвара вес Necromancy равен 0). Поэтому отставить новое исключение Теперь я, наоборот, считаю, что исключение с грейдами "внеплановых" магических школ - это баг. Сумма их весов должна считаться так же, как и для обычных навыков. |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1