Jump to content
Korean Random
kharlashkin

Нужна помощь по Python

Recommended Posts

После обновления 0.8.11 при использовании "вибромода", стали сыпаться ошибки:

'python.log'

[EXCEPTION] (scripts/client/VehicleAppearance.py, 1098):
Traceback (most recent call last):
File "scripts/client/VehicleAppearance.py", line 1096, in __onPeriodicTimer
File "scripts/client/VehicleAppearance.py", line 1405, in __updateVibrations
File "scripts/client/Vibroeffects/ControllersManager.py", line 41, in update
File "scripts/client/Vibroeffects/Controllers/TrackBreakingController.py", line 94, in update
File "scripts/client/Vibroeffects/Controllers/TrackBreakingController.py", line 35, in __breakWithDirection
AttributeError: 'BigWorld.HomingCamera' object has no attribute 'source'

Декомпилировав игровые скрипты - выкладываю код.

'VehicleAppearance'

def __onPeriodicTimer(self):
        self.__periodicTimerID = None
        try:
            self.__update	Vibrations()
        except Exception:
            LOG_CURRENT_EXCEPTION()

        try:
            if self.__lightFxCtrl is not None:
                self.__lightFxCtrl.update(self.__vehicle)
            if self.__auxiliaryFxCtrl is not None:
                self.__auxiliaryFxCtrl.update(self.__vehicle)
            self.__updateWaterStatus()
        except:
            LOG_CURRENT_EXCEPTION()

        if not self.__vehicle.isAlive():
            self.__periodicTimerID = BigWorld.callback(_PERIODIC_TIME, self.__onPeriodicTimer)
            return
        else:
            try:
                self.__distanceFromPlayer = (BigWorld.camera().position - self.__vehicle.position).length
                for extraData in self.__vehicle.extras.values():
                    extra = extraData.get('extra', None)
                    if isinstance(extra, vehicle_extras.Fire):
                        extra.checkUnderwater(extraData, self.__vehicle, self.isUnderwater)
                        break

                self.__updateCurrTerrainMatKinds()
                self.__updateMovementSounds()
                self.__updateBlockedMovement()
                self.__updateEffectsLOD()
                self.__trailEffects.update()
            except:
                LOG_CURRENT_EXCEPTION()

            self.__periodicTimerID = BigWorld.callback(_PERIODIC_TIME, self.__onPeriodicTimer)
            return

 

'VehicleAppearance'

    def __updateVibrations(self):
        if self.__vibrationsCtrl is None:
            return
        else:
            vehicle = self.__vehicle
            crashedTrackCtrl = self.__crashedTracksCtrl
            self.__vibrationsCtrl.update(vehicle, crashedTrackCtrl.isLeftTrackBroken(), crashedTrackCtrl.isRightTrackBroken())
            return

 

'ControllersManager'

    def update(self, vehicle, isLeftTrackBroken, isRightTrackBroken):
        if self._TrackBreakingController__wasLeftTrackBroken == False and isLeftTrackBroken:
            self._TrackBreakingController__breakWithDirection(vehicle, True)
        elif self._TrackBreakingController__wasRightTrackBroken == False and isRightTrackBroken:
            self._TrackBreakingController__breakWithDirection(vehicle, False)
        self._TrackBreakingController__wasLeftTrackBroken = isLeftTrackBroken
        self._TrackBreakingController__wasRightTrackBroken = isRightTrackBroken

 

'TrackBreakingController'

    def _TrackBreakingController__breakWithDirection(self, vehicle, isLeftTrackBroken):
        directionMatrix = Math.Matrix(BigWorld.camera().source)
        directionMatrix.setElement(3, 0, 0)
        directionMatrix.setElement(3, 1, 0)
        directionMatrix.setElement(3, 2, 0)
        cameraDirection = directionMatrix.applyToAxis(0)
        cameraDirection.y = 0
        vehicleMatrix = Math.Matrix(vehicle.matrix)
        vehicleMatrix.setElement(3, 0, 0)
        vehicleMatrix.setElement(3, 1, 0)
        vehicleMatrix.setElement(3, 2, 0)
        vehicleMatrix.invert()
        cameraDirection = vehicleMatrix.applyVector(cameraDirection)
        brokenTrackAngle = 0
        if isLeftTrackBroken:
            brokenTrackAngle = math.pi
        dirAngleRelative = math.atan2(cameraDirection.z, cameraDirection.x)
        minDirDelta = math.pi * 2
        vibrationToPlay = ''
        for angleVibration in TrackBreakingController._TrackBreakingController__ANGLES_VIBRATIONS:
            curAngle = angleVibration[0]
            curAngle += dirAngleRelative
            if curAngle > math.pi * 2:
                curAngle -= math.pi * 2
            if curAngle < 0:
                curAngle += math.pi * 2
            curDirDelta = abs(curAngle - brokenTrackAngle)
            if curDirDelta > math.pi:
                curDirDelta = math.pi * 2 - curDirDelta
            if curDirDelta < minDirDelta:
                minDirDelta = curDirDelta
                vibrationToPlay = angleVibration[1]
                continue
        OnceController(vibrationToPlay)

 

'TrackBreakingController'

    def update(self, vehicle, isLeftTrackBroken, isRightTrackBroken):
        if self._TrackBreakingController__wasLeftTrackBroken == False and isLeftTrackBroken:
            self._TrackBreakingController__breakWithDirection(vehicle, True)
        elif self._TrackBreakingController__wasRightTrackBroken == False and isRightTrackBroken:
            self._TrackBreakingController__breakWithDirection(vehicle, False)
        self._TrackBreakingController__wasLeftTrackBroken = isLeftTrackBroken
        self._TrackBreakingController__wasRightTrackBroken = isRightTrackBroken

 

