Привет всем. Сделал небольшой патч который фиксит русский язык (да-да, можно использовать кириллицу для Patchus Maximus/Reproccer, но об этом ниже) во всех SkyProc библиотеках. Сразу скажу это не вирус, для параноиков - измененный файл приведу ниже, можете собрать и внедрить сами.
SkyProc преамбула:
Автор библиотеки вообще начисто забил о символах отличных от латиницы, в итоге строки читаются так:
int input;
while ((input = stream.read()) != 0) {
string += (char) input;
}
text.setString(string);
Игровые строки для русской версии хранятся в windows-1251 в Java строки UTF-16 - простое приведение типа не конвентирует в UTF-16 автоматом, в итоге библиотека читает каракули вместо текста.
Простой патч конвентирует кодировки в нужный формат (UTF-16) при чтении и обратно в Windows-1251 при записи. Будет работать только для русской версии игры
Использование c PatchusMaximus (PM):
1) Сначала надо установить системный язык для программ не поддерживающих юникод в Русский, иначе PM не будет читать корректно XML файлы (Спасибо тендо за FileReader/FileWriter)
2) XML файлы в которых будет кириллица должны быть перекодированы в Windows-1251 (например через Notepad++), так же надо заменить в этих файлах строку в начале: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> на <?xml version="1.0" encoding="windows-1251" standalone="yes" ?>
3) Скопировать Skyrim_Russian.STRINGS, Skyrim_Russian.DLSTRINGS... и все остальные и переименовать в Skyrim_English.STRINGS... (Снова спасибо тендо за то что сделал настройку языка в патчере которая ни на что не влияет, и еще он использует какую-то левую или собственную сборку SkyProc)
4) Не помню было ли это указано, но PM принимает в расчет нижний/верхний регистр. Так что <substring>Меч</substring> не найдет имя "Супер меч"
5) OutputLanguage PMxml/GeneralSettings.xml влияет на строки в PMxml/Languages.xml, так чтобы превратить [Broadsword] в [Палаш] добавьте в файл Languages.xml:
<language>
<languageID>RUSSIAN</languageID>
<stringBinding>
<identifier>Broadsword</identifier>
<outputString>Палаш</outputString>
</stringBinding>
</language>
6) Language опция в настройках самого патчера бесполезна и ни на что не влияет.
Инсталляция/Установка и прочее
По ссылке - архив, в нем две папки:
1) General - Скомпилированный модифицированный файл из skyproc-a и исходный код
2) Patched PatchusMaximus - сам PM с внедренным патчем, заменить им оригинальный
Использование с другими библиотеками:
Откройте нужный JAR архив в архиваторе (не распаковывайте), например в 7z - найдете директорию skyproc (если архив содержит skyproc.jar - откройте его тоже) и просто перетащите SubStringPointer.class из Generic/Compiled в архив, далее обновите архив если предложит. Все.
Как скомпилировать файл самому подробно рассказывать не буду - скачайте исходники skyproc, затем замените SubStringPointer.java на мой, скомпилируйте, на выходе получится все тот же SubStringPointer.class
Ссылка на архив
От себя хочу сказать спасибо за переводы
Изменено: DJ_Kovrik, 26 Февраль 2015 - 11:56