StranikS_Scan 4,210 #182203 Posted May 9, 2014 Знаете за что я ненавижу Питон? С одной стороны Питон это отдушина для тех кто много работал с классическими языками типа Фортрана, VB или Object Pascal.... но вот его инвариантность, меня просто убивает. Не зависимо от того насколько хорошо я знаю язык, каждый раз когда я пишу на нем, он вызывает сильнейшее чувство того, что написанный код можно написать компактнее и проще, и действительно с течением времени это неизбежно обнаруживается и я начинаю бороться с диким желаем переписать старый код на новый лад. Вот за это я его просто ненавижу! 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #182422 Posted May 10, 2014 (edited) Да нет, О тут не причем. Вообще код не рабочий: module = map(__import__,'dis') <<< Traceback (most recent call last): <<< File "<string>", line 1, in <module> <<< ImportError: No module named d стоп, я не такой код в пример приводил)) этот код нерабочий априори.. т.к. надо ['dis'] писать, а не 'dis' в моем примере скобки были ;) names = ['httplib', 'dis'] Edited May 10, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182442 Posted May 10, 2014 (edited) стоп, я не такой код в пример приводил)) этот код нерабочий априори.. т.к. надо ['dis'] писать, а не 'dis' в моем примере скобки были ;) names = ['httplib', 'dis'] Так-с ситуация прояснилась. Короче в О сейчас httplib не импортируется, т.к. в модуле есть обращение к _socket то ли lib то ли pyd, а я экспериментировал с пакетами и не не всё включил в zip-пакет. В обновлении zip-пакеты включу и либы и пиды. Edited May 10, 2014 by StranikS_Scan 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #182651 Posted May 11, 2014 Не торопись. В embedded питоне загрузка pyd блокируется - как в танках, так и в О будет. Это ограничение "встроенного" питона. Есть вариант обхода (zipimporter загугли), но это даст возможность только в О реализовать загрузку.. в танках все равно это не будет работать. Может есть смысл только C:\Games\World_of_Tanks\res_bw\scripts\common\lib включить в архив (питоновские библиотеки доступные в танках, но не все рабочие все равно.. "socket" например). Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182663 Posted May 11, 2014 Не торопись. В embedded питоне загрузка pyd блокируется - как в танках, так и в О будет. Это ограничение "встроенного" питона. Есть вариант обхода (zipimporter загугли), но это даст возможность только в О реализовать загрузку.. в танках все равно это не будет работать. Может есть смысл только C:\Games\World_of_Tanks\res_bw\scripts\common\lib включить в архив (питоновские библиотеки доступные в танках, но не все рабочие все равно.. "socket" например). Ага, вчера уже увидел: Any files may be present in the ZIP archive, but only files .py and .py[co] are available for import. ZIP import of dynamic modules (.pyd, .so) is disallowed. Note that if an archive only contains .py files Ну и ладно. Quote Share this post Link to post Short link Share on other sites
lportii 14 #182668 Posted May 11, 2014 Это через importlib.import_module ? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182671 Posted May 11, 2014 Это через importlib.import_module ? По хелпу не похоже. Вообще правильно не нужна в О поддержка либов, ориентируемся то на вот-моды, а там кроме \\Lib ни чего не используется, потому я только \\Lib и засунул в zip, предварительно выкинув site-package, *test* и всякий readme-хлам, что с питоном идёт. По подключению к клиенту - я так понимаю имеет смысл при подключении, импортировать в сис-патч \\Lib бигворлдовский, а zip в конец списка, чтоб обращение сначала шло к бигворлдовским файлам, раз уж клиент на них сидит. Quote Share this post Link to post Short link Share on other sites
lportii 14 #182678 Posted May 11, 2014 По подключению к клиенту - я так понимаю имеет смысл при подключении, импортировать в сис-патч \\Lib бигворлдовский, а zip в конец списка, чтоб обращение сначала шло к бигворлдовским файлам, раз уж клиент на них сидит А можно как здесь http://stackoverflow.com/questions/10286083/python-c-api-add-class-to-module (примеров много) прямо в модуль BigWorld свой код закинуть ? Замечал такое, что в логах появляются у модулей дополнительные строки кода. В ресурсах файлы более "тощие". Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182679 Posted May 11, 2014 (edited) А можно как здесь http://stackoverflow.com/questions/10286083/python-c-api-add-class-to-module (примеров много) прямо в модуль BigWorld свой код закинуть ? Замечал такое, что в логах появляются у модулей дополнительные строки кода. В ресурсах файлы более "тощие". Не до конца тебя понял. Если ты имел ввиду вот такой код: __builtin__.my = 123 @!__builtin__.my <<< 123То он работает и сейчас и с любым модулем, что внешним что внутренним Edited May 11, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
lportii 14 #182682 Posted May 11, 2014 Не до конца тебя понял. Если ты имел ввиду вот такой код: __builtin__.my = 123 @!__builtin__.my <<< 123 То он работает и сейчас и с любым модулем, что внешним что внутренним Так если он работает, зачем что то еще придумывать? Или я что то не понимаю. Просто, клиент и так при всяком удобном случае пытается зависнуть намертво. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182683 Posted May 11, 2014 (edited) Или я что то не понимаю. А мы похоже о разном пишем. Я выше писал про питоновские модули, которые в \\lib. Орион по умолчанию юзает эти файлы из pythonXX.zip. И в результате работает автономно. Однако этот комплект файлов есть и в самом клиенте, причем он там "расширенный", вот и думаю что при подключении к wot надо приоритет давать именно второму источнику, а не первому. А по поводу статьи как я понял там идет реальное импортирование кода в модуль, загруженный в память. А не через присваивание. Edited May 11, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
lportii 14 #182684 Posted May 11, 2014 Однако этот комплект файлов есть и в самом клиенте, причем он там "расширенный", вот и думаю что при подключении к wot надо приоритет давать именно второму источнику, а не первому. Еще месяц назад в клиенте небыло модуля time, сейчас он есть, но обрезанный и работает.. плохо например слип тупо вешает клиент на время слип. В общем, нужен ли этот приоритет. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182686 Posted May 11, 2014 Еще месяц назад в клиенте небыло модуля time, сейчас он есть, но обрезанный и работает.. плохо например слип тупо вешает клиент на время слип. В общем, нужен ли этот приоритет. Ммм, кривости там у них. Ну тогда, будет опция :))) Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #182994 Posted May 11, 2014 (edited) Обновил программу до 1.0.7, пофиксил баги: исправлена передача аргументов в sys.argv. доработана поддержка атрибута __file__ при выполнении скрипта/файла с параметрами. внес изменения в список путей в окружении среды, добавляемых по умолчанию при подключении к dll. Увидеть список можно вызвав из главного меню "Print <sys.path>". Теперь можно коннектится как к локальной dll в папке Ориона, так и к dll в папке питона. При этом приоритет отдается модулям из zip-архива, если таковой есть в папке с dll. внесены исправления в работу интерфейса экспресс-окна при масштабировании экрана Залил второе видео в первый пост: как подключить разные версии питона переменная окружения sys.path и запуск скриптов с параметрами Edited May 11, 2014 by StranikS_Scan 5 Quote Share this post Link to post Short link Share on other sites
lsdmax 2 #183771 Posted May 13, 2014 https://github.com/Omegaice/WOTDecompiled Видели этот проект? может пригодиться.. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #183792 Posted May 13, 2014 (edited) https://github.com/Omegaice/WOTDecompiled Видели этот проект? может пригодиться.. Он не нужен. В Орионе есть функция "Decompile pyc-folder" - можно декопилировать любую папку со скриптами за один клик. Будут декомпилены все скрипты в папке и подпапках. В опциях можно указать с каким расширением сохранять файлы и в какую папку, в ту же самую или в другую. Декомпилишь папку WorldOfTanks\ и все исходники перед тобой. Edited May 14, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
fecell 125 #183824 Posted May 13, 2014 (edited) sorry. oftop. del. Edited May 13, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
fecell 125 #184428 Posted May 16, 2014 (edited) А можно реализовать как-нибудь, чтобы использовалась питоновская dll-ка из танков (самолетов/кораблей)? Признаться, слабо представляю как это можно реализовать.. Что-то типа предзагрузки игры, внедрение в неё и последующий вызов методов уже из игровой длл-ки.. Навеяло тем, что появился сегодня wotdllmod.dll.. он загружается при старте игры. а если реализовать подобно и через такую длл-ку уже вызывать игровой питон.. Edited May 16, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #184441 Posted May 16, 2014 (edited) @fecell, у текущего клиента игры нет внешней dll в принципе, т.к. среду питона инициализирует сам exe файл клиента. Обмениваться данными между запущенной средой питона клиента и средой О можно. Я не силен в инжектировании в процессы и в ближайшее время вряд ли такой подход буду осваивать.... а вот другой подход обмена данными я уже клепаю - обмен данными через файловый буфер. Будет так: - с О будет идти zip с модулем-трансмиттером - при запуске клиента через О, последний скормит ему трансмиттер - трансмиттер использует файл-буфер для обмена данными - данные высылаемые из О будут exec-иться трансмиттером на стороне клиента - а данные идущие на stdout в клиенте будут сбрасываться в буфер и приниматься О Например, после запуска клиента через О, скрипт набранный в О: import BigWorld BigWorld.wg_enableTreeHiding(False) BigWorld.wg_setTreeHidingRadius(10000,100)будет исполняться в среде клиента и переключившись в клиент вы сразу увидите результат. Глянул wotdllmod.dll - написано на Delphi5-7 c KOL. Она не имеет экспортируемых функций, это значит что клиент игры к ней не обращается как к библиотеке с функциями/процедурами/классами, следовательно ни какого доступа к окружению питона клиента из неё нет. Edited May 16, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
lportii 14 #185274 Posted May 19, 2014 Знаете за что я ненавижу Питон? С одной стороны Питон это отдушина для тех кто много работал с классическими языками типа Фортрана, VB или Object Pascal.... но вот его инвариантность, меня просто убивает. Не зависимо от того насколько хорошо я знаю язык, каждый раз когда я пишу на нем, он вызывает сильнейшее чувство того, что написанный код можно написать компактнее и проще, и действительно с течением времени это неизбежно обнаруживается и я начинаю бороться с диким желаем переписать старый код на новый лад. Вот за это я его просто ненавижу! Тоже хочется иногда переписать код, только для повышения производительности. Это же не совсем нормально, когда пара скобок в выражении повышает скорость решения в 10-15 раз.. Quote Share this post Link to post Short link Share on other sites