ShuraBB Posted March 2, 2016 Share Posted March 2, 2016 Есть: scripts/client/messenger/proto/bw_chat2/chat_handlers.py Пытаюсь в классе _EntityChatHandler сделать хук для функции _onMessageBroadcast И... чет никак @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted March 2, 2016 Share Posted March 2, 2016 (edited) from messenger.proto.bw_chat2.chat_handlers import _EntityChatHandler def new_onMessageBroadcast(self, _, args): old_onMessageBroadcast(self, _, args) print 'hook :)' old_onMessageBroadcast = _EntityChatHandler._onMessageBroadcast _EntityChatHandler._onMessageBroadcast = new_onMessageBroadcast Edited March 2, 2016 by Ekspoint @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted March 2, 2016 Author Share Posted March 2, 2016 Ага, я вот тоже наивный так думал, да не все так тут просто... Вызова new_onMessageBroadcast при таком варианте хука не проиходит :-\ @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted March 2, 2016 Share Posted March 2, 2016 Ага, я вот тоже наивный так думал, да не все так тут просто... Вызова new_onMessageBroadcast при таком варианте хука не проиходит :-\это как так, странно, приду сам попоробую А ошибки нет? @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted March 2, 2016 Author Share Posted March 2, 2016 >А ошибки нет? Неа. @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted March 2, 2016 Share Posted March 2, 2016 >А ошибки нет? Неа. а print то выводит? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted March 2, 2016 Share Posted March 2, 2016 (edited) Ага, я вот тоже наивный так думал, да не все так тут просто.Опять из-за наследования наверное... Edited March 2, 2016 by ShadowHunterRUS 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted March 3, 2016 Share Posted March 3, 2016 Опять из-за наследования наверное...Бывает такое...А вообще народ привыкайте юзать return когда хуки ставите, некоторые методы возвращают значение, если вы его не пробросите через хук - сгенерите баг, а их и так хватает. def new_onMessageBroadcast(self, _, args): result = old_onMessageBroadcast(self, _, args) print 'hook :)' return result @ShuraBB, попробуй поставить хук повыше где-нить, ЕМНИП BigWorld.player() наследует часть методов для получения с сервера эвентов, много его методов вызываются движком из C. Только там надо осторожно, можно что-нить очень серьезно поломать. Хотя ЕМНИП в этой теме можно просто подписаться на эвент и не надо ничего хукать. Точные координаты сходу не скажу, но помнится, хватал сообщения из чата... ТСа же это интересует? 2 @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted March 4, 2016 Author Share Posted March 4, 2016 >А вообще народ привыкайте юзать return когда хуки ставите, некоторые методы возвращают значение Ну это само собой >но помнится, хватал сообщения из чата... ТСа же это интересует? Хотел тут _перехватывать_ сообщения чата (чтобы работало и в бою и в риплеях и можно было-бы выцепить sender.ID а не только текст сообщения), то "распутывая" цепочку наследования, понял что был не прав, тут перехватывать уже бесполезно. Но вопрос как правильно хукнуть в таком случае все равно интересен, но пока отложен. Спасибо всем! @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted March 4, 2016 Share Posted March 4, 2016 Но вопрос как правильно хукнуть в таком случае все равно интересен, но пока отложен.Примеры. Раз. Два. @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted March 7, 2016 Author Share Posted March 7, 2016 >Примеры. Раз. Два.Спасибо. @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.