krok65 79 #322424 Posted April 1, 2016 По-видимому правили и нарушили синтаксис (запятые/скобки/экранирование кавычек) - в этом случае отображает стандарт Да ничего не правил.Как было в 0.9.14 еще,так же осталось.Мжет глюк какой-то.Править то легко там,я в курсе,ничего не нарушил 100% Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #322446 Posted April 1, 2016 res_mods = os.path.normpath('./res_mods/0.9.0')Походу кто-то не вдавался в смысл кода вообще, просто сагрился на строку.Там идет чтение xml на предмет пути, содержащего res_mods. for key, section in ResMgr.openSection('../paths.xml/Paths').items(): if section.asString.find('res_mods') != -1: res_mods = os.path.normpath(section.asString)Код, да, писал я когда еще был относительно далекий 0.9.0. Можно было вообще пустую строку оставить, оставил так, чтобы было видно формат строки... 2 Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #324912 Posted April 23, 2016 Походу кто-то не вдавался в смысл кода вообще, просто сагрился на строку. Вы абсолютно правы, сглупил, извините :) Почитал код, он у вас действительно довольно интересный, только в архиве __init__.py© по идее надо было в папку mods упаковать Как у вас дела, ребята? Никто ничего не сломал?)P.S. Судя по голосовалке в шапке, большинство не против того, чтобы модик пока что пожил по старому местоу пребывания. Что ж, значит, так тому и быть.P.P.S. Пофиксил папку с конфигами. 1 Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #324920 Posted April 23, 2016 только в архиве __init__.pyc по идее надо было в папку mods упаковатьСамо собой разумеется. Я не заморачивался с путями, а просто скинул файлы. Вообще это изначально делалось "for personal use", поэтому немного сыровато, но раз уж такое дело... Там немного бы переделать надо, и допилить кой-чего... Но в целом пока вроде работает. Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #324922 Posted April 23, 2016 Но в целом пока вроде работает. И замечательно :) А Реплейсор все-таки (как и другие модики) поломались с патчем не из-за перезаписи CameraNode, а из-за изменившегося порядка импорта скриптов, но это все мелочи.P.S. Еще раз перезалил архив. Просьба протестировать работоспособность. Quote Share this post Link to post Short link Share on other sites
Witos2002 21 #324969 Posted April 24, 2016 Доброго времени суток. Не могли бы Вы объяснить, что означает - Исправил путь к папке с конфигами? Конфиги лежат в папке res_mods\configs\ButtonReplacer и успешно загружаются, как и раньше, в питон.лог пишется строка - config directory not found, как и раньше... Из изменений заметил только одно - раньше мой файл BattleButton.cfg имел кодировку UTF-8 BOM и замечательно загружался и работал, после вчерашнего обновления скрипта - по прежнему загружается, но кнопка не меняется. После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает... Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #324971 Posted April 24, 2016 Исправил путь к папке с конфигами? Папка была прописана по пути scripts/client/gui/mods. Это было исправлено. После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает... У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках... Quote Share this post Link to post Short link Share on other sites
E_Spase 12 #324977 Posted April 24, 2016 Спасибо за мод, и за труд. Хотелось бы спросить, для чего теперь папка с конфигом раздвоилась, и находится в двух местах? Quote Share this post Link to post Short link Share on other sites
Witos2002 21 #324993 Posted April 24, 2016 У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках... Имею на руках два файла - один UTF-8 BOM - не работает, другой (из вашего архива) ANSI (ANSI=Windows-1251) - работает, хотя в предыдущей версии утф работал, чудеса... Проверял несколько раз, глюк устойчивый, прилагаю эти файлы, чтобы не быть голословным - Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #325004 Posted April 24, 2016 У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках...Игра считает, что xml в кодировке UTF-8 w/o BOM. ПО крайней мере, ResMgr. UTF-8 BOMBOM - это байты в начале файла, показывают что-то типа порядка байтов, точно сказать не могу, загугли. Эта самая марка мешает конфигу читаться. Кстати, для тех кто не особо с инглишем дружит, w/o == without == без. Так что UTF-8 w/o BOM и UTF-8 BOM диаметрально противоположные вещи. Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #325005 Posted April 24, 2016 Игра считает, что xml в кодировке UTF-8 w/o BOM. ПО крайней мере, ResMgr. Не совсем. Питон, в частности, ResMgr, читает строки так, как они есть. Поэтому у меня в коде как раз вот такие строчки есть: conf = ResMgr.openSection(conp.replace(vl.asString + '/', '')) if conf is not None: print 'Button Replacer: loading ' + os.path.split(conp)[1] for sect in conf.values(): sectDict[key]['textList'] = sectDict[key].get('textList', []) if ';' in sect['text'].asString: for textString in sect['text'].asString.split(';'): textString = textString.strip() if textString != '': textString = textString.decode('windows-1251') sectDict[key]['textList'].append(textString) Особое внимание на предпоследнюю строку, пожалуйста. P.S. Спасибо angelsoft и GPCracker за то, что я заметил аж два небольших бага в скриптике. Просьба перекачать архив. 'Кому интересно, что за ошибки' Обнаружил, что чуть ли не с момента написания у меня в коде чтения конфигов в одном месте нету decode, а также, что я в коде ГуглоАналитики в одном месте забыл self Quote Share this post Link to post Short link Share on other sites
Witos2002 21 #325007 Posted April 24, 2016 (edited) Эта самая марка мешает конфигу читаться. Кстати, для тех кто не особо с инглишем дружит, w/o == without == без. Так что UTF-8 w/o BOM и UTF-8 BOM диаметрально противоположные вещи. пардон, не очень корректно написал название кодировки, забыл написать минус )), имелось ввиду утф без бом естественно, та же кодировка, что и у хвм-овских конфигов. Edited April 24, 2016 by Witos2002 Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #325048 Posted April 25, 2016 (edited) Не совсем. Питон, в частности, ResMgr, читает строки так, как они есть. for textString in sect['text'].asString.split(';'): textString = textString.decode('windows-1251') Не надо так, когда можно так: sect['text'].asString --> sect['text'].asWideStringРаботает, само собой, если файл в UTF-8.Вся движуха с конфигом в моих модах описана тут, хотя сомневаюсь, что тебе удастся сходу понять, как оно работает. И вообще, это можно сделать как-то так... conf = ResMgr.openSection(conp.replace(vl.asString + '/', '')) if conf is not None: print 'Button Replacer: loading ' + os.path.basename(conp) for sect in conf.values(): if ';' in sect['text'].asWideString: sectDict[key].setdefault('textList', []).extend(filter(None, map(lambda textString: textString.strip(), sect['text'].asWideString.split(';'))))код само собой на деле не проверял, м.б. где и накосячил, но думаю общий смысл ты понял. Единственный момент, что в Python 2.7 функции map и filter возвращают результат сразу, а не итератор, как в Python 3.x, поэтому цикл здесь стартует два раза, но учитывая малое количество элементов, это в принципе не принципиально. Вообще весь прикол с WideString и UTF-8 в том, что в таком случае текст можно написать на любом языке, а не только на русском, в отличие от Windows-1251. Да и вообще, эта Windows-1251 и другие "локальные" кодировки лезут из костыльности винды. В линуксе все либо в ASCII (латиница only, считай, кодировка не важна, почти на всех (если не на всех) кодировках латиница кодируется одинаково), либо юникод. Ничего не надо перенастраивать под локаль, кроме переводов, и никому не обидно, что его язык неправильно отображается, если запускают пользователи с другой локалью. Edited April 25, 2016 by GPCracker 2 Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #325130 Posted April 25, 2016 (edited) сомневаюсь, что тебе удастся сходу понять, как оно работает. На самом деле зря, там в принципе ничего сложного нету, хотя подход довольно интересный. общий смысл ты понял Ну да, тут все же тоже нет ничего сложного, просто стиль написания непривычный :) А вообще благодаря этой строчке у меня код чтения конфигов сжался ровно в два раза. Как выяснилось, if ';' in sect['text'].sWideString: вообще не нужен, потому что на этапе написания мода str.split(';'), натравленный на строку, в которой нет точки с запятой, возвращал пустой список о_О P.S. Да, щелчок по носу получился у Вас знатный, даже приятно стало :) Знаете, как если проиграл кому-то, но тебя так виртуозно обыграли, что не обижаешься, а проникаешься уважением к противнику P.P.S. В шапке обновились все архивы. Edited April 25, 2016 by Polyacov_Yury 2 Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #325135 Posted April 25, 2016 (edited) На самом деле зря, там в принципе ничего сложного нету, хотя подход довольно интересный.Ну как сказать... Для кого-то этот код не такой уж и понятный.Подход сводится к тому, что в самом моде есть внутренний дефолтный конфиг, в котором определены данные и их тип, а чтение в большинстве случаев пишется в 1-2 строки кода, если конечно в конфиге нет кастомных типов данных, но такое там тоже предусмотрено - дописывается нужный класс данных и ридер для него. просто стиль написания непривычныйв питоне есть приличное количество всяких разный фишек и плюшек, типа однострочных выражений, типа inline-for, inline-if, есть встроенные функции типа filter, map и т.д., есть такое понятие как итератор и еще куча интересных вещей.Кстати, в Python 2.7, как я писал выше, для встроенных функций нет итераторов, поэтому их вложенностью злоупотреблять не стоит, тем более когда размеры списков, словарей и т.д., прогоняемых через конструкцию достаточно большие. В Python 3.x эту проблему решили, там на выходе итератор - "функция" (ну точнее специфичный объект, ибо ведет себя не совсем как функция, но в отличии от нее содержит yield, или реализован как специфичный класс), которая возвращает 1 результат по запросу, "ленивые вычисления" или что-то в этом духе. Загугли. В таком случае, ты разбираешь итератор когда тебе надо, и цикл выполняется однократно при этом разборе. потому что на этапе написания мода str.split(';'), натравленный на строку, в которой нет точки с запятой, возвращал пустой список о_ОЭээ... Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 'abc'.split(';') ['abc'] >>>Что-то тут не так... Edited April 25, 2016 by GPCracker Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #325136 Posted April 25, 2016 приличное количество всяких разный фишек и плюшек Я даже знаю, как работает все перечисленное :) Но вот научиться, а уж тем более - привыкнуть их применять - задачка та еще Что-то тут не так... Код этот написан где-то год назад, тогда пользователи ругались, что строки с ; не считываются и не выводятся. Что, почему, зачем - я тогда не разбирался. Просто воткнул костыль и забыл :) Тогда то ли питон по-другому работал, то ли, что вероятнее - я P.S. Что-то в ГуглоАналитике один я свечусь. Странно... Quote Share this post Link to post Short link Share on other sites
NooBooL 1,021 #325216 Posted April 27, 2016 Что-то в ГуглоАналитике один я свечусь. Странно... Ничего странного...скрипт-то не работает))) python.log Quote Share this post Link to post Short link Share on other sites
Witos2002 21 #325222 Posted April 27, 2016 (edited) Ничего странного...скрипт-то не работает))) python.log так не у всех - конфиги лежат в res_mods\configs\ButtonReplacer. загрузчик - CameraNode.pyc из комплекта к этому моду. Edited April 27, 2016 by Witos2002 Quote Share this post Link to post Short link Share on other sites
sasha_1_nm_ru 35 #325226 Posted April 27, 2016 У меня все вроде работает Quote Share this post Link to post Short link Share on other sites
Polyacov_Yury 1,667 #325230 Posted April 27, 2016 Товарищи ребята, дамы и господа. Благодаря NooBooL в коде обнаружен небольшой досадный баг. Исправление будет выпущено в самое ближайшее время. Quote Share this post Link to post Short link Share on other sites