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

так есть готовый compose зачем разбираться с билдом и прочей хренью?
 
так есть готовый compose зачем разбираться с билдом и прочей хренью?

ну я в портейнер этот файлик кинул, завелось сразу.
 
Ошибка получаеться от неправлильно сформированного датапака. Вы как файл datapack.database генерировали?

Насчет другой ошибки, я поправлю.
 
Генерировал через CLI
- run cli
- choose `operation type` as `Server Database`
- choose `SQLite` (MariaDB is not currently supported)
- choose `Install`
- choose `Both`
- observe `login.database` and `game.database` files are created
- choose `Exit` and `Exit` to terminate cli application
Далее в меню выбирал создание Create-User, создаю login and password и вылизала ошибка
SqliteError: NOT NULL constraint failed: accounts.createdTime


Немного доковырял Game-Server и сначала я подумал что его запустил, но в процессе инициализации

ℹ Game Server: using 'dotenv' engine
ℹ Game Server: Hot reloading is disabled.
✔ Game Server: Loaded 27 configs.
[18:06:47.378] INFO (L2TS Game/20828): AgathionData : loaded 21 item associations
[18:06:47.378] INFO (L2TS Game/20828): AgathionData : loaded 118 npc associations
[18:06:47.379] INFO (L2TS Game/20828): BaseStats loaded 0 attribute sets.
[18:06:47.379] INFO (L2TS Game/20828): CategoryData loaded 0 types.
[18:06:47.379] INFO (L2TS Game/20828): EnchantItemOptions : loaded 0 levels for 0 item ids using 0 records.
[18:06:47.379] INFO (L2TS Game/20828): ExperienceData loaded 0 levels.
[18:06:47.379] INFO (L2TS Game/20828): HtmlData : cached 0 individual paths
[18:06:47.379] INFO (L2TS Game/20828): HtmlData : cached 0 known bypass actions
[18:06:47.380] INFO (L2TS Game/20828): InitialEquipmentData loaded 0 classes from 0 records.
[18:06:47.380] INFO (L2TS Game/20828): InitialShortcutData : loaded 0 class groups.
[18:06:47.380] INFO (L2TS Game/20828): InitialShortcutData : loaded 0 total shortcuts from 0 records.
[18:06:47.380] INFO (L2TS Game/20828): InstanceData : loaded 0 names.
[18:06:47.380] INFO (L2TS Game/20828): InstanceData : loaded 0 instance property sets.
[18:06:47.380] INFO (L2TS Game/20828): KarmaData loaded 0 levels from 0 records.
[18:06:47.381] INFO (L2TS Game/20828): EnchantSkillGroups loaded 0 groups using 0 records.
[18:06:47.381] INFO (L2TS Game/20828): EnchantSkillGroups updated 0 skill trees.
[18:06:47.381] INFO (L2TS Game/20828): SkillData loaded 0 individual skills.
[18:06:47.381] INFO (L2TS Game/20828): SkillData loaded 0 enchantable skills.
[18:06:47.381] INFO (L2TS Game/20828): SkillData loaded 0 available skills and 0 existing function templates
[18:06:47.381] INFO (L2TS Game/20828): SkillLearnData loaded 0 npcs
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 class trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 transfer trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 collect trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 fishing trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 pledge trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 subclass trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 sub-pledge trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 transform trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 common trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 noble trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 game master trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 game master aura trees
[18:06:47.381] INFO (L2TS Game/20828): SkillTreesData loaded 0 class mappings
C:\Users\user\Desktop\lineage2ts-master\game-server\source\gameService\models\holders\SkillHolder.ts:8
throw Error( `Skill not found for id = ${id}, and level = ${level}` )
^
Error: Skill not found for id = 3620, and level = 1
at getExistingSkill (C:\Users\user\Desktop\lineage2ts-master\game-server\source\gameService\models\holders\SkillHolder.ts:8:15)
at getSkill (C:\Users\user\Desktop\lineage2ts-master\game-server\source\data\type\sqlite\ArmorSetsData.ts:54:28)
at forEach (C:\Users\user\Desktop\lineage2ts-master\game-server\source\data\type\sqlite\ArmorSetsData.ts:87:42)
at Array.forEach (<anonymous>)
at method (C:\Users\user\Desktop\lineage2ts-master\game-server\source\data\type\sqlite\ArmorSetsData.ts:77:23)
at showLoadStatus (C:\Users\user\Desktop\lineage2ts-master\game-server\source\gameService\loader\DataLoader.ts:52:44)
at call3 (C:\Users\user\Desktop\lineage2ts-master\node_modules\aigle\lib\internal\util.js:103:12)
at EachSeries.iterateArraySeries [as _iterate] (C:\Users\user\Desktop\lineage2ts-master\node_modules\aigle\lib\internal\collection.js:152:21)
at EachSeries._callResolve (C:\Users\user\Desktop\lineage2ts-master\node_modules\aigle\lib\eachSeries.js:43:12)
at resolve (C:\Users\user\Desktop\lineage2ts-master\node_modules\aigle\lib\internal\util.js:184:14)
npm ERR! Lifecycle script `server` failed with error:
npm ERR! Error: command failed
npm ERR! in workspace: lineage2ts-game@1.3.0
npm ERR! at location: C:\Users\user\Desktop\lineage2ts-master\game-server
 
