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

Безсмысленно. Он слушает, но не слышит. Пускай "дротит как хотит".
Ну зачем же так. Я за то что SQLite работает и будет работать как основная БД. Если нужно, можно подстроить как Mysql так и Postgresql как варианты. Весь код отделен интерфейсами, так что работы будет не много подстроить в принципе любую SQL БД. Берем код от SQLite и подменяем что нужно (ну там вообще можно ничего не измненять, кроме настроек таблиц при создании). И будет ваше счастье... То же самое с датапаком, все разделено и прописано через конфиг. Просто датапак уже будет сложнее сделать, так как форматы данных нужно парсить (можно например загружать много файлов через потоки, но это так, идея, но я уже так делаю с переработкой гео-даты на восьми потоках; раньше такая операция занимала 20 секунд, сейчас меньше пяти...).

Изначально как все началось? Пришли авторитеты форума, сказанули вердикт, друзей привели (не на разборки, а так что-бы пофлудить) что-бы изменить направление проекта в свою сторону. До Projack никто не задавал вопросы... Например, как насчет добавить другие варианты БД в проект. Я конечно за это, но как вторичный вариант по сравнению с SQLite. Вот и все.

но во время работы сервера уже без разницы, зато любой нанятый человек сможет работать над датапаком без установки доп. утилит и знания sql
Немного подробнее отвечу. Конечно разница есть если ты как разработчик ждешь загрузки сервера 20, ну 30 секунд даждый раз (это сравение напрямую с Явой, там и подольше дебаг билды идут...). Начинал с загрузки под 30. Сейчас с дебагером стартует меньше десяти. Достаточно сразу перейти в клиент и не ждать долго.
Ну o датапаке, там другая история. Вот скажите кто и как будет сидеть и ковырять XML или там другой файл кроме как HTM ? Его пару раз вообще изменить и все... Но я не к тому что нельзя. Можно. Я себе так и сделал что у меня есть утилита (cli часть проекта) где все файловые изменения по HTM файлам мгновенно записываются на датапак сервера, и утилита также разговаривает с сервером что-бы перезагрузить все HTM страницы. Вся операция занимает меньше половины секунды.
 
  • Мне нравится
Реакции: BladeRunner

    reanimatedmanx

    Баллов: 10
    За продвижение хороших идей в комюнити

Можно просто использовать итеграцию через RPC
Не нравится мне конечно идея делать gameserver гейтвеем для бд. Лишняя нагрузка на гс. Если что-то будет торчать наружу(даже если веб морда будет прокси), гс ляжет или деградирует от простого баш скрипта дергающего запросы
А насчет описания лазания по дискам, ну вы в 20 веке?
О каких лазаниях речь? Про реплики речь: что вам придется потратить время для защиты данных, чтобы помимо RAID еще что-то прикрутить - тот же litestream настроить(хотя наверное по времени тут будет схоже с настройкой реплик для мускула). О копированиях тоже я не говорил, а об общем доступе, когда вам понадобится открыть второй сервер и логины/пароли будут общими, но видимо тоже будет через RPC. Кажется такая архитектура не сделала проще работу над л2 сервером
Здесь же на наших форумаx что люди делают? Копаются ручками, винтики слаживают... не нужны никакие докеры, даже VM-ы, мы все умеем в нашем 20-ом веке! Пора привыкать что технологии есть и получше.
Так и что же делают?) Я вообще не встречал постов про это и советов про то как работать с бд. Тут есть люди, которые все на AWS перенесли, есть те кто контейнеризовал все, крутит на выкупленной железяке из ДЦ и радуется. Есть конечно и те, кто логи в боевую бд пишет, но эти не пишут тут) А если где и есть куски - то вопросы новичков, которые не в 20 веке, а для которых играться контейнерами будет сильной нагрузкой для старта(хотя может контейнер по рецепту поднять им было бы и проще). Да и опять же спорный вопрос, а нужно ли это, когда нужно 3 инстанса запустить и все. Вас кто-то обидел 20 веком? Откуда такое ЧСВ евангелиста, не понятно. Вы собственно из-за этого и получили такую реакцию в ответ)
Вот скажите кто и как будет сидеть и ковырять XML или там другой файл кроме как HTM ?
Все чьих технических навыков или желания не хватает для создания редактора? Именно так все далекие от разработки люди начинают свой путь в л2 "администрирование" сервера. Я сомневаюсь, что редактирование таблиц супер удобнее. Если вы не ограничиваетесь клонированием pts, то изменения будут нужны и скорее всего доп. тулинг для удобства
Я себе так и сделал что у меня есть утилита (cli часть проекта) где все файловые изменения по HTM файлам мгновенно записываются на датапак сервера, и утилита также разговаривает с сервером что-бы перезагрузить все HTM страницы.
В 20 веке люди делают изменение htm в IDE, которое синкается с ремоутом и для этого не нужно ни строчки кода, а сервер с отключенным флагом кеширования просто читает запрашиваемый клиентом файл
 
