Jump to content
Korean Random
Dragon armor

Мод "Эмулятор сервера World of Tanks".

Recommended Posts

10 минут назад, mixailwot сказал:

Предлагал помощь с физикой) Я никому тут не нужен со своими знаниями

У меня был даже пример скинут в Newton Dynamics System, как сам пытался делать, да не получается ничего просто. Скачиваешь движок, открываешь примеры, там есть вьювер, добавляешь новый или стираешь один из существующих и делаешь.

@mixailwot Вот файл могу скинуть, если лень по теме искать мой пост. Даже комментарии удалять там не буду. В закомментированном видно, что и движение делать пытался, флаги как в клиенте (MOVEMENT_FLAGS_ROTATE_LEFT, MOVEMENT_FLAGS_ROTATE_RIGHT и другие). В незакомментированном ещё раз пробовал уже не рейкастом, а физическими объектами моделировать. Там даже координаты для колёс есть.

 

1.7z

Share this post


Link to post

Short link
Share on other sites

@Dragon armor Не мог бы ты весь проект запаковать в архив (даже если это долго) и кинуть мне в лс (доступом по ссылке) в пример возьмём тот же яндекс диск.
В прошлый раз я писал тебе мол мне нужно оценить всё что есть и чего не хватает для начала работы.

Share this post


Link to post

Short link
Share on other sites

@mixailwot Так физики-то нет совсем. Вообще нет. Что оценивать? Для начала надо скачать тут. Потом сделать, чтобы условная модель танка ездила как танк.

Версия 4.0 появилась. У меня 3.14, её надо использовать.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor Я думаю лучше сразу на клиенте проверять всё и в конечном итоге кинуть тебе уже готовый вариант, не понимаю в чём проблема...

Share this post


Link to post

Short link
Share on other sites

@mixailwot Чего-то тут подумал, это мне надо делать что-то будет в итоге. А так могу месяц другим заниматься, а потом вернуться к незавершённому. Всё-равно сейчас физика не в приоритете. И да, у меня не клиент, а сервер. Чтобы тестировать физику, это надо каждый раз запускать сервер, перелогиниваться в клиенте (потому что будет дисконнект). Сам как раз использую demosSandbox, чтобы сразу видеть результат. Для тестирования загрузки карт так же сервер не подходит, пришлось Irrlicht использовать в качестве вьювера и отдельно выносить всё, чтобы результат видеть сразу же. То есть, чтобы даже картошкин клиент не запускать.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
02.09.2020 в 23:27, Dragon armor сказал:

Делаю для версии 0.9.22. Это последняя версия перед 1.0.

Если ты потроллить так хочешь, то очень не удачно.

Никак. Да это и не нужно. Нужен готовый алгоритм, апи какое-то, которому закинул массив байт, а ответом будет либо ОК, либо какое-то сообщение, например, ждать следующего пакета.

С наскока ничего не выйдет. Разобраться надо сначала. Вот ты файл открыл. А функцию, которая начинает обработку сообщения нашёл? С неё и надо начинать.

Не, серьёзно. Если хочешь помочь - ОК. Но если можешь. А если мне надо всё объяснять перед этим, то в таком случае такая помощь не уместна.

PacketReceiver::processFilteredPacket - отсюда начинается разбор пришедшего и дешифрованного массива байт. В начале всё просто и понятно. Что-то можно пропустить, например, сбор статистики. А вот ниже уже не так всё однозначно. Сразу попадается флаг, а флаги - одно из неоднозначностей. Packet::FLAG_CREATE_CHANNEL как бы и не приходит ни от сервера, ни от клиента. Это вроде бы, для внутреннего использования между серверами внутри кластера.

Вот если таким образом опишешь сетевой протокол, даже на тот момент (2012 год) существующий, уже будет норм. Подтвеждение доставки, обработка пакета с номером больше, чем ожидается, запрос не пришедшего пакета и так далее. Если нет - ну, жди, когда мне будет не лень. Мне вот, наконец-то, удалось найти нормальную библиотеку для работы с таймерами. Эта штука называется "Wheel Timer" оказывается. На первый взгляд подходит. И производительность норм, сделал тест на 10к таймеров, не захлёбывается, мне с лихвой такого количества хватит. Теперь дальше сетевым протоколом заняться.

Понимаю просто я очень хотел помочь в развитии сервера. Там посмотреть своими глазами как он вообще работает

Жаль я не понимаю как этот сервер работает и как его запускать

Share this post


Link to post

Short link
Share on other sites
01.09.2020 в 17:20, Dragon armor сказал:

Ради графики запускать его

Нет... Просто раньше танки были намного лучше. Игра была атмосфернее, интереснее и приятнее. Причина не в графике, а в геймплее.

  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites
02.09.2020 в 21:31, Dragon armor сказал:

