Написание сервера для lineage 2 chronicle 1 на node.js

Если честно, я не готов пересказывать вам содержимое файла, размером в 50 мб чистого кода. Там огромное число всевозможных условий, которые начинают работать с момента, когда персонаж издал шум и вызвал у окружающих существ SEE_CREATURE. Мне, чтобы полностью воспроизвести всю эту логику на Java, потребовалось больше двух лет непрерывной работы. Там далеко не так все просто, как кажется. Ну разумеется, если целью является сделать что-то похожее на оригинальный сервер. В 99% сборок которые я видел, этим не заморачивались.
Ну мне много то не надо. Мне просто интересно именно то место про раздупление узнать и что к чему. Вы ведь говорили что там и таймеры и код. Я просто непойму как это все относиться именно к первичной атаке или нападению к нпц.
 

Ну мне много то не надо. Мне просто интересно именно то место про раздупление узнать и что к чему. Вы ведь говорили что там и таймеры и код. Я просто непойму как это все относиться именно к первичной атаке или нападению к нпц.
Речь была про то, что келтир начинает реагировать на удар персонажа ДО непосредственного хита.
Первая причина в том, что я написал выше, а именно hit_time_factor. ИИ моба получило событие атаки практически мгновенно, еще не обработав даже сам хит по НПЦ.
В обычном случае, на ПТС, между атакой на НПЦ и ответным действием проходит два больших тика. Первый тик идет на оповещение ИИ об атаке(которая проходит спустя небольшую задержку после атаки, а не моментально). После этого событие встает в очередь, которая будет обработана на начало следующего серверного тика, который 1000 мс. Т.е минимальная задержка уже начинается как дельта к времени ближайшего тика. После этого проходит ряд проверок. Если НПЦ уже в состоянии атаки и имеет PhysicalState ATTACK, то просто обновляется приоритетная цель, обновляя приоритетную очередь целей, на базе хейта. Если же НПЦ не в состоянии атаки, то начинается второй большой тик, т.к переключение физических стейтов происходит по таймеру, который в данном случае будет установлен на 1000, т.к это результат того, что функция AddAttackDesire добавила в приоритетную очередь таск атаковать цель с определенным весом, и скорее всего именно этот таск будет на верху очереди, из-за его наибольшего веса. От таска будет запрошен соответствующий физический стейт, в который будет переключен моб, после чего будет вызван этот же таск повторно, через 1000мс, и он будет уже обработан для состояния ATTACK.
Те же 1000мс, это не константа. По сути, у ИИ просто есть несколько стеков, куда кладутся события и вызывается таймер. ИИ по истечению таймера забирает первый элемент и выполняет его логику.
 
Ну мне много то не надо. Мне просто интересно именно то место про раздупление узнать и что к чему. Вы ведь говорили что там и таймеры и код. Я просто непойму как это все относиться именно к первичной атаке или нападению к нпц.
А для чего такая инфа ? Ты пилишь свой эмулятор на java ? На самом деле это уже серьезная механика, либо ты гений ли бо второй Блендер )
 
А для чего такая инфа ? Ты пилишь свой эмулятор на java ? На самом деле это уже серьезная механика, либо ты гений ли бо второй Блендер )
Ну как бы
Тема 'Lineage2TS - HF сервер написанный на Typescript'
 
Промежуточный тест одежды, оружия. (переработал items)

 
  • Мне нравится
Реакции: PrizraKZN

    PrizraKZN

    Баллов: 26
    Чел ты красава, не слушай некого делай ради хобби бро
Как расчитывается время реакции после каста скила?

Wind strike - hittime 4000мс. (Базовая скорость анимации скила)
4000 * 0.87264(maleAttackSpeedMultiplier для HumanMage 1 уровень) = 3490.56

Расчет верный? То есть после каста скила сервер должен реагировать через 3500мс?
 
Как расчитывается время реакции после каста скила?

Wind strike - hittime 4000мс. (Базовая скорость анимации скила)
4000 * 0.87264(maleAttackSpeedMultiplier для HumanMage 1 уровень) = 3490.56

Расчет верный? То есть после каста скила сервер должен реагировать через 3500мс?
Это нужно скорее всего смотреть в NASC("Исходники" имеются), если там конечно стоит таймер под каждый объект/событие .
 
Как расчитывается время реакции после каста скила?

Wind strike - hittime 4000мс. (Базовая скорость анимации скила)
4000 * 0.87264(maleAttackSpeedMultiplier для HumanMage 1 уровень) = 3490.56

Расчет верный? То есть после каста скила сервер должен реагировать через 3500мс?
На примере ХФ от L2J там немного запутанно, но ответ да. Сами эффекты скилла будут наложенны на цель через время анимации скилла в клиенте (или скорее то число времени что сервер выдал клиенту как и вы вычислили). Но есть нюансы. Как и возможность прекратить каст скилла, так и проверка цели на годность эффектов для цели (эта та запутанная часть о которой можно достаточно долго обсуждать как и что).

Посмотреть код можно тут (в L2J сделанно по очень запутанной логике между несколькими файлами, смотреть на номерок 400 для понимания) :
-
-
 
Это нужно скорее всего смотреть в NASC("Исходники" имеются), если там конечно стоит таймер под каждый объект/событие .
Мне кажется формула дожна быть такой же простой как с физической атакой. Где (500000 / на скорость атаки) = время реакции после удара.

К примеру 500000 / 330(скорость атаки Human Fighter) = ~1500мс
 
Мне кажется формула дожна быть такой же простой как с физической атакой. Где (500000 / на скорость атаки) = время реакции после удара.

К примеру 500000 / 330(скорость атаки Human Fighter) = ~1500мс
Не смотрел в тоталчекер от классика?
 
Открывать через IDA, и в ней же подгрузить pdb файл. Получится какой-никакой декомпил, в который можно подглядывать (правда, часть механик по наложению эффектов иная в лоу хрониках)
 
С помощью ИИ, котрый изучил проекты L2J, мне была предложина формула для расчёта времени выполнения анимации скила на основе casting speed.

Hit Time = Base Casting Time * (1.1 - (0.0006 * Magic Speed))

Где Base Casting Time это время каста скила из скриптов PTS (Например для wind strike это 4000мс)
А Magic Speed это скорость каста персонажа. Базовое значение 333.
Данное значение нужно подставлять в пакет MagicSkillUse.

Таким образом формула отлично подходит для всего диапазон между 333 и 1500.

P.S.
Откуда эта формула - не известно. Источников нет. Но ИИ пишет, что она добыта империческим путем разработчиками L2J. В сурсах я ее тоже не находил. Даже значений таких нет.
 
Таким образом формула отлично подходит для всего диапазон между 333 и 1500.
Максимальная скорость каста на старых хрониках не ограничена, позже были введны лимиты, 2к на маг каст, и 1.5к на физ скорость
 
Максимальная скорость каста на старых хрониках не ограничена, позже были введны лимиты, 2к на маг каст, и 1.5к на физ скорость
Будем решать проблемы по мере их поступления ☺️
 
Назад
Сверху