fecell Posted September 30, 2015 Share Posted September 30, 2015 Собственно вот думаю будет понятно ctypes используется для подключения xinput1_3.dll, увы, гемморно создавать подобный функционал. пас. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 30, 2015 Author Share Posted September 30, 2015 (edited) ctypes используется для подключения xinput1_3.dll, увы, гемморно создавать подобный функционал. пас. Так в том то и дело что предложенное решение @sirmax наверное единственное рабочее и правильное. Edited September 30, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
Kotyarko_O Posted September 30, 2015 Share Posted September 30, 2015 Никогда логами не занимался, подскажите пример хороший пожалуйста. Для откловки конкретно ошибок - try-except. @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted October 1, 2015 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 1, 2015 Author Share Posted October 1, 2015 (edited) Скажем так, если есть код на С/С++ который выполняет вибрацию, могу сделать из него пид (dll по сути), который будет работать в танках. Ну вот есть соответствующий код на С++ Соответствующая документация от Мелкомягких Edited October 1, 2015 by kharlashkin 1 @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted October 1, 2015 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 1, 2015 Author Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 28, 2015 Author Share Posted November 28, 2015 Вопрос актуален, "костыль" с вырезанием всего и вся из XVM пока работает но чую, что ппц близко. @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted December 2, 2015 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted December 2, 2015 Author Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted December 9, 2015 Author Share 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 Link to comment Short link Share on other sites More sharing options...
sirmax Posted December 9, 2015 Share Posted December 9, 2015 BigWorld.callback(time, def) time - время в секундах def - метод 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted December 9, 2015 Author Share Posted December 9, 2015 BigWorld.callback(time, def) time - время в секундах def - метод Я правильно понял, что этот таймер в цикле нужный метод def через кол-во секунд time пропускает? Спасибо, как то я так и думал, но "за спрос не бьют в нос" ;) @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted December 9, 2015 Share Posted December 9, 2015 Нет, не в цикле, а один раз. Если надо зациклить, то вызывай его же из колбэка. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted February 27, 2016 Author Share Posted February 27, 2016 В общем нашел я в чем была проблема. Подробнее была информация в этом сообщении уважаемого @inj3ct0r, получается что сама игра "криворуко" сделана и шлет почему-то постоянно сообщения об остановке эффектов. вот у меня в игровом питоне постоянно и останавливался поток с виброэффектами. Проблема решена, вибрации сейчас работают как надо. Всем спасибо! 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.