Jump to content
Korean Random
Dragon armor

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

Recommended Posts

Коллизионная модель конвертируется физическим движком в выпуклую. Может так и должно быть? А дальше уже более точный ray-tracing? Кто работал с физическими движками, подскажите, как в них дело обстоит. А то, пока не поздно, может стоит выбрать другой.

collision3.png

Share this post


Link to post

Short link
Share on other sites

@Dragon armor а ты нормали хотел учитывать в движке?))

конечно он будет строить различного рода упрощения, чтобы понизить тривиальность колижн тестов(да даже в 2д нетривиально посмотреть пересечение двух объектов)

я как-то хотел вникнуть в устройство физ. движка BW, но забил

с такими вопросами тебе лучше на gamedev.ru

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox Понятно, что строится упрощенная модель. Мне интересно, как в других движках обстоит дело. Например, башня каким образом будет у них загружена? Так же конвертируется в выпуклую модель или можно прямо в таком виде? А трассировку как делать? В финальной части должна быть точная физическая модель. Самому не приходилось сталкиваться с этим, поэтому не знаю, как должно быть. Надо почитать, ознакомиться.

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox На первое время можно использовать и клиентскую. К тому же, сам клиент её корректно использует, подсветка танка, например, это трассировка, подсветка возможности пробития при наведении на танк. Нашёл один тип модели коллизии, который, вроде бы, мой случай - это TriangleMesh, который в Newton, при беглом осмотре, не завезли. Или опять на потом оставить?

Share this post


Link to post

Short link
Share on other sites
3 minutes ago, Dragon armor said:

Нашёл один тип модели коллизии, который, вроде бы, мой случай - это TriangleMesh, который в Newton, при беглом осмотре, не завезли. Или опять на потом оставить?

в блендере нашел?

там bullet старенький для физики

4 minutes ago, Dragon armor said:

Newton

ODE можешь еще посмотреть, или тот же bullet

Share this post


Link to post

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

в блендере нашел?

Не, на википедии в статье о Bullet, а потом в гугл полез. Мне теория нужна, поэтому не принципиально, какой движок и какая версия.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor можешь в том же блендере потестить физику, там bullet в bge прикручен, очень удобно, и в отладке тоже удобно

только логику танку накидай, а то я свои проекты стер уже)

кстати, можно же вообще сделать так ->

клиент WoT <-> сервер с физикой <-> отображение в блендере того, что на сервере реалтайм

хотя я не знаю, может у тебя уже и сделано что-то подобное

Edited by SkepticalFox

Share this post


Link to post

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

отображение в блендере того, что на сервере реалтайм

Как? У меня есть желание сделать типа 3D вьювера того, что происходит на сервере. Но не представляю, как это должно выглядеть. Поэтому либо смотрю в клиенте, как работает, либо делаю экспорт в obj из физического движка, чтобы посмотреть уже в блендере, каким образом модель выглядит в нём.

Ещё немного погуглил. Оказывается, triangle mesh может быть только статичным объектом. Не всё так просто в физике, как полагал изначально. Каким тогда образом накладываются, например, декали на танк от выстрела? Там же уже нужна точная 3D модель, а не упрощенная.

Share this post


Link to post

Short link
Share on other sites
Только что, Dragon armor сказал:

У меня есть желание сделать типа 3D вьювера того, что происходит на сервере.

 

Ни фига не понял, зачем? Клиент игры - это и есть 3Д вьюер того, что происходит на сервере, только от лица одного из игроков. Зачем еще какой-то вьюер?

Share this post


Link to post

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

Зачем еще какой-то вьюер?

Чтобы знать, что в данный момент происходит на сервере. Во вьювер можно вывести гораздо больше информации, чем в клиенте видно. Для отладки, например, той же физики.

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
1 hour ago, Dragon armor said:

Каким тогда образом накладываются, например, декали на танк от выстрела?

ну тут уже магия геймдева)

нормали всякие, проекции на плоскость...

binary space partitioning вроде тоже здесь задевается

32 minutes ago, StranikS_Scan said:

что ты по сути сел пилить еще один клиент

зачем?

блендер очень простая штука - ко всему есть API на питоне и документация

да, игровой движок протух, но он довольно прост и легко с ним работать

а на клиенте невозможно посмотреть например упрощенный террейн, баундинги всего что можно, да и повлиять как-то вообще на клиент сложно в этом плане

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites
On 7/17/2018 at 4:09 PM, Dragon armor said:

Приветствую всех.

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

  • Что за мод?

Мод для возможности запуска клиента игры без подключению к серверу.

  • Что сделано на данный момент.

Запуск ангара со всей техникой, с генерацией которой не возникло ошибок (без шведских ПТ с осадным режимом).

  • Общая информация.

