Скрипты для интерактива Dark Messiah of Might and Magic

Всем привет.

Какое-то время назад я сделал интерактив для Дарк Мессии, и все хотел поделиться с сообществом, но руки не доходили оформить этот пост :)

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

Выкладываю архив (зеркало) и текст из файлика readme.txt с описанием как это все работает. Скриншоты ниже.


=== Как работает интерактив ===
Все реализовано достаточно просто - есть конфиг для игры, где прописаны бинды нужных действий на кнопки. Под это заняты в основном кнопки Numpad. 
Есть скрипт для autohotkey, который использует бинды из конфига для более сложных действий. Например, включить что-то на 30с, а затем отключить - для вас это одна кнопка, а автохоткей уже делает все остальное. Бинды автохоткея справа буквенной части клавиатуры.
Чтобы все это работало со стримом есть скрипт для рутони, который прописывается в команду бота и активирует нужные действия в зависимости от команды в чате (используя внутреннюю валюту), или доната. Если у вас другой чатик, то надо как-то придумать, как активировать скрипт при донате, или просто вручную нажимать на нужные кнопки. Для автоматического запуска действия вызывайте скрипт "main.ahk sum username", где sum - сумма поддержки, username - ник того кто поддержку прислал.
Важно то, что вызов существ осуществляется внутренней командой игры, и спавн происходит по направлению прицела. Это не всегда корректно работает, если прицел направлен не на пол, а на стену или потолок. Поэтому спавн описан как "Призвать 1-5 пауков", например. Т.е. команда вызывается 5 раз, а там уже как получится :) Как видите, это довольно топорно, но как есть.

=== Необходимый софт ===
1. AutoHotkey - https://autohotkey.com/download/ (большая кнопка "Download AutoHotkey Installer"). Устанавливайте версию Unicode.

=== Содержание скриптов ====
1. dmmm.cfg - конфиг для Dark Messiah of Might and Magic 
2. main.ahk - скрипт для автохоткея. Запускается двойным щелком, когда Вы установили автохоткей. Или можно преобразовать в exe (вызвав контекстное меню на файле, и найдя соответсвующий пункт).
3. 4rutony.csv - файлик с настройками (цена, описание, фразы в чат), который теоретически открывается в любой excel-подобной программе, но из-за проблем с совместимостью это может не получиться. По факту его можно редактировать в обычном текстовом редакторе. Столбцы в нем разделены ";".
4. interactive_spend.cs - C# скрипт для чатика Rutony. 

=== Как запустить интерактив ====
1. Установить AutoHotkey (ссылка выше)
2. Распаковать этот архив в какую-нибудь папку. У меня, например, D:\stuff\streaming\interactive\dmmm.
3. Скинуть конфиг dmmm.cfg в папку "mm\cfg" игры. Для стим-версии это C:\Program Files (x86)\Steam\steamapps\common\dark messiah might and magic single player\mm\cfg
4. Отредактировать 4rutony.csv под себя. Лучше в текстовом редакторе, но можно попробовать и в Excel. В файле можно менять цену (первая колонка); описание, которое видно при запуске скрипта (третья колонка); фразы в чат при активации (четвертая колонка). Бинды здесь поменять нельзя, т.к. они "зашиты" в скрипте.
5. Отредактировать скрипт main.ahk. Для этого откройте в текстовом редакторе. Там есть параметр GG_CHANNEL_NAME := "driver.by" - поменяйте на название своего канала (которое в строке браузера). Это нужно, только, если выбудете делать пункт 6а далее (генерировать описание под стрим), но лучше просто поменяйте.
6. Запустить скрипт main.ahk. Если Вы видите ошибку "... is not a valid key name", то просто переключите раскладку - она должна быть английской, чтобы скрипт нормально запустился и работал, т.к. бинды на английские буквы. В итоге Вы должны увидеть окошко с двумя колонками кнопок с описанием действий, ценой и на какую кнопку бинд. Это для Вашего удобства, чтобы увидеть на что надо нажать для активации действия, если автоматически не получилось. 
Важно! После запуска скрипта автохоткей перехватывает некоторые нажатия клавиш, и Вы, например, не можете печатать где-нибудь текст (в основном перехват только в самой игре, но всякое может случиться). Для того, чтобы отключить временно скрипт, нужно нажать F2. Иконка скрипта в трее с "H" должна смениться на "S" (suspended). Чтобы включить обратно - нажимайте F2. Для вывода на стрим этой информации (что интерактив отключен) я при нажатии на F2 меняю файл "\_internal\suspended.txt" с пустого на "Интерактив отключен". Так что Вы тоже можете вывести содеражние этого файлика на стрим в OBS и эта надпись будет появляться.
6а. Опционально можно сгенерировать описание под стрим с текстом/ценами из файлика 4rutony.csv и со ссылкой на донат ГГ. Если делаете это, то не забудьте выполнить пункт 5 выше! Мне конечно круто, если ссылка на донат будет на мой канал, но интерактив у вас так не заработает :). Для генерации просто нажмите кнопку в запущенном окне "Сгенерировать описание под стрим в файл stream-description.txt и скопировать в буфер обмена". Тут вопросов возникнуть не должно.
7. Запустить игру, лучше с параметром -console в ярлыке, чтобы консоль точно работала.
8. В игре в консоли подключить конфиг через "exec dmmm.cfg". Не забудьте отключить скрипт автохоткея через F2, когда печатаете что-то в консоли. Запустили? А теперь не забудьте нажать F2 еще раз, чтобы запустить скрипт автохоткея. Это будет Ваша частая ошибка с запуском скриптов :)
9. Загружайте новую игру или сэйв и интерактив должен работать на бинды - ], p, o и т.д. Их Вы видите в окне скрипта. Если что-то не работает - проверьте все ли действия выше Вы выполнили.


