Шанс попасть или промахнуться по цели.
В первую очередь берем 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) - это кубический корень. Скобки расставлены. Посчитайте? Думаю да.
Если нет - то вам спойлер:
Спойлер
Считаем
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.) Если вы не знали этих трех вышеперечисленных вещей - удалить компьютерную онлайн игру Scryde.
Нагло спизжено с Гохи.