Jump to content
Vetalll

updatePosition. Acis, Lucera TickRate

Recommended Posts

Собсвтенно пишу свой сервер с нуля(в архитектурном плане) в целях самообразования.  Столкнулся с вопросом расчета координат во время перемещения. 
Загуглил формулы -  сделал. Относительно все ок. ОТНОСИТЕЛЬНО! решил сравнить с исходниками.

есть такая строчка в Lucera:

double distPassed = getStat().getMoveSpeed() * (gameTicks - m._moveTimestamp) / GameTimeController.TICKS_PER_SECOND;


В Acis:

double distPassed = (getStat().getMoveSpeed() * (time - m._moveTimestamp)) / 1000


Суть в чем.. Я и Акис сделал расчет дистанции от реально пройденного времени для каждого персонажа независимо. 
Люцера же считает позицию всех игроков за 1 тик.  Что как по мне - на высоком онлайне может привести к неправильному расчету позиции. Но целостности данных сервера.. если лагают, то лагают все.

Вопросы:
- правильна ли моя догадка
- как вообще єто правильно должно быть.
- Есть ли реальные причины почему так сделали на Люцере

P.S. Мой алгоритм (загугленный) чутка отстаетсяя от пакета ValidatePosition от клиента. Что может быть связанно как раз с тик рейтом на клиенте. 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
18 minutes ago, Saltfire said:

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

Нет, я не делаю ничего схожего с л2ж и подобными сборкми. Можете ознакомиться тут https://github.com/lebedynskyi/L2Server (дай бог есть 2% от всего сервера)

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

И вот да. Вы говорите так, как я увидел в Люцера. Просто каждые условных 360 МС просчитать дистанцию на эти 360 МС.
А в Акис - запоминается время последнего расчета и в след раз при тике идет расчет от реально пройденного времени..

Share this post


Link to post
Share on other sites
16 часов назад, Vetalll сказал:

Нет, я не делаю ничего схожего с л2ж и подобными сборкми.

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

Share this post


Link to post
Share on other sites
On 8/31/2024 at 6:29 AM, Saltfire said:

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

И Вы абсолютно правы.  Да пакеты и структуру классов я взял с лыж. Но как ПОЖО! Всю логику хотел вынести в валидаторы и юз кейсы. И классов может выйдет и больше. 

 

Хотел решить основную проблему - дублирование логики.  Когда пришел пакет на отложенное действие. Атака. Есть старт а есть ее конец.  Попытался вынести в отдельные классы. Чтоб не было копипасты как в лыжах - и в пакете и в классы. Вроде норм. Но много классов. 

 

Ещё я начал осознавать что тики и не нужны.  Ну по факту только бег и отдельные менеджеры типа осад и анонсов. 

 

В общем я для этого и пописываю . Научиться в что-то большое. Громоздкое.  Так как мой опыт ограничен апи бекендом и Андроид. 

 

И ещё раз. Вы точно все подметили. Но я хз как по другому.  Буду рад за хороший линк в динамик сорцы. 

Share this post


Link to post
Share on other sites
В 05.09.2024 в 07:00, Vetalll сказал:

 Буду рад за хороший линк в динамик сорцы. 

Да это у единиц есть, никто не сольет этого никогда.

Любая логика, должна быть логикой, а не просто набором данных (как у лыж).
В вашем случае на Kotlin, можно добиться тех же результатов, что и на java, динамичности.
Возьмите организацию базы за основу, основ, всего этого сервера.
Забудьте, что такое: 
xml,cfg,properties,ini,config,etc...(не касается компиляторов и нативных файлов, где базы нет и реально лучше xml или что-то проще, чем свой велосипед), не нужно лишних файлов на сервере и каких-то непонятных разных механизмов для взаимодействия с ними - база будет легко справляться с любой прихотью. 
Легко редактируется, легко ищется по SQL запросу, легко меняется, легко дампить данные как нужно и когда нужно.
И все возможные транзакции и множества других специфических функций, а для такого проекта как л2, нужна не маленькая база и логика для работы с ней.
Что касается htm, также нужна динамика, 1 файл, 1 нпц, без лишних дублирующих:
30002-1, 
30002-2, 
30002-3,
etc...
Для избежания таких костылей, копипаста папок и тонны файлов на разных языках, с разными текстами и непонятным оформлением, требуется сделать словарь текстов, на разных языках и вызывать лишь по ключику Msg.get("myText") нужный текст - при выборе языка, будет изменяться только текст, а для htm разметки, сделать простенький шаблонизатор, чтобы разделить логику разметки на блоки, для взаимодействия с нпц, после отправки bypass, чтобы знать, какой блок за что отвечает и когда показывать.

Shot00000.gif.7f59ac132edf5cb85c23b33a7532af84.gif
По пакетке, опять-же, динамика нужна, для работы с пакетами, иначе потонешь.
Про геодату и Поиск пути я вообще молчу, тут все на столько плохо, что лучше даже не смотреть.
И таких моментов, тут можно очень долго перечислять и вести бесконечные дискуссии.

Edited by Saltfire

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...