Jump to content
Korean Random

Не тригерится event


Recommended Posts

Почему несрабатывают события ? В логах пуста.

import BigWorld
from debug_utils import *
from clientarena import ClientArena

def new_onBaseCaptured(self, argStr):
    LOG_NOTE('BaseCaptured: onBaseCaptured !!!!!!')

ClientArena._ClientArena__onBaseCaptured = new_onBaseCaptured


def new_onBasePointsUpdate(self, argStr):
    LOG_NOTE('BaseCaptured: onBasePointsUpdated !!!!!!')

ClientArena._ClientArena__onBasePointsUpdate = new_onBasePointsUpdate

clientarena.py

 

class

class ClientArena(object):

functions

def _ClientArena__onBasePointsUpdate(self, argStr):
        (team, baseID, points, capturingStopped) = cPickle.loads(argStr)
        self.onTeamBasePointsUpdate(team, baseID, points, capturingStopped)

def _ClientArena__onBaseCaptured(self, argStr):
        (team, baseID) = cPickle.loads(argStr)
        self.onTeamBaseCaptured(team, baseID)

v0.9.8.1

 

Нужно что бы во время захвата или как достигло 100% захвата, срабатывали события, но этого не происходит.

 

 

тут таже история

import BigWorld
from debug_utils import *
from gui.scaleform.battle import *

def new_y(self, team, baseID, points, capturingStopped):
    LOG_NOTE('BaseCaptured: _TeamBasesPanel__onTeamBasePointsUpdate !!!!!!')

TeamBasesPanel._TeamBasesPanel__onTeamBasePointsUpdate = new_y


def new_x(self, team, baseID):
    LOG_NOTE('BaseCaptured: _TeamBasesPanel__onTeamBaseCaptured !!!!!!')

TeamBasesPanel._TeamBasesPanel__onTeamBaseCaptured = new_x

battle.py

 

class

class TeamBasesPanel(object):

functions

def _TeamBasesPanel__onTeamBasePointsUpdate(self, team, baseID, points, capturingStopped):
        if team not in (1, 2):
            return None
        id = None._getID(team, baseID)
        if points or id in self._TeamBasesPanel__baseIds:
            self._TeamBasesPanel__clearUpdateCallback(id)
            self._TeamBasesPanel__baseIds.remove(id)
            self._TeamBasesPanel__callFlash('remove', [
                id])
            if not self._hasBaseId(team) or team ^ BigWorld.player().team:
                self._TeamBasesPanel__stopCaptureSound(team)

        if id in self._TeamBasesPanel__baseIds:
            self._TeamBasesPanel__capturePoints[id] = points
            if capturingStopped:
                self._TeamBasesPanel__callFlash('stop', [
                    id,
                    points])        else:
            self._TeamBasesPanel__baseIds.add(id)
            key = team ^ BigWorld.player().team
            if isControlPointExists(BigWorld.player().arenaTypeID):
                settings = self._TeamBasesPanel__settings.get('controlPoint', { })
                color = settings.get('color', { }).get(key, 'green')
                weight = settings.get('weight', { }).get(key, 0)
            else:
                settings = self._TeamBasesPanel__settings.get(key, { })
                color = settings.get('color', 'green')
                weight = settings.get('weight', 0)
            capturingString = settings.get('capturing', '') % getBattleSubTypeBaseNumder(BigWorld.player().arenaTypeID, team, baseID)
            rate = 1
            replayCtrl = BattleReplay.g_replayCtrl
            if replayCtrl.isPlaying and replayCtrl.playbackSpeed is not None:
                rate = replayCtrl.playbackSpeed
            self._TeamBasesPanel__callFlash('add', [
                id,
                weight,
                color,
                capturingString,
                points,
                rate])
            if capturingStopped:
                self._TeamBasesPanel__callFlash('stop', [
                    id,
                    points])
            self._TeamBasesPanel__capturePoints[id] = points
            self._TeamBasesPanel__loadUpdateCallback(id)
        if not capturingStopped:
            self._TeamBasesPanel__playCaptureSound(team)
        elif not self._hasBaseId(team, exclude = id) or team ^ BigWorld.player().team:
            self._TeamBasesPanel__stopCaptureSound(team)
    def _TeamBasesPanel__onTeamBaseCaptured(self, team, baseID):
        if team not in (1, 2):
            return None
        id = None._getID(team, baseID)
        if isControlPointExists(BigWorld.player().arenaTypeID):
            settings = self._TeamBasesPanel__settings.get('controlPoint', { })
            color = settings.get('color', { }).get(team ^ BigWorld.player().team, 'green')
        else:
            settings = self._TeamBasesPanel__settings.get(team ^ BigWorld.player().team, { })
            color = settings.get('color', 'green')
        if id in self._TeamBasesPanel__baseIds:
            self._TeamBasesPanel__callFlash('setCaptured', [
                id,
                settings.get('captured', '') % getBattleSubTypeBaseNumder(BigWorld.player().arenaTypeID, team, baseID)])
        else:
            self._TeamBasesPanel__baseIds.add(id)
            self._TeamBasesPanel__callFlash('add', [
                id,
                color,
                settings.get('weight', 0),
                settings.get('captured', '') % getBattleSubTypeBaseNumder(BigWorld.player().arenaTypeID, team, baseID),
                100])
        self._TeamBasesPanel__stopCaptureSound(team)
