О квесте Blood Rush

Здесь собрана информация об особенностях игры на нашем сервере и нововведениях Alkar Mod. С ними всеми стоит ознакомиться, чтобы быть в курсе всех "вкусностей", которые ожидают вас при покорении Санктуария у нас на сервере. ;)

Модераторы: Alamar, Blackmamba

Сообщение Enceladus » 23 апр 2010, 00:30

Blood Rush - постоянно действующий квест, позволяющий умелым игрокам заработать дополнительные руны и опыт.
Задача игрока - убивать как можно больше монстров, как можно более живучих, как можно быстрее и интенсивнее.
Квест начинается с заходом игрока в игру и заканчивается с получением награды. После получения награды квест начинается заново.
Кроме того, ваш текущий квест закончится с выходом из игры.
Квест доступен только в играх типа Expansion Ladder на уровне сложности Hell.
Квест могут выполнять только персонажи, имеющие уровень 60 или выше.

Для получения награды игроку необходимо набрать во внутриигровом чате (не выходить из игры!) слово reward.
Награду нельзя получить, если длительность вашего Blood Rush составляет менее часа или если вы убили слишком мало монстров. Кроме того, награда выдается автоматически при выходе персонажа из игры, даже если этот выход является следствием разрыва связи

Награда - некоторое количество опыта, а кроме того - руна от Pul до Lo или 1000000 золота.

Во время каждого Blood Rush есть возможность использовать паузу (не более 1 раза).
Во время действия паузы счётчик времени Blood Rush не работает, так что с паузой вы можете спокойно отдыхать, не опасаясь того, что ваше бездействие снизит награду.
Для включения паузы необходимо набрать во внутриигровом чате слово brpause.
Пауза выключается при любом перемещении персонажа или использовании скиллов, при условии, что прошло не менее 5 секунд с момента начала действия паузы (то есть перемещение в первые 5 секунд паузы не приведут к её выключению). Кроме того, пауза автоматически выключается, если прошло 5 минут (7 минут, если у персонажа есть Overwhelming Rage (Character Advantage)) с момента начала действия паузы.

Рассмотрим теперь детально работу квеста и принцип вычисления награды.

Игрок убивает монстров в процессе выполнения квеста.
Под "игрок убивает" понимается - убивает сам игрок, его Summon (Shadow Master, Grizzly, Clay Golem, ловушки и т.д), Revived или Mercenary (наёмник).
Под "монстрами" понимаются любые враждебные существа за исключением (за убийство нижеследующих существ награда не начисляется):
- игроков и их Summon, Revived, Mercenary
- Diablo Clone, Uber Izual, Lilith, Uber Duriel
- всех монстров в локации Uber Tristram
- Talic, Madawc, Korlic ("Барбы", "Древние")


У игрока есть 3 скрытые характеристики - points, party_points и time.
points хранит количество очков, которые вы получили в результате собственноручного убийства монстров.
party_points хранит количество очков, которые вы получили в результате убийства монстров вашими сопартийцами.
time хранит время в секундах, прошедшее от начала квеста.
Следует помнить, что максимальное время жизни игры на Алькаре составляет 3 часа, а, следовательно, значение time не может превышать 10800 секунд.

При смерти монстра генерируется число monster_points.
К этому числу сперва применяются бонусы:
- 6.25% для персонажей 99-го уровня
- 6.25% для персонажей, имеющих Artificer Character Advantage и носящих полный Orphan's Call
- 4% для персонажей, имеющих Dreadful Chop, Flesh Smasher или Polearm Expert Character Advantage и пользующихся двуручными топорами, двуручными молотами, или оружием класса Polearm или Spear соответсвенно.
Бонусы мультипликативны, то есть, например, если вы - персонаж 99-го уровня, имеете Dreadful Chop и пользуетесь двуручным топором, то monster_points увеличатся в 1.0625 * 1.04 = 1.105 раз.

После этого:
- к points того игрока, который убил монстра, прибавляется monster_points, если в момент смерти монстра игрок не был мёртв, не умирал и не находился на расстоянии от монстра, превышающем 80 условных единиц.
- к party_points каждого игрока, который находится в одной party с убийцей монстра, прибавляется monster_points / 2, если в момент смерти монстра этот игрок-сопартиец не был мёртв, не умирал и не находился на расстоянии от монстра, превышающем 80 условных единиц.
80 условных единиц - это такое же расстояние, как и максимальное для получения опыта от сопартийцев. То есть если вам идёт опыт от ваших сопартийцев, то, скорее всего, и party_points у вас в этот момент получают соответствующее приращение.
Это расстояние примерно соответствует расстоянию между Waypoint в Kurast Docks и серединой мостика между Meshif и Ormus.

Теперь посмотрим - как получается monster_points.
Для этого сперва введём функцию одного аргумента rand(max). Значение этой функции - случайное (равномерно распределённое) целое число, лежащее в интервале от 0 до max - 1 (включительно).

