+3
Завершен

Немного редкой информации про механику ЛА2

DROID 9 лет назад обновлен Vitaliy Fish 9 лет назад 3

Содержание.

1.) Принцип работы Cansel-подобных скиллов.
2.) Шанс попасть или промахнуться по цели.
3.) Принцип работы дебаффов, шанс их прохождения.
4.) Корейский рандом, генератор случайных чисел в Lineage2.
5.) Принцип работы блоу-скиллов.
6.) Шанс прерывания кастинга.
7.) Шанс открыть сундук ключом или скиллом.
8.) Шанс магического крита.
9.) Принцип рыбалки.


1.) Механика работы Кансела и ему подобных скиллов, включая стил дивинити и баны.

Эти скиллы снимают баффы с цели. С каким шансом какой бафф падает - это мы сейчас и узнаем.

Кансел работает по следующему принципу: он проходит по списку баффов, начиная с конца (разумеется, дебаффы кансел не трогает, делать ему больше нечего) и просчитывает вероятность того, снимется ли бафф или нет. Когда число снятых баффов достигло предела у скилла - то просчет останавливается. Скажем, стил дивинити не может скансельнуть больше 7 баффов, хотя из формулы будет ясно, что шанс установлен в 100% и смысла просчитывать как бы и нету.

Тач оф дез, крашер у ДА, талик на кансел и на бафф-стил - все имеет идентичную природу.

Варриор баны и меджик баны(включая массовые) просчитывают только те баффы, которые имеют abnormal_type, равный соответствующей характеристике. То есть акумен, хаст, эмп, комбик на шилд + майт, скролы, эмп саммону - это все имеет определенный abnormal_type.

Сперва считается предварительный шанс удаления дебаффов

prelim_chance = (2 * dml + cancel_chance_adder + buff_duration / 120) * cancel_res_multiplier

dml - разница magic_level Кансел-подобного скилла и уровнем текущего баффа, для которого введется расчет. Скажем, ТОД +0 - имеет меджик левел, равный 78, меджик бан - 77 и так далее. Это понятно каждому, кто играет в линейку и знает скиллы своего персонажа. Infinity Spear имеет меджик левел, равный 80. Кансел-пвп бонус, скилл пантеры и талик - пока не определено.

cancel_chance_adder - константа.
Cancel - 25
Touch of Death/Insane Crusher - 25
Mage/Warrior Bane - 80
Mass Mage/Warrior Bane - 40
Infinity Spear - 10

Для стилов как-бы это не важно -).

buff_duration - время баффа в секундах. Деление - целочисленное, то есть округляется вниз, как вообще все в линейке (поэтому часто ЛС +0.2 еваги поднимает ее на единичку, ведь у вас было округление не самое удачное). Заточили на время - больше шанс потерять бафф. Точим кисс оф еву? Возможно. Но заточка поднимает и меджик левел баффа, так что в тоже время его шанс его отмены падает - что перевесит, считать вам. На каком уровне скилл прокачали - примерно таков его и меджик левел.

Возрастание уровня скилла от заточки:
Для второпрофных: +1..+3 - 76, +4..+6 - 77, +7..+9 - 78, +10..+12 - 79, +13..+15 - 80, +16..+18 - 81, +19..+21 - 82, +22..+24 - 83, +25..+27 - 84, +28..+30 - 85.
Для третьепрофных: +1..+3 - 81, +4..+6 - 82, +7..+9 - 83, +10..+12 - 84, +13..+15 - 85.

cancel_res_multiplier - резисты. По умолчанию равен 1. Разные скиллы (на них написано) уменьшают вероятность отмены каждого из конкретных баффов.

Arcane Protection: 0.7
Chant of Spirit: 0.7
Zealot: 0.6

И так далее. Бафф снижает шанс отмены положительных эффектов на 30%? Значит, получаем число (1 - 30%/100%) = 0.7. Это для тех, кто уже решил шпилить прямо из детского садика.

Если баффов несколько - то мы просто перемножаем эти числа. Получаем одно число и это и есть cancel_res_multiplier.

Важный момент: если кансел снял бафф-резист от кансела, то бафф-резист по прежнему продолжает действовать на остальные баффы. Так что не важно, куда его бафать - в конец или в начало, если вашей целью стоит максимизировать кансел-резист.

После prelim_chance считаем реальный шанс удаления баффа.

1) Для Cancel и других не бан и не стил скиллов (включая кансел стик):
Если prelim_chance < 25 то real_chance = 25
Если prelim_chance > 75 то real_chance = 75
Если 25 < prelim_chance < 75 то real_chance = prelim_chance

Реальный шанс для Cancel не может быть меньше 25 и больше 75.

2) Для Bane-скиллов:
Если prelim_chance < 40 то real_chance = 40
Если prelim_chance > 95 то real_chance = 95
Если 40 < prelim_chance < 95 то real_chance = prelim_chance

То есть реальный шанс для bane-скилла не может быть меньше 40 и больше 95. Сюда же входят и всевозможные блоки, но эта информация пока не точная, возможно подредактирую.

Меньше здесь - меньше или равно для нытиков. И больше тоже для самых-самых.

Есть баффы, у которых magic_level = -1, то есть канселом не снимаются. Сами знаем какие - хиро УД, валор, бафф с пристов, некоторые эвент-баффы и все такое. Нобл понятное дело после ввода Эпилога на ура падает.

У стилов cancel_chance_adder = 100 и вообще бафф падает со 100%-ой вероятностью. Удивительная находка, не правда ли?

