0kosmo 15 Posted July 18, 2016 Как можно получить список событий при определенном действии (например в бою или при просмотре реплея). То есть смотрю я реплей и нажимаю кнопку перемотки на 15 секунд назад - а какое событие произошло? Подозреваю что документации нет, но хоть направление раскопок укажите. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #337153 Posted July 18, 2016 (edited) Как можно получить список событий при определенном действии (например в бою или при просмотре реплея). То есть смотрю я реплей и нажимаю кнопку перемотки на 15 секунд назад - а какое событие произошло? Подозреваю что документации нет, но хоть направление раскопок укажите.трейсы фунций нужно создать :))))пример: def foo(): bar() # нужно заменить на: @trace def foo(): bar()декоратор trace поместить в __builtin__ в корневом скрипте (Account.py?): import __builtin__ import BigWorld tracer_f = open('trace.log', 'w') def _log(_str): if not tracer_f.closed: tracer_f.write(_str) def autoFlushTracerLog(): tracer_f.flush() BigWorld.callback(5.0, autoFlushTracerLog) autoFlushTracerLog() def trace(_func): def wrapper(*args, **kwargs): if not tracing: return _func(*args, **kwargs) _log('[%s %s]\n' % (_func.func_name, _func.__module__)) result = _func(*args, **kwargs) _log('[/%s]\n' % _func.func_name) return result return wrapper __builtin__.trace = trace __builtin__.tracing = TrueА дальше нужно распаковать скрипты клиента в res_mods и заменой по файлам дописать регуляркой @trace: Найти: ^(([^\n\S]*)def\s[\S\s]) Заменить на: \2@trace\n\1Затем скомпилить :))))По идее, лаганет жутко :)))))) Ни в коем случае не пытайся попробовать этот способ) Просто пошарься по распакованным скриптам клиента... Edited July 18, 2016 by ShadowHunterRUS 1 Quote Share this post Link to post Short link Share on other sites
Armagomen_UA 158 #337993 Posted July 23, 2016 Ни в коем случае не пытайся попробовать этот способ) Совет на миллион, делай так, но ты так не делай. 1 Quote Share this post Link to post Short link Share on other sites
Serfer_78 2 #401757 Posted August 28, 2017 (edited) трейсы фунций нужно создать :)))) пример: def foo(): bar() # нужно заменить на: @trace def foo(): bar()декоратор trace поместить в __builtin__ в корневом скрипте (Account.py?): import __builtin__ import BigWorld tracer_f = open('trace.log', 'w') def _log(_str): if not tracer_f.closed: tracer_f.write(_str) def autoFlushTracerLog(): tracer_f.flush() BigWorld.callback(5.0, autoFlushTracerLog) autoFlushTracerLog() def trace(_func): def wrapper(*args, **kwargs): if not tracing: return _func(*args, **kwargs) _log('[%s %s]\n' % (_func.func_name, _func.__module__)) result = _func(*args, **kwargs) _log('[/%s]\n' % _func.func_name) return result return wrapper __builtin__.trace = trace __builtin__.tracing = TrueА дальше нужно распаковать скрипты клиента в res_mods и заменой по файлам дописать регуляркой @trace: Найти: ^(([^\n\S]*)def\s[\S\s]) Заменить на: \2@trace\n\1Затем скомпилить :))))По идее, лаганет жутко :)))))) Ни в коем случае не пытайся попробовать этот способ) Просто пошарься по распакованным скриптам клиента... SkepticalFox раскажите пожалуста подробнее насчет "декоратор trace поместить в __builtin__ в корневом скрипте (Account.py?): " со всем остальным разобрался без проблем. А вот не догнал где в скрипте Account находится __builtin__ и как в него поместить декоратор trace. Тема прикольная но информации мало.. Если я правильно понял приведенный код нужно поместить в скрипте (Account.py?) прогнать регуляркой все скрипты и скомпилить их? Edited August 28, 2017 by Serfer_78 Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #401793 Posted August 28, 2017 (edited) Если я правильно понял приведенный код нужно поместить в скрипте (Account.py?) прогнать регуляркой все скрипты и скомпилить их? Приведенный код был just for fun) Проблема в том, что скомпилить обратно раскомпиленные скрипты абсолютно! невозможно) Лучше подменить функцию(call_function?) виртуальной машины Python в WorldOfTanks.exe (примерно так это должно выглядеть) Но для начала нужно её там найти, эту функцию(с помощью IDA) Там и P7.Trace к месту будет(а то запись в файл повесит к хренам комп), видел его где-то у @Mixaill в репозитории(может он похожим и занимался?..) Edited August 28, 2017 by SkepticalFox 1 Quote Share this post Link to post Short link Share on other sites
Serfer_78 2 #401797 Posted August 28, 2017 Приведенный код был just for fun) Проблема в том, что скомпилить обратно раскомпиленные скрипты абсолютно! невозможно) Лучше подменить функцию(call_function?) виртуальной машины Python в WorldOfTanks.exe (примерно так это должно выглядеть) Но для начала нужно её там найти, эту функцию(с помощью IDA) Там и P7.Trace к месту будет(а то запись в файл повесит к хренам комп), видел его где-то у @Mixaill в репозитории(может он похожим и занимался?..) "Приведенный код был just for fun" А я уж было повелся)))))) "примерно так это должно выглядеть)" Спасибо)) Ознакомлюсь. Quote Share this post Link to post Short link Share on other sites