Jump to content
Korean Random

Dragon armor

User
  • Content Count

    416
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by Dragon armor


  1. @HaterCheaters Нет, не пробовал. А в чём сложности? Ты хочешь клиентом подключиться к серверу? Или сервером получить список конференций у другого сервера?

    У меня была другая проблема - не смог добавить необходимый функционал в виде [[CDATA]...], которого требует клиент картохи. А потом выяснил, что можно и без xmpp обойтись, поэтому и все эксперименты с ним закончил. Пробовал на jabberd2.


  2. @StranikS_Scan Благодарю за информацию.

    2 часа назад, StranikS_Scan сказал:

    Что касается слоев в коллижене, то у них есть набор свойств, относящихся к механике снарядов.

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

     


  3. @StranikS_Scan 

    4 часа назад, StranikS_Scan сказал:

    Отвечая на твой вопрос о рубках и уроне - у картошки есть слои, которые помечены как слои контроля попадания снаряды в заброневое пространство. Если снаряд такой слой пробивает, то срабатывает флаг попадания в заброневое пространство и включается расчет урона по танку

    Всё-таки броня нулевой толщины должна быть. Без внутренних слоёв.

    4 часа назад, StranikS_Scan сказал:

    Коллижены можешь посмотреть - тут. Там хорошо виден принцип реализации у картошки.

    Броня башни отсутствует.

    424781370_.thumb.png.4c22282025dd0452adb6fdef5647d6e0.png

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

    Это почти тоже самое, что и в клиенте доступные коллижн модели. Тут отдельными плоскостями сделано. Сейчас сам не знаю, как именно делать. Ограничения физического движка на коллизию динамического объекта - замкнутый невыпуклый 3d объект (их можно объединять прямо в физическом движке для создания любой формы). Если делать плоскостями или полигонами, то это уже статика будет. Иначе физический движок не поддерживает.

    4 часа назад, StranikS_Scan сказал:

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

    Это ты про питон? Но ему эти данные предоставляют. Т.е., это опять в реализацию в физическом движке упирается. А питон уже готовые данные обрабатывает.

    Ну вот су-5, как раз рубка похожа на то, что надо.

    1788429389_.png.5820a0da11af21bdd7b400a5b6c910ae.png

    Если навести на внутреннюю часть, то не покажет ничего. Если на орудие - 0 мм. Тогда тут должны быть ограничивающие плоскости, чтобы при стрельбе сзади в рубку был урон.


  4. @StranikS_Scan А где коллижены? Те, что в клиенте - это очень упрощенный вариант, где показано лишь бронирование. А как на сервере у них реализовано? Как у картохи осуществляется пробитие при выстреле в открытую рубку? А в закрытую? Имею в виду, что в физическом движке происходит.


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

    4 часа назад, Vanya115 сказал:

    Такое даже в реалистичном WarThunder не реализовано.

    Решил поискать экспортер моделей для этой игры, чтобы посмотреть их реализацию внутренних модулей. И нашёл статью интересную  Создание 3D-модели танка. У них так же используется две модели - одна упрощенная для физических взаимодействий, а вторая так же для расчёта попаданий. Забавно, значит правильно думал, что надо разделять их. У них снаряд может пробить танк насквозь и полететь дальше. Так что сквозные пробития у них есть.

    5 часов назад, Vanya115 сказал:

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

    С открытой рубкой предполагаю такой вариант. Где нет брони - никаких 0 мм, тут ты прав, может пройти урон, когда снаряд прошёл через пустое место. Но, если он попал во внутреннюю часть брони, тогда должен быть урон. Но тут проблема вырисовывается - нужно два типа брони делать в открытой рубке. Одна - наружняя, с ней происходит расчёт и рикошетов, и толщины. А вторая будет внутренняя и здесь важен лишь факт попадания в неё для нанесения урона - та же броня с толщиной 0 мм, либо специальная пометка, что броня внутренняя. А вот если по внутреннему модулю, например, казённой части орудия, что должно быть? Как-то тестировал гриля именно на этот случай. Как мне помнится, попадание по орудию - это урон. Выше или ниже орудия - снаряд пролетал насквозь. Но вот членов экипажа, по идее, можно было контузить и без урона, хотя у меня тогда не получилось. Пока что других идей нет, хотя это и усложнение моделирования. И так придётся всю модель облепливать бронёй с фиктивной, но толщиной (т.е. все отдельные геометрические 3d элементы должны быть замкнутые).


  6. Кто подскажет по 3D моделям техники для физики. Как лучше с ними поступить. Какой формат хранения выбрать, как лучше сделать.

    1. На данный момент у меня fbx. В нём, судя по всему, есть всё необходимое. И поддерживается экспорт из 3d редактора, и импорт геометрии простой. Но может есть что лучше?

    2. Разделение на коллизию и хитбокс. Пока что этот момент не до конца обдуман. Первый нужен в физическом движке. А второй для рассчётов попадания снарядов. Эта модель сложнее, потому что нужны будут и внутренние модули, и надо учитывать толщину брони. Ограничения физического движка такие, что приходится броню делать в виде отдельных простых невыпуклых 3d-элементов. И у меня эта броня покрывает всю модель.

    1088707479_2.thumb.png.87ee53b93e86a063e2b10e15cacab469.png

    Тут тоже не до конца продумано. Есть техника с открытой рубкой. Та же вафля сзади открыта. Если туда залетит снаряд, будет пробитие. А если попытаться пробить сквозь? Например, вот тут видно будет хорошо, что имею в виду.

    747140444_.thumb.png.b3cf8f664ce440590d12b46207e50631.png

    Должно быть пробитие с таком случае?

    52770289_3.thumb.png.bd1613c2bfc318cd70e417407e6383b3.png

    У меня сделано пока что так. Открытая рубка - это броня с толщиной 0 мм.

    3. В физическом движке есть возможность отдельно делать для модели raycast, как раз тот самый хитбокс и будет участвовать. Но надо ещё и информацию получить по типу поверхности, которую встретил raycast. А у меня эта информация сохраняется в материалах. Например, вот так.

    430416848_4.thumb.png.2c2e39908d584e1074c0aef9d6271658.png

    index - это из xml файла. Там броня разделена по этим индексам и прописана их толщина. Из этого индекса толщину можно будет получить в дальнейшем для расчётов.

    type - пока что это тип брони, т.е. основная или экран.

    Ещё нужно будет добавить экипаж, внутренние модули. Это, ясно-понятно, будет без index, можно и через type обозначить, типа crew, module и добавить ещё одно свойство, характеризующее соответствующий элемент.

    4. Кто смотрел коллизию в клиенте игры, знает, что там сделано отдельными полигонами и им присвоен индекс. У меня, как написано в п.2, сделано отдельными невыпуклыми элементами. Просто не знаю, есть ли в физическом движке возможность делать raycast для отдельных полигонов. Потому что ограничения на создание физической модели из отдельных не связанных между собой полигонов - это статика. Это надо попробовать создать. И, если получится, можно точнее делать хитбокс. А у статических объектов есть возможность назначать отдельные свойства каждому полигону или группе полигонов, в отличие от динамики, где можно свойства назначить отдельному элементу.


  7. 11 минут назад, MemoryCore сказал:

    Они мало чем отличаются на практике.

    Всё же отличаются. Например, нет def-файлов, все энтити прямо в коде приложения сделаны. Посмотреть, какие у них есть функции нет возможности, в отличие от ПК версии, где можно сопоставить ID конкретной функции из def, а в скриптах игры найти как именно с ним работать. Инициализация там, возможно, сделана по другому.

    Это у тебя был целый пакет? Он не полный. И это часть одного фрагмента.

    И ещё хочу добавить. А там точно питон есть? Ведь если его нет, значит и cPickle нет.


  8. 3 минуты назад, MemoryCore сказал:

    мне интересно разбираться в этом, никакой конкретной цели не преследую

    Для чего разбираться? У меня была конкретная цель, поэтому пришлось повозиться, потому что это часть цели. Зачем тебе разбираться? Ты хочешь попрактиковаться в реверсе? Или попрактиковаться в разборе сетевого протокола? Тут довольно сложно всё, особенно если новичок. Хотя есть исходники BigWorld'а, пусть и старые, но многое можно в них подсмотреть в плане реализации.

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

    Пакет который я показал уже "дешифрованный" прямиком из функции decrypt в игре поэтому там отсутствует сигнатура в конце 0xdeadbeef (я так полагаю) ибо пакет я не резал

    Там нет номера пакета, номеров фрагментов. Ты лишнего вырезал, либо не скопировал.

     

    Вот такой пример пакета с тем заголовком, что у тебя. Из недавнего дампа так же после функции дешифровки.

    774207218_.png.570b55ae9f033f21d64e7f310784dfc1.png


  9. 14 минут назад, MemoryCore сказал:

    Это пример уже расшифрованного пакета

    Ты с флагами не разобрался.

    15 минут назад, MemoryCore сказал:

    всегда Invalid zlib header в любых случаях

    Поэтому и так. Плюс, не весь пакет сжимается же. Его отдельные части только, которые, может не корректно, называю сообщениями (message в BigWorld).

    Судя по флагам, это составное сообщение (FLAG_IS_FRAGMENT). И, судя по тем же флагам, последнее из них. Из сообщения вырезаны последние байты? Не вижу сигнатуры шифрованных данных (0xdeadbeef).

    Ты что сделать хочешь? Для чего тебе дешифровка трафика?

    17 часов назад, DrWeb7_1 сказал:

    Недостатков?

    Недостатки в части геймплея. Где-то разъезд одной команды простреливается почти с респа другой, где-то ещё какие-то. Но, несмотря даже на эти недостатки, в сравнении с тем, что сейчас - это были превосходные карты. Эта новая мета камень-куст просто ужасна. Когда начинаешь немного разбираться в игре и хочешь как-то поактивнее действовать, обязательно на ключевой позиции есть прострел. И, конечно же, надо борт башни или танка подставлять под эти позиции, чтобы действовать.


  10. 3 часа назад, Vanya115 сказал:

    Какие кстати на данный момент проблемы с эмулятором?

    Пока что небольшой отдых. В рангах пытаюсь выбиться в лиги. Такое себе, один шеврон до несгораемого ранга раза 3 проходил. В плюсе на этот один шеврон за сегодня.

    4 часа назад, Vanya115 сказал:

    С чем не получается разобраться?

    BSP формат коллизии для статической геометрии.

    1 час назад, Vanya115 сказал:

    По поводу физики. Она там (у картошки) на ньютоне сделана или неизвестно как?

    Серверная, скорее всего, своя.

    1 час назад, DrWeb7_1 сказал:

    Havok, начиная с обновления 1.0.

    Это в клиенте. А на сервере?

    Хотя есть видео "Дневники разработчиков 2014. Новая физика! [World of Tanks]". Там говорят, что хавок используется.

    1 час назад, Vanya115 сказал:

    А то нам неплохо бы сделать все максимально похожим на оригинал.

    Зачем? Пореалистичнее можно сделать. У меня есть несколько идей, как рИализЬму добавить. Использую Newton. Но на данный момент даже не знаю, как выглядеть будет конечный результат.

    6 часов назад, Vanya115 сказал:

    Переход с 0.9 на последний патч проблематичным будет?

    Зачем? Мне старая графика и старый клиент нравится. А карты-то какие. Просто летаешь над картой и восхищяешься, какие же они были хорошие, даже с учётом тех недостатоков, что у них были. Жаль, что насладиться ими в полной мере не успел.

    • Upvote 1

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

    так задумано ввиду объёма передаваемых данных

    Разные программисты делали разные части проекта. Может так.

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

    намного удобнее было бы использовать protobuf

    У них питон основной язык. Используют то, что есть в языке.


  12. 21 минуту назад, MemoryCore сказал:

    у них zlib сжатие после шифрования или до шифрования?

    У них zlib зависит от типа отдельного сообщения. Одно может быть сжато, другое cPickle, а третье - строка (json например). И всё в одном пакете. Смотреть надо в скриптах игровых, как интересующее сообщение создаётся.

    23 минуты назад, MemoryCore сказал:

    надеюсь они не отправляются частями?

    И такое может быть. С флагами пакета разобрался? В исходниках BigWorld о них есть достаточно информации.

     


  13. 1 час назад, MemoryCore сказал:

    скорее всего Session является (хэшем SHA-1 HWID железа)  ибо он не меняется (только если другое железо)

    Нет, там md5.

            m = hashlib.md5()
            m.update(params['session'])
            params['session'] = m.hexdigest()

     

    1 час назад, MemoryCore сказал:

    некоторые пакеты не дешифруются после дешифровки blowfish - есть ли там какие-то сжатие zlib возможно, и я так понимаю там до сих пор осталась структура py pickle?)

    Там постоянно cPickle, во многих zlib. Ты пакеты на отдельные сообщения разбираешь?


  14. 2 часа назад, MemoryCore сказал:

    в JSON есть поле session размер которого 32 байта * 8 = 256 бит

    Ты вон о каком параметре. Это хеш, вроде md5. В скриптах игры мне так и не удалось разобраться, какие именно данные хешируются. Для чего нужен - так же не знаю. На авторизацию не влияет.

     

    2 часа назад, MemoryCore сказал:

    каким образом клиент получает информацию о игроке

    В энтити Login получает db_id. Вслед за этим создаётся энтити Account, в которой содержится никнейм. Смотри соответствующие def файлы.

    Также заметь, что не занимался тестированием того, что произойдёт, если в "name" отправить один никнейм, а в Login другой. Какой именно примет клиент и будет ли разница - не знаю.


  15. Только что, DrWeb7_1 сказал:

    То есть, можно на сервере построить дерево исследования, например, от версии 0.8.11 в клиенте 0.9.22, создать соответствующую ему клиентскую структуру и оно будет работать? О_о

    Можно проверить же. Попробуй в старом клиенет поменять и посмотреть, изменится ли визуально.

    В клиенте отображаются связи между модулями/техникой, чтобы эти данные не гонять постоянно. Серверу тоже надо брать откуда-то информацию. Вот например, часть файла.

    <_150mm_Rohr_L29_5>	shared	  <maxAmmo>	30	</maxAmmo>
      <unlocks>
        <vehicle>	G97_Waffentrager_IV	  <cost>	163500	</cost>
        </vehicle>
      </unlocks>

    При исследовании 150мм орудия будет открыт вафлепаз. И сервер следует этим инструкциям. Исследовал - сервер отправил клиенту информацию, что эта техника теперь доступна для исследования.

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

    Похоже, снова срабатывает твой аргумент в пользу именно этой версии — неважно, какая версия клиента, всё равно всё определяется сервером?

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


  16. @MemoryCore Уточни вопрос. После авторизации - значит при подключении на baseapp? Там blowfish используется. Алгоритм шифрования не менялся с BigWorld 2.01, в исходниках можно посмотреть реализацию. Если ты про шифрование данных авторизации - там RSA.

    7 часов назад, MemoryCore сказал:

    при авторизации 'session' длиной 32 байта является сессионным ключом, верно?

    32 бита наверное. Ты про первый нешифрованный пакет после авторизации от клиента к серверу? Насчёт терминологии не знаю, это число нужно для того, чтобы идентифицировать пользователя. Дальше оно не используется.

    31.10.2020 в 02:38, DrWeb7_1 сказал:

    А кто тогда определяет дерево исследования? И клиент, и сервер?

    В клиенте визуальное отображение, в xml файлах связи между техникой, модулями, порядком открытия (т.е. при исследовании модуля/техники что должно стать доступным).

     

    31.10.2020 в 02:38, DrWeb7_1 сказал:

    Внутри клиента игры оно представлено XML-файлом, насколько я помню. На сервере – понятия не имею.

    Да, в клиенте xml. На сервере данные те же. Но сервер отправляет клиенту то, что исследовано, а что нет. Сейчас же даже первый уровень техники не открыт, потому что сервер не отправляет клиенту информацию об этом. Вот такой скрин есть у меня из старой версии эмуля.

    shot_019.thumb.jpg.b62008e5b646c8cf0441f8a3c796c261.jpg

    Хотя вся техника доступна.

    shot_020.thumb.jpg.50c76b4b25ef72e004e3a317cd30dba4.jpg


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

    Барышников говорил, что для хранения они применяют MySQL. Логично предположить, что его придётся использовать.

    MySQL применяется из-за огромной нагрузки на БД. Если нагрузка небольшая, sqlite справится. И для него вьюверов на любой вкус.

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

    Кстати, мне архитектура "ячеек" арены так до сих пор и непонятна.

    Разбивка пространства же. Ничего сложного в теории. Движок предполагалось использовать для карт неогранниченного размера. А на одном cpu или в одном процессе такое не просчитать и не обработать. Вот для танков этот подход очень не оптимален из-за размера карт 1х1 км, когда у энтити по 500 м с каждой стороны зона интереса расположена. Хотя Барышников тоже объяснял это тем, что вполне возможно увеличение размера карт и эта технология понадобится. Линия фронта, хотя бы. Но какие проблемы с производительностью клиента там были.

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

    эрзац

    Аж гуглить пришлось.

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

    Когда эрзац-бой в твоём эмуляторе сервера запускается, карта впихнута в одну ячейку, как и все энтити (WT E 100)?

    Да. У меня архитектура BigWorld даже близко не повторяется. Только необходимый минимум для клиента. Одна карта - один процесс.

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

    возможно ли изменять характеристики танков

    Да, возможно. Любые изменения со стороны сервера.


  18. 3 минуты назад, Plotnik5252ru сказал:

    А разве генерировать удобно будет?

    В любом случае, этот функционал должен быть. Если создан новый аккаунт - генерируется начальное состояние. Все эти танки 1 лвл в оригинале. Просто состояние не будет сохраняться. Например, установить оборудование можно будет, но сохранить не возможно. И каждый раз состояние аккаунта при входе в ангар будет одно и тоже. На первое время не критично.

    Но с БД надо будет думать что-то.


  19. Индексы у техники и экипажа отдельные. Очень похоже, что как в БД добавляется. Но такой объём хранить? Как у картохи сделано, узнать бы. Тут всё приходится придумывать. В BigWorld ничего этого уже нет.

    Только что, Plotnik5252ru сказал:

    Ну а если не через БД то какие варианты ещё есть?

    Никаких. Как состояние хранить? Каждый раз перестраивать? Оно, конечно, не сильно и нужно. Можно вообще без неё обойтись. Кстати, идея. На первое время сойдёт.

    Впринципе, можно генерировать новое состояние каждый раз.


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

    Трафик был сдамплен где-то в новогоднее наступление 2017-2018, поэтому снежинка. Такая ностальгия. Ещё 5к боёв, чуть-чуть техники, слотов в притык.



    shot_080.thumb.jpg.ec0f7ee56546c65b63d37b8d425cbc25.jpgshot_081.thumb.jpg.9dfb416015c1f1c77ed6c5c2c2c46762.jpg

    Без правильного оборудования, камуфляжа, нормального экипажа, даже без расходников. И со снарядами по умолчанию. Игрушечные фугасики на таком калибре.



    shot_084.thumb.jpg.007a89b303d6e82df88dbda597116c1e.jpg

    И единственный нормальный экипаж за ЛБЗ. Даже отметку удалось взять.



    shot_086.thumb.jpg.50c2f040da463f80111522ddb7bf3593.jpg

    А магазин-то, какой магазин! Максимум функционала, ничего лишнего, сверхбыстрая загрузка, быстрый отклик.



    shot_082.thumb.jpg.600fe564743db60f5de8cb4c40a0a7f2.jpg

     

    В создании техники уже разобрался. В создании экипажа тоже, при чём со всеми перками сразу (как на прес-аккаунте), хотя это пока что не протестировано, т.к. не на чем. Не знаю, как лучше в БД это сохранять. В оригинале есть индекс у техники, экипажа. Он, во-первых, уникален, во-вторых, увеличивается с каждой новой техникой или нанятым танкистом и связан с ним до конца его дней. Пока что попробую делать без привязки к индексу. Можно попробовать всё загонять в БД через cPickle. Не уверен, что прямо таки критично будет. Хоть и внешне достаточно плохое решение.




  21. shot_079.thumb.jpg.4b7aa4d081a7e047e6774d8eb4c0d954.jpg

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

    Теперь пытаюсь разобраться с энтити Account. У меня сделано очень плохо на данный момент, хочу задействовать базу данных, чтобы изменения сохранялись. Но это достаточно сложно хотя бы потому, что не понятно, что именно сохранять и в каком виде. Должны быть таблицы техники, экипажа, товаров (там всё остальное?). Их надо как-то заполнить начальными значениями. А ассоциации экипаж - техника? Как это реализовать?

    У меня есть такой код для создания техники:

    items.vehicles.g_cache.vehicle(nationID, itemTypeName)

    nationID = nations.INDICES['germany']
    itemTypeName = 190

    Создаст вафлю е100. Возвращается VehicleType. Вот там всё, что можно устанавливать на танк?

    А это уже из ClientGoodies.py

        def synchronize(self, isFullSync, diff):
            if isFullSync:
                self.__cache.clear()
            goodiesFull = diff.get(('goodies', '_r'), {})
            if goodiesFull:
                self.__cache = dict(goodiesFull)
            for item in ('goodies',):
                itemDiff = diff.get(item, None)
                if itemDiff is not None:
                    synchronizeDicts(itemDiff, self.__cache.setdefault(item, {}))
    
            return

    Вот тут что происходит? for item in ('goodies',): зачем так делать?

    Приставка '_r' встречается в некоторых местах. По видимому, это полное обновление, replace может быть? А без неё только то, чего нет для экономии трафика.

     

    @Putin192 Дратути. В ангаре счётчик очереди понаблюдать хочется?

×
×
  • Create New...