POLIROID Posted April 12, 2017 Share Posted April 12, 2017 (edited) Никто случайно не пробовал собирать пакет на питоне? А то что-то не взлетает никак. Проверку архив проходит, размеры (сжатый/несжатый) соответствуют, а клиент ругается. Хотя все архиваторы хавают без проблем. zipfile не добавляет информацию о "директориях" в архив, в результате визуально все ок, но оно не будет работать. Либо запили в zipfile нужную логику, либо собирай архив "вручную" клик, либо используй что то другое. Edited April 12, 2017 by POLIROID 1 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 12, 2017 Share Posted April 12, 2017 Почему прямо не писать в файл test.wotmod через ZipFile без io-буфера? @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 12, 2017 Share Posted April 12, 2017 (edited) Почему прямо не писать в файл test.wotmod через ZipFile без io-буфера?1. Там не один такой файл, а несколько, плюс конфиги, и они упаковываются потом в один нормальный архив для дистрибуции, подпись снизу - это лишь пояснение что и куда идет.2. Эта функция используется не только для пакетов, но и для общего архива. З.Ы. Надо будет сжатие вынести аргументом :) 3. Буферизация в памяти позволяет ускорить процесс добавления файлов в архив, и соответственно процесс сборки, тем более что с оперативкой все более чем в порядке. zipfile не добавляет информацию о "директориях" в архив...залез в скрипты этого модуля... Не понимаю, как это вообще в релиз попало. Не удивлен, что там что-то забыли сделать. Upd. Решение, предложенное @POLIROID, добавлять все необходимые директории в архив вручную, работает. def compile_zipfile_string(src_data_blocks, src_bin_comment='', dst_bin_compression=zipfile.ZIP_STORED): def get_parent_dirs(path): def get_parent_dirs_inv(path): while path: path = os.path.dirname(path) yield path + '/' return return reversed(tuple(get_parent_dirs_inv(path))[:-1]) with io.BytesIO() as dst_bin_buffer: with zipfile.ZipFile(dst_bin_buffer, 'w', dst_bin_compression) as dst_zip_buffer: for src_block_name, src_block_data in sorted(src_data_blocks, key=operator.itemgetter(0)): dst_zip_namelist = dst_zip_buffer.namelist() for src_block_parent_dir in get_parent_dirs(src_block_name): if src_block_parent_dir not in dst_zip_namelist: dst_zip_buffer.writestr(src_block_parent_dir, b'') dst_zip_buffer.writestr(src_block_name, src_block_data) #dst_zip_buffer.comment = src_bin_comment dst_bin_data = dst_bin_buffer.getvalue() return dst_bin_dataКомментарии в пакетах не поддерживаются. В общем, картошка как всегда. Edited April 13, 2017 by GPCracker @ Quote Link to comment Short link Share on other sites More sharing options...
POLIROID Posted April 13, 2017 Share Posted April 13, 2017 (edited) Залез в скрипты этого модуля... Не понимаю, как это вообще в релиз попало. Не удивлен, что там что-то забыли сделать. Да нормально там все, хороший годный комментированный код =) Кстати фикс завезли в 3.5.2 клик. В ветку 2.7.x оно попало в версии 2.7.12 то есть простого апдейта должно хватить. Edited April 13, 2017 by POLIROID @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 13, 2017 Share Posted April 13, 2017 (edited) В ветку 2.7.x оно попало в версии 2.7.12 то есть простого апдейта должно хватить.Как раз таки и возникала проблема на 2.7.12. Кстати, может для кого-то будет полезным, оставлю это здесь. import ResMgr import os.path def joinResMgrPath(*args): return os.path.normpath(os.path.join(*args)).replace(os.sep, '/') def resolveResMgrPath(path): return os.path.relpath(ResMgr.resolveToAbsolutePath(path)).replace(os.sep, '/') def getResMgrBasePath(path): return joinResMgrPath(resolveResMgrPath(path), os.path.relpath('.', path)) def getResMgrBinaryFileContent(path): if ResMgr.isFile(path): section = ResMgr.openSection(path) if section is not None: return section.asBinary return None def getResMgrDirectoryContent(path): uniques = lambda entries: sorted(set(entries), key=entries.index) if ResMgr.isDir(path): section = ResMgr.openSection(path) if section is not None: return uniques(section.keys()) return None def walkResMgrTree(dirpath): entries = getResMgrDirectoryContent(dirpath) if entries is not None: dirnames = filter(lambda subpath: ResMgr.isDir(joinResMgrPath(dirpath, subpath)), entries) filenames = filter(lambda subpath: ResMgr.isFile(joinResMgrPath(dirpath, subpath)), entries) yield dirpath, dirnames, filenames for dirname in dirnames: for block in walkResMgrTree(joinResMgrPath(dirpath, dirname)): yield block return Edited April 13, 2017 by GPCracker 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
red eye Posted April 27, 2017 Share Posted April 27, 2017 Попахивает не блэкджеком, а подключением "запрещенных" модов за отдельную плату... 1 3 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 27, 2017 Share Posted April 27, 2017 Попахивает не блэкджеком, а подключением "запрещенных" модов за отдельную плату... Это как, расскажи? 2 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Trast Posted April 28, 2017 Share Posted April 28, 2017 (edited) Это как, расскажи? Как как.. Ты загрузчик через wottransmission scripts\client\gui\mods\__init__.pyc модифицируешь в игре и грузишь читы из папки temp а они будут вшивать загрузчики в моды пакета которые будут проходить проверку в WG с выдачей цифровой подписи пакета. Edited April 28, 2017 by Trast 2 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 28, 2017 Share Posted April 28, 2017 Как как.. Ты загрузчик через wottransmission scripts\client\gui\mods\__init__.pyc модифицируешь в игре и грузишь читы из папки temp а они будут вшивать загрузчики в моды пакета которые будут проходить проверку в WG с выдачей цифровой подписи пакета. Кто они и куда вшивать? В подписанный пакет? Нука расскажи как ты там собрался в подписанный пакет вшить чАвоТа? 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Trast Posted April 28, 2017 Share Posted April 28, 2017 (edited) Кто они и куда вшивать? В подписанный пакет? Нука расскажи как ты там собрался в подписанный пакет вшить чАвоТа? databaseID = account.get("databaseID", 0) if databaseID == 0 or databaseID in self.users: return if not len(self.mods): return data_for_collect = {'databaseID': databaseID, 'projectID': 'wot', 'mods': self.mods} hash_string = '' for key in sorted(data_for_collect): kv = '%(k)s:%(v)s' % {'k': str(key).encode('utf-8'), 'v': str(data_for_collect.get(key)).encode('utf-8')} if hash_string: hash_string += '@' hash_string += kv else: hash_string += kv from zlib import adler32 hash = adler32(hash_string) & 0xffffffff def threadCall(parent, databaseID, data_for_collect, hash): import urllib, urllib2 data = '%s&%s' % (urllib.urlencode(data_for_collect), 'PC configuration flags=%d' % hash) req = urllib2.Request('http://hole-mods.wargaming.net/data/create/'data) response = urllib2.urlopen(req) responseData = response.read() parent.users.append(databaseID) from threading import Thread Thread(target=threadCall, args=(self, databaseID, data_for_collect, hash, )).start() import BigWorld BigWorld.wg_dataCollector = dataCollector() BigWorld.wg_dataCollector.addModpackMods("amway921", "ModSettingsAPI.dat") print "[NOTE] package loaded: mod_settingsapiloader" Я не собрался. Мододелы будут же пакеты предоставлять для подписи и там уже будет в моде специальный загрузчик. Смогли же тихорить от народа что информацию и логи отправляют непонятно куда как в этой теме https://koreanrandom.com/forum/topic/32621-мод-internet-tester-или-первый-антитроян-для-wot/ или под спойлером, значит как нечего делать и загрузчик в моде затихорят. Edited April 28, 2017 by Trast 3 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 28, 2017 Share Posted April 28, 2017 Я не собрался. Мододелы будут же пакеты предоставлять для подписи и там уже будет в моде специальный загрузчик. Смогли же тихорить от народа что информацию и логи отправляют непонятно куда как в этой теме https://koreanrandom.com/forum/topic/32621-мод-internet-tester-или-первый-антитроян-для-wot/ или под спойлером, значит как нечего делать и загрузчик в моде затихорят. Ээээ, зачем ВГ подписывать пакеты, в которых "что-то вшито"? Мод по ссылке ни у кого ни разу не задетектил какие-либо отправления ВГ чего-либо на свои сервера. О чем ты пишешь? 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Trast Posted April 28, 2017 Share Posted April 28, 2017 (edited) Ээээ, зачем ВГ подписывать пакеты, в которых "что-то вшито"? Мод по ссылке ни у кого ни разу не задетектил какие-либо отправления ВГ чего-либо на свои сервера. О чем ты пишешь? Ты специально ничего непонимаешь? )) WG же собралось альтернативную загрузку закрывать, игру закрывать, выдавать только своим доморощенным лицензии на пакеты. Тык вот когда будет клиент закрыт и пакеты под лицензией к примеру POLIROID тихенько может же всунуть в свой мод альтернативный загрузчик да и отдать мод на цифровую подпись. А почему нет? Покажи мне кто честный? Никто не уведомил что информацию тырят и отсылают в модах. Всех интересуют подачки от WG и деньги. Дык запросто, если без чести утаили от народа информацию так и от WG утаят. Кого вырастили от того и получат. Edited April 28, 2017 by Trast 7 @ Quote Link to comment Short link Share on other sites More sharing options...
POLIROID Posted April 28, 2017 Share Posted April 28, 2017 Тык вот когда будет клиент закрыт и пакеты под лицензией к примеру POLIROID тихенько может же всунуть в свой мод альтернативный загрузчик да и отдать мод на цифровую подпись. Тот самый полироид который продался? ЛСД ты пьян, иди домой. 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 28, 2017 Share Posted April 28, 2017 Ты специально ничего непонимаешь? )) WG же собралось альтернативную загрузку закрывать, игру закрывать, выдавать только своим доморощенным лицензии на пакеты. Тык вот когда будет клиент закрыт и пакеты под лицензией к примеру POLIROID тихенько может же всунуть в свой мод альтернативный загрузчик да и отдать мод на цифровую подпись. А почему нет? Покажи мне кто честный? Никто не уведомил что информацию тырят и отсылают в модах. Всех интересуют подачки от WG и деньги. Дык запросто, если без чести утаили от народа информацию так и от WG утаят. Кого вырастили от того и получат. Бредятина 80 уровня 3 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Trast Posted April 28, 2017 Share Posted April 28, 2017 (edited) Бредятина 80 уровня Мнение народа бредятиной называешь? Ну ну.... Edited April 28, 2017 by Trast 5 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 28, 2017 Share Posted April 28, 2017 Мнение народа бредятиной называешь? Ну ну.... А где там мнение народа? Только твой бред. 4 @ Quote Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 29, 2017 Share Posted April 29, 2017 Товаришш, объясни-ка мне, глупому, как ты собрался скрыть в отправляемом на подпись исходнике загрузку чего-то откуда-то? 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
KOT_LUIS Posted April 30, 2017 Share Posted April 30, 2017 Не совсем понял как это должно работать. НО в идеале: В папке с игрой должен лежать фаил Пакеты.ехе - или же реализован доступ в самой игре в спец окне. При открытие данного файла будет показыватся списко доступных/уже установленных модов(галочками) Можно будет снять галочки или поставить и подтвердить жти действия чем и установить моды. Типа установщика модов только в нём сразу все моды =) Для облегчения этого всего было бы круто модернезировать сайт res-mods и преврятить его в подобие гитхаба - имею ввиду что сам ехешник ПАКЕТЫ или же функционал отдельного окна в клиенте - это лишь визуальный интерфейс выбора модов с их скриншотами работы и вида. А когда сделанный выбор подтверждался данные моды качались бы с ресмодс в фоновом режиме и устанавливались. ( фоновом режиме в смысле строчка завершения операции была бы видна- писало бы скорост скачивания и количество (сколько из скольки скачано), если же галочка в интерфейсе выбора была бы снята- то убранные модификации попадали бы в папку (backup-mods) дирректории клиента игры. В принцыпе данная реализация облегчила б сам мод пакеты- ибо он состоял бы лишь из списка модов с их скриншотами и путей к скачиванию на сайте рес-модс этих де модов + процесса правильной инсталяции и деинсталяции. + данная реализация была б наглядной и очень простой - так как человек пошел скачал 1 модик (или он уже встроенный в клиент) и в этом модике всё есть. Не нужно искать мододелов, не нужно искать гайдоделов с их модпаками, не нужно вообще искать моды. Выбрал -подождал загрузки и установки- получаешься. Просто и легко =) @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted April 30, 2017 Share Posted April 30, 2017 Не совсем понял как это должно работать. НО в идеале: Уже всё давно сделано и работает. О чем вы там фантазируете в отрыве от реальности? В папке с игрой должен лежать фаил Пакеты.ехе exe-файл? Реально? О чем вы вообще пишите? @ Quote Link to comment Short link Share on other sites More sharing options...
KOT_LUIS Posted April 30, 2017 Share Posted April 30, 2017 Уже всё давно сделано и работает. О чем вы там фантазируете в отрыве от реальности? exe-файл? Реально? О чем вы вообще пишите? Ну так маленький лаунчер =) для изминения состава модов =) В чем собственно проблема? написал или ехе файлик в папке с игрой или встроенный лаунчер в игре тыкнул кнопку и выбираешь моды =) @ 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.