diff --git a/README.md b/README.md index 38841b1..1001d2f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![How it looks](screenshot.png) [Español](https://github.com/Artikash/Textractor/blob/master/README_ES.md) ● [简体中文](https://github.com/Artikash/Textractor/blob/master/README_SC.md) ● -[日本語](https://github.com/Artikash/Textractor/blob/master/README_JP.md) +[日本語](https://github.com/Artikash/Textractor/blob/master/README_JP.md) ● [Русский](https://github.com/Artikash/Textractor/blob/master/README_RU.md) **Textractor** (a.k.a. NextHooker) is an open-source x86/x64 video game text hooker for Windows/Wine based off of [ITHVNR](http://www.hongfire.com/forum/showthread.php/438331-ITHVNR-ITH-with-the-VNR-engine).
Watch the [tutorial video](https://youtu.be/eecEOacF6mw) for a quick rundown on using it. @@ -60,6 +60,7 @@ If you're on this list and want your link changed let me know. - Spanish translation by [scese250](https://github.com/scese250) - Turkish translation by niisokusu - Simplified Chinese translation by [tinyAdapter](https://github.com/tinyAdapter) +- Russian translation by [TokcDK](https://github.com/TokcDK) - ITHVNR updated by [mireado](https://github.com/mireado) and [Eguni](https://github.com/Eguni) - ITHVNR originally made by [Stomp](http://www.hongfire.com/forum/member/325894-stomp) - VNR engine made by [jichi](https://archive.is/prJwr) diff --git a/README_RU.md b/README_RU.md new file mode 100644 index 0000000..1e842b8 --- /dev/null +++ b/README_RU.md @@ -0,0 +1,74 @@ +# Textractor + +![Как это выглядит](screenshot.png) + +[English/Original](https://github.com/Artikash/Textractor/blob/master/README.md) ● [Español](https://github.com/Artikash/Textractor/blob/master/README_ES.md) ● [简体中文](https://github.com/Artikash/Textractor/blob/master/README_SC.md) ● +[日本語](https://github.com/Artikash/Textractor/blob/master/README_JP.md) + +**Textractor** (a.k.a. NextHooker) это проект x86/x64 Windows/Wine программы для захвата текста из видеоигр, основанный на [ITHVNR](http://www.hongfire.com/forum/showthread.php/438331-ITHVNR-ITH-with-the-VNR-engine).
+Смотреть [обучающее видео](https://youtu.be/eecEOacF6mw) для быстрого ознакомления. + +[![Задонатить автору](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=akashmozumdar%40gmail.com&item_name=Textractor%20development¤cy_code=USD) + +## Загрузка + +Выпуски Textractor могут быть найдены [здесь](https://github.com/Artikash/Textractor/releases).
+Последний выпуск ITHVNR может быть найден [здесь](https://drive.google.com/open?id=13aHF4uIXWn-3YML_k2YCDWhtGgn5-tnO).
+Установите библиотеки Visual C redist(vc_redist.x86.exe), если получаете ошибку при запуске Textractor. + +## Возможности + +- Высокая расширяемость +- Автозахват текста из множества игровых движков (включая некоторые, неподдерживаемые в VNR!) +- Захват текста с использованием /H "hook" кодов (поддерживается большинство AGTH кодов) +- Прямое извлечение текста с использованием /R "read" кодов + +## Поддержка + +Сообщайте о любых ошибках, играх, с которыми у Textractor проблемы, запросах о новых функциях или другие предложения.
+Если у вас возникают проблемы с захватом текста из какой либо игры, скиньте на электронную почту ссылку на её загрузку или киньте её подарком в [Steam](https://steamcommunity.com/profiles/76561198097566313/) , для тестирования. + +## Расширения + +Смотрите [Проект примера расширения](https://github.com/Artikash/ExampleExtension), чтобы узнать, как создать расширение.
+Также для примера того, что делают расширения, смотрите папку extensions. + +## Вклад + +Любой вклад приветствуется! Пишите мне(автору)(нет, я не занят!) на akashmozumdar@gmail.com, если у вас есть любые вопросы о кодовой базе.
+Используйте стандартные действия для создания pull request (fork, branch, commit changes, создайте PR из своей ветки branch на мой master).
+Вклад в перевод совсем не сложен: просто переведите строки в text.cpp, также, как и этот README. + +## Компиляция + +Перед компиляцией *Textractor*, установите Visual Studio с поддержкой CMake, а также Qt версии 5.11
+Тогда вы сможете просто открыть и построить проект в Visual Studio. Запустите Textractor.exe. + +## Архитектура проекта + +Хост (смотрите папку GUI/host) внедряет texthook.dll (созданной из папки texthook) в целевой процесс и подключается к нему через два файла-канала (pipe).
+Хост пишет в hostPipe, texthook пишет в hookPipe.
+texthook ждет присоединения канала, тогда внедряет некоторые инструкции в любые выводящие текст функции (такие как TextOut, GetGlyphOutline), что вызывает пересылку поступающего в них текста черех канал.
+Дополнительная информация о хуках размещена через файл просмотра (a.k.a. section object), который сопоставленсо ссылкой на класс TextHook.
+Текст, который получает хост через канал, Текст, который хост получает через канал, затем немного обрабатывается перед отправкой обратно в графический интерфейс (GUI).
+Наконец, GUI откправляет текст расширениям, перед его отображением. + +## Разработчики + +Если вы в этом списке и хотите, чтобы ваша ссылка была изменена, сообщите об этом. +- Авторы Textractor: [Artikash](https://github.com/Artikash) и [DoumanAsh](https://github.com/DoumanAsh) +- Испанская локализация: [scese250](https://github.com/scese250) +- Турецкая локализация: niisokusu +- Китайская локализация: [tinyAdapter](https://github.com/tinyAdapter) +- Русская локализация: [TokcDK](https://github.com/TokcDK) +- Обновление ITHVNR: [mireado](https://github.com/mireado) and [Eguni](https://github.com/Eguni) +- Автор ITHVNR: [Stomp](http://www.hongfire.com/forum/member/325894-stomp) +- Автор движка VNR: [jichi](https://archive.is/prJwr) +- Обновление ITH: [Andys](https://github.com/AndyScull) +- Автор ITH: [kaosu](http://www.hongfire.com/forum/member/562651-kaosu) +- Автор библиотеки Locale Emulator: [xupefei](https://github.com/xupefei) +- Автор библиотеки MinHook: [TsudaKageyu](https://github.com/TsudaKageyu) + +## Особая благодарность + +- Всем, кто пишет о проблемах и предложения в секции Issues! diff --git a/text.cpp b/text.cpp index 37edbfc..1167fd4 100644 --- a/text.cpp +++ b/text.cpp @@ -3,6 +3,7 @@ //#define TURKISH //#define SPANISH //#define SIMPLIFIED_CHINESE +//#define RUSSIAN const char* ATTACH = u8"Attach to game"; const char* LAUNCH = u8"Launch game"; @@ -321,5 +322,124 @@ S/Q/V: 代码页/UTF-16/UTF-8 字符串 INVALID_REGEX = u8"无效的正则表达式"; CURRENT_FILTER = u8"当前过滤中: "; #endif // SIMPLIFIED_CHINESE + +#ifdef RUSSIAN + ATTACH = u8"Присоединить к игре"; + LAUNCH = u8"Запустить игру"; + DETACH = u8"Отсоединить от игры"; + ADD_HOOK = u8"Добавить хук"; + SAVE_HOOKS = u8"Сохранить хук(и)"; + SETTINGS = u8"Настройки"; + EXTENSIONS = u8"Расширения"; + SELECT_PROCESS = u8"Выберете процесс"; + ATTACH_INFO = u8R"(Если вы не видите процесс, к которому хотите присоединить, попробуйте запуск с правами администратора +Вы также можете ввести id процесса)"; + SEARCH_GAME = u8"Найти в проводнике"; + PROCESSES = u8"Процессы (*.exe)"; + CODE_INFODUMP = u8R"(Искать текст +S[codepage#]текст +ИЛИ +Введите код чтения (R-code) +R{S|Q|V}[codepage#][*deref_offset]@addr +ИЛИ +Введите код хука (H-code) +H{A|B|W|S|Q|V}[N][codepage#]data_offset[*deref_offset1][:split_offset[*deref_offset2]]@addr[:module[:func]] +Все числа, кроме кодовой страницы в шестнадцатеричном формате +Кодировка по умолчанию 932 (Shift-JIS), но она может быть изменена в настройках +A/B: codepage char little/big endian +W: UTF-16 char +S/Q/V: codepage/UTF-16/UTF-8 string +Отрицательное для data/split офсетов, ссылающихся на регистры +-4 для EAX, -8 для ECX, -C для EDX, -10 для EBX, -14 для ESP, -18 для EBP, -1C для ESI, -20 для EDI +* значит dereference pointer+deref_offset)"; + SAVE_SETTINGS = u8"Сохранить настройки"; + EXTEN_WINDOW_INSTRUCTIONS = u8R"(Перетащите сюда (.dll) файлы расширений из проводника для их добавления +(Не работает при запуске от администратора) +Перетаскивайте по списку для изменения порядка +Нажмите клавишу удаления, чтобы удалить выбранное расширение)"; + USE_JP_LOCALE = u8"Симулировать японскую локаль"; + FILTER_REPETITION = u8"Фильтр повторений"; + DEFAULT_CODEPAGE = u8"Кодировка по умолчанию"; + FLUSH_DELAY = u8"Задержка сброса"; + MAX_BUFFER_SIZE = u8"Максимальный размер буфера"; + CONSOLE = L"Консоль"; + CLIPBOARD = L"Буфер обмена"; + ABOUT = L"Textractor в." CURRENT_VERSION LR"( автор: Artikash (email: akashmozumdar@gmail.com) +Домашняя страница: https://github.com/Artikash/Textractor +Обучающее видео: https://www.youtube.com/watch?v=eecEOacF6mw +Сообщайте о любых проблемах, желаемых для добавления функциях, или задавайте вопросы, касающиеся Textractor +Сделать это вы можете домашней странице (секция issues) или через электронную почту +Исходный код доступен по лицензии GPLv3 на домашней странице проекта +I'm currently looking for a new job: email me if you know anyone hiring US software engineers +Если эта программа вам понравилась, расскажите всем о ней :))"; + CL_OPTIONS = LR"(usage: Textractor [-p{process id|"process name"}]...)"; + UPDATE_AVAILABLE = L"Доступно обновление: загрузите его на https://github.com/Artikash/Textractor/releases"; + ALREADY_INJECTED = L"Textractor: уже присоединен"; + ARCHITECTURE_MISMATCH = L"Textractor: несоответствие архитектуры: попробуйте 32-битный Textractor вместо этого"; + INJECT_FAILED = L"Textractor: невозможно присоединиться"; + LAUNCH_FAILED = L"Textractor: невозможно запустить"; + INVALID_CODE = L"Textractor: неверный код"; + INVALID_CODEPAGE = L"Textractor: невозможно конвертировать тект (неверная кодировка?)"; + PIPE_CONNECTED = u8"Textractor: канал присоединен"; + INSERTING_HOOK = u8"Textractor: вставка хука: %s"; + REMOVING_HOOK = u8"Textractor: удаление хука: %s"; + HOOK_FAILED = u8"Textractor: не удалось вставить хук"; + TOO_MANY_HOOKS = u8"Textractor: слишком много хуков: невозможно вставить"; + NOT_ENOUGH_TEXT = u8"Textractor: не достаточно текста для точного поиска"; + FUNC_MISSING = u8"Textractor: функция отсутствует"; + MODULE_MISSING = u8"Textractor: модуль отсутствует"; + GARBAGE_MEMORY = u8"Textractor: память постоянно изменяется, бесполезно читать"; + SEND_ERROR = u8"Textractor: Send ERROR (вероятно неверный H-code)"; + READ_ERROR = u8"Textractor: Reader ERROR (вероятно неверный R-code)"; + HIJACK_ERROR = u8"Textractor: Hijack ERROR"; + COULD_NOT_FIND = u8"Textractor: невозможно найти текст"; + SELECT_LANGUAGE = u8"Выберете язык"; + BING_PROMPT = u8"На какой язык переводить в Bing?"; + GOOGLE_PROMPT = u8"На какой язык переводить в Google?"; + TOO_MANY_TRANS_REQUESTS = L"Слишком много запросов для перевода: отклонено"; + TRANSLATION_ERROR = L"Ошибка при переводе"; + EXTRA_WINDOW_INFO = u8R"(Правый клик для изменения настроек +Нажмите и перетазите за края - для перемещения, или за правый-нижний угол - для изменения размера)"; + TOPMOST = u8"Поверх всех окон"; + SIZE_LOCK = u8"Фиксированный размер"; + BG_COLOR = u8"Цвет заднего фона"; + TEXT_COLOR = u8"Цвет текста"; + FONT_SIZE = u8"Размер шрифта"; + LUA_INTRO = u8R"(--[[ +ProcessSentence вызывается каждый раз, когда Textractor получает предложение с текстом. + +Param sentence: предложение полученое в Textractor (UTF-8). +Param sentenceInfo: таблица различной информации о предложении. + +При возвращении строки предложение будет изменено на эту строку. +При возвращении нуля, предложение останетсябез изменения. + +Это расширение использует несколько копий интерпретатора Lua для безопасности нити. +Модификации глобальных переменных из ProcessSentence не обязательно сохраняется. + +Параметры в sentenceInfo: +"current select": равно 0, если предложение не находится в текстовой нити, выбранной в данный момент пользователем. +"process id": id процесса, из которого предложение поступило. Равно 0, когда это консоль или буфер обмена. +"text number": номер текущей текстовой нити. Растет один за другим по мере создания текстовых нитей. 0 для консоли, 1 для буфера обмена. +--]] +function ProcessSentence(sentence, sentenceInfo) + --Ваш код здесь... +end)"; + LOAD_LUA_SCRIPT = u8"Загрузить скрипт"; + LUA_ERROR = L"Ошибка Lua: "; + REGEX_FILTER = u8"Фильтр Regex"; + INVALID_REGEX = u8"Неверный regex"; + CURRENT_FILTER = u8"Сейчас фильтруется: "; + REPLACER_INSTRUCTIONS = LR"(Этот файл делает что-то только когда используется расширение "Replacer". +Команды для замены должны выглядеть так: +|ORIG|текст_оригинала|BECOMES|текст_замены|END| +Весь текст в этом файле вне команд заменителей будет проигнорирован. +Пробелы в текст_оригинала игнорируются, но текст_замены может содержать пробелы, новые строки и пр. +Этот файл должен быть в кодировке Unicode (UTF-16 little endian).)"; + THREAD_LINKER = u8"Связыватель нитей"; + LINK = u8"Связь"; + THREAD_LINK_FROM = u8"Номер нити, от которой связывать"; + THREAD_LINK_TO = u8"Номер нити, к которой привязывать"; +#endif // RUSSIAN return 0; }();