Код: Выделить всё
monster_points = players_count_multiplier * monster_type_multiplier * (min_hp + rand(max_hp - min_hp + 1)) / 16

где:
1) min_hp и max_hp - минимальное и максимальное базовое здоровье для данного класса монстров данного уровня. То есть для любого Fallen (например) данного уровня эти два значения одинаковы, вне зависимости от того, сколько игроков находится в игре и является ли этот Fallen обычным монстром или боссом. Численные значения этих характеристик можно посмотреть на Arreat Summit и прочих ресурсах.

2) players_count_multiplier - число, зависящее от количества находящихся в игре игроков. Оно равно:
- 1, если игроков в игре менее 2
- 1.07, если в игре 2 игрока
- 1.1, если в игре более 2 игроков

3) monster_type_multiplier - число, зависящее от типа монстра. Оно равно:
- 1, если монстр - обычный
- 1.5, если монстр - Minion
- 2, если монстр - Unique (обычный случайный босс)
- 8, если монстр - Superunique (Bishibosh, The Countess, Geleb Flamefinger, Lord De Seis и т.д.)
- 2, если монстр - Champion, Ghostly или Fanatic
- 4, если монстр - Possessed
- 0.5, если монстр - Berserker
- 1 во всех остальных случаях
Этот множитель соответствует тому, во сколько раз здоровье у данного типа монстра больше, чем у обычного (за исключением Superunique).

Перейдём к рассмотрению того, что случается при попытке забрать свою награду при помощи команды reward.
Сперва вычисляется значение total_points:
Код: Выделить всё
total_points = | points,  если party_points / 8 > points
               | points + party_points,  если party_points / 8 <= points


Иными словами, нельзя просто бегать за кем-то, ничего не делать и получить халявную награду.

Если персонаж играет в режиме Hardcore, то total_points увеличиваются на 6.25%.

Далее выполняется проверка - если total_points < 1000000 или time < 3600, то награда не выдаётся, а игроку посылается текстовое сообщение "You must spill more blood!".

Введём функцию трёх аргументов dm(x, start, max):
Код: Выделить всё
dm(x, start, max) = | x,  если x < start
                    | start + (x - start) * (max - start) / (x + max - 2 * start),  если x >= start

Эта функция линейна до значения start, а после этого значения её рост плавно замедляется. Значение этой функции не превышает max.

Введём функцию двух аргументов pow(x, y), имеющую значение "x в степени y".

При вычислении награды сперва считается reward_value:
Код: Выделить всё
points_factor = points_multiplier * total_points / 6666666
intensity_factor = intensity_multiplier * total_points / (1000 * time)

reward_value = pow(dm(points_factor, 0.95, 1), 1.57) * dm(intensity_factor, 0.9, 1) * 100


reward_value - это оценка стоимости вашей награды в Пулах.
points_multiplier и intensity_multiplier - значения, зависящие от того, к какому классу принадлежит персонаж, какими скиллами пользуется.

Если у игрока, получающего награду, есть Overwhelming Rage (Character Advantage), то reward_value увеличивается на следующее значение:
Код: Выделить всё
0.47 + MAX(0, character_level - 80) / 100


Если у игрока, получающего награду, персонаж без телепорта, то points_multiplier = 1.1, иначе points_multiplier = 1.
Под "персонажем без телепорта" понимается персонаж, ни разу не использовавший в данной игре скилл Teleport.
Рассмотрим теперь - какие значения принимает intensity_multiplier.

1) Амазонка
- Если у Амазонки есть Телепорт, то intensity_multiplier = 1
- Иначе если у Амазонки базовый уровень (без всяких бонусов, "реально вложенные поинты") скиллов Lightning Fury или Charged Strike превышает 1, то intensity_multiplier = 1.1
- Иначе если Амазонка использует скиллы Strafe или Multishot, то intensity_multiplier = 1.3
- Иначе intensity_multiplier = 1.8

2) Волшебница
- Если у волшебницы базовый уровень скиллов Hydra, или Enchant или Static Field равен 20, то intensity_multiplier = 1.25
- Иначе intensity_multiplier = 1

3) Некромант
- Если у Некроманта есть Телепорт и базовый уровень скилла Poison Nova превышает 1, то intensity_multiplier = 1
- Иначе если у Некроманта нет Телепорта и базовый уровень скилла Poison Nova превышает 1, то intensity_multiplier = 1.3
- Иначе если у Некроманта есть Телепорт, то intensity_multiplier = 1.3
- Иначе intensity_multiplier = 1.4

4) Паладин
- Если у Паладина есть Телепорт, то intensity_multiplier = 1
- Иначе если у Паладина базовый уровень скиллов Blessed Hammer и Concentration превышает 1, то intensity_multiplier = 1.3
- Иначе intensity_multiplier = 1.8

5) Варвар
- Если у Варвара есть Телепорт, то intensity_multiplier = 1
- Иначе если Варвар хотя бы 1 раз за игру использовал скилл Whirlwind, то intensity_multiplier = 1.3
- Иначе intensity_multiplier = 1.66

