Jump to content
Korean Random
Dragon armor

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

Recommended Posts

Привет хотел бы узнать, когда ты запускал клиент 0.7.0 он дал результатов, или так и висел в очереди не попав в ангар даже?

Share this post


Link to post

Short link
Share on other sites

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

437469417_.thumb.jpg.e4e963b1401c627338f4c9eeb7e33e66.jpg

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

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

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
4 часа назад, Dragon armor сказал:

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

 

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

437469417_.thumb.jpg.e4e963b1401c627338f4c9eeb7e33e66.jpg

 

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

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

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

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

Edited by Plotnik5252ru
  • Downvote 2

Share this post


Link to post

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

Вот какой способ выбрать?

Я думаю, что вызывать из C будет проще, ты говоришь, что Entity уже инициализирован и над ним лишних телодвижений проводить не надо. Да и по производительности будет быстрее, наверное?.. Python вроде медленным языком считают.

Share this post


Link to post

Short link
Share on other sites

@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. Норм так сделано.

Share this post


Link to post

Short link
Share on other sites
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

Share this post


Link to post

Short link
Share on other sites
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

Share this post


Link to post

Short link
Share on other sites
10.10.2020 в 19:42, Plotnik5252ru сказал:

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

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

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

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

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

Share this post


Link to post

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

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

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

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

  • Downvote 1

Share this post


Link to post

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

под 0.7.0 или до 0.8.11 делать намного легче или сложнее?

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

Share this post


Link to post

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

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

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

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

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

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

Share this post


Link to post

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

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

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

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

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

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

Share this post


Link to post

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

Статью уже нашёл на хабре

Там ничего особенного. Разве что подсказало мне про cPickle.

Share this post


Link to post

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

Вот бы сейчас исходников танков.

Прекращай флудить плиз.

  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

cPickle is just a very stupid and annoyingly confusing way of packing the client side files for distribution. It cuts down on the file size in bulk. It is useless for us, ignore it at all costs. That shit made my head hurt so bad.

 

Also @dragon armor if you want, I have a bit of time on my hands because of halloween from work, send me a PM and I can help out with physics. I’ve been reading up on newton dynamics, and to be honest, physics isn’t our biggest issue here. Our biggest issue here is stable performance without physics. This is why Wargaming didn’t bother implementing it until 0.8.0, they focused on getting the base aspect of the game working, then worked on the bells and whistles.

 

Also, I cannot read russian so sorry if translations go weird.

Share this post


Link to post

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

cPickle is just a very stupid and annoyingly confusing way of packing the client side files for distribution. It cuts down on the file size in bulk. It is useless for us, ignore it at all costs. That shit made my head hurt so bad.

cPickle is used everywhere in the game client where python objects need to be passed. cPickle is not used for file transfers. This is a good way to avoid creating your own object serialization libraries.

12 часов назад, blueferret сказал:

Also @dragon armor if you want, I have a bit of time on my hands because of halloween from work, send me a PM and I can help out with physics.

I have nothing from physics at the moment. I can't even imagine how the final solution should look like. I still haven't made an arena (cellapp) to test physics. You can use demosSandbox. I think you looked at the examples in the engine. This is enough to get you started.

12 часов назад, blueferret сказал:

physics isn’t our biggest issue here

Unfortunately, physics in a game about tanks that move is the most important thing.

12 часов назад, blueferret сказал:

This is why Wargaming didn’t bother implementing it until 0.8.0, they focused on getting the base aspect of the game working, then worked on the bells and whistles.

Maybe. I think they had their own server physics engine. Perhaps they still have their own physics engine.

12 часов назад, blueferret сказал:

if translations go weird

I know English very bad. I am using google translate. I think I also have some bugs.

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