LINUX.ORG.RU
ФорумTalks

[MMORPG не нужны] [история успеха] [специалистам по всему] Мультибоксинг в играх


0

0

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

Имеется онлайновая игрушка. Похожая на доту. Не буду говорить какая (благо сейчас дота-клонов развелось тысячи), чтобы толпы не ринулись класть ее сервак. Кто догадается, не пишите в комментах название - жалко разрабов же :)

В системных тебованиях - Shader Model 2 и гиг оперативки.

Чтобы нормально поиграть в игрушку, там надо докачаться в тренировочных поединках с ботами до 30ого уровня. Не знаю как на 29-м, но чтобы прокачаться с 6-ого по 7й нужно сыграть 10 боев по 30 минут каждый. (при особом желании и подобранной команде можно ускориться до 6-10 минут на бой).

Таким образом даже план «один день - один левел!», чтобы уже через месяц играть как белый человек, не оправдывает себя. Я не настолько задрот, чтобы тратить по 3-6 часов игры в день чтобы прокачать всего один левел.


Мысль о том, как это нужно делать ПО-НАСТОЯЩЕМУ возникла быстро: нужно запустить пять игровых клиентов, чтобы на 5 неактивных игроков приходился 1 бот. Матч идет 3 на 3 человека, одна команда не сопротивляется вообще, за вторую играет единственный активный бот. Таким образом, можно начать игру, и на полчаса уйти пить чай.

При попытке запутить второй клиент - он не запустился. Я начихал и начал с кардинальных вещей: глобальной виртуализации.

Вначале я поставил клиенты на VirtualBox. Но эта скотинка не асилила Shader Model 2. Пришлось перейти на VMWare.

С переходом на VMWare пришлось так же перейти на Windows 7 Ultimate, потому что VMWare как-то черезвычайно странно работала с атишным блобом.

Итак, первые несколько матчей (проведенных ботами, в то время как я смотрел 9-й сезон Звездных Врат) прошли ОК. За небольшим исключением - система была в жутком свопе. Запуски игровых клиентов в VMWare занимали многие минуты. И неудивительно - нужно запускать 4 виртуальных машины с WindowsXP по гигабайту оперативной памяти на борту, плюс один нативный клиент («владелец» игры). С такими жуткими тормозами создание собственной команды из ботов занимает по 10 минут, то есть иногда проще играть с живыми игроками!!! (если они не совсем бараны, и смогут замочить противника побстырее ;)

Тогда я попытался запустить клиенты нативно, с исползованием прогарммы для нативной песочницы, Sandboxie. На винде она одна из самых лучших (если не единственная ;). Меня ждал epic fail, потому что при запуске из песочницы в коде лаунчера возникали ошибки в JavaScript. Скорее всего, модели игры общаются между собой с помощью хитрой системы js-вызовов через COM, а песочница не умеет работать с этим достаточно корректно.

Таким образом пришлось перейти на следующий уровень просвтления: ломать игровой клиент. Часть клиента (в т.ч. репорты об ошибках) сделаны с использованием JavaScript. Это глубоко внутрях, но это так. Кроме того, как оказалось, невозможность запуска второго игрового клиента обусловлена не столько желанием разработчиков отменить мультибоксинг, сколько технической неспособностью двжика (Adobe Air/Flex/Flash) запустить более одного клиента на одной машине.

Для обхода этого пришлось переписать часть скриптов движка и сделать несколько как-бы-разных клиентов. Игра (хоть и с косяками) начала запускаться нативно положенные 5 раз!

Но этого было мало. Тот кто хочет по завершении матча получить за него опыт - не должен быть АФК, иначе игровой клиент поймет и отключит его от игры. Поэтому нужно отрываться от просмотра «звездных врат» примерно каждые 5 минут и совершать какое-нибудь действие в игре.

Я потратил 4 часа на разборки с автоматизатором макросов AutoHotKey, и так и не смог научить его отправлять сообщения типа «нажатие клавиши клавиатуры» и «клик мыши». То же самое при попытке написать свою прогу на VisualStudio для этого же самого. Проблема, очевидно, состоит в том, что игра активно использует DirectX и DirectInput, и поэтому не принимает обычные оконные события окромя Activate/Minimize/Close.

===

РЕЗЮМЕ.

Теперь наступает следующий этап просветления. Нужно:
1) Будут ли запускаться отдельные экземпляры игры под Wine в режиме «песочницы», или они все же будут знать друг о друге? Специалисты Вайна, расскажите, как оно работает?
2) Есть ли под линуксом какой-нибудь автоматизатор макросов типа вендового AutoHotKey, который бы при этом мог посылать события мышки и клавиатуры неактивным окнам?
3) Будут ли под линуксом эти 5 игровых клиентов тормозить достаточно слабо, чтобы можно было досмотреть 10-й сезон Зведных Врат?

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

