Lineage2TS - HF сервер написанный на Typescript

Работает все кроме клановых функций (не отполированно, но все-же) :
- стартовые локации и квесты (их больше 500, не считая клановых или территориальных)
- телепорты
- мобы дропают предметы, ну и спойлятся тоже
- бафы есть и работают (кубики тоже), скиллы рабочие
- различные малые механики сервера: аукционы, соревнование по ловле рыбы, лотерея, почта, dimensional merchant, крафтинг, enchant для предметов.

Есть системы которые недоработанные:
- семь печатей (не проверенный доступ к катакомбам/некрополисам, сама система все сохраняет и переходит в стадии прогрессии)
- dimensional rift (не работает пока)
- airship и корабли (не работают)
- кланы можно создавать и присоединяться, но все другое не проверенно

В сравнении с L2J есть системы которыx у них нет. Например спауны взяты из L2OFF, или же соревнование по ловле рыбы.
 
Прекрасно.
Я вот что хотел сказать, в L2J много реализовано "как увидел, так и сделал" - много описаний не верные (если не разбирали ПТС для понимания).
Так что, если делаете не перспективу и "играбельность", смотрите в ПТС и адаптируйте или полностью наследуйте функционал (я понимаю что там (в ПТС) код повсюду и много завязок).

Тут еще суть всего что пишу, что бы в будущем код можно было на другие протоколы поднять/опустить, или добавлять кастом "вдохнуть что то новое".
В протоколах выше/новее - многое изменили.
 
Полностью согласен. Я в основном ориентируюсь на PTS. Благо есть доступ к коду AI, да и файлы сервера можно найти. Но насчет "как увидел, так и сделал" тоже использую, так как есть (хотя и недостаточно) видео материал про то что просто нельзя найти другим путем (например передвижение персонажа, или других функций которые просто не описаны в самих данных сервера).

Из того что видел, как код так и сама структура сервера, многое в L2J было построенно таким образом что-бы не использовать данные L2OFF (немного странно звучит). Например умения (skill) уж очень по другому работают, как и сама структура вокруг KnownList на сервере представляет много новых проблем. А про датапак и разделение кода можно уж очень много рассуждать что и как. Но, всетаки нужно отдать должное что без L2J у нас не было бы каких либо серверов.

Хочу добавить о том что поиск пути происходит по геодате и сервер не использует pathnodes по типу PTS или L2J производных. Геодата была оптимизированна по размеру и сейчас составляет 55% от используемой от L2J (485MB против 889MB). Мне будет интересно сравнить с другими серверами на Яве какая будет производительность у них. Я пока сравнивал с Acis и из того что я видел на Lineage2TS производительность выше (занимает меньше времени) так и путь намного больше сглажен (на Acis выходит много точек на пути).
 
Это они так пытались избежать юридических проблем с нцсофт.
Правда это все равно не помогло - в свое время их репу на гитхабе один фиг выпилили по жалобе нцсофт.
 
Посмотреть вложение Запись 2025-03-22 181109 (video-converter.com).mp4
У меня лимит на поиск 32мс. За это время строится 16 путей(лимит на каждый 2 мс). Обычно время поиска пути не превышает 0.1мс. Вон на видео - самый длинный путь строился 1.96 мс.
 
Зачем использовать оба? Pathnodes должны вроде быть быстрее. Вы тестировали на большие дистанции, ну больше 2000 в длинну? Вроде последний путь вышел длинным, но как-то не ясно сколько занял этот длинный путь. 16ms ?
 
Что в вашем понимании длинный путь? Назовите точку начала и точку конца - я запишу видео.
 
Как насчет Глудио? Где-то с центра городa то до окружных локаций. Длинный путь например через город. Мне интересно поведение алгоритма в более сложных ситуацияx чем в основом прямые линии.
 
Посмотреть вложение Запись 2025-03-22 184346 (video-converter.com).mp4

MrThirtyOddSix, вот еще пример сложных маршрутов.
Посмотреть вложение Запись 2025-03-22 184946 (video-converter.com).mp4
 
