Jump to content
Korean Random

Plotnik5252ru

User
  • Content Count

    54
  • Joined

  • Last visited

Posts posted by Plotnik5252ru


  1. 11 часов назад, freak527 сказал:

    @Plotnik5252ru I try to make an emulator. But it is very difficult to solve details. I will respect dragon armor 's decision to don't share his very early build. My programming skills are very weak so I try to learn. Maybe I will need such a year or more. I think dragon armor' s work is going well so far. I have a question to, is a release of an emulator legal at all? Sincerely freak 

     I understand, but maybe you first time you are a novice programmer to do like offline hangar wot 0.8.9 as izeberg?


  2. 10 минут назад, Vanya115 сказал:

    Сделать наверное можно. Ну а перенести... Кстати, у Вафли и Неуязвимого вроде бы должна быть совместимость, они же из похожих патчей.

    Ну смотри есть обычная вафля в клиенте. И то можно просто сделать или перенести на неё этот стиль или шкурку? А с остальным идей даже нет.

    А характеристики там хп и тд, можно менять на сервере.


  3. 22.10.2020 в 14:44, Dragon armor сказал:

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

    Трафик был сдамплен где-то в новогоднее наступление 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. Не уверен, что прямо таки критично будет. Хоть и внешне достаточно плохое решение.

    Если ты разобрался как добавлять танки и накрутить бои и медали, то можешь ли ты менять ник в игре?


  4. 2 минуты назад, Dragon armor сказал:

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

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

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

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


  5. 1 минуту назад, Dragon armor сказал:

    @Plotnik5252ru Желания мало. Нужны ещё и знания. Без них, увы, ничего не сделать, как бы сильно не желал кто-либо сделать что-либо.

    В нашей игре без знаний не обойтись особенно про бигворлд

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

    @Plotnik5252ru Желания мало. Нужны ещё и знания. Без них, увы, ничего не сделать, как бы сильно не желал кто-либо сделать что-либо.

    Статью уже нашёл на хабре пока прочитаю ещё чуть умнее стану


  6. 4 минуты назад, Dragon armor сказал:

    @Plotnik5252ru Нет, арта тут уже не ваншотит, а станит. Шарить надо в реверсе, знать Ida, OllyDbg, хорошо бы ещё си(++), питон для скриптов игровых. Авторизация - дело не хитрое, она практически в том же виде осталась, что была в 2010 в исходниках. Основная сложность не тут, надо логику делать в ангаре, а также на арене (бой). Дамп - вещь полезная, конечно, но он абсолютно бесполезен, если его просто захватить (запустить Wireshark, как пример). Надо делать mitm, то есть, свой публичный ключ нужен, а также перенаправление на свой локальный прокси, который будет трафик вновь расшифровывать и зашифровывать уже с помощью публичного ключа от игры. Можно и по-другому, как человек писал на хабре в году, вроде бы, 2014. Ссылка гуглится легко по фразам "расшифровка сетевого трафика WoT" или похожее к этому. В общем, нет, это не просто. Если знаешь, то тоже не так легко.

    Ну если есть желание думаю сделать можно многое


  7. 2 минуты назад, Dragon armor сказал:

    Думаю, аналогично по сложности. Легче будет разве что из-за использование готовой кодовой базы. Различие между ними очень большие. В сетевом протоколе различия минимальны. А вот во внутреннем устройстве очень существенны будут. Разные скрипты. Надо адаптировать к ним. В скриптах вызываются методы, которые могут отличаться по количеству агрументов, по наличию/отсутствию методов. Есть встроенные в BigWorld функции, связанные с сетью (типа логин, создание/удаление энтитей и другие). Они тоже отличаются. А у меня сделано так же, как в BigWorld, то есть, они внутри эмуля будут. А тогда нужно будет выносить всё подобное в питон. У меня нет дампа трафика тех версий, что усложняет в какой-то степени восстановление сетевого протокола. Ну и финальный вопрос: адаптировать кто будет? Уж лучше сосредоточиться на одной версии и делать её.

    Согласен раз 0.9.22 так ее да и норм вроде версия. По крайней мере хоть арта ваншотит:). А насчёт старой версии то если бы я шарил в этом биг ворлде серверах и тд то попробовал бы сделать хотя бы авторизацию и вход в ангар. Ну а у меня только теория и то не полная а практики нет. Вот бы дамп старых версий был было бы легче немного 


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

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

    Смотрел, очень близко к утёкшим исходникам BigWorld 2.01. Но и текущая версия не сильно отличается. Добавилось не так и много.

    Интересно если ты сделал эмуль под 0.9.22 то под 0.7.0 или до 0.8.11 делать намного легче или сложнее?

    • Downvote 1

  9. 08.10.2020 в 15:29, Dragon armor сказал:

    @Plotnik5252ru Заходил на сервер. Сыграл с таким вот результатом.

     

      Скрыть содержимое

    437469417_.thumb.jpg.e4e963b1401c627338f4c9eeb7e33e66.jpg

     

    И больше не заходил.

    Клиент у меня сохранился. Недавно смотрел его сетевую часть, но там нет ничего интересного, даже наоборот, там не хватает того, что было позже добавлено. Различия между BigWorld и тем клиентом не такие большие. А между тем клиентом и 0.9.22 существенны. И не могу понять тех, кто ностальгирует по 0.7.0. Ведь важен сам клиент, а за то, что происходит внутри него будет отвечать сервер. Так зачем он нужен, с графикой начала 2000х и никакой оптимизацией, когда 0.9.22 поприятнее будет.

    Интересно ты смотрел сетевую часть клиента, какая она? И чем отличается от 0.9.22? 

    • Downvote 1

  10. 20 часов назад, Dragon armor сказал:

    @DrWeb7_1 Не знаю, как делать архитектуру сервера. Долго ходил вокруг методов инициализации из def файлов. Сегодня решил, что оставлю так, как было, лишь поправил некоторые моменты. Но там не всё однозначно, есть секция Properties в def. Там флаги важны. Так думаю, если есть флаг ALL_CLIENTS, например, то надо при изменении этого параметра делать рассылку всем клиентам, если BASE_AND_CLIENT или OWN_CLIENT, то только конкретному клиенту. Надо как-то сделать будет. Эти простыни кода инициализации питона просто вымораживают.

    Инициализацию всех энтитей решил делать из сишки, это не быстрее по производительности, но в питон уже идёт готовый объект. Можно, конечно, в __init__ делать только базовые вещи, но это минимальное удобство для программирования, разница лишь в двух функциях. Зато полный контроль над создаваемыми объектами (PyObject которые).

    Сейчас упёрся в инициализацию клиентских энтитей. loginapp работает норм, там всё просто и понятно, нет питона, клиент может логиниться, всё замечательно. Дальше, loginapp передаёт клиент на baseapp. Первое сообщение легко обработать и даже дать ответ на него. Но, дальше-то что? Опишу, вдруг мысль возникнет по ходу дела.

    Сейчас у меня так. Есть сеть, network_s, который держит все соединения, занимается отправкой и приёмом сетевых пакетов. Есть соединение с клиентом. Залогиненные клиенты определяются по ip:port. Питон не задействован, хз воткнуть его тут или не нужен.

    Есть клиент, пока что baseapp_client_s. Боюсь, что придётся переделывать, когда появится cellapp, но у меня нет идей, как сделать, чтобы и тут, и там можно было использовать, поэтому пока что так. baseapp_client_s создаётся при первом обращении клиента к baseapp. Авторизация и все дела. Т.к. такого клиента до этого не было, создаю его, создаю в питоне class Client, инициализирую и вызываю питон. Клиент с питоном связаны. В бинарниках BigWorld уже где-то тут создаётся первая энтити. Разумно мне так же делать или нет - не знаю. Ну ладно, в питоне сделать вызов можно, On_Init, а в ней будет создана первая энтити, это Login. Тут у меня сделана инициализация этой энтити из питона в си. То есть, создаётся в питоне self.entity = self.Create_Entity('Login'), но сохраняется и доступна в си также, есть там механизм через tp_members, коряво как-то выглядит. Дальше надо ждать клиента, он отправляет enableEntities. Тут надо отправить клиенту новую энтити через createBasePlayer. Ладно, пока не сложно, отправлю. А вот дальше надо сбросить эту энтити и создать уже Account. Вот как? Т.е., надо удалить текущую энтити, создать новую и повторить алгоритм как при инициализации. Сбросить знаю как, за это отвечает сообщение resetEntities. Эмулировать ожидание перед отправкой? Или слать сразу после создания? А кто отправляет? Из питона?

    Пока что почти пустой клиент.

    
    
    class Client(LittleWorld.Baseapp_Client):
    	def __init__(self):
    		print 'Client.__init__'
    		LittleWorld.Baseapp_Client.__init__(self)
    	def On_Init(self):
    		self.entity = self.Create_Entity('Login')
    	def onEntitiesEnabled(self):
    		pass

    Или сделать метод-запрос на создание энтити? Типа Request_New_Entity. А в питоне сделать флаг, какую энтити вызывать?

    Ах, да, onEntitiesEnabled спёр из питоновых файлов BigWorld'а. Там вызывается этот метод, когда поступает сообщение enableEntities .

    Кстати, есть такой движок kbengine, внутренне очень похож на BigWorld. Думаю, что BigWorld в своё время утёк полностью, но публично нет серверной части. И на его основе сделали вот это. Когда узнал, прямо обрадовался так. А посмотрел, сетевой части нет, там через TCP чтоли идёт. Есть даже видео об этом движке. Вряд ли он поможет, сильно всё изменено там. И некоторые вещи очень разумно. ID сообщения 2 байта, сразу же решается проблема в недостатке их, больше 65к вряд ли понадобится. Длина сообщения 4 байта, тут тоже уходят все костыли, связанные с размером в BigWorld, когда при превышении длины сообщения над разрядностью доступной длины (один байт, например), первые 4 байта в сообщении вырезаются, помещаются в конец, расширяя его на 4 байта, оригинальная длина помечается меткой 0xFF. Норм так сделано.

    Интересно а что ещё сейчас нужно эмулятору для стабильно хорошей работы?

    • Downvote 2

  11. 4 часа назад, Dragon armor сказал:

    @Plotnik5252ru Заходил на сервер. Сыграл с таким вот результатом.

     

      Скрыть содержимое

    437469417_.thumb.jpg.e4e963b1401c627338f4c9eeb7e33e66.jpg

     

    И больше не заходил.

    Клиент у меня сохранился. Недавно смотрел его сетевую часть, но там нет ничего интересного, даже наоборот, там не хватает того, что было позже добавлено. Различия между BigWorld и тем клиентом не такие большие. А между тем клиентом и 0.9.22 существенны. И не могу понять тех, кто ностальгирует по 0.7.0. Ведь важен сам клиент, а за то, что происходит внутри него будет отвечать сервер. Так зачем он нужен, с графикой начала 2000х и никакой оптимизацией, когда 0.9.22 поприятнее будет.

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

    Возможно графика да где то фиговая и физики нет (где то это даже хорошо) но раньше танки многим такие нравились щяс наоборот люди уходят из игры 

    • Downvote 2

  12. 11 минут назад, Dragon armor сказал:

    Ты немного сути не понимаешь. Очень рекомендую как-нибудь посмотреть видео "Максим Барышников — Миллион пользователей онлайн в World of Tanks с инженерной точки зрения". Там рассказывается о BigWorld.

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

    Спасибо полезная инфа. Буду развиваться

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

    Ты немного сути не понимаешь. Очень рекомендую как-нибудь посмотреть видео "Максим Барышников — Миллион пользователей онлайн в World of Tanks с инженерной точки зрения". Там рассказывается о BigWorld.

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

    Через baseapp, конечно же.

    Посмотрел видео. Понял как работает авторизация, за что отвечает baseapp а за что cellapp. Что за энтити и за что отвечают. Полезное видео, спасибо что порекомендовал!


  13. 2 минуты назад, Dragon armor сказал:

    Тут надо издалека начинать, а у меня не получится, т.к. объяснять не умею. Энтити - это такие сущности в BigWorld. Связывание разных частей движка друг с другом.

    На cellapp авторизовываться не надо, клиент туда попадает уже авторизованным через cellapp.

    Тоесть ты только через baseapp пробовал?

    Про энтити я загуглю ну болеет менее понятно


  14. 19 минут назад, Dragon armor сказал:

    Не всё так просто оказалось, как рассчитывал. В результате разделения на baseapp и cellapp, приходится многое переделывать. Доделать надо работу с def-файлами. Парсер у меня написан более-менее нормально, но очень много лишнего вокруг него. Всё-таки, когда всё было в куче без разделения, это выглядело не так прохо. А сейчас не подходит. Смотрел бинарники сервера BigWorld, так и не смог понять, откуда всё начинается и кто, всё-таки, создаёт начальную энтити. Поэтому сделаю в скриптах напрямую. Тоже интересный момент. Когда клиент авторизуется на baseapp, для него создаётся энтити Login. Не могу утверждать, но вот эта вот очередь

     

      Скрыть содержимое

    15136_godovschina-wot-classic.jpg.001d5553bc88ae1b412577eba411c8c2.jpg

     

    результат работы этой энтити. То есть, это уже залогиненный клиент, но его можно держать в подвешенном состоянии. Затем, если всё нормально, буквально через полсекунды, создаётся энтити Account. Нужно или нет делать также? В Login передаётся ник и db_id. И всё. Сейчас поискал, никнейм больше не передаётся, кроме как в Login. Можно будет поэкспериментировать.

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

    Сейчас заодно с baseapp, пытаюсь делать связку с пиноном. Пока что выходит не очень. Что там надо, какие функции предусмотреть, что именно с питоном связывать? Не понятно. Когда клиент логинится, надо его в питон выносить? Типа Client будет. А что ему прописывать? Какие функции? Но и энтити нужны в питоне. Получается, и клиент, и энтити будут одновременно там.

    Переписывать код сейчас приходится меньше, всё же есть кое-какая реализация, сделанная раньше. Но как посмотрю, что накодил и с мыслью "Ну ладно, оно же работает", закрываю.

     

    Ну тут надо экспериментировать с клиентом. Может как то да заработает. Должен же быть способ. А что в этих энтити такого? Account, login. Они вроде бы отвечают за вход как я понял. А что в этих энтити?

    Ещё можешь попробовать авторизоваться на cellapp


  15. 15 часов назад, Dragon armor сказал:

    Хз.

    Кстати, вопрос по питону. Как лучше делать, кому инициализировать класс.

    Есть связка питона и сишки. Какой-то класс, допустим Avatar. Его можно создать в сишке, там же инициализировать, а потом вызвать __init__ в питоновом скрипте. А можно создавать в питоне, а из него вызывать __init__ и инициализацию делать. Вот какой способ выбрать?

    Так вот, если инициализация из питона.

    
    class Avatar(Entity, ClientCommandsPort, Chat, AvatarObserver):
    	def __init__(self, name):
    		Entity.__init__(self)
    		ClientCommandsPort.__init__(self)
    		Chat.__init__(self)
    		AvatarObserver.__init__(self)

    Если же создание класса будет через сишное API, то Entity уже будет инициализирован и его вызывать не надо.

    Через API.

    
    Py_Entity_s *entity = (Py_Entity_s *)PyType_GenericAlloc((PyTypeObject *)entity_type->pclass, 0);
    ...
    pFunction = PyObject_GetAttr(&entity->py_object, "__init__");
    res = PyEval_CallObjectWithKeywords(pFunction, argc, kw);

     

    С вами только умнее становлюсь. Вообще проект твой интересный, да и эксперимент хороший. Теперь понимаю больше как биг ворлд работает. 

×
×
  • Create New...