VasyaPRO_2014 163 Posted March 25, 2016 Здравствуйте. Мне нужно хукнуть метод 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 Здесь вряд ли помогут. Нужно придумать что нибудь хитрее, а вот что я уже не знаю. Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #320689 Posted March 25, 2016 Сначала свое потом картошку Короче 1 вариант Или полность заменяй функцию картохи на свою Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #320691 Posted March 25, 2016 Сначала свое потом картошку Короче 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 Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #320693 Posted March 25, 2016 Ну так все есть тут, проблем нет Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #320695 Posted March 25, 2016 Ну так все есть тут, проблем нет но если вдруг кому понадобиться добавить там что нибудь свое до меня то я своими умелыми ручками просто выпилю его хитрый хук от чего у него может достаточно сильно бомбануть. Или на это можно забить, и нормального способа подменить pName, vehShortName, clanAbbrev так, чтобы не мешать остальным и не переписивать целый метод когда картошка в очередной раз переименует маленькую фигню которая мне нафиг не нужна, просто нет? Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #320696 Posted March 25, 2016 Забить Первый вариант тебе подходит, как и в других функциях у тебя Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #320704 Posted March 25, 2016 @VasyaPRO_2014, если тебе нужно изменять маркеры, то нужно работать с swf примерно так: https://bitbucket.org/ShadowHunterRUS/canshoot/src Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #320713 Posted March 25, 2016 @VasyaPRO_2014, если тебе нужно изменять маркеры, то нужно работать с swf примерно так: https://bitbucket.org/ShadowHunterRUS/canshoot/src С swf я знаком на уровне декомпилировал(JPEXS ffd)>Заменил изображение>Сохранил. Так что скорее всего ничего у меня не получится. Я ограничение по количеству символов в средних ушах убрать не могу - куда мне маркеры редактировать)). Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #320718 Posted March 25, 2016 (edited) Или на это можно забить, и нормального способа подменить pName, vehShortName, clanAbbrev так, чтобы не мешать остальным просто нет? если тебе нужно изменять маркеры, то нужно работать с swfЭто единственный нормальный способ. С swf я знаком на уровне декомпилировал(JPEXS ffd)>Заменил изображение>Сохранил. Так что скорее всего ничего у меня не получится. Я ограничение по количеству символов в средних ушах убрать не могу - куда мне маркеры редактировать)).А Вы хотели продолжать деградировать на питоне?) Edited March 25, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #320720 Posted March 25, 2016 Это единственный нормальный способ. Окай пересмотрев много разных *.as файлов дошел к выводу, что никнейм игрока можно редактировать в scripts\__Packages\net\wargaming\ingame\VehicleMarker.as только как мне его взять с конфига или хотябы с питона? + большинство переменных имеют имена типа _loc2_, _loc3_, _loc100500_ и фиг поймеш что они хранят. Есть ли какой нибудь способ отладки as? типа print var с питона. А Вы хотели продолжать деградировать на питоне?) Ага) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #320721 Posted March 25, 2016 только как мне его взять с конфига или хотябы с питона? http://www.koreanrandom.com/forum/topic/1780-/ Quote Share this post Link to post Short link Share on other sites