Выводы:
1.) Кансел начинает просчет с конца. Дискотека, потом уже 24, 23, ... 2, 1 слоты. Тогл (аура) - это не бафф ^^. Поэтому если в конец засунуть ерунду, а самые приятные баффы будут первыми - то вероятность кансела первых баффов НАМНОГО меньше, чем последних. Поэтому это выгодно.
2.) Кансел-резист, по-сути, бесполезен. Скажем, предел баффов от Кансела - 5. Набафали кучу резиста. Шанс меньше 25% не упадет. В результате в среднем каждый четвертый бафф будет падать. То есть есть реальные шансы потерять один из первых баффов. И если не поднимать Кансел-резист, не точить всякие регенерашионы и кисс оф Евы (идеально вообще иметь первый уровень скилла - вот и будет 75% шанс его потерять и уменьшить счетчик, но кто же это знал) - то можно грамотно защититься от Кансела. И теперь каждый ЕЕ на олли подумает, а стоит ли бафать от сорка аркану протекшион и потерять акумен или эмп из-за этого. Не говоря уже и про такой лоу-левел скилл, как Френзи. Вот и проблема с зилом. Так что Вешаем фризу в самые первые баффы, ребаффая дестру после прокаста вообще все, что возможно.
3.) Баны тоже не всегда снимают соответствующий бафф. Особенно с резистом канселу, особенно хай-левел бафф.


2.)Шанс попасть или промахнуться по цели.

В первую очередь берем evasion цели. Затем считаем:

modified_evasion = evasion * evasion_move_mode_multiplier + evasion_move_mode_adder

evasion_move_mode_multiplier и evasion_move_mode_adder - модификаторы evasion в зависимости от стиля передвижения. Их четыре - сит, стенд, волк и ран. По дефолту они стоят в таком положении:
evasion_move_mode_multiplier = 1
evasion_move_mode_adder = 0
Для всех стилей. Пока есть только один скилл, который их модифицирует (возможно, в третьем троне появятся баффы наподобие +20% увернуться от атаки в режиме ходьбы - это уже прописано в игре). Пока у нас только acrobatic move и он прибавляет к evasion_move_mode_adder в режиме run какое-то значение к уклонение - сами найдете, какое.

Теперь считаем advantage:
advantage = modified_evasion - accuracy

Надеюсь, вы догадались, что accuracy считаем у того, кто бьет, а евагу - у того, кого бьют.

Считаем base_hit_chance:
base_hit_chance = 5 + max(-26811.9 * (advantage - 23.59581247155212), 0)^(1/3)

max - это функция с двумя параметрами(разделены запятой, в скобках стоят), которая берет из них максимум. Кто хоть раз сходил в хабзе на компы - тот это понимает -). ^(1/3) - это кубический корень. Скобки расставлены. Посчитайте? Думаю да.
Если нет - то вам спойлер:
-50 130.43
-49 129.86
-48 129.28
-47 128.70
-46 128.11
-45 127.52
-44 126.92
-43 126.32
-42 125.71
-41 125.09
-40 124.47
-39 123.84
-38 123.20
-37 122.56
-36 121.91
-35 121.25
-34 120.59
-33 119.91
-32 119.23
-31 118.54
-30 117.85
-29 117.14
-28 116.42
-27 115.70
-26 114.97
-25 114.22
-24 113.47
-23 112.70
-22 111.93
-21 111.14
-20 110.34
-19 109.53
-18 108.70
-17 107.87
-16 107.01
-15 106.15
-14 105.27
-13 104.37
-12 103.46
-11 102.53
-10 101.58
-9 100.61
-8 99.62
-7 98.61
-6 97.58
-5 96.53
-4 95.45
-3 94.34
-2 93.21
-1 92.04
0 90.85
1 89.62
2 88.35
3 87.04
4 85.69
5 84.30
6 82.85
7 81.34
8 79.78
9 78.15
10 76.43
11 74.64
12 72.74
13 70.74
14 68.60
15 66.31
16 63.83
17 61.13
18 58.14
19 54.76
20 50.85
21 46.13
22 39.98
23 30.19
24 5.00
25 5.00
26 5.00
27 5.00
28 5.00
29 5.00
30 5.00
31 5.00
32 5.00
33 5.00
34 5.00
35 5.00
36 5.00
37 5.00
38 5.00
39 5.00
40 5.00
41 5.00
42 5.00
43 5.00
44 5.00
45 5.00
46 5.00
47 5.00
48 5.00
49 5.00
50 5.00

Считаем hit_loc_bonus.
Пространство вокруг цели можно условно разделить на 4 сектора по 90 градусов - front (спереди, "в лоб"), back (сзади, "в спину как крыса") и 2 side ("бока").

Если нападающий стоит во front от цели, то hit_loc_bonus = 1
Если нападающий стоит в side от цели, то hit_loc_bonus = 1.2
Если нападающий стоит в back от цели, то hit_loc_bonus = 1.3

Далее считаем hit_height_bonus.

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

Если dz <= -1100, то hit_height_bonus = 0
Если -1100 < dz <= -300 ,то hit_height_bonus = 1.375 + 0.00125 * dz
Если -300 < dz <= 100, то hit_height_bonus = 1
Если 100 < dz <= 500, то hit_height_bonus = 1.25 - 0.0025 * dz
Если dz > 500, то hit_height_bonus = 0

К сожалению, разница высот никогда не добавит шанса попасть, а вот уменьшить шанс может конкретно.

Итого, считаем предварительный шанс попасть:

prelim_chance = base_hit_chance * hit_loc_bonus * hit_height_bonus

Если prelim_chance < 30 то real_chance = 30
Если prelim_chance > 98 то real_chance = 98
Если 30 < prelim_chance < 98 то real_chance = prelim_chance

Выводы:
1.) Бить в спину можно точнее, чем в бок и еще точнее, чем в лицо. Много миссов? Стараемся забежать за спину, шанс попасть умножается на 1.3.
2.) Разница высот не поможет попасть в цель. Только может ухудшить шанс попадания. Поэтому держим ее от -300 до 100 (из координаты z цели вычитаем координату z атакующего). Стоим не более чем на 300 выше цели и не менее, чем на 100 ниже цели. Тогда никаких потерь не будет. 25 единиц - это примерно рост эльфа-файтера.
3.) Разгонять евагу не имеет смысла. 30% - это уже предел процента попаданий снизу. А вот точность - вполне, 98% - это почти всегда.
4.) Если вы не знали этих трех вышеперечисленных вещей - удалить компьютерную онлайн игру Lineage2.



