Перейти к содержанию
Авторизация  
Vetalll

updatePosition. Acis, Lucera TickRate

Рекомендуемые сообщения

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

есть такая строчка в 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 от клиента. Что может быть связанно как раз с тик рейтом на клиенте. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
18 minutes ago, Saltfire said:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
16 часов назад, Vetalll сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
On 8/31/2024 at 6:29 AM, Saltfire said:

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

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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
По пакетке, опять-же, динамика нужна, для работы с пакетами, иначе потонешь.
Про геодату и Поиск пути я вообще молчу, тут все на столько плохо, что лучше даже не смотреть.
И таких моментов, тут можно очень долго перечислять и вести бесконечные дискуссии.

Изменено пользователем Saltfire

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...