fecell 125 #293759 Posted September 30, 2015 Собственно вот думаю будет понятно ctypes используется для подключения xinput1_3.dll, увы, гемморно создавать подобный функционал. пас. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #293765 Posted September 30, 2015 (edited) ctypes используется для подключения xinput1_3.dll, увы, гемморно создавать подобный функционал. пас. Так в том то и дело что предложенное решение @sirmax наверное единственное рабочее и правильное. Edited September 30, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #293766 Posted September 30, 2015 Никогда логами не занимался, подскажите пример хороший пожалуйста. Для откловки конкретно ошибок - try-except. Quote Share this post Link to post Short link Share on other sites
fecell 125 #293842 Posted October 1, 2015 (edited) Так в том то и дело что предложенное решение sirmax наверное единственное рабочее и правильное. Это решение старо как мир)) И нифига оно не правильное, такие решения в среде программеров называются костыль. Но иногда проще сделать рабочий костыль, чем долго корпеть над корректным решением задачи. Данное решение имеет локальный ограниченный характер использования. В общем случае оно рабочее, но в случае использования, например, в корпоративной среде оно уже может не функционировать ввиду, допустим, наложения ограничений системных администраторов на правила брендмауэра - т.е. питон просто не сможет открыть порт для того, чтобы мод из игры к нему подключился. Дополнительно, надо устанавливать сам питон, помимо игры. Это несколько из возможных причин, реально их куда больше. И в общем случае, это решение вызывает незначительное замедление работы компа в целом (ввиду необходимости запуска второго экземпляра питона, выделения памяти и процессорного времени для него, когда первый экземпляр интегрирован в сами танки и запускается фактически со стартом игры). Куда ловчее сделать нормальную поддержку вибрации в танках. Но читать ртфм-ы и делать наугад без самого девайса - это сизифов труд)) Скажем так, если есть код на С/С++ который выполняет вибрацию, могу сделать из него пид (dll по сути), который будет работать в танках. Тогда в танках код мода, который будет вызывать вибрацию, сведется к примерно такому виду: import vibra_pyd vibra_pyd.VibrateLeft(123) vibra_pyd.VibrateRight(456) т.е. в моде достаточно будет лишь вызывать эти два метода для осуществления вибрации, и необходимость в ctypes отпадет. Edited October 1, 2015 by fecell Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #293853 Posted October 1, 2015 (edited) Скажем так, если есть код на С/С++ который выполняет вибрацию, могу сделать из него пид (dll по сути), который будет работать в танках. Ну вот есть соответствующий код на С++ Соответствующая документация от Мелкомягких Edited October 1, 2015 by kharlashkin 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #293870 Posted October 1, 2015 (edited) Ну вот есть соответствующий код на С++ о, это уже теплее. на выходных постараюсь найти время заняться. В исходниках кода кот наплакал, разобраться не сложно. DirectX SDK скачан, как раз, недавно. Надеюсь забабахаем.. тестировать и проверять тебе прийдется, у меня нет геймпада. упд: Судя по коду могут вибрировать правый, левый или одновременно. Поэтому будет аналогично реализовано (для упрощения С-части кода): vibra.RightStart() vibra.RightStop() vibra.LeftStart() vibra.LeftStop() vibra.BothStart() vibra.BothStop() с возвратом строки 'Success' или 'Fail'. соответственно время вибрации будет задаваться в самом моде через BigWorld.callback() можешь пока исходник на питоне посмотреть что в нем поправить для этого надо будет. Edited October 1, 2015 by fecell 2 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #293875 Posted October 1, 2015 (edited) о, это уже теплее. на выходных постараюсь найти время заняться. В исходниках кода кот наплакал, разобраться не сложно. DirectX SDK скачан, как раз, недавно. Надеюсь забабахаем.. тестировать и проверять тебе прийдется, у меня нет геймпада. упд: Судя по коду могут вибрировать правый, левый или одновременно. Поэтому будет аналогично реализовано (для упрощения С-части кода): vibra.RightStart() vibra.RightStop() vibra.LeftStart() vibra.LeftStop() vibra.BothStart() vibra.BothStop() с возвратом строки 'Success' или 'Fail'. соответственно время вибрации будет задаваться в самом моде через BigWorld.callback() можешь пока исходник на питоне посмотреть что в нем поправить для этого надо будет. Зачем так сложно? Нельзя ли как в документации мелкомягких отдельно левый и правый, для остановки отправляем 0? Время вибрации берется из файлов накидки, уровень вибраций через коэффициенты проверяется каждые 10мс. Добавил во второе сообщение исходники всего мода. В общем чего сделал "методом тыка". Взял XVM для предыдущего патча, удалил все в нем кроме вибромода и xfw, вибрация заработала :) доволен как слон. Теперь дилемма - нужен ли мне XVM, как то за год я к нему попривык, хоть и не пользовал ничего кроме мини-карты и с недавнего времени автовозврат съемного оборудования. Ну и статистики Edited October 1, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #301546 Posted November 28, 2015 Вопрос актуален, "костыль" с вырезанием всего и вся из XVM пока работает но чую, что ппц близко. Quote Share this post Link to post Short link Share on other sites
fecell 125 #302440 Posted December 2, 2015 Вот, посмотри. xbox360_console.rar Если будет работать в консоле, то в ЛС решим вопрос работы в танках. У меня нет джойстика, проверить саму вибрацию хз как.. . xbox360.Connect(PlayerNumber) - подключиться. Возвращает состояние подключения (1/0). PlayerNumber - номер игрока (джойстика) .xbox360.IsConnected() - проверить состояние подключения. В случае если подключен возвращает 1, иначе 0. .xbox360.Vibrate(leftVal, rightVal) - вибрировать. В случае успеха возвращает 1, иначе 0. leftVal, rightVal - скорость мотора левого (низкочастотного) и правого (высокочастотного). Различные комбинации дают различный эффект. .xbox360.StopVibrate() - остановить вибрацию, дублирует команду xbox360.Vibrate(0, 0). В случае успеха возвращает 1, иначе 0. 2 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #302449 Posted December 2, 2015 (edited) Вот, посмотри. xbox360_console.rar Если будет работать в консоле, то в ЛС решим вопрос работы в танках. У меня нет джойстика, проверить саму вибрацию хз как.. xbox360.Connect(PlayerNumber) - подключиться. Возвращает состояние подключения (1/0). PlayerNumber - номер игрока (джойстика) xbox360.IsConnected() - проверить состояние подключения. В случае если подключен возвращает 1, иначе 0. xbox360.Vibrate(leftVal, rightVal) - вибрировать. В случае успеха возвращает 1, иначе 0. leftVal, rightVal - скорость мотора левого (низкочастотного) и правого (высокочастотного). Различные комбинации дают различный эффект. xbox360.StopVibrate() - остановить вибрацию, дублирует команду xbox360.Vibrate(0, 0). В случае успеха возвращает 1, иначе 0. Работает ;) Добавил time.sleep под Win10 все взлетело :)Теперь как "настоящие художники" вырезаем все лишнее :) Edited December 2, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #303791 Posted December 9, 2015 Столкнулся с проблемой организации цикла, все уже что в голову пришло перепробовал. Глубоко пока не копал, но может кто подскажет правильное направление? Итак, нужно с периодичностью проверять текущие играющие вибро-эффекты. В скриптах системного python все решалось через вычисление протяженности вибро-эффекта и необходимое кол-во повторений с временным интервалом 10 мс. Для танкового питона все не так просто, многие вибрации не идут положенное время, хотя вычисление необходимых повторений правильное. INFO: loading C:\Games\World_of_Tanks\res_mods\mods/packages\gpvibromanager\python/vibroeffects/button_click_veff.uwv INFO: effectLength 170 INFO: C:\Games\World_of_Tanks\res_mods\mods/packages\gpvibromanager\python/vibroeffects/button_click_veff.uwv is started INFO: 0 0.00, 14.00 INFO: 1 0.00, 11.67 INFO: 2 0.00, 0.00 INFO: Time elapsed: 0.033s INFO: C:\Games\World_of_Tanks\res_mods\mods/packages\gpvibromanager\python/vibroeffects/button_click_veff.uwv is stopped Вроде как есть встроенный таймер BigWorld.callback(), но не могу найти внятную инструкцию по использованию. Дайте пример, люди добрые! Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #303793 Posted December 9, 2015 BigWorld.callback(time, def) time - время в секундах def - метод 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #303794 Posted December 9, 2015 BigWorld.callback(time, def) time - время в секундах def - метод Я правильно понял, что этот таймер в цикле нужный метод def через кол-во секунд time пропускает? Спасибо, как то я так и думал, но "за спрос не бьют в нос" ;) Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #303795 Posted December 9, 2015 Нет, не в цикле, а один раз. Если надо зациклить, то вызывай его же из колбэка. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #315369 Posted February 27, 2016 В общем нашел я в чем была проблема. Подробнее была информация в этом сообщении уважаемого @inj3ct0r, получается что сама игра "криворуко" сделана и шлет почему-то постоянно сообщения об остановке эффектов. вот у меня в игровом питоне постоянно и останавливался поток с виброэффектами. Проблема решена, вибрации сейчас работают как надо. Всем спасибо! 1 Quote Share this post Link to post Short link Share on other sites