★★★★☆

>накидайте пожалуйста названий хороших сетевых снифферов, которыми можно удобно рыться в трафике от игры?
wireshark

AntonK ()

Для вайна можно полностью независимые инсталляции сделать через WINEPREFIX.

Автоматизаторы можно найти в Development, были, точно помню.

Попробуй, недолго же.

tcpdump'ом удобно сниффать. ethereal'ом удобно смотреть.

AnDoR ★★★★★ ()
Ответ на: комментарий от AnDoR

> Для вайна можно полностью независимые инсталляции сделать через WINEPREFIX.

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

WINEPREFIX может анально огородить игрушки так, чтобы они не могли никаким образом задетектить себя в процессах? Отдельный реестр?

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

если оно вообще запустится под вайном, то можно каждый вайн пускать в отдельном чруте, контейнере или опенвз (тут правда надо будут погемороить, чтобы не ставить 5 ОС, а обойтись одной).

Хотя наверное со всеми вариантами придется погемороить.

OxiD ★★★★ ()

>накидайте пожалуйста названий хороших сетевых снифферов, которыми можно удобно рыться в трафике от игры

под оффтопик WPE PRO, перехватывает траффик только от выбранного процесса + позволяет в автоматическом режиме подменять содержимое пакетов, давным давно читерил с ним WoW

Opxocc ()
Ответ на: комментарий от AnDoR

> Я так запускаю несколько копий Diablo II.

несколько копий Diablo II (в т.ч. и на винде) можно запустить тупо скопировав установленный Diablo в новую папку =)

тут дело несколько сложнее. Лаунчер игры написан на Adobe Air, и запускается через адобовский же дебаггер/виртуальную машину Air под названием «adl». Сей адл сделан так, что одно приложение (с одним id из манифеста, либо с другим но с теми же самыми заблокированными неразделяемыми ресурсами) может запуститься _только_ один раз. На эйрофаке местные гуры еще непридумали/ниасилили/не-успели-ответить как хакнуть это ограничение. Дело решается модификацией клиента, но при этом возникают проблемы с неразделяемыми ресурсами и 5 запущенных клиентов работают в инвалидном режиме. Поэтому особо шикарно было бы иметь прогу, которая делает нативную песочницу, которая не даст дебаггеру Эйра отыскать запущенные экземпляры приложения, и которая сама разделит ресурсы (например, поднимет нормальный NAT для каждого экземпляра приложения чтобы разделить сеть).

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

stevejobs ★★★★☆ ()
Ответ на: комментарий от Opxocc

> давным давно читерил с ним WoW

для вова где-то валялся собственный трафикрожеватель на жабе :)

а что в вове можно начитерить подменой пакетов?

stevejobs ★★★★☆ ()

>Я потратил 4 часа на разборки с автоматизатором макросов AutoHotKey, и так и не смог научить его отправлять сообщения типа «нажатие клавиши клавиатуры»

Если уже клиент сломан, зачем сторонние автоматизаторы? Пусть сам клиент и отправляет периодически, что игрок вышел из AFK. В крайнем случае соберите девайс, подключающийся к PS/2 вместо клавы/мыши и отправляющий какую-нибудь ерунду вроде небольшого шевеления мышью каждые 10 секунд ;)

Sadler ★★★ ()
Ответ на: комментарий от stevejobs

> несколько копий Diablo II (в т.ч. и на винде) можно запустить тупо скопировав установленный Diablo в новую папку =)

Эта фраза означет лишь то, что у тебя Diablo II всегда была пиратской.

AnDoR ★★★★★ ()
Ответ на: комментарий от OxiD

> если оно вообще запустится под вайном

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

в отдельном чруте, контейнере или опенвз


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

stevejobs ★★★★☆ ()
Ответ на: комментарий от AnDoR

Ну а ставить всякие левые анлокеры мне смысла нет, всё равно удобнее по префиксу для каждой держать.

AnDoR ★★★★★ ()
Ответ на: комментарий от stevejobs

>> Что за игрушка-то? HoN чтоли?

бгг. Нет, но Хон будет следующим =)

Ну там никаких тренировочных боев, и вайн не нужен.

Lucky1 ★★★ ()
Ответ на: комментарий от AnDoR

> Эта фраза означет лишь то, что у тебя Diablo II всегда была пиратской.

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

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

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

>> в отдельном чруте, контейнере или опенвз

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


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

http://wiki.jswindle.com/index.php/Wine_Prefixes

http://wiki.winehq.org/FAQ#head-faf9617c53607e583f6e6ff70a4ac9522d490faf

AnDoR ★★★★★ ()
Ответ на: комментарий от Sadler

> Если уже клиент сломан, зачем сторонние автоматизаторы?

