В первую очередь берем 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.