3.) Принцип работы дебаффов, шанс их прохождения.

Если у дебаффа есть сразу же несколько эффектов (дебафф - это то, что попадает в строчку дебаффов при успешном прохождении) - то они считаются сразу же. Либо все прошли, либо ничего не прошло.

Иногда бафф может отразиться назад на того, кто его кинул. Соответственно это зависит от is_magic скилла.

Если is_magic = 1 (магический скилл), то дебафф отражается с шансом magic1_reflect_chance.
Если is_magic = 0 (не магический скилл), то дебафф отражается с шансом magic0_reflect_chance.

Magical Mirror
magic0_reflect_chance = 10
magic1_reflect_chance = 30

Physical Mirror
magic0_reflect_chance = 30
magic1_reflect_chance = 10

Riposte Stance
magic0_reflect_chance = 30
magic1_reflect_chance = 30

Некоторые геройские штучки имеют эти параметры по 10. Точнее, все, у кого такой бонус есть.

Теперь считаем:

dl = magic_level - target_level + 3

Если это рефлект от отражалки - то таргет левел - это сам дебаффающий. Меджик левел мы сами понимаем какой, читаем про канселы. Может сделаю полную табличку со временем. Когда мужчина говорит "может" - это значит "нет" -).

Теперь считаем clamped_dl:
Если dl < 0 то clamped_dl = dl
Если dl >= 0 то clamped_dl = 0

Промежуточное значение, оно нам будет нужно дальше:
partial_chance = 30 + clamped_dl * lv_bonus_rate + activate_rate - basic_property_value

lv_bonus_rate - константа. Равна или 0, или 1, или 2. У стана ДА - 2, у стан шота - 1, у сала - 2. Тоже со временем скину точные цифры. 0 только у некоторых рейд-скиллов.

activate_rate - базовый шанс прохождения. может быть и -1 - тогда скилл проходит всегда (у НПС такие скиллы есть, знаем, встречали). Табличка с базовыми шансами последней модели? Достаточно сложно составить. Более ли менее достоверная информация по старым скиллам лежит тут:
http://l2p.l2wh.com/debuffbaserates.html
Как правило, заточка на +1 на шанс дает чуть менее +1 к этому шансу. Сур +30 шанс имеет этот параметр, равный 100 (базовый +0 - 80), блид +0 - уже сразу 100, сеал от хаос +0 - 40, +30 шанс - 50. Это основные цифры, точную таблицу пока дать не смогу.

basic_property_value - защита с помощью базового параметра (MEN и КОН как правило). То есть берем и отнимает этот параметр.
У таргета 50 КОН? Стан шот? Ставим basic_property_value = 50 и дальше по формуле считаем. Обращаем внимание на знак минус.

Ещё одно промежуточное значение:
attributes_part = target_skill_attribute_multiplier * target_attributes_bonus

target_skill_attribute_multiplier - это атрибут-дефенс цели для атрибута самого скилла. Сюда же входят эпики. 30% резист эпик дает? Вот и 0.7 число тут фигурирует. Все перемножаем.

target_attributes_bonus - произведение всех тех атрибут-дефенсов цели, для которых у дебаффающего есть атрибут. Точно также засовываем эпики. +30% шанс провесить дебафф? Число 1.3 сюда. Как видите, два симметричных эпика - и шанс падает общий. И атрибут систему. Скоро засуну атрибут у скиллов. Скажем, трибунал - холи, даджемент - дарк, медуза - эарз (все по 20 база). Второпрофный и третьепрофный скилл на +30/15 атрибут дает +50 к соответствующему элементу. И это влияет на дебафф соответствующей природы!

Имеет значение разница в атрибуте атакующего и цели.

da = attacker_attribute - defender_attribute.

Если da > 300, то target_attributes_bonus = 1.7
Если 150 <= da < 300, то target_attributes_bonus = 1.4
Если 40 <= da < 150, то target_attributes_bonus = 1.2
Если 0 <= da < 40, то target_attributes_bonus меняется от 1.0 до 1.2, линейная функция, просто не знаю верхней границы, 35-45 где-то.
Если da < 0, то target_attributes_bonus = 1.0

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

Теперь считаем magic_multiplier:
Если is_magic = 0, то magic_multiplier = 1.
Если is_magic = 1, то magic_multiplier = 11 * sqrt((1 + spiritshot_dmg_bonus / 100) * m_atk) / m_def

sqrt - это квадратный корень из того, что в скобках.

spiritshot_dmg_bonus - 300, если бспс'ка, или 100, если обычный спиритшот.

m_atk, m_def - понятно, что и у кого.

Считаем:
prelim_chance = partial_chance * attributes_part * magic_multiplier * debuff_res_multiplier

debuff_res_multiplier - резисты. По умолчанию равен 1. Дает +40% резиста? Умножаем на 0.6. +20% резиста? На 0.8. И так далее. Сделаю полную табличку с резистами такого рода. Не забываем, однако, что какой ТоД дает сюда 1.3, так что тут не только резисты.

Считаем реальный шанс прохождения:
Если prelim_chance >= 95, то real_chance = 95
Если prelim_chance < 95, то real_chance = prelim_chance

Сейчас максимальный шанс прохождения дебаффа любого рода равен 95%, минимальный - не ограничен. В Хай-фай тут будут 10% и 90% ограничения с двух сторон. Не очень радостная картина, но и висеть дебаффы будут мало (пока этой информацией не владею, похоже, что там просто линейная зависимость от шанса и перемножение, но точно не знаю).

