1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Крит, антикрит и стан.

Discussion in 'Гайды по игре' started by Calista, Mar 28, 2013.

  1. Calista

    Calista User

    Joined:
    07.03.13
    Messages:
    38
    Likes Received:
    30
    все данные для этой статьи получены путем исследования кода сервера и файлов сервера скачанных в интернете, а поэтому за достоверность сведений я ответственности не несу.;)

    критические атаки.
    из моих статей, ссылки на которые приведены в подписи, мы уже успели ознакомиться с тем, что для расчета итоговой атаки применяется два значения: минимальная атака и максимальная атака.
    в моем примере расчет на крит был пропущен и условно было взято значение 75% от крита.
    рассмотрим подробно участок кода сервера (механика сервера не очень то меняется на протяжении всего своего существования):
    Code:
    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 как мы видим настолько малы что ими можно пренебречь. тогда будем принимать значение максимальной атаки за значение критической атаки.

    теперь посмотри как происходит выборка атаки.
    любое оружие имеет две переменных: шанс на атаку ниже среднего, шанс на атаку выше среднего. (скачать файл со свойствами оружия.)
    это полностью расшифрованный серверный файл оружия. к сожалению в нем отсутствуют новые виды оружия. так же хочу отметить, что эти шансы отсутствуют в клиентских файлах, поэтому значения с оригинальными серверными файлами могут отличаться. (а могут и нет).
    для просмотра файла рекомендуется пользоваться microsoft office excell 2007 и выше. зеленым выделен шанс атаки ниже среднего, бежевым - выше среднего.
    как вы можете заметить сумма этих шансов не дает 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.
    расчет крита для монстров немного иной.
     
  2. Serg279

    Serg279 User

    Joined:
    24.12.10
    Messages:
    424
    Likes Received:
    41
    по файлику выходит что усе примерно одинаково критуют, ток греники обособленно стоят.
    миф про топоры/булавы получается развеян +(

    говорили что в них "крита больше"
     
  3. 3EPHOEd

    3EPHOEd Модератор 4Game Global moderator

    Joined:
    04.02.10
    Messages:
    16,067
    Likes Received:
    1,860
    виликий корейски генератор занятная штука, но имхо, оно как-то выходит интересней просто rand()-а тем что рандомайзер может и на 100500 срабатываний 99 не выкинуть, а тут выходит как бы некая гарантия, что на 100 раз обязательно будет 99.
    (даже пожалуй сей способ надо взять на заметку для применения в народном хозяйстве)

    ещё с критами было интересно вот что, не совсем понятно в каких именно единицах он измеряется, к примеру точенное таликами пишет про %, а на предметах он в единицах, сколько же крита дают сами баффы в игре вообще не видно.
     
  4. Serg279

    Serg279 User

    Joined:
    24.12.10
    Messages:
    424
    Likes Received:
    41
    в бафах 30 чего то там при 7 лвл написано
     
  5. 3EPHOEd

    3EPHOEd Модератор 4Game Global moderator

    Joined:
    04.02.10
    Messages:
    16,067
    Likes Received:
    1,860
    не, не где не написано.
    [​IMG]
    [​IMG]
     
    Last edited by a moderator: Mar 28, 2013
  6. Serg279

    Serg279 User

    Joined:
    24.12.10
    Messages:
    424
    Likes Received:
    41
    да в серверных файликах написано. а так да "в игре не видно"
     
  7. Calista

    Calista User

    Joined:
    07.03.13
    Messages:
    38
    Likes Received:
    30
    важно не единицы измерения а значение. все бонусы в игре делятся на множащие и прибавляющие. крит является прибавляющим бонусом. то есть все криты складываются в общую переменную.

    по части rand() хочу сказать отдельно:
    определение атаки между интервалами определяется как:
    р = а + rand() % b
    р - результат
    а - минимальный предел
    в - максимальный предел
    % - возвращает остаток от целочисленного деления левой части на правую то есть например rand() % 3 будет выдавать числа от 0 до 2
    только вот тут есть нюанс =) стандартно rand() имеет диапазон от 0 до 32767, но мы знаем что атака наша то прыгает далеко за 30к... в этом случае атака будет очень сильно скакать так как она будет фактически не от минимальной до средней, от средней до крита и крит, а от минимальной до минимальной + rand(), от средней до средней + rand() и крит. учитывая что разница между ними составляет 80-150к то скачки атаки будут существенными.
    это если конечно функция рандома не переопределена у корейцев с новым максимумом. хотя если судить по комментариям в коде по шансам очистки руды, то они используют механизм (rand() << 16) + rand() который выдает максимальное число 7fff7fff а значит максимум они не меняли.
    но кто знает как изменился код сервера с тех пор. но я обязательно это проверю в отладке и скажу точно.
     
  8. |xT|™

    |xT|™ User

    Joined:
    04.02.10
    Messages:
    8,401
    Likes Received:
    245
    имхо разрабы механикой крита парились меньше, чем автор написав 1ый пост.