Игра состоит из трех частей: лунчер/апдейтер на основе Air, игровой интерфейс на основе Air (магазин, статы пользователя, список запущенных игр) и игровой клиент на C++/DirectX. Исходника клиента у меня, естественно нету. Поэтому, я могу поменять только незначительную часть не-игрового гуя (главное меню, обработку ошибок, картиночки, и прочее по мелочи).

В крайнем случае соберите девайс, подключающийся к PS/2 вместо клавы/мыши и отправляющий какую-нибудь ерунду вроде небольшого шевеления мышью каждые 10 секунд ;)


а вот нифига. Если это будет HID-девайс («мышка»), которую можно и не собирать физически, а запрогать в виде драйвера - то оно потребует _активацию_ окна. Чтобы окно было на переднем плане, а девайс по нему кликал.

У меня же другая задача: окно должно быть минимизировано (или вообще невидимое), а ему посылались сообщения о кликах. В идеале, чтобы можно спокойно себе заниматься на компьютере привычными делами, а клиент круглосуточно подкачивал тебе уровень без всяких посторонних вмешательств.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

>а что в вове можно начитерить подменой пакетов?

при покупке любой вещи в магазе подменял код предмета, сначала много много таким образом пакетиков из которых рандомный лут падал, сдавал обратно в магаз -> много золотых, потом на эти золотые таким же макаром покупался редкий шмот. Была специальная wiki с кодами прдметов и их характеристиками. Говорят народ таким макаром магию войнам делал. В burning crusade говорят этот баг прикрыли.

Opxocc ()
Ответ на: комментарий от simple_best_world_web_master

> Ура, линукс готов для геймеров!

пока не посоветуют хороший автокликер для неактивных окон - не готов! :)

stevejobs ★★★★☆ ()
Ответ на: комментарий от simple_best_world_web_master

> Ура, линукс готов для геймеров!

Вот для моей любимой Diablo II линупсы гораздо удобнее, чем нативные вёнды.

AnDoR ★★★★★ ()
Ответ на: комментарий от Opxocc

> В burning crusade говорят этот баг прикрыли.

да, этот баг точно прикрыли =)

Кроме того, в коде пиратских серверов есть специальная база предметов, при попытке подмены на которые игрок автоматом получает перманентный бан =)

stevejobs ★★★★☆ ()

Много текста не осилил, но из того, что прочитал, сделал вывод, что тебе надо попробовать Sandboxie под вендой вместо виртуализации.

kranky ★★★★★ ()
Ответ на: комментарий от kranky

> не осилил

попробовать Sandboxie


Советую в следующий раз осилить.

AnDoR ★★★★★ ()
Ответ на: комментарий от kranky

> попробовать Sandboxie под вендой вместо виртуализации.

для мега-Ъ: там в тексте есть, попробовал, не работает. Шаманил с ним долго. Он ниасиливает то ли встроенный жаваскрипт (который кажись выполняется движком от IE), то ли какие-то махинации с COM.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

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

Оптимизируем вариант. Пишем драйвер, подсовываем его винде в виртуальной машине =) Окно виртуальной машины сворачиваем.

Sadler ★★★ ()
Ответ на: комментарий от Sadler

> Пишем драйвер, подсовываем его винде в виртуальной машине =) Окно виртуальной машины сворачиваем.

ты гений. серьезно.

единственный косяк, клиент там случайно крашится. Но может, это из-за недостатка видеопамяти...

Надо:
1) Узнать, как увеличить объем видеопамяти для виртуальной видеокарты в VMWare
2) Купить/одолжить видюху с гигом набортной памяти (у меня 512)

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

facepalm.lisp

Куда тебя носом ещё ткнуть, чтобы ты уже это сделал?

AnDoR ★★★★★ ()

> Я потратил 4 часа на разборки с автоматизатором макросов AutoHotKey, и так и не смог научить его отправлять сообщения типа «нажатие клавиши клавиатуры» и «клик мыши».
Попробуйте AutoIt3. В бытность свою виндузятником я на нём много чего делал.

1) Если разные WINEPREFIX, то да.
2) xdotool?

AITap ★★★★★ ()
Ответ на: комментарий от AITap

> AutoIt3

они очень похожи с AutoHotKey. Прямо как близнецы. Может быть, родились из какого-то одного проекта?

anyway, AutoIt тоже попробовал. Скрипты от AutoHotKey к нему тоже подошли. Но, как ожидалось, не заработали. Конкретно, не работает метод ControlSend. В FAQ AutoHotKey написано про метод SendPlay, который должен работать с играми DirectX, но, во-первых, он умеет работать только с активным окном, во-вторых, он тоже не работает с конкретно этой игрой.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

>1) Узнать, как увеличить объем видеопамяти для виртуальной видеокарты в VMWare
svga.vramSize= в .vmx?

GAMer ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.