-
Posts
829 -
Joined
-
Last visited
-
Days Won
7
Everything posted by kharlashkin
-
Вопрос решен, огромное спасибо всем участвовавшим! Отдельное огромное спасибо DrWebber!!!
-
Сделал скрипт автозапускаемый игровым python, выход из скрипта когда закрывается окно танков. В архиве так же установочный AHK и нужная библиотека. Запуск и остановка автоактивации голосового чата клавишей "Q". Тестовый скрипт для определения фонового шума так же в архиве. Отпишитесь пожалуйста о работе скрипта кто будет пробовать. AutoVoice.7z
-
Я не понял что там к чему, подробнее объяснили бы... Я попробовал модифицировать оригинальный скрипт, вот так в принципе, то что мне нужно: 'control_modes.py' Хотя проще и удобнее по нажатию кнопок ввести коэффициенты для dx/dy. Попробовал через коэффициенты - намного лучше, потому как работает смешивание (например средне вправо и быстро вниз или медленно вниз и быстро вправо). 'control_modes.py' Подсказал бы кто как этот код вставить вместо родного модом:)
-
Тут дело в том, что я могу сделать как бы мод, который будет запускать этот скрипт напрямую из игры (я сейчас эмулятор для геймпада на AHK так запускаю). У Вас, я так понимаю, будет *.exe, что не есть гут для игры - я пробовал запускать экзешник из игрового питона и игра виснет. Моё мнение что если картоха добавит эту опцию в игру - олешки (или баранчики) в голосовом чате такой словесный срач разведут - мама не горюй. Язык же за зубами держать не умеют по поводу/без повода.
-
Сам с собой проверил скрипт в тренировочной комнате, в принципе вот так очень даже неплохо: #SingleInstance, Force device := VA_GetDevice("capture") VA_IMMDevice_Activate(device, IID_IAudioClient:="{1CB9AD4C-DBFA-4c32-B178-C2F568A703B2}", 7, 0, audioClient) VA_IAudioClient_GetMixFormat(audioClient, format) VA_IAudioClient_Initialize(audioClient, 0, 0, 0, 0, format, 0) audioMeter := VA_GetAudioMeter(device) MeterLength = 30 VA_GetDevicePeriod("capture", devicePeriod) Loop { VA_IAudioMeterInformation_GetPeakValue(audioMeter, peakValue) if peakValue > 0.0075 ControlSend,, {vk51 Down}, WoT Client if peakValue < 0.0045 ControlSend,, {vk51 Up}, WoT Client Sleep, %devicePeriod% } Т.е. я указал как бы порог включения как обычно, но уровень отправки отжатия кнопки ниже, как бы для фонового шума. Получается первая мысль была правильной, второй и третий скрипт глючные. P.S. Как и в любой программе для голоса нужно говорить четко и связно, тогда работает без проблем. Откатал сегодня пяток командных боев с автоматическим голосовым чатом, жалоб не было от команды. Так что рекомендую - удобно;) Наверное нужно добавить активацию и приостановку автоматического голосового чата по кнопке ещё...
-
Так как дома пока нет интернета, опять лежит. Пользуюсь по вечерам "сломанными" соседскими Wi-Fi, через репитер, а он по какой-то причине режет UDP-траффик и в игру зайти не могу. По логике скрипта мне кажется что он не правильный, потому как при проверке в цикле в игру постоянно отправляются сообщения что "Q" нажата но не отпущена. Надо немного поменять логику работы цикла. Вот этот скрипт логичен, но нужно проверять: #SingleInstance, Force device := VA_GetDevice("capture") VA_IMMDevice_Activate(device, IID_IAudioClient:="{1CB9AD4C-DBFA-4c32-B178-C2F568A703B2}", 7, 0, audioClient) VA_IAudioClient_GetMixFormat(audioClient, format) VA_IAudioClient_Initialize(audioClient, 0, 0, 0, 0, format, 0) audioMeter := VA_GetAudioMeter(device) MeterLength = 30 VA_GetDevicePeriod("capture", devicePeriod) Loop { VA_IAudioMeterInformation_GetPeakValue(audioMeter, peakValue) if (peakValue > 0.0055 and trig="") { Trig=1 ControlSend,, {vk51 down}, WoT Client } else if trig=1 { Trig= ControlSend,, {vk51 up}, WoT Client } Sleep, %devicePeriod% } P.S. Подсказали, что нужно сделать переключателем, изменил скрипт
-
Позавчера ночью когда хотел зайти в командные бои, вспомнил - что у меня очень неудобно назначена кнопочка "Q" на геймпаде. Ранее когда я использовал Xpadder было удобнее. Так как в качестве эмулятора геймпада для игры в танки, я использую AutoHotkey (которая и предназначена для нажатия кнопок клавиатур по событиям), решил поискать решения нажатия кнопки активации голосового чата во взводном/командным боях. Решение нашлось, и вчера вечером был написан простенький скрипт: #SingleInstance, Force device := VA_GetDevice("capture") VA_IMMDevice_Activate(device, IID_IAudioClient:="{1CB9AD4C-DBFA-4c32-B178-C2F568A703B2}", 7, 0, audioClient) VA_IAudioClient_GetMixFormat(audioClient, format) VA_IAudioClient_Initialize(audioClient, 0, 0, 0, 0, format, 0) audioMeter := VA_GetAudioMeter(device) MeterLength = 30 VA_GetDevicePeriod("capture", devicePeriod) Loop { VA_IAudioMeterInformation_GetPeakValue(audioMeter, peakValue) if peakValue > 0.0055 ControlSend,, {vk51 Down}, WoT Client else ControlSend,, {vk51 Up}, WoT Client Sleep, %devicePeriod% } Что делает скрипт - когда вы начинаете что-то говорить в гарнитуру (я использую беспроводную от Xbox 360), AHK отправляет в игру нажатие клавиши "Q", чтобы активировать голосовой чат, когда вы прекращаете говорить (т.е. уровень сигнала в микрофоне падает), AHK отправляет отпускание клавиши "Q". Я пока не проверял в танках, нужно тестировать все. Но в блокноте буковки рисовал мне скрипт очень четко - как только я говорю так и идет строка символов. P.S. AutoHotkey нужно использовать отсюда, так же добавить библиотеку работы со звуком в папку "C:\Program Files\Autohotkey\Lib" P.P.S. Так же наверное нужно будет откорректировать эту строчку "if peakValue > 0.0055" - это уровень сигнала в микрофоне (максимальное значение = 1.0). Я делал каким образом - запускал проверочный скрипт и смотрел на уровень сигнала при обычной моей речи в микрофон. 'Проверочный скрипт'
-
Успел до окончания боя - не-а, не работает, может у меня с игрой чего? Зато серебро, заработанное на Т1 растет ;)
-
Я пробовал задавать нулевые значения dx = dy = 0.0, но сейчас попробую именно Ваш код :) Я вот думаю может - просто я не там копаю? Тем более этот непонятный глюк с мышью...
-
Не-не-не, я смотрю оригинальные скрипты - которые нормально игрой кушаются. Про отступы в питоне - знаю, уже пару копей ломал...
-
Не работает код от уважаемого DrWebber... Если честно я и не ожидал - в оригинальном скрипте как-то интересно расположены отступы...
-
Ну так я в самом начале и написал, что довольно с меня копошения на месте с python, проще заплатить 5-10-100 $ за нужный функционал, расковырять код - чтобы примерно понимать что к чему, дабы не доставать потом создателя с обновами и пользоваться. Просто человеческое любопытство и постоянно новые советы дают толчки пробовать чего-то самому, хотя можно пойти х3 опыт посбивать вместо скриптов python :) За танки перед ТВ не садился уже дня 4-е... Хотя на постоянных пробах чего-то, на Т1 накатал 100к серебра. Я как то на подсознательном уровне догадывался, что как-то так нужно или с отступами были ошибки - сейчас попробую.
-
Попробовал не помогло - вот код: Заметил интересный глюк - перестает работать мышь когда нажата любая клавиша.
-
Так как в python совсем не силен, то иду методом проб и ошибок.... Примерно понимая что к чему. Код метода: 'control_modes.py' Ну Вы мне его и дали - код этот. Перепробовав много вариантов остановился пока на том что выше - потому как он ближе всего в реализации. Но отваливаются все остальные клавиши - кроме мыши. ХЗ почему. Попробую вставить этот код напрямую в оригинальные скрипты - посмотрим.
-
Спасибо, конечно, но или я не понял что к чему или ошибка - потому как не сработало...
-
Всю голову сломал уже, вот код: import BigWorld, Keys from AvatarInputHandler.control_modes import ArcadeControlMode from debug_utils import * orig_handleKeyEvent = ArcadeControlMode.handleKeyEvent def mod_handleKeyEvent(self, isDown, key, mods, event = None): orig_handleKeyEvent(self, isDown, key, mods, event = None) dx = dy = 0.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD4): dx = -4.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD6): dx = 4.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD8): dy = -4.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD2): dy = 4.0 self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return True if BigWorld.isKeyUp(Keys.KEY_NUMPAD4): dx = 0.0 if BigWorld.isKeyUp(Keys.KEY_NUMPAD6): dx = 0.0 if BigWorld.isKeyUp(Keys.KEY_NUMPAD8): dy = 0.0 if BigWorld.isKeyUp(Keys.KEY_NUMPAD2): dy = 0.0 self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return True ArcadeControlMode.handleKeyEvent = mod_handleKeyEvent Ошибок не сыпет, но никакие клавиши в бою не работают вообще кроме этих нумпадов...
-
Действительно, надо попробовать.
-
Ну логично, что нажатия отслеживает BigWorld. Надо порыскать - может есть BigWorld.isKeyUp(keyCode)...
-
Попробовал if BigWorld.isKeyDown(Keys.KEY_NUMPAD4) - так лучше работает, все сразу, но как сказать что клавиша отпущена?
-
Просидел пол-ночи сегодня, что-от наваял - но кнопки делают как надо, но в аркадном режиме больше никакие не работают вообще. from AvatarInputHandler.control_modes import ArcadeControlMode import Keys from debug_utils import * orig_handleKeyEvent = ArcadeControlMode.handleKeyEvent def mod_handleKeyEvent(self, isDown, key, mods, event = None): orig_handleKeyEvent(self, isDown, key, mods, event = None) if isDown: dx = dy = dz = 0.0 if key == Keys.KEY_NUMPAD4: dx = -4.0 if key == Keys.KEY_NUMPAD6: dx = 4.0 if key == Keys.KEY_NUMPAD8: dy = -4.0 if key == Keys.KEY_NUMPAD2: dy = 4.0 self._ArcadeControlMode__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True elif key == Keys.KEY_NUMPAD4 or Keys.KEY_NUMPAD6 or Keys.KEY_NUMPAD8 or Keys.KEY_NUMPAD2: self._ArcadeControlMode__cam.update(0, 0, 0, False) return True return False ArcadeControlMode.handleKeyEvent = mod_handleKeyEvent Ткните носом где посмотреть что-то...