Есть дебаффы со 100%-ым прохождением (у которых activate_rate равен -1 или основной параметр защиты стоит none. Пока не могу сказать, но имеет место быть, что у каждого дебаффа в игре есть свои защитный параметр, в том числе и STR - не забывайте учитывать это, в игре это элементарно прописать. Интересные моменты: У леталов, у ТоД, у некра курс абисс, у овера диспеир стоит свойство Death. У сил оф скурж стоит свойство Boss. Это для корректной работы некоторых возможностей. А так обычно нету свойства.

И есть 100%-ый резист дебаффам - МИ, хиро зерк.

Выводы:
1.) Разница в уровнях дебаффа и атакующего влияет на прохождение (как и столько - считайте сами). Если разница уровней в вашу пользу - то бонуса не будет, считайте тоже.
2.) Заточка на любую ветку дебаффа поднимает его уровень и поднимает шанс прохождения.
3.) Заточка на шанс дает от +10 до +30 к соответсвующему параметру и тоже поднимает шанс прохождения, но далеко не на большую цифру (хотя заточка на шанс - это сразу рост двух параметров)
4.) Симметричные эпики уменьшают итоговый шанс. Особенно касается ментальных атака (сала, фира, блаффа и прочей ерунды), ведь от них очень много резиста и плющек. Если эпика нету у цели - бонусы работают. А если есть, как и у вас, - то шанс падает. Притом прилично. Поэтому такие скиллы и работают достаточно слабо.
5.) У мобов/рейдов высокий как базовый защитный параметр (КОН, скажем), так и часто имеется высокий резист. Поэтому дебафф (стан, паралич, корни) без хороших бонус провесить зачастую очень сложно, но эпик и прочие плюшки как раз дают отличные бонусы к этому шансу. Но во Фрее подняли резист к стану, так что уже не все так хорошо.
6.) Весьма вероятно, что каждый дебафф в игре зависит от одного базового параметра (STR, DEX, CON, INT, MEN, WIT) у цели и этот параметр влияет на шанс. Если базовый параметр стоит none - то дебафф ВСЕГДА проходит (стигма, РТ). Надо протестировать этот момент.
7.) Пока нету минимального шанса провесить дебафф (хоть 0.01%, если так получиться). Максимум ограничен в 95%. Скоро будут цифры в 10% и 90% - готовьтесь.
8.) Насчет времени дебаффа - потом сделаю.
9.) В С4 если у вас в руках был лук, то дебафф по цели с баффом дефлект арроу проходил хуже, чем с равными статами. Глад с детектом жуков имел больший шанс застанить жука, чем без бафа. Проверено. Но с изменением системы атрибутов такую фишку пофиксили. Или нет, если не точить на атрибут -)? Кто пацан - тот пускай и протестирует.


4.) Корейский рандом, генератор случайных чисел в Lineage2.

Генератор случайных чисел выглядит следующим образом (вкусненький, прямо из сервачка официального):

double randRange(double min, double max)
{
double r = (double)rand() / 32767.0;

return min + r * (max - min);
}

if (randRange(0.0, 100.0) < сhange)
dosmth();

Сделал простенькую прожку - сразу же при 50% шансе пять раз подряд выпал нолик. Так что остается порадоваться за то, что этот рандом мог сделать и корейский школьник в туалете (офк компьютер был внизу, под ободком, удобнее так). И этот рандом участвует практически везде. Так что прокинули дебафф с тремя саксесами и фейлите шмотку. Шутка. Просто бытует мнение, что если пятнадцать раз подряд выпало красное - то сейчас будет черное. Даже я могу математически доказать, что шанс выпадения красного и черного не зависит от того, сколько раз до этого подряд выпадал один цвет. Если не верите - в Монте-Карло създите, побухайте, потрахайтесь, - так там и по 17-18 раз выпадает подряд один цвет. Для любителей разбогатеть -). Хотя если это на сервере - то считайется на одного персонажа или на весь сервер. Да и еще учитывая генератор БСВ в С. Так что если вы один онлайн и сфейлили 5 раз подряд глум или сломали пять рубашек - точите смело. Заточите -).



5.) Принцип работы блоу-скиллов.

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

dex dex_modifier
1 0.85
2 0.86
3 0.86
4 0.87
5 0.88
6 0.89
7 0.9
8 0.9
9 0.91
10 0.92
11 0.93
12 0.94
13 0.94
14 0.95
15 0.96
16 0.97
17 0.98
18 0.99
19 1
20 1.01
21 1.01
22 1.02
23 1.03
24 1.04
25 1.05
26 1.06
27 1.07
28 1.08
29 1.09
30 1.1
31 1.11
32 1.12
33 1.13
34 1.14
35 1.15
36 1.16
37 1.17
38 1.18
39 1.19
40 1.2
41 1.21
42 1.22
43 1.24
44 1.25
45 1.26
46 1.27
47 1.28
48 1.29
49 1.3
50 1.32
51 1.33
52 1.34
53 1.35
54 1.36
55 1.38
56 1.39
57 1.4
58 1.41
59 1.43
60 1.44
61 1.45
62 1.47
63 1.48
64 1.49
65 1.51
66 1.52
67 1.53
68 1.55
69 1.56
70 1.57
71 1.59
72 1.6
73 1.62
74 1.63
75 1.65
76 1.66
77 1.68
78 1.69
79 1.71
80 1.72
81 1.74
82 1.75
83 1.77
84 1.78
85 1.8
86 1.82
87 1.83
88 1.85
89 1.87
90 1.88
91 1.9
92 1.92
93 1.93
94 1.95
95 1.97
96 1.99
97 2
98 2.02
99 2.04

Запомнили. Едем дальше. Считаем crit_loc_bonus.

Если нападающий стоит во front от цели, то crit_loc_bonus = crit_rate_front_multiplier.
Если нападающий стоит в side от цели, то crit_loc_bonus = 1.1 * crit_rate_side_multiplier.
Если нападающий стоит в back от цели, то crit_loc_bonus = 1.3 * crit_rate_back_multiplier.