Последнее редактирование:
MrThirtyOddSix, а можно вопросы нуба?
1. почему именно тайпСкрипт был выбран, чем он лучше явы в процессе работы сервера, а не загрузки? (готов ждать ан 20 сек больше)))
2. sqlite быстрее при загрузке, а нужна ли его скорость и дает ли он ее в процессе работы? опустив другие проблемы, даст ли он например прирост по своей задаче макс онлайна допустим с 5к до 10к на сервере(цифры для примера)?
3. на базе чего ведется разработка сервера? это самописный проект, или основывается на каких-то исходниках/декомпиле, который рефакторится в TS?
 
Последнее редактирование:
Ну и да, а цель проекта какая в итоге? А то мы тут все переживаем за качество и боеготовность держать удар, а оно можа и не надо
 
Не нравится мне конечно идея делать gameserver гейтвеем для бд. Лишняя нагрузка на гс. Если что-то будет торчать наружу(даже если веб морда будет прокси), гс ляжет или деградирует от простого баш скрипта дергающего запросы

О каких лазаниях речь? Про реплики речь: что вам придется потратить время для защиты данных, чтобы помимо RAID еще что-то прикрутить - тот же litestream настроить(хотя наверное по времени тут будет схоже с настройкой реплик для мускула). О копированиях тоже я не говорил, а об общем доступе, когда вам понадобится открыть второй сервер и логины/пароли будут общими, но видимо тоже будет через RPC. Кажется такая архитектура не сделала проще работу над л2 сервером
Вы рассуждаете с позиции сервера и простого админа, который сидит и ручками наводит порядок. Нужно просто поставить вопрос о том ЧТО хотите делать и как связываться с сервером. Так вот, как например настроить RPC с сервером? Проект используется через докер. Поетому все что проиходит на БД тоже делается внутри докера. То есть зачем открывать порт на сервере к RPC, не надо это делать. Берем VPN по типу Tailscale и соединяем все сервисы. Ну а если все сервисы у нас уже на докере, то можно сразу запихнуть их в docker swarm. Да, это посложнее чем просто связывать Mysql и сервисы напрямую, но вы все-равно решаете те же самые проблемы, только другим путем:
- связка БД как с сервером, так и сервисами
- доступ, как по паролям так и сетям
- завязка сервера и проверка им данных в БД и наоборот с сервисами
Все это надо смотреть конкретно, и решать подробно. Обощать, не надо.