Нужно правильно сделать datapack.database . Как вы его смогли делать? По виду он почти пустой. Нет ни скиллов, ни html страниц, ни остальных данных...

Генерировал через CLI
Тут проблема в том что нужно файлы расставить в различные фолдеры, немного усложнено из-за использования частичных данных от датапака L2J (те данные которые я еще не перенес из PTS данных). Сложно это? Нет. Но тут нужно все акуратно расставлять как датапака так и для гео-пака.

Ну и наконец для тех людей которые хотят не мучаться а получить уже готовые файлы. Можно все файлы скопировать с изображения для докера:
Код:
docker run --entrypoint /bin/cat registry.gitlab.com/mrtrex/lineage2ts/server:latest /opt/lineage2ts/game-server/datapack.7z > premade.datapack.7z
docker run --entrypoint /bin/cat registry.gitlab.com/mrtrex/lineage2ts/server:latest /opt/lineage2ts/game-server/geopack.7z > premade.geopack.7z

Вам понадобиться архиватор 7z для того что-бы извлечь файлы.

Насчет ошибки создания пользователя. Проверьте обновление. Все теперь должно работать.
 
Да вы правы хотел посмотреть как это работает при сборке руками, а не получить готовый вариант(без dockerа). Datapack так-же делал через ваш cli через меню. И раскидывал файлы .database по своим местам которые описаны в readme.md файлах. Почему datapack.database собрался пустым я пока не понял. Но я еще покопаю, и еще потестирую. мало ли что еще интересного найду. Мне просто стал проект интересен, т.к изучаю js и ts пока на любительском уровне. А тут еще к этому любимая игра моей молодости на таких технологиях. Это вам огромное уважение! И технологии покопать и поиграть прям вдохновляет на дальнейшее изучение js
 
Инструкции для датапака и геопака находятся здесь:

Вот примеры скриптов которые генерируют все БД:
-
-
 
Прошло 15 лет с выхода HF. Они все пилят сервера. Надо хоть под классик клиент чтоли... Пробовать... Все свои мысли высказал
Автору успехов в разработке!
 
Если нет цели запустить коммерческий проект, то ХФ идеальный клиент под неспешную и комфортную разработку. Например, лично я пилю ХФ потому, что он последняя хроника, которая еще хоть как-то похожа на ту л2, которую я знаю. Не играя на новых хрониках, без доступа к актуальным ликам, не получится сделать качественно эмулятор. Разработка новых хроник - это всегда гонка с офом, где нужен пак одетых и прокаченных персонажей и спец.софт. При этом соревноваться с корейцами в наркомании можно и на ИЛ, было бы желание.

