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 1008.) Шанс магического крита.
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%, для дневной, для ночной - не знаю.
Спасибо разнообразным сайтам, где я нашел разнообразную инфу. Уточнения по поводу работы скиллов приветствуются. Без 85-го уровня даже не пишите -).