П.с. у тебя не хватает куска ПисЗоны возле храма (потому что его не было ранее в птс, после обновы и расширения блока в проходе - добавили), не критично но все же)
XML:
    <zone name="giran_town_peace13" type="PeaceZone" shape="NPoly" minZ="-3668" maxZ="-3268"> <!-- [22_22] -->
        <node X="82750" Y="148624" />
        <node X="82834" Y="149754" />
        <node X="83587" Y="150173" />
        <node X="83804" Y="150171" />
        <node X="83810" Y="150098" />
        <node X="83755" Y="150091" />
        <node X="83755" Y="150042" />
        <node X="85099" Y="150031" />
        <node X="85099" Y="150241" />
        <node X="86485" Y="150242" />
        <node X="86496" Y="148637" />
    </zone>


и что то с частью квадратов не то...
там где можно прямо пройти, обходит, квадраты старые или патнод?
 
Ну путь не всегда прокладывается прямо, т.к между двумя узлами графа может просто не быть прямого прохода. Если бы дистанция была короче, то путь найденый по ячейкам, был бы более прямым, и был бы более выгодный по весам. Но из-за того, что на большую дистанцию поиск по геоданным не успевает посчитаться за 2мс капа, то выбирается один из путей по паснодам, который не всегда на 100% оптимальный.

Конкретно на скрине, пост обработка пути пропустила этот фрагмент возможно из-за каких-то проблем с прямой видимостью в этом месте. Скорее всего нет прямой связи между узлами.

Движок просто спроектирован для работы в очень высоконагруженных условиях, где производительность ставится на первое место.
 
Последнее редактирование:
То есть как "не всегда прокладывается" ? Он либо прокладывается, либо нет. Что за алгоритм такой? И почему ограничивать все под 2 мс ? Я понимаю что охота много путей просчитать, но в итоге вы сам алгоритм тормозите под лимит 16 мс. Почему не сделать что-бы и путь был оптимальнее и короче? И почему нужно просчитывать столько производных путей если они сами по себе не оптимальны (много точек, много углов где персонаж может просто увидеть точку конца пути но идет где-то около нее)?
 
Потому, что проложить идеальный маршрут на дистанцию произвольной длины, потратив на такой поиск значительные ресурсы CPU не всегда является хорошим решением. В ситуациях, когда путь ищется каждую секуду 3-4 тысячами игроков и 20-30 тысячами мобов, не всегда разумно выделять под работу алгоритма поиска пути 80% ресурсов CPU. Поэтому поиск пути по ячейкам строит более оптимальный путь с точки зрения качества, но более дорогой ценой, а поиск пути по паснодам строит менее оптимальный путь, но практически без ограничений по дальности и сложности местности. Поэтому, если поиск по ячейкам не успел найти путь за лимит времени 16 мс из 32 мс общего времени поиска, то он прерывается с подозрением, что фронтир поиска расширяется либо не туда, либо расстояние слишком большое. В таком случае итоговый путь будет выбираться из тех путей, которые успел найти движок с паснодами.
 
Так погодите, при чем сдесь огромное количество игроков или там мобов? У вас всe подстроенно под 16 мс поиска пути, ну и что-то там под 32 мс. Ладно. Но у меня на скриншотах ведь все просчитывается меньше 20 мс!!! И это при сглаженном пути. Я понимаю что у вас там пути как-то просчитываются много-много раз. Но я про то что зачем? У вас не 2 мс для пути а больше. И при том что все сглаживание можно сделать очень быстро ( у меня меньше одного мс на все это уходит, при том что тут уже многие тысячи точек а не как у вас ). Так вопрос в том, зачем говорить о каких-то мнимых тысячах игроков если то что у меня и у вас выходит под 16 мс ?
 
если то что у меня и у вас выходит под 16 мс ?
Тоже 16 мс говорите? Уложитесь в 16 мс при таком клике?
Посмотреть вложение Запись 2025-03-23 041720 (video-converter.com).mp4

У меня вот не получается...


А вот при таком? Посмотреть вложение Запись 2025-03-23 042816.mp4
 
Последнее редактирование:
Я не про то кто быстрее. А про то что у вас достаточно времени сгладить путь. Я ведь работаю с геодатой а вы с pathnodes. Тут большая разница. Не надо сваливать тему на соревнование. До этого еще дойдет.
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…