MrThirtyOddSix, а можно вопросы нуба?
1. почему именно тайпСкрипт был выбран, чем он лучше явы в процессе работы сервера, а не загрузки? (готов ждать ан 20 сек больше)))
2. sqlite быстрее при загрузке, а нужна ли его скорость и дает ли он ее в процессе работы? допустим опустив другие проблемы, даст ли он например прирост по своей задаче макс онлайна допустим с 5к до 10к на сервере(цифры для примера)?
3. на базе чего ведется разработка сервера? это самописный проект, или основывается на каких-то исходниках/декомпиле, который рефакторится в TS?
1. Typescript это для того что-бы сервер работал на Nodejs.
2. Нет. Он выбран только из-за скорости и простоты работы (например не нужно дополнительной БД сервиса, все упихивается в докер)
3. Изначально основывался на исходниках L2J HighFive. Например все квесты были переписанны от туда. Ну а со временем (проекту уже больше чем четыре года) он изменился из-за дополнений данных как от L2OFF, так и например оптимизаций по гео-дате, так и ИИ.
Ну и да, а цель проекта какая в итоге? А то мы тут все переживаем за качество и боеготовность держать удар, а оно можа и не надо
Построить полноценный игровой сервер. Вы поймите что я не для вас и не для денег это все делаю (у меня их достаточно, и не только их). Проект изначально начал делать что-бы проверить как можно вообще написать все это для Nodejs. Ну и решать интересные задачи при программировании сервера (на работе таких проблем просто не увидишь). Нужно тоже определить, что за удар? Работает сервер? Да. Но я то только один этим занимаюсь, и не один год. Поэтому не обессудьте в том что сервер может не работать на все 100%, даже сравнивая с L2J.
 
Вы рассуждаете с позиции сервера и простого админа
Нет я смотрю с позиции системы, где "однопользовательская" бд должна будет обслуживать gs, ls, web. В итоге получится: игроки логинятся, кто-то фармит и предметы пишутся в бд, и где-то сидит Logan22 и показывает 1001 способ дрючить веб для регистрации аккаунта. И тут в ДЦ выключают электричество и отваливается диск)
 
Нет я смотрю с позиции системы, где "однопользовательская" бд должна будет обслуживать gs, ls, web. В итоге получится: игроки логинятся, кто-то фармит и предметы пишутся в бд, и где-то сидит Logan22 и показывает 1001 способ дрючить веб для регистрации аккаунта. И тут в ДЦ выключают электричество и отваливается диск)
Да, с позиции классического архитектора (ну там диаграммы, документы, обсуждения и т.д) , то что есть сейчас не очень приятно. Мне это все понятно. Но не волнует (не первую декаду программирую, и делаю архитектуру, обсуждения и т.д). Для меня нужен сервер что-бы его можно было просто обслуживать. Как это сделать? Нужно что-бы человек сделал все-го несколько вещей и сервер работал. Все. Не надо настраивать БД, лазить в конфиги, понимать датапаки, смотреть логи.... Нужно просто взять docker image и запустить его.

A для тех кто хочет полазить и дополнительно все конфигурировать, это тоже можно через докер.

A вот если делать интеграцию с другими сервисами тут уже нужно конкретно спрашивать, что нужно, как удобнее это все сделать что-бы самому админу не надо лазить в контейнер... Просто другой подход, мы же не в 20-ом веке, а уже 21-ом. И так как проект любительский, нам не нужно все делать с бэкапами, репликами, фейловерами...
 
  • Ха-ха-ха
Реакции: kick
1. Typescript это для того что-бы сервер работал на Nodejs.

1. тогда вопрос сохраняется) чем НодЖС лучше явы во время работы ретейл-сервера? честно не знаю, вот интересно услышать.
2. и почему не C++?

Построить полноценный игровой сервер. Вы поймите что я не для вас и не для денег это все делаю

3. но первое же предложение не противоречит второму) полноценный рабочий сервер как раз подходит и для других фришек, и для монетизации, если он полноценно и качественно работает )
 
Последнее редактирование:
Построить полноценный игровой сервер.
Геодата есть, сейчас работаю над поиском пути для мобов. O том что пока не работает, так это все что связанно с захватом територий (замки, форты и межклановые войны).
Смею посоветовать вам взять pdb к pts(вроде гомункул хроник) из шары сделать себе декомпили и использовать как справочник. В джава эмуляторах большинство делалось "как чувствую", а не как корейцы задумали. Тут Aristo может краше рассказать)
 
