Jump to content
Korean Random

kharlashkin

User
  • Content Count

    829
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by kharlashkin


  1. Получилось с помощью вышеупомянутого скрипта на python задавать не только силу но и время работы вибрации в геймпаде (добавлением time.sleep ()). Соответственно можно теперь сопоставить необходимо время работы и силу двигателей для каждого эффекта (в документе от производителей их 24).

     

    Подскажите куда их и каким образом вставлять эти скрипты.

    import ctypes
    import time
    
    # Define necessary structures
    class XINPUT_VIBRATION(ctypes.Structure):
     _fields_ = [("vibration.wLeftMotorSpeed", ctypes.c_ushort),
     ("vibration.wRightMotorSpeed", ctypes.c_ushort)]
    
    xinput = ctypes.windll.xinput1_3 # Load Xinput.dll
    
    # Set up function argument types and return type
    XInputSetState = xinput.XInputSetState
    XInputSetState.argtypes = [ctypes.c_uint, ctypes.POINTER(XINPUT_VIBRATION)]
    XInputSetState.restype = ctypes.c_uint
    
    # You can also create a helper function like this:
    def set_vibration(controller, left_motor, right_motor):
     vibration = XINPUT_VIBRATION(int(left_motor * 65535), int(right_motor * 65535))
     XInputSetState(controller, ctypes.byref(vibration))
    
    # ... and use it like so
    set_vibration(0, 0.5, 1.0)
    time.sleep(0.3)
    set_vibration(0, 0, 0)


     

     

    наводят на мысль, что непосредственная связь с устройством осуществляется в BigWorld, т.е. в файле WorldOfTanks.exe, который просто так не поправить, и исходник не посмотреть.

     

    Я и не думал что будет просто ;) Вопрос вот в чем - каким образом игра понимает что накидка подключена? Думаю что с помощью вот этой библиотеки в папке игры uwApi.dll.

     

    Если не взлетит переписанный скрипт vibroeffect.pyc, из-за того что BigWorld.WGVibration() не будет видеть наличие вибронакидки и не выполнять скрипты. Можно попробовать через proxy.dll подсунуть нужное значение основному объекту. Я правильно понимаю?


  2. Скрин настроек из игры

    0_56f26_efafc103_L.jpg

     

    Если у кого есть вибронакидка объясните пожалуйста, каким образом игра понимает что накидка подключена? В саму игру вставлен модуль для работы накидки или же через ПО игра отправляет сигналы в неё.

    Надо ли запускать ПО, идущее в комплекте с накидкой для определения её игрой?


  3. Подробно объяснять сложно. Я дал направление, может кто-то, и откликнется, кто сможет сделать.

    Код вроде нашел в фале vibromanager.pyc, геймпад готов подарить человеку. кто поможет. Дополнительно могу после выполнения работы заплатить обоснованную сумму денег. Под спойлером код, может закомментируете что откуда и куда. Я начал книгу читать по Python, но пока осилил треть, возможно к концу прочтения буду лучше понимать.

    def launchQuickEffect(self, effectName, count = 1, gain = 100):

    if not self.canWork():

    return

    elif count is None:

    return

    else:

    sourceEffect = None

    if effectName in self.__quickEffects:

    effectsPool = self.__quickEffects[effectName]

    for effect in effectsPool:

    if not effect.isRunning():

    effect.setRelativeGain(gain)

    self.startEffect(effect, count)

    return

    sourceEffect = effect

     

    if sourceEffect is None:

    effectToLaunch = self.loadEffectFromFile(effectName)

    self.__quickEffects[effectName] = [effectToLaunch]

    else:

    effectToLaunch = VibroEffect(effectName, self.__vibrationObject.cloneEffect(sourceEffect.handle), sourceEffect.getPriority(), self.__vibrationObject, sourceEffect.group)

    self.__quickEffects[effectName].append(effectToLaunch)

    effectToLaunch.setRelativeGain(gain)

    self.startEffect(effectToLaunch, count)

    return


  4. Направление правильное. Тебе необходимо переопределить метод VibroManager.launchQuickEffect(), это можно сделать, написав плагин к XPM.

    Чтобы это сделать, необходимо иметь девайс для тестов, так что далеко не каждый сможет тебе помочь.

    Сразу прошу прощения - я не программист и для меня все темный лес. Мои навыки программирования остались на школьном уровне в Бейсике 20-летней давности.

    Про какой именно девайс идет речь? Гемпадов у меня более чем достаточно, вибронакидку покупать не хочется.

    В SDK вибронакидки есть очень много всего (включая исходники для тестовых программок).

    Можно поподробнее что значит написать плагин к XPM?


  5. Прошло два дня - расскажу, что мне удалось, может кто-то меня подтолкнет к нужным мыслям.
    Полазив в папках самой WoT нашел папку с скриптами, написанными на python, которые относятся именно к вибронакидке "X:\Games\World_of_Tanks\res\scripts\client\vibroeffects"
    Декомпилировав файлы из папки, показал этот код программисту. Мне сказали - что так будет удобнее получить нужный мне функционал. Не подменой dll От вибронакидки, а непосредственным вызовом вибраций из игры.
    Первое, что мне надо было сделать разобраться с вибрацией геймпада из python. В интернета нашелся нужный код. Из редактора IDLE все работает - то есть запуская этот модуль, геймпад действительно начинает вибрировать в зависимости от заданной скорости моторов.

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


  6. Покопав тему глубже, нашел следующие вводные данные:

    1. На сайте производителей "виброжопки" есть SDK, т.е. очень просто понять что, как и почему работает.

    2. Там же есть и стандартные эффекты для WoT, открывая которые обычным тестовым редактором понятно, как именно сделаны виброэффекты.

    3. На сайте Microsoft, есть описание API для работы с геймпадом от Xbox 360.

     

    Наверное будет очень проблематично добавить поддержку геймпада в саму игру WoT - для этого придется очень много перелопатить кода WoT. По моему мнению будет проще написать программу, которая будет перехватывать команды из WoT для виброжопки и отдавать их специальные аналоги посредством XInput в геймпад.

     

    Прошу совета у сообщества - реально это сделать?

     

    Так же прикладываю ссылку на проект где уже есть открытый код с использованием библиотеки libusb, для контроллера Xbox 360. От себя могу подтвердить, что данная модификация работает с эмулятором xpadder и позволяет играть в WoT на геймпаде.

    • Upvote 1

  7. Добрый день, уважаемые форумчане!

     

    К сожалению, заказ мода на официальном форуме игры не привел ни к чему, публикую свои "хотелки" здесь.

     

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

     

    jetpad_b.gif

     

    Можно ли исправить этот модуль, находится вроде в папке World_of_Tanks\res\scripts\client\vibroeffects, для передачи данных не в вибронакидку а в контроллер от Xbox360? В нем так же два вибромотора.

     

    P.S. Могу на данный момент заплатить 50$ хоть завтра, если будет правильное обоснование в сторону увеличения, можно увеличить бюджет. В принципе, довольно много есть интересующихся (кто играют на геймпадах), можно поднять вопрос и скинуться сообща.

     

    P.P.S. Есть готовый мод, который берет данные для вибраций из файлов для вибронакидки .uwv, с помощью коэффициентов преобразовывает их и передает данные для двигателей xinput геймпада. Работают смешивание (одновременное воспроизведение нескольких эффектов), нет никаких задержек (все вибрации отрабатываются вовремя), я понял почему разработчики хвалятся тем, что эффекты делал звукорежиссер (пожар только чего стоит - как биение сердца), работают "ползунки" в настройках игры для вибронакидки (можно увеличить вибрации/уменьшить/отключить), настройки для передачи вибраций в геймпад вынесены в отдельный xml файл.

    Теперь по порядку:
    1. Необходимо установить Python версий 2.6.х (у меня стоит 2.6.1), в принципе можно перекомпилировать файлы под любую версию.
    2. Установить Flask, качаем файл distribute_setup.py в папку "C:\temp" (например), запускаем консоль "Win+R" - cmd и выполняем команды:
    C:\Python26\python.exe C:\temp\distribute_setup.py
    C:\Python26\python.exe C:\Python26\Scripts\easy_install-2.6-script.py Flask
    C:\Python26\python.exe C:\Python26\Scripts\easy_install-2.6-script.py Jinja2
    C:\Python26\python.exe C:\Python26\Scripts\easy_install-2.6-script.py Werkzeug
    C:\Python26\python.exe C:\Python26\Scripts\easy_install-2.6-script.py Virtualenv
    3. Распаковать мод в нужную папку.
    4. Играть.

    В файле GPsettings.xml уже прописаны путь к системному python "c:/python26/pythonw.exe" со скрытым запуском, коэффициенты передачи эффекта, нужная dll ( для Windows 7/Vista), для XP нужно прописать xinput1_1, для 8-ки - XInput9_1_0.

    post-19155-0-93867600-1389271658_thumb.jpg

    • Upvote 2
×
×
  • Create New...