Jump to content
Korean Random

inj3ct0r

User
  • Content Count

    42
  • Joined

  • Last visited

Everything posted by inj3ct0r

  1. Немного не так. В этих логах танк стоит. Но постоянно выполняетсяVibrationObject.stopEffect. Хотя этот эффект и так остановлен. Думаю это их косяк. На самом деле эффект включается при startEffect(номер эффекта в памяти), и выключается при stopEffect(номер эффекта в памяти). Все остальное время не нужно ничего делать. Я наверное попробую написать скрипт для включения жужжалки при выстреле для проверки. А дальше подумаем что делать. Мне не нравится что при выстреле эффект длится 800мс - думаю это довольно долго, если интенсивность жужжалки не будет изменятся за это время (как ее менять в это время я пока не представляю). Но для проверки пойдет.
  2. В общем я создал тот класс о котором писал раньше (class GamePadVibration). И забил туда вызов всех методов из оригинального класса. Изменились только 3: def connect(self): #Этот метод вызывается каждые 10с для проверки связи с накидкой log_ms('VibrationObject.connect()') return True #Говорим что всегда подключена def startEffect(self, handle, effectsSettingsCount): #Сюда можно вставить код на включение вибратора геймпада return def stopEffect(self, handle): #Сюда можно вставить код на выключение вибратора геймпада return На все методы GamePadVibration я повесил лог, по которому видно, какой бардак шлётся в бедные накидочки. Или они просто с первого раза не понимают. Прошу прощения, спойлер просто огромен. Я специально его оставил без изменений чтобы было понятно насколько все плохо. В нем всего около 20 секунд боя и 5 виброэффектов. Т.е. теперь можно добавить в startEffect/stopEffect твой код на включение/отключение геймпада и должно работать. Ок. Для начала неплохо. Но самая Ж еще впереди: 1. Нужно каким-то образом менять амплитуду вибрирования в процессе самого вибрирования в соответствии с файлами *.uwv. (Вероятно надо как-то использовать таймер о котором говорил sirmax) 2. Нужно предусмотреть наложение нескольких эффектов. 3. Что-то еще о чем я забыл
  3. Sirmax как всегда оказался прав. Спасибо все заработало. А как работает BigWorld.callback(0.001, RegisterEvents)?
  4. Не могу въехать. Добавил такой мод, подгружается через загрузчик sirmax: ... def myVibroManagerInit(self): print 'in VibroManager.__init__' def myPlayerAvatarInit(self): print 'in PlayerAvatar.__init__' # Register events def _RegisterEvents(): from Vibroeffects.VibroManager import VibroManager RegisterEvent(VibroManager, '__init__', myVibroManagerInit) from Avatar import PlayerAvatar RegisterEvent(PlayerAvatar, '__init__', myPlayerAvatarInit) ... Т.е. пытаюсь влезть в конструкторы классов VibroManager и PlayerAvatar. В PlayerAvatar вваливаюсь без проблем, а вот в VibroManager не получается. Объект VibroManager создается в файле game.pyc так: try: import Vibroeffects Vibroeffects.VibroManager.g_instance = Vibroeffects.VibroManager.VibroManager() print 'VibroManager constructor executed' Vibroeffects.VibroManager.g_instance.connect() print 'VibroManager.connect() executed' И по логам видно, что этот объект создается ... LoadMod: CDP VibroManager constructor executed VibroManager.connect() executed [NOTE] (scripts/client/post_processing/__init__.py, 273): The quality = 4 was selected. in PlayerAvatar.__init__ По идее перед VibroManager constructor executed должна быть надпись in VibroManager.__init__ но ее нет. Будем пробовать дальше.
  5. Спасибо, sirmax удобные методы, работают ли они с конструктором? ... from Avatar import PlayerAvatar RegisterEvent(PlayerAvatar, 'onEnterWorld', __init__) #или так: RegisterEvent(PlayerAvatar, 'onEnterWorld', PlayerAvatar._PlayerAvatar__init__)
  6. Sirmax у тебя навороченный загрузчик, неплохо бы сначала разобраться как пользоваться классами Singleton,EventHook, и методами RegisterEvent,OverrideMethod - похоже эти вещи могут пригодиться.
  7. Ты же понимаешь, что мы не просто должны показать игре, что накидка подключена. Но еще и реально перенаправить все скрипты на твой геймпад. Короче нужно забить на все эти длл и писать через питон. Я себе представляю так: 1. Подменяем объект в инициализации class VibroManager: def __init__(self): #self.__vibrationObject = BigWorld.WGVibration() меняем на self.__vibrationObject = GamePadVibration() 2. Создаем этот класс со всеми используемыми методами, не забывая про их параметры class GamePadVibration: def reset(self): pass def connect(self): pass def setGain(self, gain): pass def createEffect(self): pass def loadEffectFromFile(self, effectHandle, fileName): pass def cloneEffect(sourceEffectHandle), sourceEffectPriority, selfVibrationObject, sourceEffectGroup): pass def setEffectGain(vibroEffectHandle, effectGain): pass def getEffectLength(handle): pass def deleteEffect(handle): pass def startEffect(handle, effectsSettingsCount): pass def stopEffect(handle): pass 3. Постепенно заполняем эти функции чем-нибудь осмысленным ))) 4. Какие-то методы, вероятно, можно будет оставить из класса BigWorld.WGVibration Если согласен, двигаться в этом направлении то: Поставь себе питон 2.6.1 (если еще не стоит, нужна именно эта версия). И проверь, есть ли у тебя загрузчик модов: ...\World_of_Tanks\res_mods\0.8.9\scripts\client\CameraNode.pyc ...\World_of_Tanks\res_mods\0.8.9\scripts\client\mods\__init__.pyc
  8. Эти строки есть вVibroManager.pyc, worldowftanks.exe иuwApi.dll. Думаю чтоworldowftanks.exe эти функции импортирует из uwApi.dll и создает класс vibrationObject с этими методами. А из VibroManager.pyc эти методы вызываются, или примерно так. Нобез исходника uwApi все равно ничего не выйдет. Поэтому я думаю нужно будет самому создавать все методы для работы с геймпадом на основе твоего скрипта. Но тут есть проблема как я говорил с time.sleep(). Что думаешь делать дальше?
  9. В файле uwApi.dll. Но без исходника ничего не выйдет. Думаю надо рыть в другом направлении. Будет ли работать этот твой скрипт 'скрипт' во время работы эмулятора для геймпада. Проверь
  10. Я согласен, среди экспорт функций их нет. Но зачем тогда в этом файле такие строки: UwGetStatus - connected UwGetStatus - NOT connected uwSetGain uwCreateEffect uwLoadEffectFromFile uwSetEffectGain
  11. Ок ты нашёл что эти функции __vibrationObject.connect() __vibrationObject.setGain() __vibrationObject.createEffect() __vibrationObject.loadEffectFromFile() __vibrationObject.setEffectGain() лежат вuwApi.dll. Эта библиотека от gametrix. Есть ли ее исходник? Обычно производители выкладывают только заголовочные файлы. Свой скрипт ты можешь вставить в игру без проблем. Самым лучшим вариантом будет создать отдельный, который будет подгружаться загрузчиком. Так твой скрипт будет работать не только в этой версии игры, но и в последующих. В твоем скрипте мне не нравится функция time.sleep() думаю надо как-то по-другому.
  12. Могу написать такое за день-два плюс время на устраниение твоих замечаний/пожеланий. Так как я не ведущий программист из силиконовой долины, поэтому $50 (=прем8) считаю норм ценой.
  13. Этот мод без проблем гуглится, что в нем не устраивает? Я его ставил и по-моему он бесполезен. В замесе куча этих лучей только отвлекает, а при пвп куда смотрит враг и так видно. Из всей той кучи ненужных вещей, что на видео в первом посте думаю реально полезны трава и индикатор перезарядки врагов.
  14. Действительно, без геймпада для тестов такое сделать по-моему нереально. Думаю связь с вибронакидкой на более низком уровне осуществляется через объект (экземпляр класса) BigWorld.WGVibration() Код в инициализации класса: class VibroManager: def __init__(self): self.__vibrationObject = BigWorld.WGVibration() и далее методы: __vibrationObject.connect() __vibrationObject.setGain() __vibrationObject.createEffect() __vibrationObject.loadEffectFromFile() __vibrationObject.setEffectGain() наводят на мысль, что непосредственная связь с устройством осуществляется в BigWorld, т.е. в файле WorldOfTanks.exe, который просто так не поправить, и исходник не посмотреть. Именно этот конкретный метод connect(), осуществляет подключение к накидке. Что это дает? Ничего хорошего, это обстоятельство сильно усложняет задачу. В идеале, все эти методы нужно переписать на новые, под геймпад, например на питоне с использованием той же Xinput. Реально ли это сделать? хз. Даже если реально, то это на это уйдет довольно много времени.
  15. Здравствуйте. Сборка 2548 (пробовал 2543 - та же проблема). Проблема с отображением рейтинга игроков. Захожу в бой - рейтинга нет. Тут же нажимаю alt+f4, быстро перезапускаю клиент и захожу в тот же бой - рейтинг и шансы есть. И так приходится делать каждый бой. Прикрепляю 2 лога: *_no_eff - это был тот лог, где рейтинг не прогрузился, затем я вышел из клиента, переместил лог и создался новый лог - назвал его *_with_eff. Реплей тоже прикреплен. Очень прошу помочь. С уважением. Логи, где рейтинг не прогрузился: Логи, где рейтинг прогрузился: Реплей:
×
×
  • Create New...