Jump to content
Korean Random
VasyaPRO_2014

Хук метода python.

Recommended Posts

Здравствуйте. Мне нужно хукнуть метод addVehicleMarker из класса MarkersManager (scripts/client/gui/Scaleform/daapi/view/battle/markers.py скачать: markers.zip). Суть такова: мне нужно изменить значение строк pName, vehShortName, и ещё clanAbbrev. Нужно мне это, что бы вставить туда статистику игроков (см тут). И делаю я это вот таким способом (который я чуть менее чем полностью взял отсюда). Всё конечно работает, но если вдруг кому понадобиться добавить там что нибудь свое до меня то я своими умелыми ручками просто выпилю его хитрый хук от чего у него может достаточно сильно бомбануть. Т.к. мне не нужно редактировать то, что возвращает метод либо выполнить свой код после метода, а нужно именно редактировать код внутри самого метода поэтому обычное:
 

old_method=wg_class.wg_method
def new_method(**args):
    temp=old_method(**args)
    temp['123']=456
    return temp
wg_class.wg_method=new_method

либо

old_method=wg_class.wg_method
def new_method(**args):
    old_method(**args)
    print "Vasya"
wg_class.wg_method=new_method

Здесь вряд ли помогут. Нужно придумать что нибудь хитрее, а вот что я уже не знаю.

Share this post


Link to post

Short link
Share on other sites

Сначала свое потом картошку

Короче 1 вариант

Или полность заменяй функцию картохи на свою

Share this post


Link to post

Short link
Share on other sites

Сначала свое потом картошку

Короче 1 вариант

Или полность заменяй функцию картохи на свою

И что мне в "своем" надо делать? pName, vehShortName, clanAbbrev появляются уже во время выполения метода.

def addVehicleMarker(self, vProxy, vInfo, guiProps):
    vTypeDescr = vProxy.typeDescriptor
    maxHealth = vTypeDescr.maxHealth
    mProv = vProxy.model.node('HP_gui')
    isAlly = guiProps.isFriend
    speaking = False
    if GUI_SETTINGS.voiceChat:
        speaking = VoiceChatInterface.g_instance.isPlayerSpeaking(vInfo.player.accountDBID)
    hunting = VehicleActions.isHunting(vInfo.events)
    markerID = self._createVehicleMarker(isAlly, mProv)
    self.__markers[vInfo.vehicleID] = _VehicleMarker(markerID, vProxy, self.__ownUIProxy)
    battleCtx = g_sessionProvider.getCtx()
    fullName, pName, clanAbbrev, regionCode, vehShortName = battleCtx.getFullPlayerNameWithParts(vProxy.id)
    vType = vInfo.vehicleType
    teamIdx = -1
    if arena_info.isFalloutMultiTeam() and vInfo.isSquadMan():
        teamIdx = g_sessionProvider.getArenaDP().getMultiTeamsIndexes()[vInfo.team]
    self.invokeMarker(markerID, 'init', [vType.classTag,
     vType.iconPath,
     vehShortName,
     vType.level,
     fullName,
     pName,
     clanAbbrev,
     regionCode,
     vProxy.health,
     maxHealth,
     guiProps.name(),
     speaking,
     hunting,
     guiProps.base,
     g_ctfManager.getVehicleCarriedFlagID(vInfo.vehicleID) is not None,
     teamIdx])
    return markerID

Share this post


Link to post

Short link
Share on other sites

Ну так все есть тут, проблем нет

но

если вдруг кому понадобиться добавить там что нибудь свое до меня то я своими умелыми ручками просто выпилю его хитрый хук от чего у него может достаточно сильно бомбануть.​

Или на это можно забить, и нормального способа подменить pName, vehShortName, clanAbbrev так, чтобы не мешать остальным и не переписивать целый метод когда картошка в очередной раз переименует маленькую фигню которая мне нафиг не нужна, просто нет?

Share this post


Link to post

Short link
Share on other sites

Забить

Первый вариант тебе подходит, как и в других функциях у тебя

Share this post


Link to post

Short link
Share on other sites

@VasyaPRO_2014, если тебе нужно изменять маркеры, то нужно работать с swf примерно так: https://bitbucket.org/ShadowHunterRUS/canshoot/src

С swf я знаком на уровне декомпилировал(JPEXS ffd)>Заменил изображение>Сохранил. Так что скорее всего ничего у меня не получится. Я ограничение по количеству символов в средних ушах убрать не могу - куда мне маркеры редактировать)).

Share this post


Link to post

Short link
Share on other sites

Или на это можно забить, и нормального способа подменить pName, vehShortName, clanAbbrev так, чтобы не мешать остальным просто нет?

если тебе нужно изменять маркеры, то нужно работать с swf

Это единственный нормальный способ.

 

С swf я знаком на уровне декомпилировал(JPEXS ffd)>Заменил изображение>Сохранил. Так что скорее всего ничего у меня не получится. Я ограничение по количеству символов в средних ушах убрать не могу - куда мне маркеры редактировать)).

А Вы хотели продолжать деградировать на питоне?) Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Это единственный нормальный способ.

Окай пересмотрев много разных *.as файлов дошел к выводу, что никнейм игрока можно редактировать в scripts\__Packages\net\wargaming\ingame\VehicleMarker.as только как мне его взять с конфига или хотябы с питона? + большинство переменных имеют имена типа _loc2_, _loc3_, _loc100500_ и фиг поймеш что они хранят. Есть ли какой нибудь способ отладки as? типа print var с питона.

А Вы хотели продолжать деградировать на питоне?)

Ага)

Share this post


Link to post

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...