Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Написание сервера для lineage 2 chronicle 1 на node.js
int Engine;//0x28
_BYTE Viewports[12];//0x2C TArray<UViewport*>, если я правильно помню сам указатель UViewport на позиции Tarray+4 Байта т.е 0x30, либо начальной 2C.
int Engine;//0x28
_BYTE Viewports[12];//0x2C TArray<UViewport*>, если я правильно помню сам указатель UViewport на позиции Tarray+4 Байта т.е 0x30, либо начальной 2C.
Где-то здесь была статья по расширению клиента ,там с примером и данными, нужно будет заменить кое что, для начала к примеру адресс экспортируемого класса UEngine
Код:
??0UEngine@@QAE@ABV0@@Z_0
, в примере должно быть использование GetProcAddress(Engine.dll(handle),"??0UEngine@@QAE@ABV0@@Z_0"), указатель на UEngine должен быть валидным, можно в этом убедиться/проверить используя CheatEngine ( проще всего ) , далее достаточно просто вызвать ту функцию которую нужно, с нужными параметрами к примеру DrawTexture(ТотСамыйУказатель на UEngine, 0, 21, 214, 127, 0, 0, 214, 127, textureLoginBack) (Фукнция так же эскпортируема ?DrawTexture@UCanvas@@UAEXHHHHMMMMPAVUTexture@@@Z ), но тут нужно будет так же загрузить и саму текстуру ( это не сложно ) , проще должно быть с ?DrawLine@UCanvas@@UAEXHHHHKH@Z .
Как то вот так.
Где-то здесь была статья по расширению клиента ,там с примером и данными, нужно будет заменить кое что, для начала к примеру адресс экспортируемого класса UEngine
Код:
??0UEngine@@QAE@ABV0@@Z_0
, в примере должно быть использование GetProcAddress(Engine.dll(handle),"??0UEngine@@QAE@ABV0@@Z_0"), указатель на UEngine должен быть валидным, можно в этом убедиться/проверить используя CheatEngine ( проще всего ) , далее достаточно просто вызвать ту функцию которую нужно, с нужными параметрами к примеру DrawTexture(ТотСамыйУказатель на UEngine, 0, 21, 214, 127, 0, 0, 214, 127, textureLoginBack) (Фукнция так же эскпортируема ?DrawTexture@UCanvas@@UAEXHHHHMMMMPAVUTexture@@@Z ), но тут нужно будет так же загрузить и саму текстуру ( это не сложно ) , проще должно быть с ?DrawLine@UCanvas@@UAEXHHHHKH@Z .
Как то вот так.
Привет, спасибо!! У меня есть вопрос: у меня проблема с TARRAY, у вас есть заголовочный файл? Или вы сделали какую-то реализацию для него? Еще вопрос: как вы пришли к этим функциям в paramstack? Я не нашел его реализацию в DLL.
TArray's source also included in my answer. L2ParamStack reconstructed from decompile manually (i'm not sure it's a fully same with original, but works for me)
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
И до статьи мне казалось я сделал передвижение на отлично(Я еще тогда не учитывал скорость ходьбы). Потом когда убегал далеко были расхождения и я это списывал на то что идет изменение Z координаты(когда по горам бегал) и от этого путь или длиннее или короче. А сервер то считает только по плоскости передвижение.
Сейчас после статьи передвижение на плоскости идеальное(результат по последним гифкам в статьи) (теперь я учитываю скорость ходьбы)
И тогда я приступил к задаче по геодате чтобы синхронизировать передвижение по Z. Потому как скорость на плоскости и на горе для сервера может быть разной. Ведь разное расстояние и надо это учитывать.
Но. Я сейчас без гео бегал по очень крутым горам и персонаж так же идеально синхронизировался. Когда он останавливался монетка по таймингу падала ровно в момент остановки.
То есть для сервера он перемещается по плоскости из x1 y1 в x2 y2 а на клиенте он бегает по горам. Как такое может быть?
Может в этом старом движке unreal перемещаясь по неровным поверхностям скорость может оставаться такой же?
Привет, спасибо!! У меня есть вопрос: у меня проблема с TARRAY, у вас есть заголовочный файл? Или вы сделали какую-то реализацию для него? Еще вопрос: как вы пришли к этим функциям в paramstack? Я не нашел его реализацию в DLL.
TArray's source also included in my answer. L2ParamStack reconstructed from decompile manually (i'm not sure it's a fully same with original, but works for me)
Было бы здорово если бы кто-то гайд написал поэтапно. А то приходится из разных кусков собирать что-то. Я лишь на 50% Сделал. Собрал библиотеку. Подключить ее пока что не удалось.
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
И до статьи мне казалось я сделал передвижение на отлично(Я еще тогда не учитывал скорость ходьбы). Потом когда убегал далеко были расхождения и я это списывал на то что идет изменение Z координаты(когда по горам бегал) и от этого путь или длиннее или короче. А сервер то считает только по плоскости передвижение.
Сейчас после статьи передвижение на плоскости идеальное(результат по последним гифкам в статьи) (теперь я учитываю скорость ходьбы)
И тогда я приступил к задаче по геодате чтобы синхронизировать передвижение по Z. Потому как скорость на плоскости и на горе для сервера может быть разной. Ведь разное расстояние и надо это учитывать.
Но. Я сейчас без гео бегал по очень крутым горам и персонаж так же идеально синхронизировался. Когда он останавливался монетка по таймингу падала ровно в момент остановки.
То есть для сервера он перемещается по плоскости из x1 y1 в x2 y2 а на клиенте он бегает по горам. Как такое может быть?
Может в этом старом движке unreal перемещаясь по неровным поверхностям скорость может оставаться такой же?
И разницы никакой нет?
Было бы здорово если бы кто-то гайд написал поэтапно. А то приходится из разных кусков собирать что-то. Я лишь на 50% Сделал. Собрал библиотеку. Подключить ее пока что не удалось.
Так как скорость одинаковая на неровностях то подключение библиотеки с рисованием линий на стороне клиента для проверки синхрона на стороне сервера уже не актуальна))
Так как скорость одинаковая на неровностях то подключение библиотеки с рисованием линий на стороне клиента для проверки синхрона на стороне сервера уже не актуальна))
Очень крутой инвестигейшин, но костыль в виде фиксированного "magic number", тот еще костыль.
Мне кажется это еще решаемо на 100% просто путём убирание acceleration до 0 у павна на клиенте, чтоб тогл между началом движение и бегом происходил мгновенно без фэйковой ходьбы (у которой даже анимации нет правильной у павна которая соотвествует walk)
Либо учитывать acceleration time на сервере.
Проблема вот в чём:
1. Стоим на месте
Код:
component Speed {
max = 999
walk = 100
run = 200
current = 0
}
2. Начинаем движение.
Время от 0 до 100 занимает условно пол секунды, и время со 100 до 200 еще допустим почти секунду. Но обычно когда мы бегаем куда-то мы это делаем на длинные растояния или зажимаем W в итоге эффект не особо заметен, хотя рассинхрон даже в этом случае есть.
3. Заканчиваем движение не прерывая его внешним триггером.
Время от 200 до 100 занимает условно пол секунды, и время со 100 до 0 еще допустим почти секунду. Через какоето MS сервер синхронизируется с этим и никто ничего не замечает.
4. Заканчиваем движение внешним триггером.
Бежим, current 200, прерываем движение экшином, в итоге наш сервер опередил на один тик клиент который форсировано при экшине засетал current на 0, в итоге мы оказались дальше от таргета на сервере, а так как сервер авторитарный, то происходит микроскчаок для того чтобы клиент подстроился под координаты сервера. В итоге вот это "откидывание назад" и происходит.
Не просходит откидываение назад визуально только в случае когда сервер не авторитарный и не заставляет клиент синхронизироватся еще один раз, в итоге получается на клиенте эффект что павн визуально дальше от места где якобы он может атаковать. Но по факту для сервера все правильно, это его реальная позиция.
Почему на Z рассинхрон больше?
Физика в игре при падении, влияет на `current` скорости павна, поэтому когда павн падает, физика ставит максимальный current speed, в итоге ваше магическое значение которое вы получили и учитываете на сервере при обычном передвижении (которую иницирует сам контроллер павна) по факту при падении уже совсем другая, т.е. инициатором явлется внешние силы (гравитация).
Решение?
Пытаюсь сам решить это проблему некоторое время когда свободен от работы, думаю лучший вариант это просто принимать координаты с клиента и броадкастить их всем во круг, далее авторитарно синхронизировать если:
- При лагах павн переступил через клиентскую часть физики, смотрим на геодату, поправляем его, броадкастим окружающим.
- При вмешание в игру путём читерства.
- Проверяем наличие предметов надетым на павне в мире, бафов и т.д. смотрим на каждые статы и проверяем если в его случае current speed соответвует возможным значениям прописанных в правилах мира, активно поправляем, броадкастим, мониторим частоту, если слишком много поправлений, значит 100% читерюга - даём временный бан акка.
- Проверяем возможность передвижение по Z (проверяем наличие виверны, и прочего)
- Проверяем возможность изменения сликшом большого рэнжда координат как при телепорте, проверяем если он использовал любые средства телепортации прописанных в игровом мире (SoE, Gatekeeper, instance), если не использовал 100% читер, в бан.
- Проверяем на наличие состояние падение, если падает просто передаём координаты окруужающим и если падаем за клиентскую гео, смотрим на серверную и поправляем, здесь же проверяем если не "падаем вверх" и если так, то баним гадёныша)
NPC
* Живет (Патрулирует если нет задач)
* Атакует (Если был атакован)
* Преследует атакующего (Если был атакован и цель переместилась)
* Смерть при достижении HP меньше 0
* Удаляется если был убит
Character
* Атакует
* Преследует NPC (Если при атаке цель переместилась)
* При убийстве NPC останавливает атаку
Забинди в user.ini Home=show radii, покажет внутрении колизии моделек клиента. Но все эти коллизии влияют только на гео и просчет взаимодействия между персонажами, за исключением их столкновения. Для сервера ты можешь пробежать сквозь гремлина, и ничего не случится
Забинди в user.ini Home=show radii, покажет внутрении колизии моделек клиента. Но все эти коллизии влияют только на гео и просчет взаимодействия между персонажами, за исключением их столкновения. Для сервера ты можешь пробежать сквозь гремлина, и ничего не случится
Про коллизии круто, попробую, а то надоело на глаз мерять ))
Сквозь гремлина не пробежишь. Идет обработка коллизий на стороне клиента. А гремлин спокойно проходит сквозь игрока. Проверял на PTS сервере. Но так же на PTS сервере он близко не подбегает к игроку при атаке. Не пойму это лаг сервера был или где-то прописано расстояние, которое должно быть между объектами.
Про коллизии круто, попробую, а то надоело на глаз мерять ))
Сквозь гремлина не пробежишь. Идет обработка коллизий на стороне клиента. А гремлин спокойно проходит сквозь игрока. Проверял на PTS сервере. Но так же на PTS сервере он близко не подбегает к игроку при атаке. Не пойму это лаг сервера был или где-то прописано расстояние, которое должно быть между объектами.
Про коллизии круто, попробую, а то надоело на глаз мерять ))
Сквозь гремлина не пробежишь. Идет обработка коллизий на стороне клиента. А гремлин спокойно проходит сквозь игрока. Проверял на PTS сервере. Но так же на PTS сервере он близко не подбегает к игроку при атаке. Не пойму это лаг сервера был или где-то прописано расстояние, которое должно быть между объектами.
обработка столкновений объектов идет на стороне клиента. Для сервера, во время движения, любой объект это точка XYZ. Коллижнбокс учитывается только для некоторых ситуаций, когда нужно знать дистанцию сближения, на которой возможно начать атаку. В таком случае, объект становится цилиндром.
С точки зрения сервера, объект двигается по ячейкам геодаты и если ему клиент не сообщил, что нужно остановиться, прислав для этого специальный пакет, то сервер продолжит перемещать персонажа до тех пор, пока он не достигнет точки назначения. Если при этом, он в клиенте за что-то зацепится(бочка, моб, стенка, ступенька, порог, да что угодно), то либо клиент пришлет пакет с запросом остановки движения, либо через какое-то время сработает синхронизация.
На данном сайте используются файлы cookie, чтобы персонализировать содержимое и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.