Скачиваешь движок, открываешь примеры, там есть вьювер, добавляешь новый или стираешь один из существующих и делаешь.

Скачал, добавил твою демку в проект, скомпилировал. Увидел, что у "танка" уже задана начальная скорость, чтобы он ехал. Куда именно стоит смотреть мне, чтобы понять, в чём проблема?

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 В Create_Wheels смотри. Там функция EnableMotor задаёт скорость вращения (только не знаю, какую, об/мин или м/сек).

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

Share this post


Link to post

Short link
Share on other sites
10 минут назад, Dragon armor сказал:

Там функция EnableMotor задаёт скорость вращения (только не знаю, какую, об/мин или м/сек).

Посмотрел, попробовал в ней задать различные значения. Особо на скорость движения не влияло, кроме как ускорения вращения катков, когда тушка в воздухе висит. Попробовал поменять значение SetFriction, (сцепление с поверхностью?) вернув исходное значение EnableMotor (12.1). "Тушка" стала лучше ехать по поверхности, но при этом не "улетала" за пределы карты. 

Share this post


Link to post

Short link
Share on other sites

Кстати, раз уж тему подняли. Долго не обновлял, хотел закончить в проекте то, что начал. Полностью переписал сетевой код. Это просто ужас какой-то, насколько сложно у бигворлда всё сделано. Учитывая, что у меня около половины возможностей не будет (просто не нужно, только разве что клиенту, а для сервера, соответственно, не надо этого реализовывать), ещё кучу надо добавить, но это уже рутина. Наконец-то, более-менее разобрался со структурой сетевых пакетов. Как оказалось, очень неправильно у меня было сделано, теперь белых пятен стало меньше. Разобрался, что означает флаг 12 в заголовке пакета. Оглядываясь назад, его назначение было очевидно, но кто же знал (нужен для ненадёжных пакетов, то есть тех, потеря которых ничем не грозит).
Так же добавил отдельно loginapp и сейчас делаю реализацию baseapp (это ангар). Теперь не нужен отдельный прокси-клиент, можно напрямую подключаться к эмулятору. Хотя, в дальнейшем, прокси-клиент всё-таки будет нужен, потому что cellapp (бой, арена) будет отдельным процессом, а клиенту не отправляется новый ip (разве что штатный механизм задействовать перехода от одного сервера к другому, но хз как это для арены будет выглядеть при переходе из ангара). И в одном процессе не запустить, потому что нужен другой интерпретатор для питона, отдельный от baseapp. Но это будет наипростейший прокси-клиент, который просто перенаправляет трафик и получает от baseapp новый ip.
Ну и добавил базу данных, а то у меня всё на лету генерировалось, что не есть хорошо.
Осталось самое малое - отладить всё это. А то код писал, писал, а отладкой даже не занимался. И разобраться надо будет до конца с логином. Там интересная вещь картохой была добавлена. В оригинале, клиент отправлял запрос с передачей логина, пароля и получал ответ. Картоха добавила майнер своеобразную защиту от брутфорса, а именно алгоритм Cuckoo Cycle. Это, если правильно понял, такой тип алгоритма, который достаточно ресурсоёмкий для нахождения ответа, но очень простой для проверки найденного решения. И пока что не понятно, как именно происходит проверка, сервер отправляет строку, похожую на 16ричную, клиент долго её мутузит внутри себя, а отладчик у меня работать перестал по непонятным причинам и до конца разобраться не могу, хотя для успешного логина этого не нужно.

@DrWeb7_1 Вращение добавлял, чтобы не реализовывать управление. Типа танк едет и уже можно добавлять/убирать физическую модель. Надо будет очень упрощенно сделать, когда до физики дойдут руки, а дальше уже усложнять по ходу дела.

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, Dragon armor сказал:

Надо будет очень упрощенно сделать, когда до физики дойдут руки, а дальше уже усложнять по ходу дела.

То есть, ты хочешь её реализовывать поэтапно, как это было в "оригинальном" таймлайне игры - сначала просто ехали туда-сюда, потом научились падать и переворачиваться, а закончили отлетающими башнями?

8 минут назад, Dragon armor сказал:

Так же добавил отдельно loginapp и сейчас делаю реализацию baseapp (это ангар). Теперь не нужен отдельный прокси-клиент, можно напрямую подключаться к эмулятору. Хотя, в дальнейшем, прокси-клиент всё-таки будет нужен, потому что cellapp (бой, арена) будет отдельным процессом, а клиенту не отправляется новый ip (разве что штатный механизм задействовать перехода от одного сервера к другому, но хз как это для арены будет выглядеть при переходе из ангара).

loginapp и baseapp - один процесс, а cellapp выходит отдельно?

9 минут назад, Dragon armor сказал:

Разобрался, что означает флаг 12 в заголовке пакета. Оглядываясь назад, его назначение было очевидно, но кто же знал (нужен для ненадёжных пакетов, то есть тех, потеря которых ничем не грозит).

