Jump to content
Korean Random
Polyacov_Yury

Инструменты для работы с текстами в WoT

Recommended Posts

По-видимому правили и нарушили синтаксис (запятые/скобки/экранирование кавычек) - в этом случае отображает стандарт 

Да ничего не правил.Как было в 0.9.14 еще,так же осталось.Мжет глюк какой-то.Править то легко там,я в курсе,ничего не нарушил 100%

Share this post


Link to post

Short link
Share on other sites

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. Можно было вообще пустую строку оставить, оставил так, чтобы было видно формат строки...
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

 

 

Походу кто-то не вдавался в смысл кода вообще, просто сагрился на строку.
Вы абсолютно правы, сглупил, извините :) Почитал код, он у вас действительно довольно интересный, только в архиве __init__.py© по идее надо было в папку mods упаковать :exc:

Как у вас дела, ребята? Никто ничего не сломал?)

P.S. Судя по голосовалке в шапке, большинство не против того, чтобы модик пока что пожил по старому местоу пребывания. Что ж, значит, так тому и быть.
P.P.S. Пофиксил папку с конфигами.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

только в архиве __init__.pyc по идее надо было в папку mods упаковать

Само собой разумеется. Я не заморачивался с путями, а просто скинул файлы. Вообще это изначально делалось "for personal use", поэтому немного сыровато, но раз уж такое дело...

Там немного бы переделать надо, и допилить кой-чего... Но в целом пока вроде работает.

Share this post


Link to post

Short link
Share on other sites

 

 

Но в целом пока вроде работает.
И замечательно :) А Реплейсор все-таки (как и другие модики) поломались с патчем не из-за перезаписи CameraNode, а из-за изменившегося порядка импорта скриптов, но это все мелочи.

P.S. Еще раз перезалил архив. Просьба протестировать работоспособность.

Share this post


Link to post

Short link
Share on other sites

Доброго времени суток. Не могли бы Вы объяснить, что означает - Исправил путь к папке с конфигами? Конфиги лежат в папке res_mods\configs\ButtonReplacer и успешно загружаются, как и раньше, в питон.лог пишется строка - config directory not found, как и раньше... Из изменений заметил только одно - раньше мой файл BattleButton.cfg имел кодировку UTF-8 BOM и замечательно загружался и работал, после вчерашнего обновления скрипта - по прежнему загружается, но кнопка не меняется. После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает...

Share this post


Link to post

Short link
Share on other sites

 

 

Исправил путь к папке с конфигами?
Папка была прописана по пути scripts/client/gui/mods. Это было исправлено.

 

 

После продолжительных плясок с бубном выяснил - если файл перекодировать в ANSI - всё работает...
У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках...

Share this post


Link to post

Short link
Share on other sites

Спасибо за мод, и за труд. Хотелось бы спросить, для чего теперь папка с конфигом раздвоилась, и находится в двух местах?

Share this post


Link to post

Short link
Share on other sites

У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках...

Имею на руках два файла - один UTF-8 BOM - не работает, другой (из вашего архива) ANSI (ANSI=Windows-1251) - работает, хотя в предыдущей версии утф работал, чудеса... Проверял несколько раз, глюк устойчивый, прилагаю эти файлы, чтобы не быть голословным - 

Share this post


Link to post

Short link
Share on other sites

У моих файлов она вообще - Windows-1251, причем у всех и во всех модиках...

Игра считает, что xml в кодировке UTF-8 w/o BOM. ПО крайней мере, ResMgr.

UTF-8 BOM

BOM - это байты в начале файла, показывают что-то типа порядка байтов, точно сказать не могу, загугли.

Эта самая марка мешает конфигу читаться. Кстати, для тех кто не особо с инглишем дружит, w/o == without == без. Так что UTF-8 w/o BOM и UTF-8 BOM диаметрально противоположные вещи.

Share this post


Link to post

Short link
Share on other sites

 

 

Игра считает, что 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

Share this post


Link to post

Short link
Share on other sites

Эта самая марка мешает конфигу читаться. Кстати, для тех кто не особо с инглишем дружит, w/o == without == без. Так что UTF-8 w/o BOM и UTF-8 BOM диаметрально противоположные вещи.

пардон, не очень корректно написал название кодировки, забыл написать минус )), имелось ввиду утф без бом естественно, та же кодировка, что и у хвм-овских конфигов.

Edited by Witos2002

Share this post


Link to post

Short link
Share on other sites

Не совсем. Питон, в частности, 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 by GPCracker
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
сомневаюсь, что тебе удастся сходу понять, как оно работает.

На самом деле зря, там в принципе ничего сложного нету, хотя подход довольно интересный.

 

общий смысл ты понял

Ну да, тут все же тоже нет ничего сложного, просто стиль написания непривычный :) А вообще благодаря этой строчке у меня код чтения конфигов сжался ровно в два раза. Как выяснилось,

if ';' in sect['text'].sWideString:

вообще не нужен, потому что на этапе написания мода str.split(';'), натравленный на строку, в которой нет точки с запятой, возвращал пустой список о_О

 

P.S. Да, щелчок по носу получился у Вас знатный, даже приятно стало :) Знаете, как если проиграл кому-то, но тебя так виртуозно обыграли, что не обижаешься, а проникаешься уважением к противнику :no1:

 

 

P.P.S. В шапке обновились все архивы.

Edited by Polyacov_Yury
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

На самом деле зря, там в принципе ничего сложного нету, хотя подход довольно интересный.

Ну как сказать... Для кого-то этот код не такой уж и понятный.

Подход сводится к тому, что в самом моде есть внутренний дефолтный конфиг, в котором определены данные и их тип, а чтение в большинстве случаев пишется в 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 by GPCracker

Share this post


Link to post

Short link
Share on other sites

 

 

приличное количество всяких разный фишек и плюшек
Я даже знаю, как работает все перечисленное :) Но вот научиться, а уж тем более - привыкнуть их применять - задачка та еще :gg:

 

 

Что-то тут не так...
Код этот написан где-то год назад, тогда пользователи ругались, что строки с ; не считываются и не выводятся. Что, почему, зачем - я тогда не разбирался. Просто воткнул костыль и забыл :) Тогда то ли питон по-другому работал, то ли, что вероятнее - я :heh:

 

P.S. Что-то в ГуглоАналитике один я свечусь. Странно... :dots:

Share this post


Link to post

Short link
Share on other sites

Что-то в ГуглоАналитике один я свечусь. Странно...

 

Ничего странного...скрипт-то не работает)))

 

python.log

Share this post


Link to post

Short link
Share on other sites

Ничего странного...скрипт-то не работает)))

 

attachicon.gifpython.log

 

так не у всех - 

конфиги лежат в res_mods\configs\ButtonReplacer.

загрузчик - CameraNode.pyc из комплекта к этому моду.

Edited by Witos2002

Share this post


Link to post

Short link
Share on other sites

Товарищи ребята, дамы и господа. Благодаря NooBooL в коде обнаружен небольшой досадный баг. Исправление будет выпущено в самое ближайшее время.

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...