Vetalll 2 Posted August 30 Собсвтенно пишу свой сервер с нуля(в архитектурном плане) в целях самообразования. Столкнулся с вопросом расчета координат во время перемещения. Загуглил формулы - сделал. Относительно все ок. ОТНОСИТЕЛЬНО! решил сравнить с исходниками. есть такая строчка в 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
Saltfire 85 Posted August 30 Вы пишите сервер новый, по серверу, который наследуется от l2jserver? Вы серьезно что-ли? У лыж, эта побочка везде, одинаковое перемещение персонажа, по таймеру, с одинаковыми значениями в секунду, не помню, есть ли там вообще расчет сколько пройдем за секунду. Но я помню, что у них там костыли и нет там расчета уже пройденной со старта дистанции, а также время которое уже затребовалось, чтобы пройти. У лыж все просто, одинаковыми значениями, каждую секунду, происходит синхронизация движения, прибавлением одного и того-же числа, пока двигаемся. Share this post Link to post Share on other sites
Vetalll 2 Posted August 30 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
Saltfire 85 Posted August 31 16 часов назад, Vetalll сказал: Нет, я не делаю ничего схожего с л2ж и подобными сборкми. Ну по исходам, новый по лыже пишите на Kotlin. Даже названия соответствуют, тех-же пакетов и т.д., нет никакой динамики и в целом опять будет флуд-классами и наследованием один на другом, без на то причины, так-как у вас это уже началось, а дальше там только хуже, там туча классов и интерфейсов для АI будет и еще там много всего и проект раздует опять под 3к файлов. Share this post Link to post Share on other sites
Vetalll 2 Posted September 4 On 8/31/2024 at 6:29 AM, Saltfire said: Ну по исходам, новый по лыже пишите на Kotlin. Даже названия соответствуют, тех-же пакетов и т.д., нет никакой динамики и в целом опять будет флуд-классами и наследованием один на другом, без на то причины, так-как у вас это уже началось, а дальше там только хуже, там туча классов и интерфейсов для АI будет и еще там много всего и проект раздует опять под 3к файлов. И Вы абсолютно правы. Да пакеты и структуру классов я взял с лыж. Но как ПОЖО! Всю логику хотел вынести в валидаторы и юз кейсы. И классов может выйдет и больше. Хотел решить основную проблему - дублирование логики. Когда пришел пакет на отложенное действие. Атака. Есть старт а есть ее конец. Попытался вынести в отдельные классы. Чтоб не было копипасты как в лыжах - и в пакете и в классы. Вроде норм. Но много классов. Ещё я начал осознавать что тики и не нужны. Ну по факту только бег и отдельные менеджеры типа осад и анонсов. В общем я для этого и пописываю . Научиться в что-то большое. Громоздкое. Так как мой опыт ограничен апи бекендом и Андроид. И ещё раз. Вы точно все подметили. Но я хз как по другому. Буду рад за хороший линк в динамик сорцы. Share this post Link to post Share on other sites
Saltfire 85 Posted September 9 (edited) В 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, чтобы знать, какой блок за что отвечает и когда показывать. По пакетке, опять-же, динамика нужна, для работы с пакетами, иначе потонешь. Про геодату и Поиск пути я вообще молчу, тут все на столько плохо, что лучше даже не смотреть. И таких моментов, тут можно очень долго перечислять и вести бесконечные дискуссии. Edited September 9 by Saltfire Share this post Link to post Share on other sites