В упомянутом тобой файле bw2\src\lib\network\packet_receiver.cpp как раз было про эти "ненадёжные" пакеты сказано, вроде бы даже в комментариях.

Share this post


Link to post

Short link
Share on other sites

Кстати, до меня потихоньку стал доходить дзен движка бигворлд. В своём докладе (Максим Барышников — Миллион пользователей онлайн в World of Tanks с инженерной точки зрения) Максим говорит, что база данных в бигворлде - это очень нагруженная вещь. Мне долго не было понято, что же именно так её нагружает. Как оказалось (для меня, так вообще сюрприз) - всё, что идёт от клиента на сервер, а также всё между серверами сначала попадает в базу данных. Все обновления энтитей, создание и удаление их, взаимодействие и прочее - это всё через базу данных. Всё состояние клиента хранится в базе данных, куда едет, сколько снарядов, здоровье. Мне, естественно, такого не надо, буду всё в памяти держать, один процесс - одна арена.

3 минуты назад, DrWeb7_1 сказал:

То есть, ты хочешь её реализовывать поэтапно, как это было в "оригинальном" таймлайне игры - сначала просто ехали туда-сюда, потом научились падать и переворачиваться, а закончили отлетающими башнями?

Типа того. Только физика уже есть, танк может уже падать и переворачиваться, это всё даёт физический движок.

3 минуты назад, DrWeb7_1 сказал:

loginapp и baseapp - один процесс, а cellapp выходит отдельно?

Да, по-другому никак не выходит. loginapp тоже можно сделать отдельным процессом, он с baseapp взаимодействует (будет) через базу данных, не зря же её делал. Сейчас вообще ужас там с передачей от loginapp к baseapp, накодил когда-то и даже соваться не хочу.

6 минут назад, DrWeb7_1 сказал:

В упомянутом тобой файле bw2\src\lib\network\packet_receiver.cpp как раз было про эти "ненадёжные" пакеты сказано, вроде бы даже в комментариях.

Как бы да. Поэтому и написал, что если оглядываться назад, его назначение понятно. На тот момент этого флага не было, а для счётчика пакетов использовался общий счётчик пакетов. Теперь это отдельный. Меня это смущало долго, ведь все счётчики увеличивались строго на единицу, а этот как хотел, начаться мог и с 200000, а не с нуля. Теперь ясно стало, достаточно отбрасывать пакеты с счётчиком меньше, чем текущий, а сколько он - не важно, хоть на единицу больше предыдущего, хоть на 20.

Share this post


Link to post

Short link
Share on other sites
59 минут назад, Dragon armor сказал:

Всё состояние клиента хранится в базе данных, куда едет, сколько снарядов, здоровье.

То есть, оно не в реальном времени обрабатывалось, каждый раз через БД пропускалось?

1 час назад, Dragon armor сказал:

Мне, естественно, такого не надо, буду всё в памяти держать, один процесс - одна арена.

Ситуация: к серверу подключено, например, 60 человек. Все нажимают кнопку "В бой!" и попадают в очередь. Набирается четыре команды, по 15 человек в каждой. Выходит, что у нас будет висеть два процесса арены?

Share this post


Link to post

Short link
Share on other sites
6 минут назад, DrWeb7_1 сказал:

То есть, оно не в реальном времени обрабатывалось, каждый раз через БД пропускалось?

Утверждать не буду, но похоже, что так. Или почти так. Может там кешируется как-то или что-то подобное делается. Ведь изначально сетевой движок рассчитан на разбивку игрового мира и разделение его по разным процессам (ещё и динамически, в зависимости от текущей нагрузки на один cell). А процесс не обязательно будет на том же компьютере. В общем, на БД у них очень сильно изначально было завязано.

12 минут назад, DrWeb7_1 сказал:

Выходит, что у нас будет висеть два процесса арены?

Да. Что логично, один процесс обрабатывает один бой. Тут ещё и кто-то должен быть выбран сервером. Пока рано об этом писать, концепция не ясна до конца.

@DrWeb7_1 db_interface.hpp

Серверных исходников почти нет. А в том, что есть можно посмотреть интерфейс взаимодействия между БД и *app. Один cell должен в памяти что-то держать, свои энтити, например, ещё он содержит сохранённое состояние соседних cell'ов. Картинку в доках находил, как клиент запрашивает что-то типа списка пользователей, а где находил - не помню. Там взаимодействие с БД было показано.

А ещё у них внутри по сети не хило такой трафик должен гулять. Наружу видны только loginapp и baseapp, адрес которого сообщает loginapp после успешного логина. А адреса внутренних серверов скрыты и baseapp выступает в роли прокси, передавая всё необходимое на cellapp, когда начинается бой.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor, когда примерно можно будет взглянуть на переписанные приложения эмулятора?

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...