crit_rate_front_multiplier, crit_rate_side_multiplier, crit_rate_back_multiplier - это произведения от соответсвующих баффов.

Интересно, что некоторая информация слегка отлична от описания скиллов. Или она поменялась с вводом хроник, или на прохождение скиллов влияет особые параметры, отличные от описания.
Я скажу, как есть в серваке, а вот будет ли полная идентичность с тестами при этих параметрах, а не игровых...
Скажем, Focus Chance:
front: 0.75
back: 1.5

Focus Death:
front: 0.5
side: 0.7

УГ-даггер для светрячков:
back: 1.22

И СА Backblow влияет на back приблизительно как 1.4. Все это перемножается и в формулу.

Еще нужен crit_height_bonus. Да, еще и от высоты зависит работа блоу-скиллов:

dz - разница высот, на которых стоят атакующий персонаж и его цель (из координаты z атакующего вычитаем координату z цели).

По dz вычисляем величину clamped_dz:
Если dz > 25 то clamped_dz = 25
Если dz < -25 то clamped_dz = -25
Если -25 < dz < 25 то clamped_dz = dz

crit_height_bonus = 0.008 * clamped_dz + 1.1

То есть бонус тоже может сказать в зависимости от разной высоты чаров, но достаточно слабо.

Теперь принцип работы скиллов.

В первую очередь проверяется, была ли блокировка щитом. Из фронт сектора (если нету скилла на 360 градусов, или еще тогл такой есть, а так щит только фронт и блокирует) идет подсчет. И есть шанс экселлент блока на 1 урона. Этот шанс равен 2 * dex_modifier. Декс цели с шитом, а не ножа. Так что им тоже декс очень неплохо идет для таких приятных моментов, хоть и слабо дает в качестве бонуса.

prelim_chance = dex_bonus * (base_weapon_crit / 10) * crit_loc_bonus * crit_height_bonus * ((land_chance_bonus + 100) / 100) * fatal_blow_rate_multiplier * skill_res_multiplier

base_weapon_crit - шанс крита влияет на проходжение абилок. А как же тесты!? Так вот, только базовый шанс крита у пушки на это влияет. Никаких СА фокус или подобных штучек. Поэтому ножи, поэтому он равен 120. Пока еще не научились с пики бить стабы.

land_chance_bonus:
Mortal Blow: 200
Deadly Blow: 200
Backstab: 300
Blinding Blow: 150
Lethal Blow: 200
Новый скилл из ХФ - не знаю.

fatal_blow_rate_multiplier: по умолчанию равен 1, а скажем для фокус дез он идет как 1.5 (скорее всего, так и есть, просто в игре уже готовые цифры отобразили, но ведь мы говорит про ШАНС прохождения). Насчет остальных таких бонусов, типа пассивки и заточки - пока не знаю.

skill_res_multiplier: по умолчанию равен 1. Если висит уклонялка от физ-скиллов - то соответственно умножаем на этот шанс (40% уклонения - на 0.6). Кажется, скилл овера сюда не входит. Кстати, бедные программеры так и не догадались, как одновременно подсчитывать шансы прохождения дебаффа и шансы уклониться от скилла. Ну, ничего страшного. У меня после бутылки водки тоже бывают такие траблы. И у них получались варианты вида: от скилла уклонился, но дебафф прошел или дебафф проходит 100%, если ты попадешь. Из двух и более зол выбирают меньшее, вот и кому-то реально подфартило попадать по ножам с дебаффом, а кому-то не очень повезло.

Считаем реальный шанс прохождения, кроме бектаба:
Если prelim_chance >= 80, то real_chance = 80
Если prelim_chance < 80, то real_chance = prelim_chance

То есть максимальный шанс прохождения блова (кроме стаба) равен 80%.

Тут уже влияют 180-ти градусные углы. Итого получаем, что при атаке из Low chance шанс стаба обрезается аж до 3%. А при атаке из High chance шанс ничем не ограничен. Даже 100%. Поэтому в спину можно больно кусаться и даже точно попадать.

Теперь про дамаг.

Сперва считается random_multiplier.

Для этого генерируется случайное число random_value в диапазоне от -random_damage до random_damage. Для даггером это число равно 5.

random_multiplier = (random_value + 100) / 100

Затем.

dmg_part_a = ((1 + soulshot_dmg_bonus / 100) * p_atk + power) * random_multiplier

soulshot_dmg_bonus - равен 100, если она есть и 0, если у ее нету.

power - сила скилла. Притом имеют место быть разные значения, как в пвп, так и в пве. Заточка на атрибут поднимает и этот параметр, кстати. На сколько - точно не скажу, примерно как на +повер простой, а на дуэль - как два +повера.

Еще одно вычисление:
crit_mul_part = 0.5 * crit_dmg_bonus_multiplier * (critical_damage_position_multiplier + 1)

crit_dmg_bonus_multiplier - множительный бонусы. Баюм - 1.15. Денс Файр - 1.35. Включая и защитные свойства: сс, соп, хэви армор, саб-скиллы и другие.

critical_damage_position_multiplier - бонусы для сектора атаки.

Опять несколько странные цифры, может, стоит их пересмотреть.
Focus Death
side: 1.5
back: 2

Focus Power
front: 0.75
back: 1.5

Далее,

crit_add_part = 6 * (critical_damage_position_adder + crit_dmg_bonus_adder)

critical_damage_position_adder - бонус в цифрах в зависимости от позиции. Где-то что-то видел, но не помню. МБ при атаке в спину и поднимает этот бонус у хиро пушки-даггера, таких лохов не встречал.

crit_dmg_bonus_adder - пассивочки, СА, бонусы от сетов тоже сюда идут и тогл тоже сюда входит.

attributes_dmg_bonus_multiplier = target_skill_attribute_multiplier * target_attributes_dmg_bonus

Атрибут, уже было в рассчете дебаффов. Теже цифры. Чистый атрибут и чистая прибавка, если есть.

