Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Lineage 2

С этим тегом используют

MMORPG Игры Компьютерные игры Lineage Ностальгия YouTube Линейка Все
933 поста сначала свежее
7
lineage2js
lineage2js
4 месяца назад
ИТ-проекты пикабушников

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js⁠⁠

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Привет.

Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.

Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост
Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

C(client) – двигается плавно из одной точки в другую. S(server) – делает прирост координат по таймеру.

Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/И многое наследуется. В том числе и передвижение персонажа.

В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.

Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

На коротких расстояниях проблема незаметна. Нога наступает точно в монету.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

На длинных расстояниях действие атака начинается раньше, чем персонаж добегает до цели.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

А если выкрутить скорость на максимум (900) то проблема расхождения очевидна. Это связанно с тем, что помимо скорости бега есть скорость ходьбы.

Как работает передвижение персонажа на сервере.

За основу взяты базовые характеристики персонажа. Скорость бега 126.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

126 — это количество внутренних unit’ов за секунду.

На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:

// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат.
const distance = 1500;
const playerSpeed = 126;
const ticks = distance / playerSpeed; // 11.90
const time = ticks * 1000; // 11900mc

setTimeout(() => {
// действие персонажа после бега
}, time);

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

На коротких расстояниях.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

На длинных расстояниях.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Расхождения на коротких расстояниях.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Расхождения на длинных расстояниях.

Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.

Рост скорости при развитии персонажа.

126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.

Данные о характеристиках персонажа передаются от сервера к клиенту.

Пакет UserInfo.js 83 строчка.

writeD(player.runSpeed);
writeD(player.walkSpeed);

Базовые значения:

runSpeed: 126

walkSpeed: 88

Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост
Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Нога персонажа достигает правильной конечной точки.

Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.

Сколько же персонаж успевает пройти перед тем, как начинает бежать?

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

runSpeed: 10

walkSpeed: 600

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Ходьба быстрее бега.

При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.

600 / 250 = 2.4

700 / 291 = 2.4

800 / 333 = 2.4

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

Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.

88 / 2.4 = 36

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Первое деление — это начало движения (ходьба) а следующие деления — это бег.

Решение

Формула для расчета времени:

сколько_прошли_на_старте = скорость_ходьбы / 2.4

(((дистанция_между_нпц_и_игроком - сколько_прошли_на_старте) / скорость_бега) * 1000мс) + время_которое_прошли

Для примера дистанция 1500.

Из них мы 36 прошли.

1500 - 36 = 1464 расстояние для бега.

Скорость бега 126 в секунду.

1464 / 126 = 11.61 (количество отрезков, которое мы пройдем за секунду).

11.61 * 1000 = 11610мс бега.

к 11610 надо прибавить время ходьбы

Скорость ходьбы 88 в секунду.

1000 / 88 = 11.36мс за 1 unit

36 unit * 11.36мс = 408мс

11610 + 408 = 12018мс

12018мс является точным временем от начала старта и до конца.

Сравниваем со старым временем 11900мс. Разница в 118мс.

setTimeout(() => {
player.attack(npc);
}, 12018);

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Скорость бега 126.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Скорость бега 900.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Положение ноги при скорости 126.

Как я синхронизировал скорость персонажа на сервере в Lineage 2 на Node.js Программирование, Разработка, Lineage 2, Javascript, Nodejs, Гифка, Длиннопост

Положение ноги при скорости 900.

Как видно выше разница положения ног при разных скоростях отсутствует, а значит решение работает.

Ссылка на проект: https://github.com/lineage2js

Ссылка на блог: https://t.me/lineage2js

Показать полностью 19
[моё] Программирование Разработка Lineage 2 Javascript Nodejs Гифка Длиннопост
6
157
akatosh199512
akatosh199512
4 месяца назад
Лига Геймеров

Потому мы(я) не стали рублёвыми миллионерами⁠⁠

Компьютерные игры Игры Lineage 2 Биткоины Видео Вертикальное видео Короткие видео
49
12
lineage2js
lineage2js
4 месяца назад
ИТ-проекты пикабушников

Все оружие в Lineage 2 C1 за 1 минуту⁠⁠

Привет.

Занимаюсь разработкой сервера для Lineage 2 C1 на JavaScript(Node.js). Копался в клиенте игры и решил сделать перебор всего оружия для теста.

Ссылка на проект: https://github.com/lineage2js

Ссылка на блог: https://t.me/lineage2js

Показать полностью
[моё] Программирование Разработка Lineage 2 Javascript Nodejs Видео Вертикальное видео Короткие видео Игры
16
12
akatosh199512
akatosh199512
4 месяца назад
Лига Геймеров

Я: В детстве я любил смотреть Олимпиаду. Кто-то: о ты любишь спорт? Я: Олимпиаду в Lineage 2!⁠⁠

Компьютерные игры Игры Lineage 2 Олимп Ностальгия Видео Вертикальное видео
10
349
akatosh199512
akatosh199512
4 месяца назад
Лига Геймеров

Когда-то мы летали на вивернах...⁠⁠

Компьютерные игры Игры Lineage 2 Interlude Виверна Видео Вертикальное видео Короткие видео
199
akatosh199512
akatosh199512
4 месяца назад
Лига Геймеров

Убивал нубов в A шмоте, а потом убил человека в реале...⁠⁠

Компьютерные игры Игры Lineage 2 Ностальгия Двп Видео
12
17
leom405
leom405
5 месяцев назад

Куда делись игроки World of Warcraft, Lineage 2, Counter-Strike 1.6 и других игр тех лет?⁠⁠

Увидел пост в предложке гугла на сайте Т-банк журнал. Решил продублировать и сюда.
Было бы очень интересно узнать у пикабушников.

В далёком уже прошлом, лет около 15 назад популярность таких игр как WOW, l2, CS 1.6 и прочих игр зашкаливала. Собирались очень крутое комьюнити в виде гильдий, кланов как в игре, так и в жизни, причем в эти игры играли даже семьями, родители и дети. Играли парни и девушки на ровне, даже доходило до знакомств с последующем созданием семей в реальной жизни. Время проводили ну просто божественно круто, в вечных противостояниях, достижениях чего-либо в игровых мирах и даже заработке.

Помница мне продавал я игровую валюту, оплачивал интернет самостоятельно и хватало на погулять с друзьями и подругами, для подростка это было очень круто.

Где вы сейчас эти замечательные люди? Вам уже около 35-40, чем занимаетесь? Играете во что-то сейчас или реальная бытовая жизнь не даёт такой возможности?

Помните то время? Во что сейчас играете?

Онлайн-игры Игры Клан Сообщество Друзья Общение Опрос World of Warcraft Lineage 2 Counter-strike Текст
40
scrydenet
scrydenet
5 месяцев назад
Юмор для всех и каждого

Может, прошлое и нельзя вернуть, но те самые чувства ностальгии ждут на Скрайд Х⁠⁠

[моё] Ностальгия Lineage 2 Ретро-игры MMORPG Видео Вертикальное видео
12
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии