критические атаки.
для расчета итоговой атаки применяется два значения: минимальная атака и максимальная атака.
в моем примере расчет на крит был пропущен и условно было взято значение 75% от крита.
рассмотрим подробно участок кода сервера (механика сервера не очень то меняется на протяжении всего своего существования):
Код:
int l_ncrtaf = l_nmaxaf * ((125 + l_nmaxaf) / (50 + l_nmaxaf)) + 0.5;int l_nattblk = (float)(l_nminaf + l_nmaxaf)/2 + 0.5;
l_nminaf - минимальная атака, которую мы рассчитали.
l_nmaxaf - максимальная атака, которую мы рассчитали.
l_nattblk - значение средней атаки.
l_ncrtaf - значение критической атаки. значения 50 и 125 как мы видим настолько малы что ими можно пренебречь. тогда будем принимать значение максимальной атаки за значение критической атаки.
теперь посмотри как происходит выборка атаки.
любое оружие имеет две переменных: шанс на атаку ниже среднего, шанс на атаку выше среднего.
как вы можете заметить сумма этих шансов не дает 100, так как недостающая величина есть базовый шанс критической атаки оружия.
сервер делает два расчета:
1. шанс атаки ниже среднего = шанс меньше среднего (из параметров оружия) - крит + анти крит.
2. шанс критической атаки = шанс меньше среднего (из параметров оружия) + шанс выше среднего (из параметров оружия) - крит + анти крит.
оба шанса не могут быть ниже 0. если таковое случается то шанс приравнивается 0.
Код
этот шанс сравнивается с псевдослучайным числом и не простым rand()%100, а особым великим корейским генератором случайных чисел.
Спойлерэтот генератор представляет собой массив 10 строк на 100 колонок. каждая строка содержит перемешанную последовательность чисел от 0 до 99 то есть не 0, 1, 2, ..., 99, а 3, 15, 44, 87...
вызов значений происходит с первой позиции строки. последующий вызов вызывает следующую позицию текущей строки. когда строка кончается генератор выбирает случайную строку и цикл повторяется.
суть этого механизма заключается в том что он гарантирует выпадение всех чисел от 0 до 99 на каждые 100 запросов.
то есть если у вас шанс нанести критический удар по врагу 15% это механизм гарантирует вам 15 критический попаданий на 100 ударов.
таблица сбрасывается единожды при перезагрузке сервера. она своя для каждого игрока и монстра.
таблица используется при расчете на крит, а так же при крафте предметов крафтером.
итак если случайное число меньше чем "шанс атаки ниже среднего", то атака будет выбрана случайно от минимальной до средней.
если число больше чем "шанс атаки ниже среднего" но не больше чем "шанс критической атаки", то атака будет от средней до максимальной.
и если случайное число окажется больше чем "шанс критической атаки" то атака будет равна критической, которая численно почти равна максимальной.
поскольку видно, что крит влияет на средний урон, для повышения дпс рекомендуется сочетать допинги атаки и крита. ну а для понижения дпс - точить антиграв на +7)))
не смотря на то что в сервере присутствует свой механизм стана со своими отдельными шансами, корейцы им не пользуются. состояние оглушения (стан) возникает при каждой критической атаке. к сожалению многие механизмы сервера не проводят проверку на стан. так например можно спокойно бегать под гекатами без всяких остановок.
если вы видите что после стана чар делает внезапное тп вперед - с большой долей вероятности он багоюзер.
ps.
расчет крита для монстров немного иной.