На данный момент использую версию 0.9.22.0.1, это последняя версия перед патчем 1.0, потому что, начиная с 1.0 были какие-то изменения в сетевом протоколе, а мне не хочется разбираться, что именно поменяли. Всё ещё очень сырое, работает до первой внештатной ситуации, абсолютные пути прописаны прямо в коде, запуск из отладчика и прочие радости debug версии. Реализовал загрузку ангара, добавил почти всю технику и экипаж к ней. Много каких-то непонятных для меня ошибок, т.к. не мододел и с питоном достаточно плохо знаком. Например, при создании техники шведских ПТ с осадным режимом, возникает ошибка создания на сервере. При выборе в ангаре некоторой техники, возникает ошибка уже в клиенте, что, в некоторых случаях, странно, потому что выбираю существующую в игре технику, например, ELC EVEN 90 или 268/4. В логе ошибка "list index out of range", а отладчик питона к клиенту не умею цеплять. Что забавно, Waffentrager E100 выбирается без проблем. А VK168.02 Mauerbrecher опять с той же ошибкой. Или ещё недочёт, на 10 уровне у техники не исследованы модули, этого, видимо, ещё не реализовал для команды CMD_SYNC_DATA, а может это ещё где-то содержится.
Много времени уходит на то, чтобы понять, что и где содержится и откуда это достать. С созданием техники провозился очень долго, мне, как сишнику, крайне не привычен питон, в котором любой объект содержит всё, что угодно, и понять, что именно, надо долго искать, где он создаётся, что в него записывается. А в итоге строка вида "for veh_item in vehicles.g_list.getList(i).values()", чтобы достать compactDescr. Ах да, ещё и распарсить надо, items.parseIntCompactDescr, хотя где-то лежат уже нужные нация и id техники.
На скринах стату показывать бесполезно, там 0 боёв и 100500 рейтинга, как и везде, чего мелочиться-то. Она не из CMD_SYNC_DOSSIERS берётся, видимо, а из CMD_SYNC_DATA. Сейчас только ангар. И прогресс моих ЛБЗ на момент записи трафика.

error_268.4.PNG

shot_027.jpg

shot_023.jpg

shot_024.jpg

shot_026.jpg

shot_020.jpg

shot_011.jpg

shot_017.jpg

shot_018.jpg

shot_020.jpg

shot_021.jpg

shot_010.jpg

 

В 1.0 в протоколе добавился флаг 0x0010 (если оперировать BE порядком, 0x1000 для LE) и соотвествующий footer для него. Не видел, чтоб сервер его использовал, присланный клиентом можно просто откусить из сообщения. Выкусывать нужно перед обработкой footer'а HAS_SEQUENCE_NUMBER,

т.е. на примере ненадежного пакета: если флаг синий, то откусываем красный:  0x4814 20000000 BC000000 BA000000 00000000 00 EFBEADDE 06

 

Вы у себя делали поддержку PIGGYBACKS и ACK's или в своем эмуляторе тоже полагаетесь на то, что пакеты не будут пропадать?

 

После обновления протокола на 1.0 у нас отвалились только некоторые из RPC методов: вызов showGUI для Account стал оперировать большим количеством данных, хотя в скрипте их осталось столько же (сейчас уже не уверен). Пока захардкодили этот кусок, живём так. От версии к версии 1.0 -> 1.1 этот кусок не поменялся. В остальном значительных изменений протокола обновление не принесло. Если есть проблемы с обновлением сетевой составляющей - спрашивайте, мы тоже делаем эмулятор для танков и поели 💩 с нелогичностью протокола.  

 

Перехват трафика через MITM - интересное решение, спасибо. Мы в свое время написали и используем для этого сниффер, который ищет определенные точки в клиенте вытаскивая данные прямо из памяти. 

Share this post


Link to post

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

а в конце этого года будет возможность принять участие в тестировании этого мода?

Я тоже поучаствовал.

Share this post


Link to post

Short link
Share on other sites
7 часов назад, NonNamed сказал:

Не видел, чтоб сервер его использовал

После начала раунда, когда сервер отправил всю информацию об арене, он отправляет пакеты с этим флагом. Используется в том случае, когда пакет не требует подтверждения доставки. У клиента увеличивается на единицу, у сервера, видимо, один счётчик на всех, начинается с любого числа, системы увеличения не нашёл. Первый пакет, например, 12360490, потом 12360511, 12360531 и так далее.

 

8 часов назад, NonNamed сказал:

Вы у себя делали поддержку PIGGYBACKS и ACK's или в своем эмуляторе тоже полагаетесь на то, что пакеты не будут пропадать?

