Как работает ядро Lineage client

Bankir

Поклонник кармы
Участник
Хранитель Пера
Старожил I степени
Сообщения
880
Розыгрыши
0
Решения
6
Репутация
61
Реакции
239
Баллы
778
Приведствую всех.


Задался вопросом, как работает Ядро клиента Lineage 2.

Подойдет инфа от всех кто имел дело с работой клиента и имеет понятие/знания.

Есть простой и не понятный для меня момент:
- Как ведет себя клиент, когда игрок переходит из квадрата 22_23 в 22_22 (или наоборот), что в клиенте это обрабатывает и делает ли оно какие то отправки инфы на сервер?
- Клиент получает от сервера инфу о перемещении игрока по квадратам карты или он все это на своем движке обрабатывает?


А если сможете поведать куда больше чем в вопросах - буду благодарен как и все остальное сообщество!
 
а что мешает сделать в IDA Pro 9 декомпиляцию и посмотерть? файлы клиентов вплоть до C5 хроник не покрыты темидой и можно свободно изучать. ну а с новымими нужно снимать пакеры с файлов.
 
клиент тесно связан с сервером, при перемещении передается координата в сервер, в сервере у тебя отслеживается в каком ты квадрате стоишь, также сервер отвечает за передачу любых GameObject, дроп, нпц, моб, включая регулировку игрового времени. Если сильно упрощать - клиент это хранилище текстур, логики взаимодействия окон, анимаций, отвечает за отрисовку данных, которые передает сервер
 
Последнее редактирование:

Bankir

Баллов: 11
Полезно, спс
а что мешает сделать в IDA Pro 9 декомпиляцию и посмотерть? файлы клиентов вплоть до C5 хроник не покрыты темидой и можно свободно изучать. ну а с новымими нужно снимать пакеры с файлов.
Потому что, нужно уметь это делать и понимать куда смотреть, тыкать палкой в "куда попало" - смысла ноль.

На форуме есть многие кто работает с КЛиентом новых протоколов, и по желанию ответят, подкинут инфу.
В новых клиентах обновили очень многое.
 
клиент сам определяет, какой участок карты необходимо показывать и загружать. Сервер не сообщает ему: «теперь ты находишься в квадрате 22_22». Сервер работает с координатами и контролирует игровое состояние. Однако при пересечении особой серверной зоны — города, осады, воды, peace zone и т. п. — сервер может отправить отдельное обновление состояния зоны. Это уже связано не с файлом карты 22_22, а с игровыми правилами.
 
В основном же инетресует Клиент логика,
то что сервер может слать - это я вижу, но оказалось что можно "не плохо" облегчить работу и насилование клиента, верно используя инфу из карт (стейты, триггеры и по мелочам другой инфы).
 
Приведствую всех.


Задался вопросом, как работает Ядро клиента Lineage 2.

Подойдет инфа от всех кто имел дело с работой клиента и имеет понятие/знания.

Есть простой и не понятный для меня момент:
- Как ведет себя клиент, когда игрок переходит из квадрата 22_23 в 22_22 (или наоборот), что в клиенте это обрабатывает и делает ли оно какие то отправки инфы на сервер?
- Клиент получает от сервера инфу о перемещении игрока по квадратам карты или он все это на своем движке обрабатывает?


А если сможете поведать куда больше чем в вопросах - буду благодарен как и все остальное сообщество!
Попробуй поискать инфу о LevelStreamingVolume в ue3 подгрузка карт осуществлялась и выгрузка. в ue2 хз думаю нечто подобное
 
Последнее редактирование:
Если кратко, квадрат 22_23 -> 22_22 это в первую очередь клиентское. Сервер не говорит клиенту «ты перешёл в 22_22»: клиент знает свои координаты и сам подгружает или выгружает нужные участки карты. Это согласуется и со старым описанием протокола: MoveBackwardToLocation содержит destination/current XYZ, а ValidatePosition текущие XYZ клиента. Клиент отправляет точку или направление движения (MoveBackwardToLocation) и периодически свою фактическую позицию ValidatePosition, а сервер уже валидирует движение и корректирует координаты через ValidateLocation.
 
Приведствую всех.


Задался вопросом, как работает Ядро клиента Lineage 2.

Подойдет инфа от всех кто имел дело с работой клиента и имеет понятие/знания.

Есть простой и не понятный для меня момент:
- Как ведет себя клиент, когда игрок переходит из квадрата 22_23 в 22_22 (или наоборот), что в клиенте это обрабатывает и делает ли оно какие то отправки инфы на сервер?
- Клиент получает от сервера инфу о перемещении игрока по квадратам карты или он все это на своем движке обрабатывает?


А если сможете поведать куда больше чем в вопросах - буду благодарен как и все остальное сообщество!
А что ты хочешь получить с этого и зачем? игрок ходит по координатам а не по квадратам
 

Кратко по цепочке движения Pawn​

1. AI-тест движения по поверхности:

UBOOL APawn::walkMove(FVector Delta, FRotator Rotation, FVector Goal)
{
FCheckResult Hit(1.f);

// Основное перемещение с учетом Collision
GetLevel()->MoveActor(
this,
Delta,
Rotation,
Hit,
1, 1
);

// Если уперлись в препятствие — пробуем сделать шаг вверх
if (Hit.Time < 1.f)
{
FVector StepUp(0, 0, UCONST_MAXSTEPHEIGHT);

GetLevel()->MoveActor(
this,
StepUp,
Rotation,
Hit,
1, 1
);
}

// Проверка пола / возможности продолжать ходьбу
if (Hit.Normal.Z < UCONST_MINFLOORZ)
return TESTMOVE_Fell;

return TESTMOVE_Moved;
}
2. Главная функция, которая реально проверяет столкновения:

GetLevel()->MoveActor(this, Delta, Rotation, Hit, 1, 1);
Именно здесь Delta перемещает Actor, а Hit содержит результат collision check.

3. Для реальной ходьбы Pawn цепочка примерно такая:

Acceleration
↓
PhysWalking()
↓
MoveActor()
↓
Collision detection
├── BSP
├── Terrain
├── StaticMesh
└── другие Actors
↓
Hit / Wall / Floor
А в показанном тобой UnPawn.cpp:

walkReachable()
↓
walkMove()
↓
MoveActor()
walkMove() — симуляция движения для AI/reachability, а не основной physics movement.

Для поиска именно кода, где BSP / Terrain / StaticMesh превращаются в конкретный Hit, нужно смотреть реализацию MoveActor() в UnActor.cpp / UnLevel.cpp и physics-код PhysWalking().
 

Похожие темы

Назад
Сверху Снизу