lportii 14 #189016 Posted June 6, 2014 Для танчиков есть gc модуль garbagecollection вроде, от туда можно вытаскивать все ошибки и трассировку. Из debug_utils.pyc : def dump_garbage(source = False): """ show us what's the garbage about """ import inspect, gc print '\nCollecting GARBAGE:' gc.collect() print '\nCollecting GARBAGE:' gc.collect() print '\nGARBAGE OBJECTS:' for x in gc.garbage: try: s = str(x) if len(s) > 80: s = '%s...' % s[:80] print '::', s print ' type:', type(x) print ' referrers:', len(gc.get_referrers(x)) print ' is class:', inspect.isclass(type(x)) print ' module:', inspect.getmodule(x) if source: lines, line_num = inspect.getsourcelines(type(x)) print ' line num:', line_num for l in lines: print ' line:', l.rstrip('\n') except: pass def dump_garbage_2(verbose = True, generation = 2): import gc from weakref import ProxyType, ReferenceType gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS) if generation is None: gc.collect() elif generation in xrange(0, 3): gc.collect(generation) else: LOG_ERROR('Value of generation is invalid. Generation may be an integer specifying which generation to collect (from 0 to 2)') return if verbose: print '=========================================' print '##DUMPSTART' del gc.garbage[:] d = defaultdict(lambda : 0) for i in gc.get_objects(): if not isinstance(i, ProxyType) and not isinstance(i, ReferenceType): if hasattr(i, '__class__'): t = i.__class__ else: t = type(i) d[t] += 1 if verbose: for t, cnt in d.iteritems(): print '%d %s' % (cnt, t) d.clear() del gc.garbage[:] del d if verbose: print '##DUMPEND' print '=========================================' return Quote Share this post Link to post Short link Share on other sites
fecell 124 #189027 Posted June 6, 2014 garbagecollection https://docs.python.org/2/library/gc.html Quote Share this post Link to post Short link Share on other sites
lportii 14 #189028 Posted June 6, 2014 https://docs.python.org/2/library/gc.html Блин, похож ) Quote Share this post Link to post Short link Share on other sites
Yukikaze 57 #190703 Posted June 11, 2014 (edited) Здравствуйте, давно хотел поделится с вами простенькой утилиткой которая несколько упростит вам разработку и дебаг модов. Собирался оформить отдельной темой но уже 3 раза зафейлил топик нажав клавишу бекспейс в браузере(теперь пишу в блокноте), так что ограничусь пока обычным постом. Встречайте, WOT Remote Terminal. Это интерактивная консоль, полностью аналогичная питоновскому REPL'у, позволяет выполнять скрипты в контексте запущенного клиента, перенаправляет лог из файла python.log в запущенную консоль. Небольшая демонстрация работы: Я создал новый модуль и импортировал функцию create_terminal и еще парочку тестовых, для демонстрации возможностей from mods.remote import create_terminal from gui import SystemMessages def add_info(text): SystemMessages.pushMessage(text, type=SystemMessages.SM_TYPE.Information) def add_warning(text): SystemMessages.pushMessage(text, type=SystemMessages.SM_TYPE.Warning) HOST, PORT = "localhost", 9999 BANNER = """### WELCOME TO REMOTE CONSOLE ###""" LOCALS = dict(author='Alex Yukikaze', info=add_info, warn=add_warning) # Create the server, binding to localhost on port 9999 server = create_terminal(HOST, PORT, banner=BANNER, local=LOCALS) server.update_locals(host=HOST, port=PORT) затем скомпилировал, запустил клиент игры и уютненький терминал. Далее воспользовавшись утилитой netcat(nc) подключился к серверу сервер мне ответил и начал флудить варнами, значит функционирует, далее пытаюсь вызвать импортированые функции warn и info как видите результат не заставил себя ждать, все довольно просто. Остальные плюшки работают так же хорошо Сорсы можно взять здесь https://gist.github.com/AlexYukikaze/ee8cf9fdf337f3b77565 Пользуйтесь, комментируйте, критикуйте. Спасибо за внимание. Edited June 11, 2014 by Yukikaze 4 Quote Share this post Link to post Short link Share on other sites
lportii 14 #190707 Posted June 11, 2014 Локальный сервер должен быть запущен? Quote Share this post Link to post Short link Share on other sites
Yukikaze 57 #190714 Posted June 11, 2014 (edited) @lportii, сервер запускается непосредственно в самом клиенте игры и слушает указанный вами порт, я не стал заморачиваться написанием клиент под это дело и воспользовался netcat'ом Почему именно сокеты, а не пайп, потому что я хитрожопый и переодически подключаюсь с планшета и просматриваю лог в реалтайме Edited June 11, 2014 by Yukikaze Quote Share this post Link to post Short link Share on other sites
Farseer 2 #191416 Posted June 12, 2014 (edited) StranikS_Scan, задам вопрос о том, что уже спрашивал. Можно ли файлы CameraNode.pyc и init.pyc сделать едиными и универсальными, т.е. чтоб были как родные для многих модов, использующих данные файлы. Проблема состоит в том, что при игре на клиенте с минимальным количеством модов (P-MOD, прицел нестандартный, УГН) фпс стабильно был 60-90, но после установки панели повреждений от зайца с заменой вышеуказанных файлов на те, что идут вместе с панелью, фпс упал до 40-60. Edited June 12, 2014 by Farseer Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,116 #191439 Posted June 13, 2014 StranikS_Scan, задам вопрос о том, что уже спрашивал. Можно ли файлы CameraNode.pyc и init.pyc сделать едиными и универсальными, т.е. чтоб были как родные для многих модов, использующих данные файлы. Проблема состоит в том, что при игре на клиенте с минимальным количеством модов (P-MOD, прицел нестандартный, УГН) фпс стабильно был 60-90, но после установки панели повреждений от зайца с заменой вышеуказанных файлов на те, что идут вместе с панелью, фпс упал до 40-60. CameraNode.pyc и Init.pyc - ни как и ни коим образом не связаны с фпс и производительностью. Файл CameraNode.pyc - это самодельный загрузчик модов, а файл Init.pyc - вообще пустой. Загрузчик модов - это просто загрузчик, он не может быть не универсальным, он при запуске клиента просто перебирает файлы pyc в вашей папке с модами и загружает их в память. Всё больше ни чего он не делает. Он простой как два рубля. Он срабатывает один раз. В твоем случае панель от зайца - это какая панель? Заяц же забросил свой мод.... панель-то наверно старая и кривая не под 0.9.1???... Вот панель наверно и дает тормоза. Quote Share this post Link to post Short link Share on other sites
Azbuka 278 #191441 Posted June 13, 2014 (edited) @Farseer, CameraNode - загрузчик модов. init - часть загрузчика. Этот файл необходим для последующего import'а модов. Он содержит всего одно слово pass и не делает ничего. Этт файлы нельзя объеденить. Они и так стандартны для модов. Но некоторые мод-пакеры вносят изменения в эти файлы: добавляют проверки файлов и т.д. @StranikS_Scan, панель от зайца действительно старая - последняя версия вроде как для 0.8.8 была. Дальше её развивали пользователи... Edited June 13, 2014 by Azbuka_slovensko Quote Share this post Link to post Short link Share on other sites
fecell 124 #191580 Posted June 13, 2014 (edited) 'офтоп' Этт файлы нельзя объеденить можно))) #CameraNode.py import BigWorld class CameraNode(BigWorld.UserDataObject): def __init__(self): BigWorld.UserDataObject.__init__(self) import ResMgr import os import sys modsPath = '' for value in ResMgr.openSection('../paths.xml')['Paths'].values(): path = value.asString if path[2:10] == 'res_mods': modsPath = os.getcwd() + path[1:] + '/scripts/client/mods' sys.path.append(modsPath) break for name in [value for value in os.listdir(modsPath) if value.endswith('pyc')]: name = os.path.splitext(name)[0] try: __import__(name) except Exception as err: print '[ERROR] %s -> %s' % (name, err) теперь "C:\Games\World_of_Tanks\res_mods\0.9.1\scripts\client\mods\__init__.pyc" можно удалять. =) Лоадер весит 1099 байт. Edited June 13, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
Farseer 2 #191662 Posted June 13, 2014 CameraNode.pyc и Init.pyc - ни как и ни коим образом не связаны с фпс и производительностью. Файл CameraNode.pyc - это самодельный загрузчик модов, а файл Init.pyc - вообще пустой. Загрузчик модов - это просто загрузчик, он не может быть не универсальным, он при запуске клиента просто перебирает файлы pyc в вашей папке с модами и загружает их в память. Всё больше ни чего он не делает. Он простой как два рубля. Он срабатывает один раз. В твоем случае панель от зайца - это какая панель? Заяц же забросил свой мод.... панель-то наверно старая и кривая не под 0.9.1???... Вот панель наверно и дает тормоза. Вот эта панель: http://dwn.wow-clear.ru/DamagePanel_zayaz+maks5189.7z Я помню, когда-то сирмакс говорил о просадках фпс в теме про xvm: мало от флеша, больше от скриптов. Вот и провёл аналогию. 'офтоп' можно))) #CameraNode.py import BigWorld class CameraNode(BigWorld.UserDataObject): def __init__(self): BigWorld.UserDataObject.__init__(self) import ResMgr import os import sys modsPath = '' for value in ResMgr.openSection('../paths.xml')['Paths'].values(): path = value.asString if path[2:10] == 'res_mods': modsPath = os.getcwd() + path[1:] + '/scripts/client/mods' sys.path.append(modsPath) break for name in [value for value in os.listdir(modsPath) if value.endswith('pyc')]: name = os.path.splitext(name)[0] try: __import__(name) except Exception as err: print '[ERROR] %s -> %s' % (name, err) теперь "C:\Games\World_of_Tanks\res_mods\0.9.1\scripts\client\mods\__init__.pyc" можно удалять. =) Лоадер весит 1099 байт. А моды, где есть init.pyc будут работать? Quote Share this post Link to post Short link Share on other sites
fecell 124 #191773 Posted June 13, 2014 (edited) А моды, где есть init.pyc будут работать? Да. Правда есть одно "но" - только те, названия которых не конфликтуют с системными названиями. Например "stat.pyc". В этом случае его надо просто переименовать, иначе вместо него загружается системная библиотека с таким именем. Принцип в том, что широко распространенный сейчас CameraNode не может без __init__ загрузить моды, а этот может. А самим модам __init__ не важен, они его не используют. Edited June 13, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
ProstoNoob 15 #195081 Posted June 23, 2014 (edited) WOT Remote Terminal Привет, будь другом поясни пожалуйста как запустить это все, а то я не понимаю :) Edited June 23, 2014 by ProstoNoob Quote Share this post Link to post Short link Share on other sites
Yukikaze 57 #195153 Posted June 24, 2014 @ProstoNoob, что именно непонятно, конкретнее Quote Share this post Link to post Short link Share on other sites
Azbuka 278 #195174 Posted June 24, 2014 что именно непонятно Мне кажется, что всё. как запустить это все 1. Идём на GitHub, жмём "Download Gist" 2. Достаём example.py и remote.py из архива. 3. Компилируем example.py и remote.py, и копируем .pyc в папку скриптовых модов (World_of_Tanks/res_mods/0.9.1/scripts/mods/ или (World_of_Tanks/res_mods/0.9.1/scripts/client/mods/, точно не помню) 4. Запускаем игру 5. Запускаем терминал и nc <ваш_ip> 9999 Оказалось, что всё уже было написано: Я создал новый модуль и импортировал функцию create_terminal и еще парочку тестовых, для демонстрации возможностей, затем скомпилировал, запустил клиент игры и уютненький терминал. Далее воспользовавшись утилитой netcat(nc) подключился к серверу Quote Share this post Link to post Short link Share on other sites
ProstoNoob 15 #195625 Posted June 25, 2014 (edited) Мне кажется, что всё. 1. Идём на GitHub, жмём "Download Gist" 2. Достаём example.py и remote.py из архива. 3. Компилируем example.py и remote.py, и копируем .pyc в папку скриптовых модов (World_of_Tanks/res_mods/0.9.1/scripts/mods/ или (World_of_Tanks/res_mods/0.9.1/scripts/client/mods/, точно не помню) 4. Запускаем игру 5. Запускаем терминал и nc <ваш_ip> 9999 Оказалось, что всё уже было написано: Ну еще нужно этот "nc" установить, так как он не входит в состав Windows... Как его установить то... Edited June 25, 2014 by ProstoNoob Quote Share this post Link to post Short link Share on other sites
Azbuka 278 #195629 Posted June 25, 2014 Ну еще нужно этот "nc" установить, так как он не входит в состав Windows... А всё потому что она распространяется под лицензией GPL. Версию для Windows можно найти на Википедии. Quote Share this post Link to post Short link Share on other sites
ProstoNoob 15 #195630 Posted June 25, 2014 (edited) А всё потому что она распространяется под лицензией GPL. Версию для Windows можно найти на Википедии. А сразу то написать было не дано, сиди бодайся разбирайся кто чего придумал и выложил.. И как его ставить, если там пакеты для UNIX систем.. Edited June 25, 2014 by ProstoNoob Quote Share this post Link to post Short link Share on other sites
Azbuka 278 #195632 Posted June 25, 2014 (edited) И как его ставить, если там пакеты для UNIX систем.. Вот nc111nt.zip Установка - скопировать nc.exe в папку %WINDIR%. Обычно это C:\Windows\ Edited June 25, 2014 by Azbuka_slovensko Quote Share this post Link to post Short link Share on other sites
lportii 14 #195636 Posted June 25, 2014 Вот nc111nt.zip Установка - скопировать nc.exe в папку %WINDIR%. Обычно это C:\Windows\ Надеюсь на этом флуд закончится. Quote Share this post Link to post Short link Share on other sites