Адаптеры серверов Lineage 2

  • Автор темы Автор темы Prizmo
  • Дата начала Дата начала

Prizmo

Путник
Участник
Сообщения
19
Розыгрыши
0
Репутация
55
Реакции
19
Баллы
13
Хроники
  1. Prelude
  2. Harbingers of War
  3. Age of Splendor
  4. Rise of Darkness
  5. Scions of Destiny
  6. Oath of Blood
  7. Interlude
  8. The 1st Throne: The Kamael
  9. The 1st Throne: Hellbound
  10. The 2nd Throne: Gracia
  11. The 2nd Throne: Freya
  12. Chaotic Throne: High Five
  13. Goddess of Destruction Awakening
  14. Goddess of Destruction Harmony
  15. Goddess of Destruction Tauti
  16. Goddess of Destruction Glory Days
  17. Goddess of Destruction Lindvior
  18. Valliance / Epeisodion / Raiders
  19. Ertheia / Dimensional Strangers
  20. Infinite Odyssey
  21. Helios
  22. Grand Cursade
  23. Salvation
  24. Fafurion
  25. Shadow of the Kamael
  26. Prelude Of War
  27. Homunculus
  28. Return Of The Queen Ant
  29. Master Class
Сборка
All
Этот модуль предоставляет унифицированный интерфейс для взаимодействия с различными сборками серверов Lineage 2.

## Структура проекта

```
adapt/
├── acis/ # Адаптер для серверов ACIS
├── base/ # Базовая реализация адаптера и фабрики
├── lucera/ # Адаптер для серверов Lucera
├── pwsoft/ # Адаптер для серверов PWsoft
└── index.js # Основная точка входа
```

## Использование

```javascript
const { getAdapter } = require('./adapt');

// Получение адаптера для конкретного сервера
const adapter = await getAdapter(serverId);

// Получение списка персонажей
const characters = await adapter.getCharacters('pvp', 20, 0);

// Получение информации о клане
const clan = await adapter.getClanDetails(clanId);
```

## Основные возможности

- Унифицированный интерфейс для разных сборок серверов
- Кэширование адаптеров для оптимизации производительности
- Обработка ошибок и логирование
- Поддержка автоматического переподключения
- Определение типа сервера на основе конфигурации

## Поддерживаемые операции

### Работа с персонажами
- Получение списка персонажей с фильтрацией
- Поиск персонажей по имени
- Детальная информация о персонаже
- Управление инвентарем
- PvP/PK статистика

### Работа с кланами
- Получение списка кланов
- Поиск кланов по названию
- Детальная информация о клане
- Управление составом клана

### Мониторинг сервера
- Проверка статуса сервера
- Получение количества онлайн игроков
- Статистика активности
- Мониторинг системных ресурсов

## Примеры использования

### Получение статистики персонажа
```javascript
const pvpStats = await adapter.getCharacterPvPStats(charId);
console.log(`PvP убийства: ${pvpStats.pvp_kills}`);
console.log(`PK убийства: ${pvpStats.pk_kills}`);
```

### Работа с кланами
```javascript
// Получение списка кланов
const clans = await adapter.getClans('reputation', 10, 0);

// Получение членов клана
const members = await adapter.getClanMembers(clanId);
```

### Поиск персонажей
```javascript
// Поиск по имени
const results = await adapter.searchCharacters('Test');

// Получение детальной информации
const details = await adapter.getCharacterDetails(charId);
```

## Обработка ошибок

Все методы адаптера возвращают Promise и обрабатывают ошибки:

```javascript
try {
const adapter = await getAdapter(serverId);
const characters = await adapter.getCharacters();
} catch (error) {
console.error('Ошибка при получении персонажей:', error.message);
}
```

## Конфигурация

Настройки серверов находятся в файле `config/servers.js`:

- ID сервера
- Название
- IP адрес
- Порты (login, game)
- Настройки базы данных
- Тестовые аккаунты

## Расширение функционала

Для добавления поддержки новой сборки сервера:

1. Создайте новый каталог в `adapt/`
2. Реализуйте базовый интерфейс адаптера
3. Добавьте фабрику в `base/factory.js`
4. Обновите конфигурацию в `config/servers.js`

Занимаюсь реализацией tg webapp под la2.
Посмотрел как реализовано в большинстве web (обвязок) глаза вывалились.

Минусы реализации адаптеров в нынешних web:
  1. Сильная связанность классов - система построена на наследовании вместо композиции, что снижает гибкость. Постоянно что-то наследуется, что создает жесткую зависимость между адаптерами разных серверов.
  2. Избыточное дублирование кода - многие методы повторяются с минимальными изменениями в разных адаптерах, вместо повторного использования общей логики.
  3. Отсутствие единого интерфейса - хотя существуют интерфейсы IProxy, разные адаптеры имеют несогласованные методы и сигнатуры.
  4. Сложная иерархия наследования - трудно отследить, где реализована конкретная логика, из-за многоуровневого наследования и делегирования.
  5. Нет централизованной обработки ошибок - каждый адаптер обрабатывает ошибки по-своему, что затрудняет поддержку и отладку.
  6. Несогласованное именование - методы для одинаковых операций называются по-разному в разных адаптерах.
  7. Жесткая привязка к конкретным таблицам БД - адаптеры тесно связаны с конкретными названиями таблиц и полей, что затрудняет поддержку новых версий серверов.