В большинстве случаев портирование пакетки с более свежих хроник - вопрос месяца факультативной работы по 1-2 часа в день. Тем более, что на большинстве актуальных доступных эмулей, кроме пакетки, отличия кодовой базы от ХФ можно по пальцам пересчитать.
 


Добрый день! Спасибо вам большое за инструкции, сервер полностью запустил. Даже получил доступ до админской учетки и смог воспользоваться //admin и gmshop, работает все шустро(не все конечно, т.к одному такой проект сложно тянуть).
Т.к много работы руки тоже не всегда доходят. Запустил чисто на windows10 без докеров.
P.S Подскажите пожалуйста, обладаю навыками html,css раньше занимался версткой, немного программировал на vue делал небольшие проекты. Сам в области it. Можно вам вообще как то помочь, на первых парах в простых вещах, и постепенно немного усложняться. Например сначала заняться командами для gmshop или админ панели.
 
Я только за! Можно все обсудить на Discord-е вот тут

Или же в приватной переписке здесь на форуме или на Telergram-e (смотрите мой профиль).

Насчет страниц //admin команд, то на данный момент они не работают так как используются страницы от L2J и соответственно ихние команды не будут работать так же как на Lineage2TS. Команды немного переименованны да и добавлений куча, так что будет интересно все это править.
 
Что то в диске пусто, чата нет куда писать, везде права нужны... Собственно бегло глянул, и сразу возник вопрос по датапаку

Судя по доке датапак берется от лыжи. И Cli конвертирует статику и пакует ее в sqlite? А вот что делается с квестами, инстами и аи сходу не понял. В данной реализации данные механики перенесены условно в ядро и разделены на более мелкие механики? Как пример возьмем допустим инст тиады из лыжи. Он лежит в датапаке и в нем описаны методы спавна, ивенты, стейты, кондишины. В общем то вся механика описана в файле инста. Что то подобное у вас это папка listeners, и там даже есть папка instances, но там только два инста. Я и подумал что возможно присутствует деление на мелкие механики, но пока не нашел, те я искал логику нпц которое может телепортировать в инст, аи боса, но не нашел. Или это просто не реализовано? Возможно стоит описать структуру проекта, что бы было понятно как что задумал автор?)
 
Вы правы чтo инстансы не работают. Пока ими не занимался. Но папку вы нашли правильную.

По сравнению с лыжей, весь код который исполняется лежит в репозитории. Тесть нет различия между квестами или там определенной логикой поведения монстров (как сделанно в L2J) и самим сервером. Есть различие между данными датапака или же гео-пака, базой данных (SQLite используется вo всех паках) и самой логикой сервера. Также есть конфигурация сервера, но она представляет нечто отдельное, так как она может перезагружаться в сависимости от настроек.

Сейчас все проверил с только-что регистророванным акаунтом, можно писать как в general так и в bugs и development. Единственное что было неправильно настроенно так это нельзя было увидить прошлый чат.

Более подробно о частях сервера. Это не нужно воспринимать как архитектуру или что-либо подобное. Архитектура зачастую не передает важных элементов соединений блоковых частей, и не показывает почему соединение нужно.

Итак, более подробно о частях сервера.

Конфигурация, это самый первый блок который загружается сервером. Почему? Нам нужно определить при загрузке данных как сервер собираеться работать. Притом все части сервера будут иметь данные при загрузке датапака или гео-пака. Но главным остаеться то, что не все части будут что-либо делать в зависимости от конфигурации.

Второй блок, или же уровень, сервера это данные из датапака. Гео-пак тоже относиться к данным но они будут подгружаться в зависимости от регионов мира в которые войдет игрок. Здесь все загружается при определенной последовательности, так как есть зависимость от данных например предметов или же скиллов которые взаимосвязанны между собой. Можно посмотреть что к чему тут:

Третий уровень загрузки это данные из базы данных. То есть то что либо сохраненно для игроков или определенно системами виртуального мира: функциями сервера (почта, лотерея, переменные сервера и квестов), кланами и промежными уровнями данных (это относиться к соединению многих данных из датапака в обобщенный уровень например скиллов). Можно посмотреть что грузиться тут:

Четвертый уровень это то что нужно запускать после всей инициализации серверных данны. Это будет CommandLink, квесты или listeners, также различные плагины (это по типу систем которые можно выключать или же запускать когда нужно). В этот уровень также входит функция очистки памяти после операций с датапаком (это возможно делать как прямым доступом к GC так и при освобождении ресусров от загрузки данных датапака, из-за того что некоторые данные дублируються и их только нужно определять при загрузке).

Последний уровень это соединение игрового сервера с логин сервером. Тут все просто, запрашивается айдишник на открытый сервер. И теперь наш игровой сервер может принимать игровые клиенты. Конечно не от всех IP, а то что было прописанно при конфигурации. Это касается как игровых клиентов, так и логин сервера, и в особенности CommandLink.

В дополнение хочу добавить что будет полезно посмотреть как работает тестирование сервера. Там описанно во первых пошаговые операции с клиентом. А во вторых, можно будет полазить и посмотреть как программный клиент вообще соединяеться с игровым сервером. Сложно, но будет полезно. Не для всех. Зато будут знания как тестирование можно провести на своем локальном сервере. Удачи!
 
Последнее редактирование модератором:
Интересно, а что случится с таким проектом, при онлайне хотя бы в 500 тел?
 
Интересно, а что случится с таким проектом, при онлайне хотя бы в 500 тел?
Пожалуйста, тестируйте. Из того что я тестировал, все должно работать. Вы ожидаете что сервер сложит ласты?

Хочу добавить что автоматическое тестирование производиться при любом обновлении сервера с использованием 24 клиентов паралельно (тут лимит скорее по железу, так как тестирование производиться из CI, да и в докере, что чревато последствиями краша всего процесса, но зачастую это все работает на ура).
 
Я считаю, что даже если попытаться оптимизировать тайпскрипт для работы с л2 серверами, он будет проигрывать даже яве в реальных нагрузках. Как эсперемент для обучения, возможно он не плох, но в боевые реалии он не сможет.
 
Считайте. Я не против. Из того чтo я видел Ява и Node ну уж очень похожи по производительности. Вы уверенны что вы случайно не смотрели на Python? Там действительно все плохо, аж по крайней мере в 10 раз (как по производительности, так и ергономике програмиирования).

Насчет боевых реалий. Время проверит. Но то что я видел и сейчас занимаюсь по официальной работе, Ява вообще не применима. Из-за многих причин. Но самое главное то что сама Ява не изменилась на столькo что-бы быть производительной (тут память, скорость загрузки, библиотеки с современными алгоритмами и структурами, да и применение вне серверных вариантов в облачных технологий). Многое о ней написанно, но не многоe можно применить. Поетому посмотрим как и к чему.
 
Если не ошибаюсь, то тайпскрипт это однопоточный яп, он ограниченно может в многопоток через дополнения.
Но интересно было бы посмотреть на реальный сервер на тайпскрипте.
AndragorAndragor верифицированный пользователь. запускай, инвесторам скажешь, что это ниxyясебе какая тема

В любом случае, удачи в разработке, реально интересно посмотреть что из этого выйдет.
 
Во первых Typescript это язык. Это не являеться платформой для запуска программ. Typescript используется для компилирования исходников в Javascript для Nodejs. Сейчас есть планы (более одного) для использования Typescript как промежного языка который можно будет компилировать в бинарный код, по сути как и C++ . Вот посмотрим и проверим как это все будет.

Но. Сервер уже использует два потока, без никаких дополнений. Это все работает немного по другому чем на Яве (на самом деле там все сложнее и проблематичнее из-за самой архитектуры JVM). В будущем будут использоваться больше потоков из-за простой причины поиска пути. Но самое главное что это ужe возможно и работает.
 
Оверпостинг
сейчас, появилось

а каков план, опираться на логику лыжи или на птс скрипты?

Да это бред. Нормально у js с производительностью. При вменяемой реализации, проблемы быстрей упрутся в возможности клиента, который не переваривает масс замесы.
 
Последнее редактирование модератором:
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…