Здесь у нас уже должен работать интерактив в "ручном" режиме. Дальше пойдет речь как это автоматизировать в рутони.


10. Скрипт для рутони interactive_spend.cs скинуть в папку scripts установленной программы. У меня, например, такая: C:\Program Files (x86)\Steam\steamapps\common\RutonyChat\scripts\
11. В самом скрипте поменять параметры в начале файла:
path = @"D:\stuff\streaming\interactive\dmmm";  - путь до папки в которую Вы распаковали этот архив
autohotkeyExe = @"C:\Program Files\AutoHotkey\AutoHotkey.exe"; - путь до exe-файла автохоткея. Должен быть такой, как у меня.
Остальные можно не трогать, если Вы сделаете оповещения далее с названиями "darkmessiah-good", "darkmessiah-bad".
Еще в скрипте есть функция 
  private void Say(string text) {
     //RutonyBot.TwitchBot.Say(text);
     //RutonyBot.GoodgameBot.Say(text);
     //RutonyBot.YoutubeBot.Say(text);
      RutonyBot.SayToWindow(text);
  }
Она отвечает за вывод сообщений в чат. Например "driver.by подгоняет всех" если вызвать ускорение игры. Так вот работает только функция SayToWindow - выводит сообщение только в чат рутони. Т.е. его видит стример в чатике и зрители, если чатик выведен в OBS. Если вы хотите дублировать это сообщение в чатиках платформ, чтобы зрители лучше понимали что происходит, то раскомментируйте (уберите "//") строки с нужными ботами (боты на этих платформах должны быть подключены). Тогда боты будут писать сообщения на гг, твитч, ютуб.
12. В командах для бота рутони сделать команду (screenshots/screenshot1.png). !го,!go - это команды для запуска интерактива из чата (если достаточно валюты у зрителя) - можно заменить на свои. Событие Donate нужно выставить, чтобы этот скрипт срабатывал и на донат. Главное не забыть поставить "Включено" (на скриншоте команда отключена), чтобы команда работала.
12а Опционально можно вызывать случайный интерактив на фоллоу (или саб, выбрав соответствующее событие). Для этого нужно сделать похожую на предыдущую команду (screenshots/screenshot2.png). Она вызывается только на событие "Follower" и скрипту передается команда "follow".
13. В конструкторе оповещений создать два оповещения - "darkmessiah-good", "darkmessiah-bad". Важно чтобы "тип" был "ручное" (screenshots/screenshot3.png) - остальное на Ваше усмотрение (картинка, текст, звук). Эти оповещения будут вызываться скриптом, когда будет срабатывать "хорошее" или "плохое" события. Главное включить их в сцену OBS - можно отдельно по индивидуальной ссылке, или общей ссылкой на все оповещения (только не забыть включить их в "список оповещений").
14. В меню "удаленное управление" рутони нужно создать два пресета - "darkmessiah-good", "darkmessiah-bad" (тут название не важно). Они даже могут быть не включены. Их функция - запускать ручное оповещение. Только так у меня получается вызвать из скрипта наши созданные оповещения. Наверняка есть способ сделать это напрямую, но мне удалось только так. Вот скрины для двух - screenshots/screenshot4.png и screenshots/screenshot5.png. Т.е. только "показать ручное оповещение" и выбрать соответствующее ручное оповещение, которое создавалось выше.


На этом все должно работать по команде в чате и на донат - можно проверить тестовым донатом


P.S. В файл _internal\interactive.log записывается лог всех вызовов с ником и суммой. Еще для себя я делал общую статистику по положительным и отрицательным вызовам. Они пишутся в файлики positive_sum.txt и negative_sum.txt, соответственно.

P.P.S. Стим версия игры очень часто вылетает. Я использовал вот эту Repack R.G. ILITA