Преимущества подхода в Node.js:
  1. Четкая иерархия - все адаптеры наследуются от BaseAdapter, который определяет общий интерфейс.
  2. Фабричный метод - использование createAdapter в factory.js для динамического создания нужного адаптера.
  3. Единообразная обработка ошибок - более последовательный подход к обработке ошибок.
  4. Более чистый код - лучшая структура и меньше дублирования за счет наследования от базового класса.
  5. Четкое разделение ответственности - каждый адаптер отвечает только за специфику конкретного типа сервера.
В целом, реализация адаптеров в Node.js выглядит более современной и поддерживаемой, с лучшими практиками проектирования, чем те, что используются в нынешних (обвязках).
 

Вложения


Нету Мобиуса, L2J - грусть, печаль (Бразилы бы, монумент бы построили за такое))).

А в целом, из шары, такое мало кто сразу в продакшн вкинет такое.
 
Я даже не понимают что это и для чего нужно :unsure:
 
Нету Мобиуса, L2J - грусть, печаль (Бразилы бы, монумент бы построили за такое))).

А в целом, из шары, такое мало кто сразу в продакшн вкинет такое.
Это всего лишь пример моей реализации и не более.
Если есть кодеры которым интересно, они допилят под себя.
Могу добавить и l2j была бы структура БД... Если есть желание помочь, дам доступы - залей интересующие тебя БД. Я сделаю и прд них.
Я даже не понимают что это и для чего нужно :unsure:
Давайте объясню простыми словами, что делают адаптеры:

  1. Адаптеры - это "переводчики" между приложениями и разными серверами игры:
    • Каждый сервер (Acis, PWsoft, Lucera) хранит данные по-своему
    • Адаптер знает, как "говорить" с конкретным сервером
  2. Пример:

    JavaScript:
    // Хотим получить информацию об игроке
    const player = await adapter.getCharacterDetails(123);
    
    // Адаптер сам разберется как получить эти данные:
    // - У Acis они в одной таблице
    // - У PWsoft в другой
    // - У Lucera в третьей

  3. Главное преимущество:
    • Пишем код один раз
    • Работает со всеми серверами
    • Если сервер недоступен - адаптер использует кэш
  4. Представьте что это как универсальная зарядка:
    • Один провод
    • Работает с разными телефонами
    • Не нужно думать о различиях
Теперь где бы мы ни использовали адаптер, он сам разберется как получить нужные данные с конкретного сервера.
 
Это всего лишь пример моей реализации и не более.
Если есть кодеры которым интересно, они допилят под себя.
Могу добавить и l2j была бы структура БД... Если есть желание помочь, дам доступы - залей интересующие тебя БД. Я сделаю и прд них.

Давайте объясню простыми словами, что делают адаптеры:

  1. Адаптеры - это "переводчики" между приложениями и разными серверами игры:
    • Каждый сервер (Acis, PWsoft, Lucera) хранит данные по-своему
    • Адаптер знает, как "говорить" с конкретным сервером
  2. Пример:

    JavaScript:
    // Хотим получить информацию об игроке
    const player = await adapter.getCharacterDetails(123);
    
    // Адаптер сам разберется как получить эти данные:
    // - У Acis они в одной таблице
    // - У PWsoft в другой
    // - У Lucera в третьей

  3. Главное преимущество:
    • Пишем код один раз
    • Работает со всеми серверами
    • Если сервер недоступен - адаптер использует кэш
  4. Представьте что это как универсальная зарядка:
    • Один провод
    • Работает с разными телефонами
    • Не нужно думать о различиях
Теперь где бы мы ни использовали адаптер, он сам разберется как получить нужные данные с конкретного сервера.
Вроде бы полезная штука, но в то же время, если всю информацию можно получить и без неё, получается, что это просто костыль для костыля. Не представляю, зачем это использовать, но за шару лайк.
 
Вроде бы полезная штука, но в то же время, если всю информацию можно получить и без неё, получается, что это просто костыль для костыля. Не представляю, зачем это использовать, но за шару лайк.
:Huh: Костыль?
Вот то, что используют сейчас, это костыли...
Быстрее, безопаснее, более гибкая система и т.д. и т.п.
Это как раз таки решение кучи костылей... Которые дают лишнюю нагрузку и кучу SQL иньекций...
 
:Bingo: Спасибо участникам за помощ с BD La2j mobius
Немного доработал. Добавил поддержку всех версий mobius и прикрепил документацию.
 

Вложения

Назад
Сверху