krok65 Posted April 1, 2016 Share Posted April 1, 2016 По-видимому правили и нарушили синтаксис (запятые/скобки/экранирование кавычек) - в этом случае отображает стандарт Да ничего не правил.Как было в 0.9.14 еще,так же осталось.Мжет глюк какой-то.Править то легко там,я в курсе,ничего не нарушил 100% @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 1, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 23, 2016 Author Share Posted April 23, 2016 Походу кто-то не вдавался в смысл кода вообще, просто сагрился на строку. Вы абсолютно правы, сглупил, извините :) Почитал код, он у вас действительно довольно интересный, только в архиве __init__.py© по идее надо было в папку mods упаковать Как у вас дела, ребята? Никто ничего не сломал?)P.S. Судя по голосовалке в шапке, большинство не против того, чтобы модик пока что пожил по старому местоу пребывания. Что ж, значит, так тому и быть.P.P.S. Пофиксил папку с конфигами. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 23, 2016 Share Posted April 23, 2016 только в архиве __init__.pyc по идее надо было в папку mods упаковатьСамо собой разумеется. Я не заморачивался с путями, а просто скинул файлы. Вообще это изначально делалось "for personal use", поэтому немного сыровато, но раз уж такое дело... Там немного бы переделать надо, и допилить кой-чего... Но в целом пока вроде работает. @ Quote Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 23, 2016 Author Share Posted April 23, 2016 Но в целом пока вроде работает. И замечательно :) А Реплейсор все-таки (как и другие модики) поломались с патчем не из-за перезаписи CameraNode, а из-за изменившегося порядка импорта скриптов, но это все мелочи.P.S. Еще раз перезалил архив. Просьба протестировать работоспособность. @ Quote Link to comment Short link Share on other sites More sharing options...
Witos2002 Posted April 24, 2016 Share Posted April 24, 2016 Доброго времени суток. Не могли бы Вы объяснить, что означает - Исправил путь к папке с конфигами? Конфиги лежат в папке res_mods\configs\ButtonReplacer и успешно загружаются, как и раньше, в питон.лог пишется строка - config directory not found, как и раньше... Из изменений заметил только одно - раньше мой файл BattleButton.cfg имел кодировку UTF-8 BOM и замечательно загружался и работал, после вчерашнего обновления скрипта - по прежнему загружается, но кнопка не меняется. После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает... @ Quote Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 24, 2016 Author Share Posted April 24, 2016 Исправил путь к папке с конфигами? Папка была прописана по пути scripts/client/gui/mods. Это было исправлено. После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает... У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках... @ Quote Link to comment Short link Share on other sites More sharing options...
E_Spase Posted April 24, 2016 Share Posted April 24, 2016 Спасибо за мод, и за труд. Хотелось бы спросить, для чего теперь папка с конфигом раздвоилась, и находится в двух местах? @ Quote Link to comment Short link Share on other sites More sharing options...
Witos2002 Posted April 24, 2016 Share Posted April 24, 2016 У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках... Имею на руках два файла - один UTF-8 BOM - не работает, другой (из вашего архива) ANSI (ANSI=Windows-1251) - работает, хотя в предыдущей версии утф работал, чудеса... Проверял несколько раз, глюк устойчивый, прилагаю эти файлы, чтобы не быть голословным - @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 24, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 24, 2016 Author Share 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 Link to comment Short link Share on other sites More sharing options...
Witos2002 Posted April 24, 2016 Share Posted April 24, 2016 (edited) Эта самая марка мешает конфигу читаться. Кстати, для тех кто не особо с инглишем дружит, w/o == without == без. Так что UTF-8 w/o BOM и UTF-8 BOM диаметрально противоположные вещи. пардон, не очень корректно написал название кодировки, забыл написать минус )), имелось ввиду утф без бом естественно, та же кодировка, что и у хвм-овских конфигов. Edited April 24, 2016 by Witos2002 @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 25, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 25, 2016 Author Share 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 Link to comment Short link Share on other sites More sharing options...
GPCracker Posted April 25, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 25, 2016 Author Share Posted April 25, 2016 приличное количество всяких разный фишек и плюшек Я даже знаю, как работает все перечисленное :) Но вот научиться, а уж тем более - привыкнуть их применять - задачка та еще Что-то тут не так... Код этот написан где-то год назад, тогда пользователи ругались, что строки с ; не считываются и не выводятся. Что, почему, зачем - я тогда не разбирался. Просто воткнул костыль и забыл :) Тогда то ли питон по-другому работал, то ли, что вероятнее - я P.S. Что-то в ГуглоАналитике один я свечусь. Странно... @ Quote Link to comment Short link Share on other sites More sharing options...
NooBooL Posted April 27, 2016 Share Posted April 27, 2016 Что-то в ГуглоАналитике один я свечусь. Странно... Ничего странного...скрипт-то не работает))) python.log @ Quote Link to comment Short link Share on other sites More sharing options...
Witos2002 Posted April 27, 2016 Share Posted April 27, 2016 (edited) Ничего странного...скрипт-то не работает))) python.log так не у всех - конфиги лежат в res_mods\configs\ButtonReplacer. загрузчик - CameraNode.pyc из комплекта к этому моду. Edited April 27, 2016 by Witos2002 @ Quote Link to comment Short link Share on other sites More sharing options...
sasha_1_nm_ru Posted April 27, 2016 Share Posted April 27, 2016 У меня все вроде работает @ Quote Link to comment Short link Share on other sites More sharing options...
Polyacov_Yury Posted April 27, 2016 Author Share Posted April 27, 2016 Товарищи ребята, дамы и господа. Благодаря NooBooL в коде обнаружен небольшой досадный баг. Исправление будет выпущено в самое ближайшее время. @ 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.