total_p_def = p_def_from_shield + p_def

p_def_from_shield - если атака попала в щит. И свои спецефические баффы (обычные +п.деф баффы защиту у щита не поднимают, простите за тавтологию).

Наконец, дамаг:

damage = 70 * ((dmg_part_a * crit_mul_part + crit_add_part) * attributes_dmg_bonus_multiplier / total_p_def) * pvp_physical_skill_dmg_bonus * double_damage_chance

pvp_physical_skill_dmg_bonus - бонус от СА в пушке, пвп бонуса (по 1.05 умножается), пояска на абилки, может что-то от ноблов и героев есть.

double_damage_chance - по дефолту х1. Зависит от скилла.

double_damage_chance = modifier * dd_parameter / 100

dd_parameter - зависит от скилла, который критует х2. modifier от стата, СТР вроде, точно потом выложу.

Интересно, что death_chance = attributes_dmg_bonus_multiplier * death_base_chance.

То есть шанс летала завитит от атрибута. Надо это потестить, хотя думаю пройдет только с 1хп леталом и мобами, хотя как насчет арбы с рулетки - хз.

Шанс летала не зависит от шанса прохождения скилла.

Выводы:
1.) Ножей сильно поменяли со времен этой инфы и постоянно новые заточки, так что конкретно что-то посчитать достаточно сложно.
2.) Тем не менее видно, что шанс прохождения абилки зависит от ДЕКС.
3.) Шанс прохождения обычных бловов не может превысить 80%.
4.) Шанс стаба вообще ничем не ограничен в спину, а вот в лицо его лучше не бить, хотя обычные дедли абилки идут неплохо.
5.) Фокус ченс однозначно влияет на шанс прохождения, как и ДЕКС, но тоже достаточно слабо.
6.) Высота тоже имеет значение на шанс.



6.) Шанс прерывания кастинга.

Сбиты могут быть только те скиллы, у которых параметр is_magic не равен 0 (то есть магия, СОЕ там). Сюда же входит и каст печати.

Если is_magic = 1 то speed = cast_speed * (1 + spiritshot_bonus / 100) / 333
Если is_magic > 1 то speed = 1

spiritshot_bonus = 40, если ее нету, то берем 0.

Скилл производит свой эффект спустя skill_hit_time / speed секунд после начала каста.

Скилл может быть прерван в первые skill_hit_time / speed - MIN(skill_hit_cancel_time / speed, 0.5)

MIN - это минимальное число из двух в скобках).

skill_hit_time, skill_hit_cancel_time - констаты.

skill_hit_cancel_time для подавляющего большинства скиллов равен 0.5 секунды.

skill_hit_time для некоторых магических скиллов:
Ice Vortex: 6
Hurricane: 4
Cancel: 6

И для is_magic = 2:
Blessed Scroll Of Escape: 0.2
Sweeper : 0.5 (его тоже можно сбить ^^, варианты со станом не рассматриваю)
Сюда же входит и каст печати.

base_interrupt_factor = 100 * trunc(damage * reduce_interrupt_multiplier + reduce_interrupt_adder) / max_hp;

damage - дамаг, который прилетел кастеру. Считается после проверки на блокировку урона или до - точно не знаю. Скорее всего до, пару исключений видел, когда целка появлялась уже как раз в момент сбития каста.

trunc - округлить вниз от того, что стоит в скобках.

max_hp - максимальное хп кастера. Прикольненько.

reduce_interrupt_multiplier - произведение всех модификаторов подобного рода от скиллов. Начальное значение равно 1.

reduce_interrupt_adder - сумма всех модификаторов подобного рода от скиллов. Начальное значение равно 0.

reduce_interrupt_multiplier - это бафф семи печатей. И равен 0.75.

reduce_interrupt_adder:
Concentration 6: -53
Dance of Concentration: -40
Dark Crystal Robe normal: -50

Теперь посчитаем level_factor:

level_factor = level + 0.125 * MEN - attacker_level

level - уровень кастующего.
MEN - значение стата Men кастующего.
attacker_level - уровень того, кто атакует кастующего.

Вот и все, теперь считаем final_interrupt_chance:

Если level_factor >= base_interrupt_factor, то final_interrupt_chance = 5
Если level_factor < base_interrupt_factor, то final_interrupt_chance = MIN(trunc(2 * base_interrupt_factor), 98)

trunc - целочисленное округление вниз.

Выводы:
1.) Скилл может быть прерван в первой фазе каста до какого-то момента, потом он становится непрерываемым.
2.) Чем быстрее скилл - тем больший процент времени его каста непрерываем.
3.) Время непрерываемости не может быть больше 0.5 секунды с любой скоростью каста.
4.) Чем меньший вам наносят урон, тем сильнее заметен эффект от использования скиллов, защищающих от прерывания каста.
5.) При очень большом уроне Концентрация практически бесполезна.
6.) Шанс прерывания каста не может быть выше 98%.
7.) Если кастующий сильно опережает по уровню атакующего его чара, то шанс прерывания каста будет невелик даже при большом уроне.
8.) Если кастующий и атакующий примерно равны по уровню, то MEN на шанс прерывания влияет очень слабо.
9.) На каст печати зависят и все полезные баффы, и его макс хп, и МЕN, и его уровень и так далее. Так что можно не только протектить, но и еще немного раскачать.



7.) Шанс открыть сундук ключом или скиллом.

