Определение охраны проходов, наиболее точное |
Здравствуйте, гость ( Вход | Регистрация )
Определение охраны проходов, наиболее точное |
20 Aug 2012, 08:37
(Сообщение отредактировал Vaflya - 20 Aug 2012, 08:38)
Сообщение
#1
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
Нашёл давнишнюю тему Wic-а
http://www.cyberfight.ru/site/columns/56/article_56014/ Читать следует со второго пункта второй части "Проходы между зонами". Согласно статейке и физмигу, охрана проходов считается как Х = (Value прохода/value существа * k), k - неопределённый коэффициент; охрана же объектов в зонах так же имеет собственную формулу. На счёт последнего - не знаю, правда, но на счёт первого - через реверсинг каким-либо образом можно точно определить зависимость k от value прохода? Хотя бы где-нибудь покопаться, ибо, зачастую, точное определение количества нейтралов помогает определить, стоит ли его брать или нет. Ну и, соответственно, как это дело прикидывать на глаз. Пока что идей никаких, поэтому и пришёл к вам, снова. Возможно уже какая-то информация имеется, было бы немаловажно. -------------------- ...and the music change my life
|
|
|
18 Oct 2012, 18:01
(Сообщение отредактировал Sav - 16 Nov 2012, 21:26)
Сообщение
#2
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Охрана объектов рассчитывается так (для удобства чтения опускаю некоторые подробности связанные с реализацией алгоритма непосредственно в коде игры):
Вычисляется индекс_силы_охраны = сила_монстров_зоны + настроенная_сила_монстров. сила_монстров_зоны - настраивается в шаблоне: weak = -1, avg = 0, strong = 1 (none - монстров в зоне в принципе нет). настроенная_сила_монстров - выбирается перед генерацией карты: слабые = 2, средние = 3, сильные = 4. Таким образом, индекс_силы_охраны может варьироваться в диапазоне 1 - 5, при этом для дальнейших расчётов не важно, из каких именно слагаемых он сложен. Монстр всегда генерируется по суммарному AI Value. Т. е. вычисляется это значение, а то, какие будут монстры и сколько их - уже рандом, главное, чтобы в сумме их AI Value было близко к этому числу (ограничения я уже писал). Суммарное AI Value охраны объекта складывается из 2 частей: суммарное_AI_Value = (ценность_объекта - минимальная_ценность_1)*коэффициент_1 + (ценность_объекта - минимальная_ценность_2)*коэффициент_2. Ценность объекта (или группы объектов) - это, собственно, обычная ценность, исходя из которой они ставятся на карту, например, у улья: 9000, у утопии: 10000, у тюрьмы 30 уровня: 30000. минимальная_ценность_1, коэффициент_1, минимальная_ценность_2, коэффициент_2 - определяются исходя из значения индекс_силы_охраны: индекс_силы_охраны: минимальная_ценность_1 1: 2500 2: 1500 3: 1000 4: 500 5: 0 индекс_силы_охраны: коэффициент_1 1: 0.5 2: 0.75 3: 1 4: 1.5 5: 1.5 индекс_силы_охраны: минимальная_ценность_2 1: 7500 2: 7500 3: 7500 4: 5000 5: 5000 индекс_силы_охраны: коэффициент_2 1: 0.5 2: 0.75 3: 1 4: 1 5: 1.5 Если какая-то минимальная_ценность больше, чем ценность_объекта, то её слагаемое выкидывается из суммы. Если в итоге ценность окажется < 2000, монстр вообще не будет ставиться. Для охраны проходов всё то же самое, только вместо значения ценность_объекта берётся ценность охраны, прописанная в шаблоне, а в качестве значения индекс_силы_охраны берётся просто настроенная_сила_монстров. При этом это сила монстров каждой охраны, т. е. охрана каждой стороны монолита будет такой, каждый охранник из охраняющих проход будет таким, вне зависимости от их количества. Т. е. сила охраны не распределяется, если охранников больше одного, а для монолитов и подземных врат охрана фактически удваивается. Пример 1. Настроенная сила монстров - сильная, сила монстров в зоне - strong. Генерируется улей змиев (ценность 9000). индекс_силы_охраны = 1 + 4 = 5. 9000 > 0, 9000 > 5000. Суммарное AI Value = (9000 - 0)*1.5 + (9000 - 5000)*1.5 = 19500 > 2000. 19500 - это, например, 26 фанатиков (AI Value каждого равно 750). Пример 2. Настроенная сила монстров - слабая, сила монстров в зоне - weak. Генерируется улей змиев (ценность 9000). индекс_силы_охраны = -1 + 2 = 1. 9000 > 2500, 9000 > 7500. Суммарное AI Value = (9000 - 2500)*0.5 + (9000 - 7500)*0.5 = 4000 > 2000. 4000 - это, например, 26 гарпий (AI Value каждой равно 154). Пример 3. Настроенная сила монстров - средняя, сила монстров в зоне - avg. Генерируется золотая шахта (ценность 7000). индекс_силы_охраны = 0 + 3 = 3. 7000 > 1000, 7000 < 7500. Суммарное AI Value = (7000 - 1000)*1 = 6000 > 2000. 6000 - это, например, 24 стража (AI Value каждого равно 252). Пример 4. Настроенная сила монстров - слабая, сила монстров в зоне - weak. Генерируется свиток с заклинанием 5 уровня (ценность 5000). индекс_силы_охраны = -1 + 2 = 1. 5000 > 2500, 5000 < 7500. Суммарное AI Value = (5000 - 2500)*0.5 = 1250 < 2000. Охрана не генерируется. Пример 5. Настроенная сила монстров - сильная. Генерируется охрана прохода ценностью 6000. индекс_силы_охраны = 4. 6000 > 500, 6000 > 5000. Суммарное AI Value = (6000 - 500)*1.5 + (6000 - 5000)*1 = 9250 > 2000. 9250 - это, например, 56 каменных горгулий (AI Value каждой равно 165). Спасибо сказали: |
|
|
18 Oct 2012, 23:08
(Сообщение отредактировал Sav - 18 Oct 2012, 23:10)
Сообщение
#3
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Ну и до кучи сюда, хоть и не по теме, по поводу групп объектов.
Для некоторой "точки" зоны - места, где стоит ценный объект или группа объектов (координаты изначально неопределены), генератор выбирает случайное число общая_ценность между минимальной и максимальной ценностью сокровища зоны (которые указываются в шаблоне, каждая "точка" принадлежит одному из 3 или менее настроенных в шаблоне сокровищ зоны). Потом генератор генерирует случайный объект ценностью от общая_ценность/4 до общая_ценность. Его ценность записывается в переменную использованная_ценность. Далее проверяется: если общая_ценность - использованная_ценность >= 1500 или использованная_ценность < общая_ценность/2, то генерируется следующий объект ценностью от 0.25*(общая_ценность - использованная_ценность) до 1.25*(общая_ценность - использованная_ценность). Его ценность прибавляется к использованная_ценность. Снова проверяется то же условие, генерируется ещё один объект и т. д., пока условие не перестанет выполняться или объект в заданном диапазоне ценностей и с учётом прочих ограничений сгенерировать не станет невозможно. Потом этой группе объектов ставится одна охрана, исходя из их суммарной ценности. |
|
|
25 Oct 2012, 12:59
Сообщение
#4
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
Ну и до кучи сюда, хоть и не по теме, по поводу групп объектов. Для некоторой "точки" зоны - места, где стоит ценный объект или группа объектов (координаты изначально неопределены), генератор выбирает случайное число общая_ценность между минимальной и максимальной ценностью сокровища зоны (которые указываются в шаблоне, каждая "точка" принадлежит одному из 3 или менее настроенных в шаблоне сокровищ зоны). Потом генератор генерирует случайный объект ценностью от общая_ценность/4 до общая_ценность. Его ценность записывается в переменную использованная_ценность. Далее проверяется: если общая_ценность - использованная_ценность >= 1500 или использованная_ценность < общая_ценность/2, то генерируется следующий объект ценностью от 0.25*(общая_ценность - использованная_ценность) до 1.25*(общая_ценность - использованная_ценность). Его ценность прибавляется к использованная_ценность. Снова проверяется то же условие, генерируется ещё один объект и т. д., пока условие не перестанет выполняться или объект в заданном диапазоне ценностей и с учётом прочих ограничений сгенерировать не станет невозможно. Потом этой группе объектов ставится одна охрана, исходя из их суммарной ценности. Почему-то мне кажется, что это можно использовать для рандоммапера в HoMM2 -------------------- ...and the music change my life
|
|
|
25 Oct 2012, 13:06
Сообщение
#5
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
А он не генерирует группы что ли?
|
|
|
25 Oct 2012, 17:58
Сообщение
#6
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
А он не генерирует группы что ли? Он так генерирует, что дай боже не прослезиться. Многие любители двушки не могут нормально играть по онлайну, потому что приходится рубиться в фиксы. :-( -------------------- ...and the music change my life
|
|
|
04 Nov 2012, 09:01
Сообщение
#7
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
По результатам тестов на strong + strong у меня получилась погрешность +-5. Особенно это касается проходов: по формуле посчитано не более 19 гидр хаоса (45000), на деле их было 20-21, обычных уток было на 4 больше и на 2 меньше при разных генерациях. А вот при подсчёте value охраны объектов статистика более точная, +-2 и не более того, причём, чем слабее юнит, тем меньше погрешность. Sav, уточни, пожалуйста, есть ли какой-либо рандомизатор этих значений или же это закономерность, которая была не учтена?
-------------------- ...and the music change my life
|
|
|
04 Nov 2012, 10:31
Сообщение
#8
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Ты учитываешь этот пост? http://forum.df2.ru/index.php?s=&showt...st&p=560072
На strong индекс силы охраны для прохода равен 4, 45000 превратится в 1.5*44500 + 40000 = 106750. Гидр хаоса (5931) вроде как в среднем 18 (т. к. округление вверх), 25% - это 4 (тут округление всегда вниз), т. е. реально 14-22 существ. Виверн (1350) в среднем 79 (округление вниз), 25% - это 19, реально значит 60-98 виверн. |
|
|
04 Nov 2012, 19:25
(Сообщение отредактировал Vaflya - 04 Nov 2012, 19:27)
Сообщение
#9
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
Ты учитываешь этот пост? http://forum.df2.ru/index.php?s=&showt...st&p=560072 На strong индекс силы охраны для прохода равен 4, 45000 превратится в 1.5*44500 + 40000 = 106750. Гидр хаоса (5931) вроде как в среднем 18 (т. к. округление вверх), 25% - это 4 (тут округление всегда вниз), т. е. реально 14-22 существ. Виверн (1350) в среднем 79 (округление вниз), 25% - это 19, реально значит 60-98 виверн. Виноват, не учитываю. А что на счёт CrTraits.txt? А точнее, параметр Adv. Map. В TE, путём уменьшение и увеличения этого параметра достигался баланс по генерации охран (во всяком случае так было написано в мануале). Каким образом он влияет? Возможно это и есть тот самый рандом? P.S. кажется, что там не 25%, а какая-то своя закономерность. Хотелось бы определить, что есть среднее в данном случае, чтобы до конца разобраться и получить результат. :-) -------------------- ...and the music change my life
|
|
|
04 Nov 2012, 19:38
(Сообщение отредактировал Sav - 04 Nov 2012, 19:39)
Сообщение
#10
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Я писал тут: http://forum.df2.ru/index.php?s=&showt...st&p=546608
Изменение этих параметров может изменить только минимальную необходимую ценность охраны для появления существ. Т. е. если сделать у гидры adv.low = 16, а adv.high = 22 (в среднем 19 - учитывается только среднее количество), то их суммарное AI Value будет 112689 и т. к. оно больше 106750, они никогда не будут генерироваться на проходе 45000 (ну а тем более на меньшем). Среднее между adv.low и adw.high - это минимальное количество существ этого типа, которое может появиться на карте, если считать без учёта случайных 25%. Кроме того, количество существ, появляющихся на новой неделе, находится в диапазоне 2*adv.low - 2*adv.high и всегда чётно. Так же это, вероятно, влияет на монстров со случайным количеством на фиксированных картах. Вроде всё, больше ни на что он не влияет. При генерации уж точно. Цитата(Vaflya) P.S. кажется, что там не 25%, а какая-то своя закономерность. Хотелось бы определить, что есть среднее в данном случае, чтобы до конца разобраться и получить результат. :-) Ну, у меня в том посте всё написано: Если (среднее кол-во) < 4, то (кол-во охранников) = (среднее кол-во). Иначе (кол-во охранников) = (среднее кол-во) + (случайное число 1) - (случайное число 1) случайное число - в диапазоне от 0 до (среднее кол-во)/4, оба числа генерируются по одинаковым правилам, но отдельно, таким образом, реальная охрана может быть от 75% до 125% от средней. В силу генерации 2 случайных чисел, чем ближе количество охранников к среднему, тем больше вероятность его выпадения. Можно показать, как это вычисляется это математически, но это пока не имеет особого смысла. |
|
|
04 Nov 2012, 19:38
Сообщение
#11
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
Я писал тут: http://forum.df2.ru/index.php?s=&showt...st&p=546608 Изменение этих параметров может изменить только минимальную необходимую ценность охраны для появления существ. Т. е. если сделать у гидры adv.low = 16, а adv.high = 22 (в среднем 19 - учитывается только среднее количество), то их суммарное AI Value будет 112689 и т. к. оно больше 106750, они никогда не будут генерироваться на проходе 45000 (ну а тем более на меньшем). Среднее между adv.low и adw.high - это минимальное количество существ этого типа, которое может появиться на карте, если считать без учёта случайных 25%. Кроме того, количество существ, появляющихся на новой неделе, находится в диапазоне 2*adv.low - 2*adv.high и всегда чётно. Так же это, вероятно, влияет на монстров со случайным количеством на фиксированных картах. Вроде всё, больше ни на что он не влияет. При генерации уж точно. А теперь внимание, главный вопрос: как это заалгоритмизировать, чтобы получить определённый интервал? А то я слегка не догнал :-) В общем-то, я уже начал писать программку, почти доделал, но не учитывал рандома. Можешь либо сюда, либо в личку скинуть алгоритм после нахождения суммарного AI Value, что делать? А мы тебе спасибо скажем. :-) -------------------- ...and the music change my life
|
|
|
04 Nov 2012, 19:41
Сообщение
#12
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Значения adv.low и adv.high влияют только на выбор типа охраны, а не на количество.
|
|
|
04 Nov 2012, 19:44
Сообщение
#13
|
|
Legendary lover Сообщений: 628 Спасибо сказали: 307 раз |
Значения adv.low и adv.high влияют только на выбор типа охраны, а не на количество. Вот оно что. Т.е. при любом изменении этого параметра, будет просто меняться тип охраны, а не количество существ. Ну а к (суммарному AI Value/AI существа) мы применяем формулу, из поста выше. Правильно? -------------------- ...and the music change my life
|
|
|
04 Nov 2012, 19:47
Сообщение
#14
|
|
Immortal Сообщений: 9 403 Спасибо сказали: 3770 раз |
Да. Причём надо довольно сильно менять эти adv, чтобы реально изменить типы существ. Чтобы серьёзно балансировать охрану, надо менять AI Value, но это портит ИИ.
|
|
|
Текстовая версия | Сейчас: 25 April 2024 - 08:50 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |