PVirex
User-
Content Count
22 -
Joined
-
Last visited
-
Days Won
2
Everything posted by PVirex
-
а как насчет погрешности? вы уверены в точности данных? статистика дело такое... топкое
-
Так что по итогу, подкрутки есть или нет?
-
Добавлена поддержка локализаций: RU, EN Выбирается 1 раз при первом запуске и сохраняется в кеш. Для переопределения снести кеш или поменять/удалить ключ 'language'
-
Добавил упаковку модов в zip из директории mods_unpack. Это повышает удобство при пересборке модпака, достаточно хранить все необходимые моды в таком виде, как они должны находиться в клиенте игры. При этом моды у которых не совпадает версия папки для модов с той, что в клиенте добавляться не будут
-
Добавил кеш, теперь сохраняется последний указанный путь и выбранные модификации
-
Как отправить сообщение в приватный канал?
PVirex replied to gotoreactors's topic in ActionScript & Python
уже не работает, разрабы пофиксили походу, теперь при попытке это использовать кикает с севера. недавно проверял на общем тесте 1.8 -
было в планах на будущее как и кеш, есть даже отработанная технология
-
@tunut оххх, это тултип отдельная боль и страдания. Я не нашел нормального решения как сделать тултип для three и начал колхозить сам) вышло то, что есть. По идее, мне кажестся можно зафиксировать его справа или слева, но тут есть трудности, я подумаю что можно сделать. Не забудьте поделиться ссылкой на Ваш модпак, очень интересно, что вышло в оконечном результате. У меня есть планы на доработку)
-
@tunut значит стоит не по стандартному пути, не в programdata. Я поправил, должна кнопка теперь разблокироваться при ручном выборе пути. Fixed at head revision
-
@tunut а WGC стоит? или ты выбираешь путь до игры руками? мб и баг у меня где-то))) я воспроизвел, это баг. ты не используешь WGC. Поправлю минут через 10-20. Спаисбо за инфу
-
Должно работать. Обрати внимание на версию клиентав constants.py, текущая версия на проде вот такая VERSION_CLIENT = 'v.1.8.0.1' Извини за долгий ответ, мне казалось никому не интересно и я не стал дописывать мануал Обнови бранч, я внес правки и поправил версию.
-
Наоборот немного, инсталятор модификаций написанный на Python с помощью wxPython и запакованный в ехе с помощью pyinstaller
-
2.0.1 * убрана необходимость вносить ресурсы в main.spec 2.0.2.0 * добавлено сохранение в кеш последнего указанного пути и последних установленных модификаций 2.0.3.0 * добавил упаковку модов в zip из директории mods_unpack. Это повышает удобство при пересборке модпака, достаточно хранить все необходимые моды в таком виде, как они должны находиться в клиенте игры. При этом моды у которых не совпадает версия папки для модов с той, что в клиенте добавляться не будут 2.1.0.0 * добавлена поддержка локализаций с сохранением выбора в кеш
-
Сборка исполняемого файла Коммитом от on Mar 5, 2020 добавил парсинг mods_config.json в mods_install.spec Таким образом, конечному пользователю нет необходимости вносить правки в mods_install.spec, что может плохо закончиться. Теперь все ресурсы берутся из конфига автоматически и запаковываются. Для сборки необходимо: Шаг 1: установить python и либы, можно использовать setup.bat Шаг 2: занести нужные моды в конфиг mods_config.json Шаг 3: запустить сборщик 9 апреля, добавил упаковку модов в zip из директории mods_unpack. Это повышает удобство при пересборке модпака, достаточно хранить все необходимые моды в таком виде, как они должны находиться в клиенте игры. Например: replays/mods/1.8.0.2/replays.wotmod battlehints/res_mods/1.8.0.2/scripts/client/gui/mods/mod_battlehints.pyc После запуска батника в директории: res/mods появятся архивы с названием корневой папки и полной вложенностью как в оригинале replays.zip и battlehints.zip. Останется только внести zip архивы в mods_config.json
-
Подробности тут:
-
Всем привет. Начало этой эпопеи можно прочитать тут, там же есть демо версия exe. Если кратко, это довольно простой инсталятор написанный на Python 3, но мне кажется будет работать и на 2 без особых переделок. Сам проект возник как шуточный, демонстративный, но со временем меня затянул и я решил доделать до конца, т.е до рабочего прототипа. Я в курсе, что есть более профильные решения, возможно даже проще, но у меня была цель сделать это на Python) Ссылка на репозиторий. Текущая версия: 2.1.0.0 Окружение: Python 3.8.1 wxPython pyinstaller pip install wxpython pip install pyinstaller Сложно понять, с чего начать) Пожалуй начну с самого начала, а именно mods_install.py т.к именно с него осуществляется запуск. В модуле содержится информация о панелях и инициализация самого приложения. Для добавления новой необходимо сделать импорт и внести в PANEL_INFO по примеру. В common расположены основные константы и пути, а также общие функции. constants.py # для отладки и запуска из IDE необходимо в root создать пустой файл start_python без расширения, это необходимо для поиска абстрактного пути ресурсов g_PYTHON_START = True if os.path.isfile(os.path.join(os.getcwd(), 'start_python')) else False # константа используется для включения записи логов в текстовый файл, см LOG_FOLDER в path.py g_DEBUG = True if os.path.isfile(os.path.join(os.getcwd(), 'debug')) else False # версия инсталятора VERSION = '2.0' # Имя рамки TITLE = 'My personal installer {}'.format(VERSION) # Очень важная константа!!! берется из version.xml игрового клиента, если версии не совпадут с клиентской, поставить моды не получится. VERSION_CLIENT = 'v.1.7.1.2' # размер фрейма и панели, панель чуть меньше из-за особенностей отрисовки wxWidget SIZE_FRAME = (600, 660) SIZE_PANEL = (585, 625) # стиль фрейма FRAME_STYLE = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL | wx.BORDER # список папок которые будут удалены при выборе опции "Удалить кеш игры" пользователем DROP_GAME_FOLDER = ['battle_results', 'clan_cache', 'custom_data', 'veh_cmp_cache', 'dossier_cache', 'web_cache'] # список папок которые будут удалены при выборе опции "Удалить кеш модификаций" пользователем DROP_XVM_FOLDER = ['xvm\\Hitlog', 'xvm\\cache', 'xvm\\custom_data', 'xvm\\statistics'] DEFAULT_LANG = 'RU' # важная настройка, распаковывает моды не в конкретную папку, а как есть в корень игры. Это тнужно если в модпаке содержатся моды как mods так # и в res_mods SET_IN_GAME_FOLDER = True path.py ICON_PATH = resource_path('res_image\\main.ico') MAIN_LOGO_600x100_PATH = resource_path('res_image\\logo_600_100.png') MAIN_LOGO_600x500_PATH = resource_path('res_image\\logo_600x500.png') WGC_DEFAULT_PATH = os.path.join(os.environ['PROGRAMDATA'], 'Wargaming.net', 'GameCenter', 'preferences.xml') NOT_PATH_DEFAULT = resource_path('res_image\\not_found.jpg') # путь до кеша игры PATH_TO_CACHE_WOT = os.path.join(os.environ['appdata'], 'Wargaming.net', 'WorldOfTanks') LOG_FOLDER = os.path.join(os.environ['appdata'], 'TEMP_INSTALLER_LOGS', 'INSTALLER_LOGS') g_MODS_CONFIG = json.load(open(resource_path('mods_config.json'), encoding='utf-8')) g_PRESET_SETTINGS = json.load(open(resource_path('stream_settings.json'), encoding='utf-8')) PRESET_NAMES = list(g_PRESET_SETTINGS.keys()) В директории core расположены базовые класса и механики. Важным нюансом является то, что все ресурсы обязаны находиться в директории res, это больше обусловлено механизмом работы exe собранным с помощью pyinstaller. Для доступа к любому не py файлу должен осуществляться через функцию common_utils.resource_path def resource_path(relative_path): """ Функция для получения пути к ресурсам, все не .py файлы обязаны храниться в директории res. Такая зависимость обусловлена особенностями упаковки с помощью pyinstaller, т.к root меняется при запуске из .ехе """ if not g_PYTHON_START: base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, 'res', relative_path) Конфиги. Самым важным безусловно является mods_config.json, такой формат выбран для простоты использования, описать можно вот так: { "P0LIROID Mods": { "checkBox": true, // флаг если для группы нужен именно чекбокс а не радиобуттон "Просмотр попадний в ангаре": [ // имя модификации в селекторе "res_image/battle_hits_poliroid.jpg", // относительный путь в ресурсах, обратить внимание что директорию res не учитываем "mods/battlehints_poliroid.zip", // относительный путь в ресурсах, до самого мода, обязательно архив zip "Текстовое описание, опционально, если не нужно то поставить null или пустую строку" ], "Менеджер реплеев": [ "res_image/replays_manager_poliroid.jpg", "mods/replays_manager.zip", "Текстовое описание, опционально, если не нужно то поставить null или пустую строку" ], "Кастомизация танков": [ "res_image/cust_veh.jpg", "mods/branding_vehicle.zip", null ] }, "Мои моды": [ "res_image/мой мод.jpg", "mods/мой мод.zip", null] ], "Radio button": { "Mods 1": [ "res_image/мой мод 1.jpg", "mods/мой мод1.zip", null], "Mods 2": [ "res_image/мой мод 2.jpg", "mods/мой мод2.zip", null] } } preset.json - устанавливает флажки для указанных групп, можно сделать сколько угодно пресетов. { "P0LIROID": [ "Просмотр попадний в ангаре", // просто добавляем имена модов как есть "Менеджер реплеев" ] } Модуль логирования logger.py имеет несколько уровней логирования: общий лог и только gui. Такой подход будет полезен в будущем если захочется использовать дополнительные библиотеки, которые тоже используют logger. Доступны следующие уровни: from core.logger import logger logger.info(msg) logger.debug(msg) logger.warning(msg) logger.error(msg) logger.exception(msg) try: pass exception Exception as e: logger.exception(e.msg) Основной UI который виден пользователю находится в step_panel. В текущий момент там 6 панелей: приветствие, поиск игры, выбор модификаций, подтверждение выбора, дополнительные настройки, установка. Возможно в будущем уделю больше внимания верстке и основной логике, в принципе там ничего сложного нет, если вы посвящены в начальные тайны ООП на Python. Сборка в ехе осуществляется либой pyinstaller. # -*- mode: python ; coding: utf-8 -*- import os block_cipher = None path_cwd = os.getcwd() a = Analysis(['mods_install.py'], pathex=['E:\\my_project\\mod_installer_stage_2'], # путь до проекта binaries=[], datas=[('res/locales/RU/LC_MESSAGES/ru.mo', 'res/locales/RU/LC_MESSAGES')], # локализации помещены отдельно специально hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) # указываем относительный путь в проекте, полный путь до файла a.datas += [('res/res_image/battle_hits_poliroid.jpg', os.path.join(path_cwd, 'res', 'res_image', 'battle_hits_poliroid.jpg'), 'DATA')] a.datas += [('res/res_image/cust_veh.jpg', os.path.join(path_cwd, 'res', 'res_image', 'cust_veh.jpg'), 'DATA')] a.datas += [('res/res_image/logo_600_100.png', os.path.join(path_cwd, 'res', 'res_image', 'logo_600_100.png'), 'DATA')] a.datas += [('res/res_image/logo_600x500.png', os.path.join(path_cwd, 'res', 'res_image', 'logo_600x500.png'), 'DATA')] a.datas += [('res/res_image/not_found.jpg', os.path.join(path_cwd, 'res', 'res_image', 'not_found.jpg'), 'DATA')] a.datas += [('res/res_image/replays_manager_poliroid.jpg', os.path.join(path_cwd, 'res', 'res_image', 'replays_manager_poliroid.jpg'), 'DATA')] a.datas += [('res/res_image/main.ico', os.path.join(path_cwd, 'res', 'res_image', 'main.ico'), 'DATA')] a.datas += [('res/mods_config.json', os.path.join(path_cwd, 'res', 'mods_config.json'), 'DATA')] a.datas += [('res/stream_settings.json', os.path.join(path_cwd, 'res', 'stream_settings.json'), 'DATA')] a.datas += [('res/mods/battlehints_poliroid.zip', os.path.join(path_cwd, 'res', 'mods', 'battlehints_poliroid.zip'), 'DATA')] a.datas += [('res/mods/branding_vehicle.zip', os.path.join(path_cwd, 'res', 'mods', 'branding_vehicle.zip'), 'DATA')] a.datas += [('res/mods/replays_manager.zip', os.path.join(path_cwd, 'res', 'mods', 'replays_manager.zip'), 'DATA')] pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='Name EXE', debug=True, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, # если поставить True, то приложение будет запускаться с консолью, иногда удобно для отладки icon=os.path.join(path_cwd, 'res\\res_image\\main.ico')) Для сборки запустить build.bat
-
Убедил, доделаю "фичи" которые планировал, сделаю документацию и комменты по коду и сделаю репазиторий публичным
-
для начала я могу помочь желающим с сборками, а после внутреннего дозревания и реализации того, чего я еще не сделал открою доступ) Если честно то больше стыдно показывать исходники из-за быдло кода. Вот доведу до ума и открою, или когда пойму что больше не хочу этим заниматься
-
Всем привет. В свое время я удачно познакомился с wxPython и во время исследования возможностей библиотеки, я решил сделать свой небольшой проект, а именно установщик модификаций. Первая версия, получилась красивой, но это было тупиковое развитие, я это понял слишком поздно и бросил проект. Спустя месяца 2, найдя в себе новые силы я взялся за stage 2 :) и к моему удивлению получилось довольно интересно, а самое главное быстро. На весь проект я потратил около 10 часов + на первый вариант 10-15 часов. В итоге получилось вот это: Шаг 1 - окно приветствия Шаг 2 - выбор папки с игрой, поиск танков осуществляется автоматически, вычитываем preferences.xml от Game center. По умолчанию выбирается current_game WOT Шаг 3 - выбор модов для установки, на каждый мод в списке есть тултип с скриншотом и текстовым описанием. Тултип появляется при наведении на нужный мод. Если нет картинки и текста, выводится дефолтное изображение. Панель адаптивная и вмещает в себя столько модов, сколько необходимо, вертикальный скроллбар появляется автоматически. Шаг 4 - отображение выбранных модификаций к установке Шаг 5 - дополнительные опции, можно Шаг 6 - подготовка клиента и установка модов. Прогресс бар тоже адаптивный, как и журнал событий. Установка выполняется в отдельном потоке, приложение не зависает. В итоге мы имеем инсталятор сделанный стандартными средствами, без wxWizard. wxPython единственная внешняя либа, все остальное из коробки. Упаковка в exe осуществляется при помощи pyinstaller, собранный ехе файл содержит в себе все необходимое и не требует установки, принцип простой: скачал > установил моды > удалил инсталятор. Никаких следов, записей в реестр не производится, в appdata создается temp папка, которая автоматом подчищается при штатном прекращении работы. В случае, если кому-то из мододелов или желающих сделать свой модпак это интересно, пишите в личку или сюда. Хочется чтобы проект жил, а не лег в репазитории. Для этой демо версии, я взял модификации от @POLIROID с его разрешения. Скачать демо версию можно тут, ссылка на VirusTotal тут Проект не коммерческий, ссылка на донат ведет сюда, а Youtube сюда Поделиться исходниками пока не готов) Спасибо за внимание. Отмечу, я не программист, просто мне нравится Python :)
-
Если кому интересно: https://github.com/p-virex/parse_replay/blob/master/parse_replay.py by Python3
-
Спасибо) уже сделал) правда это мод и там есть импорты из клиента, но да ладно
-
Всем привет! Я уверен, что эта тема жеванная-пережеванная, НО, не судите строго, поиск по форуму (гуглу) не дал исчерпывающего ответа на мой вопрос. Как распарсить реплей и получить данные за бой? (урон, ники и т.д.) Координаты танков и прочее мне не надо. Есть такая подсказка, но не охота тратить время на написание своего парсера, я уверен есть готовый. https://wiki.vbaddict.net/pages/Data_Packets 404 ошибка :) python знаю хорошо, есть опыт Спасибо