Скиллом (больше волнует лоу-левельных нон-факторов). Сверху - уровень скилла, сбоку - левел сундука.
Код:

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14
--------------
21 | 92 84 99 84 88 90 89 88 86 90 87 89 89 89
24 | 74 84 99 84 88 90 89 88 86 90 87 89 89 89
30 | 38 48 87 84 88 90 89 88 86 90 87 89 89 89
33 | 20 30 69 78 88 90 89 88 86 90 87 89 89 89
36 | 2 12 51 60 88 90 89 88 86 90 87 89 89 89
39 | 0 0 33 42 70 90 89 88 86 90 87 89 89 89
42 | 0 0 15 24 52 78 89 88 86 90 87 89 89 89
45 | 0 0 0 6 34 60 83 88 86 90 87 89 89 89
48 | 0 0 0 0 16 42 65 88 86 90 87 89 89 89
51 | 0 0 0 0 0 24 47 70 86 90 87 89 89 89
54 | 0 0 0 0 0 6 29 52 74 90 87 89 89 89
57 | 0 0 0 0 0 0 11 34 56 84 87 89 89 89
60 | 0 0 0 0 0 0 0 16 38 66 87 89 89 89
63 | 0 0 0 0 0 0 0 0 20 48 69 89 89 89
66 | 0 0 0 0 0 0 0 0 2 30 51 77 89 89
69 | 0 0 0 0 0 0 0 0 0 12 33 59 83 89
72 | 0 0 0 0 0 0 0 0 0 0 15 41 65 89
75 | 0 0 0 0 0 0 0 0 0 0 0 23 47 71
78 | 0 0 0 0 0 0 0 0 0 0 0 5 29 53
81 | 0 0 0 0 0 0 0 0 0 0 0 0 11 35
84 | 0 0 0 0 0 0 0 0 0 0 0 0 0 17
85 | 0 0 0 0 0 0 0 0 0 0 0 0 0 11
И ключом:
Код:

| 1 2 3 4 5 6 7 8
--------------
21 | 71 100 100 100 100 100 100 100
24 | 64 100 100 100 100 100 100 100
30 | 50 72 100 100 100 100 100 100
33 | 43 65 100 100 100 100 100 100
36 | 37 57 100 100 100 100 100 100
39 | 32 50 100 100 100 100 100 100
42 | 26 44 65 100 100 100 100 100
45 | 21 38 58 100 100 100 100 100
48 | 17 33 51 100 100 100 100 100
51 | 12 28 45 74 100 100 100 100
54 | 9 24 39 66 100 100 100 100
57 | 5 21 34 59 100 100 100 100
60 | 2 18 30 52 87 100 100 100
63 | 0 15 26 46 77 100 100 100
66 | 0 13 22 40 68 100 100 100
69 | 0 12 19 35 60 100 100 100
72 | 0 11 17 30 52 75 100 100
75 | 0 10 15 26 46 66 100 100
78 | 0 10 14 23 41 59 100 100
81 | 0 11 13 20 36 53 84 100
84 | 0 12 13 17 32 50 73 100
85 | 0 13 13 16 31 49 71 100



8.) Шанс магического крита.

magical_crit_chance = base_magic_const * wit_modifier * buffs_multiplier + buffs_adder

base_magic_const, если не ошибаюсь, сейчас равен 5.

wit_modifier:
Спойлер +
wit wit_modifier
1 0.4
2 0.42
3 0.44
4 0.46
5 0.48
6 0.51
7 0.53
8 0.56
9 0.58
10 0.61
11 0.64
12 0.68
13 0.71
14 0.75
15 0.78
16 0.82
17 0.86
18 0.91
19 0.95
20 1
21 1.05
22 1.1
23 1.16
24 1.22
25 1.28
26 1.34
27 1.41
28 1.48
29 1.55
30 1.63
31 1.71
32 1.8
33 1.89
34 1.98
35 2.08
36 2.18
37 2.29
38 2.41
39 2.53
40 2.65
41 2.79
42 2.93
43 3.07
44 3.23
45 3.39
46 3.56
47 3.73
48 3.92
49 4.12
50 4.32
51 4.54
52 4.76
53 5
54 5.25
55 5.52
56 5.79
57 6.08
58 6.39
59 6.7
60 7.04
61 7.39
62 7.76
63 8.15
64 8.56
65 8.99
66 9.43
67 9.91
68 10.4
69 10.92
70 11.47
71 12.04
72 12.64
73 13.27
74 13.94
75 14.64
76 15.37
77 16.14
78 16.94
79 17.79
80 18.68
81 19.61
82 20.59
83 21.62
84 22.7
85 23.84
86 25.03
87 26.28
88 27.6
89 28.98
90 30.43
91 31.95
92 33.55
93 35.22
94 36.98
95 38.83
96 40.77
97 42.81
98 44.95
99 47.2

buffs_multiplier:
Сирена: 2.0
Валакас: 2.0
Сurse of Abyss: 0.7
Хиро стафф: 1.54
ВМ ауг - 2.0
Талик и ауги разного левела - без понятия.

buffs_adder:
КОВ/ПОФ/ПОВатер - 2
ВМ 2 левела - 2
Меджик вилл - 5
Возможно
Валакас - 2
ВМ ауг - 2

Понятно, что предел ограничен 20, поэтому смысла сильно разгонять меджик крит нету вообще.

Выводы:
1.) ВМ бафаем только каким-нибудь СЛБ с С85 меджик пушкой на акумен и прайдом на м.атаку. Мобов пугать.




9.) Принцип рыбалки.

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

Если спроектировать точки нахождения крючка и игрока на плоскость X0Y ("плоскость земли"), то расстояние между проекциями будет равно 300.

Затем определяется, какому месту рыбалки (fishing_place) соответствуют данные координаты крючка. При этом сперва игра пытается найти то место рыбалки, у которого параметр fishing_place_type равен fishing_place_type2. Если она такого не находит, то пытается найти место рыбалки с fishing_place_type = fishing_place_type1. Если и этого не находит, то ищет с fishing_place_type = fishing_place_default.

Далее игра проверяет: находится ли поплавок в воде. Если место рыбалки найдено и поплавок находится в воде, то игра смотрит, какое распределение (distribution) используется в данном месте рыбалки. Для этого считывается значения параметра distribution_id места рыбалки.
Всего определено 3 различных распределения, поэтому distribution_id может иметь значение 1, 2 или 3.