6) Друид
- Если у Друида есть Телепорт, то intensity_multiplier = 1
- Иначе если у Друида базовый уровень скилла Tornado превышает 1, то intensity_multiplier = 1.3
- Иначе intensity_multiplier = 1.75

7) Убийца
- Если у Убийцы есть телепорт, то intensity_multiplier = 1
- Иначе если у Убийцы базовый уровень скилла Lightning Sentry превышает 1, то intensity_multiplier = 1.05
- Иначе intensity_multiplier = 1.8

Введём функцию одного аргумента floor(x). Значение этой функции - максимальное целое число, не превышающее x. Например, floor(1.5) = 1, floor(4.99) = 4, floor(100) = 100.

Считаем rune_value:
Код: Выделить всё
rune_value = pow(2, floor(ln(reward_value) / ln(2)))

ln(x) - логарифм натуральный от x.
(На самом деле, в коде это считается другим методом, а тут эта формула приведена для удобства записи и большей понятности.)

rune_value может принимать значения 1, 2, 4, 8, 16, 32 и 64. По смыслу это цена в Пулах некоторой руны (от Пула до Охма).

Далее случайным образом выбирается один из трёх вариантов награды:
- Если reward_value >= 2, то могут дать руну стоимости (в Пулах) rune_value, руну стоимости rune_value / 2 или руну стоимости rune_value * 2. То есть если у вас получилось, например, rune_value = 8 (Ist), то это значит, что вы можете получить либо Mal, либо Ist, либо Gul.
- Если reward_value < 2, то могут дать либо руну Pul, либо руну Um, либо 1000000 золота (утешительный приз).
Иными словами, при выдаче награды имеется элемент случайности. При прочих равных, максимальный доход может в четыре раза превышать минимальный доход.

Каждый из трёх вариантов имеет определённую вероятность. Для того, чтобы её найти, решается следующая система:
Код: Выделить всё
|  0.5 * rune_value * p1 + rune_value * p2 + 2 * rune_value * p3 = reward_value
|  p1 + p2 + p3 = 1
|  0 <= p1 <= 1
|  0 <= p2 <= 1
|  0 <= p3 <= 1

p1, p2, p3 - вероятности.
В общем случае решение этой системы представляет из себя отрезок прямой в трёхмерном евклидовом пространстве. Поэтому в качестве результата выбирается случайная точка на этом отрезке.
Если reward_value < 2, то первое уравнение этой системы обращается в rune_value * p2 + 2 * rune_value * p3 = reward_value (золото - всё равно, что руна нулевой стоимости).

После этого, собственно, персонажу выдаётся награда. Руна помещается в инвентарь персонажа. Если инвентарь заполнен - кидается на землю под ноги персонажу.
Золото добавляется в Stash. Если всё золото не может поместиться в Stash, то остаток помещается в карман персонажу. Если весь остаток не помещается в карман, то излишек теряется.
Если у игрока, получающего награду, есть Overwhelming Rage (Character Advantage), то он при каждой выдаче награды дополнительно получает 100000 золота.
После этого выдаётся текстовое сообщение, поздравляющее игрока и сообщающее ему - какую именно награду он получил. Если была выдана максимально возможная для данного reward_value руна, то игрок дополнительно получает сообщение "You are lucky!". Если же была выдана минимально возможная для данного reward_value руна, то игрок получает сообщение "You are unlucky!".

Дополнительно игрок получает опыт. Эта часть награды численно равна (вне зависимости от уровня персонажа) rand(2 * total_points / 3). Если у игрока, получающего награду, есть Overwhelming Rage (Character Advantage), то этот бонусный опыт увеличивается в 1.15 раз.

После получения награды points, party_points и time игрока обнуляются.

Внимание!
  • Maphack может блокировать многие сообщения сервера. Для того, чтобы видеть их, в настройках вашего MH замените строку:
    Message Filter Toggle: 1, -1, "Messages filter"
    на
    Message Filter Toggle: 0, -1, "Messages filter"
  • В C3PO необходимо отключить опцию Auto Squelch Noisy Chat Messages (закладка Key Config, группа More Auto Options).
  • Кроме того, необходимо отключить в C3PO функцию Auto Corpse Mode (закладка Key Config, блок More Auto Options).
Глокая куздра штеко будланула бокра и курдячит бокрёнка.
Аватара пользователя
Enceladus
Diablo II Member of Fame
Diablo II Member of Fame
 
Автор темы
Сообщения: 2329
Зарегистрирован:
21 авг 2007, 07:38
Has thanked: 0 time
Have thanks: 59 times

Вернуться в Информация о сервере

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

Посетителей: 2, из них зарегистрированных: 0, скрытых: 0 и гостей: 2 (находятся на конференции)
Этот раздел просматривают: нет зарегистрированных пользователей и гости: 2

cron