1. тогда вопрос сохраняется) чем лучше НодЖС лучше явы во время работы ретейл-сервера? честно не знаю, вот интересно услышать.
2. и почему не C++?
3. но первое же предложение не противоречит второму) полноценный рабочий сервер как раз подходит и для других фришек, и для монетизации, если он полноценно и качественно работает )
1. Во многом от того что я видел и работал, Ява и Nodejs по скорости равны. Но, не равны в много-поточной производности. Что очень важно заметить при сравнении. Оба языка работают изначально на одном потоке. Но, я к чему это все, производиетльность Явы падает если она использует блокировку по потокам к доступу например БД. Чем лучше? Все зависит от того как оптимизировали. Оба языка могут быть очень быстрыми.
2. Легкость разработки. Ява, как и Nodejs, в два раза медленнее (ну тут зависит опять от оптимизации или же SIMD кода) чем C++. Но не нужно например заботиться о доступе к памяти, долговечности даты, синхронизирования по диску или же сети. Все это важно, но не стоит времени и кропотливости, кроме уж очень особенных ситуаций.
3. Я не против монетизации. Я даже интегрировал некоторые элементы premium в разработку. Но ведь архитектура сервера позволяет интеграцию. Если надо использовать полноценную БД, можно также сделать. Просто надо добавить и тестировать. Вот и все. Даже структура таблиц во многом осталась как у L2J. На сегодняшний день, упор проекта ведется на разработку, а не обслуживание. А разработка с SQLite намного быстрее и легче, да и запуск сервера через докер намного удобнее. Для крупных проектов на базе сервера будет отдельная дискуссия, что надо и где. Тогда и поговорим.
 
MrThirtyOddSix, а когда планируется версия, близкая к релизу, в которую уже можно вполне поиграть? ну допустим на 98% готовая, так как понятно, что последние 2% проекта всегда вечно можно пилить )
 
MrThirtyOddSix, а когда планируется версия, близкая к релизу, в которую уже можно вполне поиграть? ну допустим на 98% готовая, так как понятно, что последние 2% проекта всегда вечно можно пилить )
Сразу как только. Но если по серьезному, не знаю. Тут нужно много тестировать (есть cucumberjs для автоматизации), что можно например уже сделать но это все занимает мое время при написании таких тестов. Дальше нужно проверять что осталось сделать... все мне одному :)

если будет ддос может и не задеть игроков.
Стоит напомнить что проект имеет серверную прокси. Например у нас имеется один сервер, который нужно изолировать от прямого доступа. Как это сделать? Ставим прокси сервера (ну например две-три штуки) и прописываем куда эти прокси будут соединятся, то есть к нашему изолированному серверу (тут можно и VPN применять, и связь через докер, это отдельный разговор). Если один прокси упадет, другие будут работать. Но главное что сам игровой сервер будет жить. Прокси работает также с L2J серверами, не только Lineage2TS сервером. И по идее должна работать с L2OFF, там по пакетам разницы нет. Можно например настроить свой клиент на локальный сервер localhost, поставить прокси и прописать IP другого сервера, и все будет работать. Если есть защита на сервере и она работает через L2 протокол, то все должно также работать через прокси (там данные пакетов не переписываются, но переписывается шифрование, так как прокси будет использовать ключи шифрования для сервера при разговоре к серверу, другие ключи при разговоре клиента). Ну и такие прокси могут поддерживать сотни клиентов.
 
Все это важно, но не стоит времени и кропотливости, кроме уж очень особенных ситуаций.
К сожалению, 99% серверов открываются не из академического интереса, а с целью заработать денег. Поэтому для них такие ситуации, когда внезапно нужно получить максимально низкоуровневый доступ к какому-то процессу, становятся частью ежедневной рутины и байтоебство выходит на совершенно другой уровень. Особенно это касается крупных проектов, на 3-4к онлайна. В л2, с ростом онлайна, нагрузка растет экспоненциально и некоторые особо нагруженные функции оптимизируют очень плотно, вплоть до ручных правок байткода или выноса в натив.