Места рыбалки с fishing_place_type = fishing_place_default имеют distribution_id = 1.
С fishing_place_type = fishing_place_type1 имеют distribution_id = 2.
С fishing_place_type = fishing_place_type2 имеют distribution_id = 3.

Большинство площади мира покрыто местами с distribution_id = 2. Прочие места есть только в ХС. Более того, место с distribution_id = 1 - всего одно в игре. Оно геометрически совпадает с одним из мест в Хот Спрингс с distribution_id = 3, то есть оно вообще не будет использоваться.

Также на рыбалку влияет время рыбалки, дневная или ночная.

Когда вы закидываете удочку - игра модифицирует значение специального счётчика (у игрока):
- Если расстояние между текущим и прошлым положением крючка меньше или равно значению параметра limit_grid места рыбалки, то значение счётчика уменьшается на 1.
- Если расстояние между текущим и прошлым положением крючка больше значения параметра limit_grid места рыбалки, то значение счётчика устанавливается равным параметру maintain_distribution_time места рыбалки.

Если этот счётчик имеет положительное значение, то в дальнейших расчётах используется default_distribution секция распределения, иначе - event_distribution секция.
Для всех мест рыбалки установлены значения limit_grid = 1000 и maintain_distribution_time = 60.

Стоит после каждых 60 закидываний удочки отходить на расстояние не менее 1000 и закидывать удочку там. При этом счётчик "освежится" и следующие 60 закидываний будут с нормальным уловом (а не с "истощённым"). Можно после этого даже вернуться на старое место.

Понятно, что НЦсофт "ложило" на других ботов-рыбальщиков, поэтому эти счетчики идут только у игрока, на других людей они никак не влияют.

Шансы клёва:
- В обычном состоянии водоёма - 95%
- В "истощённом" состоянии - 61%

fish_type_chance = 100 * distribution_type_value * lure_type_value / norm

distribution_type_value - значение для данного типа, константа. Скажем, easy_wide - 15. Если кому это нужно - могу скинуть табличку.

lure_type_value - значение для данного типа, заданное в описании приманки.

norm - сумма произведений distribution_type_value * lure_type_value для всех типов рыбы.

То есть приманка может увеличивать или уменьшать шансы поймать тот или иной тип рыбы.

После того, как игры вид рыбы уже определился на сервер, идет посчет уровня рыбы.
Рыба имеет от 1 до 27 лвл, это управляется параметром fish_level в описании рыбы.

Уровень рыбы - случайный, зависит от уровня Fishing Expertise:
- 50% шанс того, что будет fish_level = expertise_level
- 35% шанс того, что будет fish_level = expertise_level - 1
- 15% шанс того, что будет fish_level = expertise_level + 1

Поймать рыбу, уровень которой на 2 (или больше) выше или ниже уровня вашей экспертизы - невозможно.

Далее подсчет время появления рыбы после заброса:
start_combat_time_final = (special_random(-3, 3) + start_combat_time) / revision_number

start_combat_time - константа и равна 20.

revision_number - число, зависящее от приманки. Лучше приманка - фармить рыбу можно будет быстрее.

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

trunc(6.0 * ((double)rand() / 32767.0) - 3.0)

trunc - отбрасывает дробную часть от числа.

Такой рандом вернет 3 и -3, когда БСВ (базовая случайная величина) попадет на границы - то есть очень и очень редко. Поэтому он написал галимо и несколько ограничивает возможные варианты, благо это как бы безразлично.

А в результате получается вот что:
-3 1/32767
-2 ~1/6
-1 ~1/6
0 ~1/3
1 ~1/6
2 ~1/6
3 1/32767

Вот это действительно по-корейски.

Если же ничего не клюнуло, то об этом сообщается через 30 секунд.

У рыбы есть fish_hp. Это могу выложить, если кого-то это интересует.

combat_duration - параметр того, сколько дается времени на фарм. Тоже зависит от рыбы.

Каждые guts_check_time секунд рыба может изменить своё состояние. С шансом guts_check_probability устанавливается состояние guts, с шансом (100 - guts_check_probability) - устанавливается обычное состояние.
guts_check_time и guts_check_probability - опять-таки индивидуальные параметры рыбы

В состоянии guts рыба хилиться на trunc(2 * hp_regen). hp_regen - тоже константа, занесена в файлы.

Если здоровье рыбы достигает 2 * fish_hp, то фарм закончен не в вашу пользу.

Понятно, как работают Pumping и Reeling по гатсу и по обычному состоянию.

Дамаг (или хил, если не угадали):
damage = (pumping_or_reeling_parameter + expertise_parameter) * rod_damage * grade_penalty * (1 + fishshot_parameter / 100) * MIN(MAX(100 - skills_lvl_diff_penalty, 0), 100) / 100

pumping_or_reeling_parameter и expertise_parameter - константы для каждого уровня.

При прокачке выше трех считают по формуле:
1.55 + 0.15 * (skill_level - 4)

rod_damage - дамаг от удочки. Эс-грейд - 39, А-грейд 35, НГ - 20.

grade_penalty - штраф. По умолчанию его нету, то есть равен 1.0, если же есть - то 0.5 устанавливается.

fishshot_parameter - соулшот, 100 - если есть, 0 - если нету.

Если фиш экспертиза на 3 и более уровней отстала от прокачки скиллов, то:
skills_lvl_diff_penalty = 5 * (pumping_or_reeling_level - expertise_level) - 10

Скиллы Pumping и Reeling имеют 5% шанс не сработать.

Если рыба поймана, то идет проверка на вызов моба с шансом monster_probability. Он равен 5%, для дневной, для ночной - не знаю.

не вся информация актуальна

Как сказать, тем не менее и этой информации 90% людей на сервере не знают. А в той форме что я её расписал будет полезна для осведомления и администрации.

Сервис поддержки клиентов работает на платформе UserEcho