Ошибки на вибрацию в игре никак не влияют, но мое мнение что это не есть хорошо. Может кто-то из форума откликнется и укажет нубу в python как и что сделать для правильной работы "вибромода".

Share this post


Link to post

Short link
Share on other sites

 

 

Ошибки на вибрацию в игре никак не влияют, но мое мнение что это не есть хорошо. Может кто-то из форума откликнется и укажет нубу в python как и что сделать для правильной работы "вибромода".
А к картохе в саппорт не писал?

Share this post


Link to post

Short link
Share on other sites

А к картохе в саппорт не писал?

Вибрация не вибронакидки, вибрация для геймпада - пошлют они меня "за картошкой".

Насколько я понимаю, они поменяли какой-то метод, но понять что именно пока умишком слаб.

Вот код из версии 0.8.09

    def update(self, vehicle, isLeftTrackBroken, isRightTrackBroken):
        if not VibroManager.g_instance.canWork():
            return
        self.__deathVibrationCtrl.update(vehicle.isAlive())
        self.__updateEngine(vehicle)
        if vehicle.isAlive():
            self.__trackBreakingVibrationCtrl.update(vehicle, isLeftTrackBroken, isRightTrackBroken)
        else:
            self.__fireVibrationCtrl.switch(False)
        VibroManager.g_instance.update()

Share this post


Link to post

Short link
Share on other sites

def _TrackBreakingController__breakWithDirection(self, vehicle, isLeftTrackBroken):
        directionMatrix = Math.Matrix(BigWorld.camera().source)

-------------------

def _TrackBreakingController__breakWithDirection(self, vehicle, isLeftTrackBroken):
        directionMatrix = Math.Matrix(BigWorld.camera().matrix)

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

def _TrackBreakingController__breakWithDirection(self, vehicle, isLeftTrackBroken):

        directionMatrix = Math.Matrix(BigWorld.camera().source)

-------------------

def _TrackBreakingController__breakWithDirection(self, vehicle, isLeftTrackBroken):

        directionMatrix = Math.Matrix(BigWorld.camera().matrix)

Очень хочется пояснений. Потому как это "картохины" скрипты.

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

Не знаю, что такое сюрс, но матрикс провайдер определяется через матрикс.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Доброе время суток! Вопрос по прежнему актуален... Очень нужна помощь!

Share this post


Link to post

Short link
Share on other sites

Ну а ради интереса не пробовали изменить и перекомпилировать trackbreakingcontroller.pyс, как выше советовал lportii?

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ну а ради интереса не пробовали изменить и перекомпилировать trackbreakingcontroller.pyс, как выше советовал lportii?

Как бэ да... Моя ошибка - сразу тогда не попробовал, попробовал сейчас.

'python'

[ERROR] (scripts/client/gui/shared/utils/requesters/__init__.py, 973): Server return error for stat request: responseCode=-10
[ERROR] (scripts/client/gui/shared/utils/requesters/__init__.py, 1002): frames stack dumping --------------
 (scripts/client/gui/shared/utils/requesters/__init__.py, 999): __dumpStack
 (scripts/client/gui/shared/utils/requesters/__init__.py, 974): __valueResponse
 (scripts/client/account_helpers/BattleResultsCache.py, 90): __onGetResponse
 (scripts/client/Account.py, 289): onCmdResponse 

 

За картошкой все скрипты теперь исправлять?

 

Прошу прощения что так долго не пробовал этого решения - не до игр мне сейчас. А обновлял версию по просьбе до 0.9.0 и выскочили те же ошибки, вот и вспомнил про темку.

Завтра раскомпилирую скрипты на которые ссылаются ошибки, посмотрим что там будет. Исправлять так исправлять ;)

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

Как-то указанные ошибки, на мой взгляд, не очень вяжутся с изменением trackbreakingcontroller.pyс ...

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Как-то указанные ошибки, на мой взгляд, не очень вяжутся с изменением trackbreakingcontroller.pyс ...

Мне изначально так же показалось, но как говорится "Одна голова хорошо, а форум лучше". Более того - сейчас вообще нет никаких ошибок ;)

'python'

Checking ./res_mods/0.9.0: mods found
[XPM] preloader gui.Scaleform.locale
[XPM] Working dir: ./res_mods/0.9.0/scripts/client/gui/mods
[XPM] Loading mod: gpvibromanager 1.2.0 (http://www.koreanrandom.com/forum/user/16753-inj3ct0r/)
urllib2.URLError (connect): <urlopen error [Errno 10061] Подключение не установлено,>
[NOTE] (scripts/client/post_processing/__init__.py, 275): The quality = 4 was selected.
[NOTE] (scripts/client/post_processing/__init__.py, 275): The quality = 3 was selected.
[SPACE] Loading space: spaces/hangar_v2
[SPACE] Loading space: spaces/86_himmelsdorf_winter
[SPACE] Loading space: spaces/hangar_v2
[SPACE] Loading space: spaces/01_karelia
[SPACE] Loading space: spaces/hangar_v2
PostProcessing.Phases.fini() 

Share this post


Link to post

Short link
Share on other sites

 

 

[ERROR] (scripts/client/gui/shared/utils/requesters/__init__.py, 973): Server return error for stat request: responseCode=-10

 

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

Буду теперь знать что это такое. Спасибо!!!

Закрываю темку.

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...