Edited by waza123
Link to comment
Short link
Share on other sites

Потому что хуки нужно ставить правильно. Функция хука должна возвращать результат выполнения оригинала. Посмотри в теме Ориона, я там выкладывал примеры.

А тут ты просто перегружаешь метод... А оригинал не вызывается, результат не отправляется на вызов функции извне. Иногда такие оленепатчи могут и крашнуть клиент...

Не факт, что твои методы вывода выдают в лог нужную информацию. Проверь отдельно.

Методы работают 100%. Как раз недавно их проверял. В 0.9.8.1. Один (__onTeamBasePointsUpdate) по крайней мере точно.

 

Upd. Вот оно, почитай на досуге))

Advanced Hooks.zip

Edited by GPCracker
Link to comment
Short link
Share on other sites

Ок добавил их функции, все равно не срабатывает, логи пусты, че не так?

import BigWorld
from debug_utils import *
from gui.scaleform.battle import *
from clientarena import ClientArena


def new_onTeamBasePointsUpdate(self, team, baseID, points, capturingStopped):
    result = old_onTeamBasePointsUpdate(self, team, baseID, points, capturingStopped)
    LOG_NOTE('BaseCaptured: _TeamBasesPanel__onTeamBasePointsUpdate '+str(points)+' !!!!!!')
    return result

old_onTeamBasePointsUpdate = TeamBasesPanel._TeamBasesPanel__onTeamBasePointsUpdate.__func__
TeamBasesPanel._TeamBasesPanel__onTeamBasePointsUpdate = new_onTeamBasePointsUpdate



def new_onTeamBaseCaptured(self, team, baseID):
    result = old_onTeamBaseCaptured(self, team, baseID)
    LOG_NOTE('BaseCaptured: _TeamBasesPanel__onTeamBaseCaptured !!!!!!')
    return result

old_onTeamBaseCaptured = TeamBasesPanel._TeamBasesPanel__onTeamBaseCaptured.__func__
TeamBasesPanel._TeamBasesPanel__onTeamBaseCaptured = new_onTeamBaseCaptured




def new_onBaseCaptured(self, argStr):
    result = old_onBaseCaptured(self, argStr)
    LOG_NOTE('BaseCaptured: onBaseCaptured !!!!!!')
    return result

old_onBaseCaptured = ClientArena._ClientArena__onBaseCaptured.__func__
ClientArena._ClientArena__onBaseCaptured = new_onBaseCaptured


def new_onBasePointsUpdate(self, argStr):
    result = old_onBasePointsUpdate(self, argStr)
    LOG_NOTE('BaseCaptured: onBasePointsUpdate !!!!!!')
    return result

old_onBasePointsUpdate = ClientArena._ClientArena__onBasePointsUpdate.__func__
ClientArena._ClientArena__onBasePointsUpdate = new_onBasePointsUpdate

LOG_NOTE('EXECUTED')
Link to comment
Short link
Share on other sites

Так будет правильнее:

import BigWorld
from PlayerEvents import g_playerEvents

def TeamBasePointsUpdate(team, baseID, points, capturingStopped):
    print 'TeamBasePointsUpdate'

def TeamBaseCaptured(team, baseID):
    print 'TeamBaseCaptured'

def PeriodChange(period, *args):
    print 'PeriodChange'



def avatarReady():
    arena = BigWorld.player().arena
    if arena is not None:
        arena.onTeamBasePointsUpdate += TeamBasePointsUpdate
        arena.onTeamBaseCaptured += TeamBaseCaptured
        arena.onPeriodChange += PeriodChange

g_playerEvents.onAvatarReady += avatarReady
Link to comment
Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...