Да, SQLite быстрее для загрузки, так ка датапак представляет один файл. Но много есть данных в формате JSON, которые де-сериализируются при загрузке. Все данные как на Яве загружаются в память. Но разница в том что процесс загрузки быстрее чем чтение десяток тысяч XML и HTM фаийлов. Кстати, датапак собирается из обычных файлов CSV, XML и HML, есть этап где это все собирается и генерируется (например генерация точек спаунов или же генерация различных форм тоже из точек). Некоторые команды от админа используют техтовый поиск например для нпц или же игровых вещей, поэтому SQLite тоже помогает.
Ну кроме L2j-way(который является ничем иным, как «сделаем как угодно, но по другому, а то копирасты снова сожрут наш репозиторий») есть еще много других способов работы с датапаком. Лично я, например, искренне не понимаю, зачем переделывать работу, которую уже давно сделали корейцы, поэтому мой проект работает полностью нативно с датапаком ПТС, храня reed-only экземпляр в zip архиве, а все изменения вносятся in memory либо в виде *.patch дифов(единичные ситуации когда нужно исправить баги или опечатки корейцев), либо альтернативными расширениями, которые или реплейсят, или дополняют оригинальные данные(При этом, достаточно изменения одной строчки в конфиге, чтобы загрузился чистый корейский датапак и получился почти оригинальный х1 ПТс ХФ на выходе).
В итоге, парс всех скриптов(птс .txt файлы из папки scripts) из zip и создание объектов занимают около 1.5-2 секунд. Аналогично 1.5-2 секунды загружается геодата из zip, пасноды из zip, патчи для них. В целом парс и загрузка ВСЕГО датапака ПТС целиком, включая(75000 html для трех языков из zip) и последующая загрузка сервера, занимает около 15 секунд. Наиболее длительный процесс загрузки, это парс и загрузка в память 15000 классов ИИ, но за счет очень жесткой оптимизации, процесс удалось сократить с 30 изначальных секунд, до 5-7 секунд и при этом процесс загрузки максимально эффективно распараллелен и почти линейно масштабируется на любое количество ядер. При этом объем данных изначально считываемых с диска(включая геодату и граф с узлами для поиска путей) не превышает 600 мб. При этом эти данные максимально локализованы и доступны на максимальной скорости для последовательного чтения во время загрузки.
Так что, упомянутая вами лыжа, это далеко не эталон, и к сожалению уже даже не представитель, современного поколения эмуляторов L2. Она архитектурно и технологически соответствует 2011-2014 годам, но все еще являясь лучшим из открытых и свободных движков.

В вашем случае, как я понимаю, вы пишите не эмулятор Lineage 2, а эмулятор L2j.
 
В вашем случае, как я понимаю, вы пишите не эмулятор Lineage 2, а эмулятор L2j.
Нет конечно. Проект про написание сервера L2 HighFive. Не эмулятор к эмулятору. Не надо зацикливаться на L2J, там код и данные только как пример.

К сожалению, 99% серверов открываются не из академического интереса, а с целью заработать денег. Поэтому для них такие ситуации, когда внезапно нужно получить максимально низкоуровневый доступ к какому-то процессу, становятся частью ежедневной рутины и байтоебство выходит на совершенно другой уровень. Особенно это касается крупных проектов, на 3-4к онлайна. В л2, с ростом онлайна, нагрузка растет экспоненциально и некоторые особо нагруженные функции оптимизируют очень плотно, вплоть до ручных правок байткода или выноса в натив.
Отвечу более детально. Не я окрываю сервер. Я понимаю что хочется рассказать, но зачем? По мне вы просто фантазируете.
Ну кроме L2j-way(который является ничем иным, как «сделаем как угодно, но по другому, а то копирасты снова сожрут наш репозиторий») есть еще много других способов работы с датапаком. Лично я, например, искренне не понимаю, зачем переделывать работу, которую уже давно сделали корейцы, поэтому мой проект работает полностью нативно с датапаком ПТС, храня reed-only экземпляр в zip архиве, а все изменения вносятся in memory либо в виде *.patch дифов(единичные ситуации когда нужно исправить баги или опечатки корейцев), либо альтернативными расширениями, которые или реплейсят, или дополняют оригинальные данные(При этом, достаточно изменения одной строчки в конфиге, чтобы загрузился чистый корейский датапак и получился почти оригинальный х1 ПТс ХФ на выходе).
Не понимайте, меня это устраивает. Но со временем поймете, я уже тут написал почему и как. Зачем мне это все говирите? Фантазируете опять?
Так что, упомянутая вами лыжа, это далеко не эталон, и к сожалению уже даже не представитель, современного поколения эмуляторов L2. Она архитектурно и технологически соответствует 2011-2014 годам, но все еще являясь лучшим из открытых и свободных движков.
Никто зa эталон ничего не брал. Не нужно путать идеи начала проекта с тем что делается. Я уже описал что структура как данных так и сервера достаточно отличется от Явы. Nodejs не Ява, я так думаю вы это понимаете. А то что такая разница может быть совсем большой не приходила вам в голову? Посмотрите код и потом сравнивайте с тем что есть на Яве.
 