На данный момент в эмуляторе не делал. Использую локальный mitm-клиент, который отправляет трафик на локальный сервер через библиотеку Enet, чтобы на данный момент мне не писать сетевой код. Как делать, знаю, позже реализую.

8 часов назад, NonNamed сказал:

После обновления протокола на 1.0 у нас отвалились только некоторые из RPC методов

Движок поддерживает до 65k методов. Когда их общее количество меньше 255, используется один байт на идентификатор метода. А когда больше, делает нечто, что на данный момент мне не известно. Т.к. у меня версия игры перед 1.0, то передо мной не стоит задача разобраться в этом. Но не думаю, что там сложно, надо бы сделать, просто нет желания.

8 часов назад, NonNamed сказал:

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

BigWorld остался прежним же, сетевая часть не изменилась вообще.

8 часов назад, NonNamed сказал:

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

Поэтому и mitm, чтобы подобное не делать каждый раз, как только выходит очередное обновление. У меня mitm-прокси не изменялся с тех пор, как его написал больше года назад. Добавил только запись в pcap файл перехваченного трафика, чтобы Rawcap постоянно не запускать. Проблема возникает, когда сервер хочет перенаправить клиент на другой сервер (сообщение switchBaseApp). В этом случае клиент уходит из mitm.

@RUS_TAHK @Spectr20 Не знаю. Мне сейчас крайне лениво что-то делать, с момента последнего сообщения практически ничего нет нового. Поэтому по срокам ничего написать не могу. Постоянно возникают проблемы, сложности. Сейчас опять упёрся в то, что одна из секций в файле техники читается, но не записывается, когда есть константа IS_CELLAPP (это для сервера, означает боевую арену). Если IS_CLIENT, то всё нормально, но просто выставить IS_CLIENT нельзя, это сразу же тянет весь клиент с его GUI и прочим, что на сервере не нужно. Оригинальный сервер, по видимому, использует что-то другое, чего в клиенте игры нет. А когда что-то долго делаешь, но не видишь результата работы, желание делать уходит. Не то, чтобы всё забросил, но на данный момент надоело. Продолжу неспешно делать, о результатах буду писать. Когда появится что-то, чем можно поделиться (и будет стабильно запускаться), тогда опубликую.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
3 часа назад, RUS_TAHK сказал:

Уже?? Так ведь даже нет ссылки на скачивание(

Прошу прощения не правильно выразился. Я бы то же принял участие в тесте

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

20 hours ago, Dragon armor said:

После начала раунда, когда сервер отправил всю информацию об арене, он отправляет пакеты с этим флагом. Используется в том случае, когда пакет не требует подтверждения доставки. У клиента увеличивается на единицу, у сервера, видимо, один счётчик на всех, начинается с любого числа, системы увеличения не нашёл. Первый пакет, например, 12360490, потом 12360511, 12360531 и так далее.

 

На самом деле на 1.1 работает и без отправки его с сервера, это больше похоже на тот счетчик, который раньше был вместо SEQUENCE_NUMBER в случае ненадежной доставки. Не понятно зачем они его разделили. В версиях до 0.8 он увеличивался бесконечно, причем если запустить одновременно несколько клиентов и снять с них трафик - можно понять что это действительно глобальный счетчик сетевой подсистемы. 

20 hours ago, Dragon armor said:

Поэтому и mitm, чтобы подобное не делать каждый раз, как только выходит очередное обновление. У меня mitm-прокси не изменялся с тех пор, как его написал больше года назад. Добавил только запись в pcap файл перехваченного трафика, чтобы Rawcap постоянно не запускать. Проблема возникает, когда сервер хочет перенаправить клиент на другой сервер (сообщение switchBaseApp). В этом случае клиент уходит из mitm.

Мы также не обновляем сниффер, версии пожалуй с 0.8. Сперва сканируется память, находится сигнатура методов шифрования/дешифрования, и уже на найденные адреса памяти вешается отладчик, который снимает данные. В любом случае, я не говорю что mitm это плохо. Но он не всегда правильную картину покажет того, как клиент обработал данные (но точно такую, как он их принял к обработке).

 

А switchBaseApp (switchInterface если быть точнее), вы можете отфильтровать, либо заменить unreliable заглушкой чтоб в sequence не было дырки.

 

20 hours ago, Dragon armor said:

Движок поддерживает до 65k методов. Когда их общее количество меньше 255, используется один байт на идентификатор метода. А когда больше, делает нечто, что на данный момент мне не известно. Т.к. у меня версия игры перед 1.0, то передо мной не стоит задача разобраться в этом. Но не думаю, что там сложно, надо бы сделать, просто нет желания.

 

На самом деле не 255, а примерно 60 он укладывает в один байт. Дальше клиент нарезает messageId и во второй байт укладывает то, что за пределами маски 0xFFC0

Edited by NonNamed

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...