Jump to content
Korean Random
Dragon armor

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

Recommended Posts

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

any major updates?

Not that yet.

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

i've studied up on the language and have a sturdy understanding of it.

Take a look at physics demo that was discussed some pages ago.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
03.10.2020 в 02:50, blueferret сказал:

i can assist in any (most) c++ things

OK. I'm using c pure.

@DrWeb7_1 Хотел уже нормально протестировать baseapp, чтобы заодно и сетевую часть затронуть, как вдруг мысль у меня возникла. Зачем для cellapp нужна энтити Account? Она же только для baseapp актуальна. Решил посмотреть, как в BigWorld это сделано. Действительно, нет Account.py. Вот жеж. Сколько смотрел, а только сейчас догадался про дополнительное назначение секций в .def файлах. В Account нет секции с CellMethods. Посмотрел в доступных исходниках и бинарниках. Есть условие там: если нет секции и нет питон-файла, то энтити пропускается. Может быть, у меня из-за этого были ошибки в сетевой части (неправильное сопоставление messageID с энтити).

А вот энтити Avatar содержит и CellMethods, и BaseMethods. Нужна и там, и там. Пока что не понятно.

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

если нет секции и нет питон-файла

Точнее, только питон-файла.

Share this post


Link to post

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

Зачем для cellapp нужна энтити Account?

А за передачу никнейма игрока и того, на чём он вышел в бой, что отвечает?

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 Если ты про сетевое сообщение клиенту, то создаётся энтити Avatar (через createBasePlayer), а у неё есть свойство name. Вот в нём и идёт никнейм игрока. Техника создаётся позже, через Avatar.updateArena, флаг updateType == VEHICLE_LIST. Также, через updateArena создаётся всё остальное. И после этого, клиенту отправляется сообщение createCellPlayer. И это тоже Avatar, но свойства другие передаются. Надо будет вспомнить, как так делятся свойства между baseapp и cellapp.

Edited by Dragon armor

Share this post


Link to post

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

@DrWeb7_1 Если ты про сетевое сообщение клиенту, то создаётся энтити Avatar (через createBasePlayer), а у неё есть свойство name. Вот в нём и идёт никнейм игрока. Техника создаётся позже, через Avatar.updateArena, флаг updateType == VEHICLE_LIST. Также, через updateArena создаётся всё остальное. И после этого, клиенту отправляется сообщение createCellPlayer. И это тоже Avatar, но свойства другие передаются. Надо будет вспомнить, как так делятся свойства между baseapp и cellapp.

Смотрю вы много работы проделали. 

Share this post


Link to post

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

VEHICLE_LIST

Список танков на арене или список компонентов танка у конкретного "аватара"?

Share this post


Link to post

Short link
Share on other sites

@Plotnik5252ru Это уже давно было сделано. Теперь надо структуризировать.

@DrWeb7_1 Полный список всей техники на арене. Смотри __onVehicleListUpdate.

        infoAsDict = {'vehicleType': getVehicleType(info[1]),
         'name': info[2],
         'team': info[3],
         'isAlive': info[4],
         'isAvatarReady': info[5],
         'isTeamKiller': info[6],
         'accountDBID': info[7],
         'clanAbbrev': info[8],
         'clanDBID': info[9],
         'prebattleID': info[10],
         'isPrebattleCreator': bool(info[11]),
         'forbidInBattleInvitations': bool(info[12]),
         'events': info[13],
         'igrType': info[14],
         'personalMissionIDs': info[15],
         'crewGroup': info[16],
         'ranked': info[17]}
  return (info[0], infoAsDict)

Передаётся Vehicle ID, всё об игроке (ник, клан, команда), в vehicleType полная информация об технике (vehicles.VehicleDescr). Есть даже  информация об установленных модулях, но для всей техники, исключая игрока, она пустая (только не помню, тут это или где-то ещё). Что интересно, передаётся даже то, какая рация, шасси, двигатель, баки установлены на технике (у всех).

Share this post


Link to post

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

Передаётся Vehicle ID, всё об игроке (ник, клан, команда), в vehicleType полная информация об технике (vehicles.VehicleDescr).

Ы. По сути, это то, с чем любой игрок сталкивается "каждый день" в бою. Я всё не могу понять, что это за IGR. Когда-то был ангар с названием пространства hangar_premium_igr, (он же "ангар-пещера") но здесь эти три буквы какую смысловую нагрузку несут?

Share this post


Link to post

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

что это за IGR

Когда-то гугл мне сказал, что это Internet Gate Rooms. Сейчас он заявляет, что это Indie Game Reviewer.

Оно это, или нет, не помню.



shot_016.thumb.jpg.fa9196e160c96c1f883fe6fa2a22a7d8.jpg

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

msgid "PromoPremiumIgrWindow/text"
msgstr ""
"Играя в %(iconIgr)s вы получаете возможность арендовать множество машин и "
"выходить на них в бой, не совершая покупку. После завершения акции "
"начисленная техника не исчезает, и вы имеете возможность разоружить её, не "
"беспокоясь о сохранности оборудования, снаряжения и экипажа."

 

Share this post


Link to post

Short link
Share on other sites

А можно вопрос. А кода это можно будет потрогать?

Share this post


Link to post

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

А можно вопрос. А кода это можно будет потрогать?

Пока нельзя так как ещё все сырое ну если ты прям и на такое готов то у dragon armor спроси

Share this post


Link to post

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

А кода это можно будет потрогать?

Хз.

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

Есть связка питона и сишки. Какой-то класс, допустим 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);

 

Edited by Dragon armor

Share this post


Link to post

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

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

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

 

Share this post


Link to post

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

Share this post


Link to post

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

А что в этих энтити такого? Account, login. Они вроде бы отвечают за вход как я понял. А что в этих энтити?

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

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

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

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

Share this post


Link to post

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

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

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

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

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

Share this post


Link to post

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

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

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

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

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

клиент туда попадает уже авторизованным через cellapp

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

Edited by Dragon armor
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
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. Что за энтити и за что отвечают. Полезное видео, спасибо что порекомендовал!

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.

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