посмотрим что будет когда это чудо запустят на лайве с онлайном людей 300 если запустят , но мне кажется все ляжет тем более там много путей для ддоса будет , для себя отличный опыт да но в массы на живые проекты это не встанет как по мне. Удачи в разработке.
 
Отвечу более детально. Не я окрываю сервер. Я понимаю что хочется рассказать, но зачем? По мне вы просто фантазируете.

Не понимайте, меня это устраивает. Но со временем поймете, я уже тут написал почему и как. Зачем мне это все говирите? Фантазируете опять?

Никто зa эталон ничего не брал. Не нужно путать идеи начала проекта с тем что делается. Я уже описал что структура как данных так и сервера достаточно отличется от Явы. Nodejs не Ява, я так думаю вы это понимаете. А то что такая разница может быть совсем большой не приходила вам в голову? Посмотрите код и потом сравнивайте с тем что есть на Яве.
Засим отклаиваюсь.
 
может глянуть всетаки его код? вроде открытый...
Зачем? Я не понимаю абсолютно ничего в JS или TS. Ты возможно мог заметить, что я не критиковал или разбирал код ТСа, а только его ответы. Просто я не привык иметь свое мнение в том, в чем не разбираюсь.
 
Почитал я это — из пустого в порожнее. Тебе белое, ты в ответ чёрное. Не стоит оно четырёх страниц чтения.

Успехов тебе в твоём четырёхлетнем начинании, но, боюсь, этой теме нет места на форуме — она попросту неактуальна.

И так есть одна большая истина, кому может понадобиться твоя сборка, ну да, админам, но...крупным состоявшимся с миллиоными бюджетами, средний класс так назовем, те кто в теме и на опыте не сильно не берут разгон, и самые основные на кого тебе нужно ориентироваться это новички.

Начнём с первых. Эти люди даже на форумах не сидят. У них топовые исходники, которые они пилят годами. Даже если вдруг зайдут сюда, твою сборку точно не возьмут.

Далее вторые. Почти как первые, только денег поменьше. Они сидят на Eternal (или своих допиленных годами исходниках с шары) и переходить никуда не собираются.

И вот самые интересные — третьи, новички. Они пройдут мимо просто потому, что для них уже написаны тонны гайдов, сняты сотни видео о том, как делать то и это. Но всё равно создают темы в духе «А как пукнуть, чтобы не обосраться?» (шутка). Или, точнее, «Как запустить сборку?».

А теперь представь: новичок качает твою сборку — и не понимает, что с ней делать. Гайдов нет, гуглить не умеет. И самый главный вопрос — а нафига ему это вообще надо?
 
У них топовые исходники, которые они пилят годами. Даже если вдруг зайдут сюда, твою сборку точно не возьмут.
А есть какой-то рейтинг исходного кода, где оценивают кто и что написал? Я думал коммерческое приложение пишется исходя из бизнес-требований
Далее вторые. Почти как первые, только денег поменьше. Они сидят на Eternal (или своих допиленных годами исходниках с шары) и переходить никуда не собираются.
Не было посыла куда-то переходить. Человек выложил в комьюнити свое приложение и странно, что его воспринимают в штыки
 
Назад
Сверху