-
Постов
89 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Календарь
Весь контент ksteel
-
Небольшие подвижки для апгрейда моей версии 3.00 до эталонной 3.01: 1. Провел небольшой анализ и дизассемблинг, я нашёл функцию FixLevelUpMessages из версии text.dll GFM 5.7 if (DAT_1002a074 == 3) скорее всего проверяет версию исполняемого файла Патчит память по адресам 0x5d9281 - 0x5d92a6 с помощью FUN_10008460 Использует функцию FUN_10008460 для записи байтов в память Адреса 0x5d9281-0x5d928a: записывает байты [0xb8, 0x38, 0x0e, 0x7a, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90] Адреса 0x5d929d-0x5d92a6: записывает байты [0xb8, 0x7c, 0x35, 0x79, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90] Далее следует Функция, которая делает патчинг памяти (вообще простой wrapper): VirtualProtect(param_1,param_3,0x40,&local_4); - снимает защиту памяти (уже есть в text.dll 3.00) _memset(param_1,(uint)param_2,param_3); - записывает байты в память (уже есть в text.dll 3.00) VirtualProtect(param_1,param_3,local_4,&local_4); - восстанавливает защиту (уже есть в text.dll 3.00) Исходя из анализа я сделал вывод, что — эта функция не что иное, как функция FillBytes, из файла HelperFunctions.cpp 2. Приступил к реализации: - создал в папке "\morr_text_dll-master\src" новенький файл levelup_fix.cpp следующего содержания (отдал дань уважения Angel Death): 3. В файле morr_text_dll.cpp в функции Initialize, добавил после других Init...() функций: 4. В файле stafx.h объявил о функции: 4. В CmakeLists.txt добавил наш новенький патч табличек: 5. Компиляция прошла без ошибок!!! Файл "потолстел" на 1кб: 6. Запуск показал, что текст при повышении уровня в наличии. УРА! п.с. прикладываю "шакального качества" ролик для ирллайф подтверждения. ФАЙЛЫ В ШАПКЕ ТЕМЫ И НА СТРАНИЦЕ ЗАГРУЗКИ TEXT.DLL ПОКА НЕ МЕНЯЛ — НУЖНЫ ТЕСТЫ! (я записывал данный ролик на оригинальной игре МТВ БЕЗ МСР И МГЕ) text.dll 3.00 to 3.01.mov angel.ini text.dll
-
Да, проблема в том, что НА ДАННЫЙ момент angel ини читается игрой только 1 раз - при запуске. Чем может обернуться постоянное обращение morrowind.exe к angel.ini - я не знаю, но гипотетически даже можно сделать полноценное меню и встроить его в меню игры, как это сделано в реализации mcm меню mwse. Отдельное меню Angel, в котором будет не только "горячая клавиша смены языка" но и другие параметры(с описанием), которые можно менять. Эти параметры сможет менять любой пользователь, даже не сведущий во всем этом "моддинге и патчинге"
-
1. Ну тем не менее, даже тестер важен для любого проекта =) 2. После внесения исправления по "сообщениям при поднятии уровня" и "переполнения буфера", я как раз таки и возьмусь за то, что буду смотреть КАК именно MCP взаимодействует с text.dll, меняет ли он в нем что-то вообще (просто вносить правки в уже скомпилированный dll файл - занятие такое, неизвестно к чему может привести. А шлюз я хочу добавить как раз для того, чтобы отладка и разработка шла легче. Чтобы каждый раз не вписывать "экспериментальный код в здоровое тело text.DLL". Добавил модуль, ввел логирование - смотришь что получается. Медленно но верно.) 3. Вы меня не поняли. Разница между mwse и text.dll большая. Попробуйте написать мод.lua, который будет переключать русскую раскладку в игре =), я вам больше скажу, он даже будет вам выдавать сообщения и писать, что он работает, он меняет раскладку, но по факту раскладка меняться не будет. Приоритет доступа text.dll к памяти игры можно разобрать в сравнении, что у игры 2 сердца. Одно morrowind.exe, а второе text.dll. одно слушает другое. В этом и прелесть русской локализации. А вот mwse это грубо говоря "Lua- construction-set, который загружается уже после того, как загрузились morrowind.exe и text.DLL, подгружая свои плагины-модули =).) Также я тоже внесу ясность: мой text.dll будет не "врагом", но "исследователем", он не будет диктовать другим разработчикам по каким правилам жить и творить. Представьте что у вас есть папка, допустим от morrowind\text._DLL\lua\. В которую вы закинули свой lua мод по "смене раскладки" и он заработал так, как вы задумали =), не зависимо от версии mwse, потому что text_DLL обучен последней версии Lua, он знает как старые команды, так и новые." И, как вы уже сказали - text.dll в английской версии нет, потому я хочу внести полную совместимость с mwse как прямую, так и обратную..... А потом Morrowind.exe через text.dll спросит Вас в недалеком будущем "хм, господин пират, а не хотите ли вы скинуть мне какой-нибудь игровой скрипт по поведению НПС в формате . json? Я и их научился читать! А вам не надоело постоянно переключать кодировку с UTF-8 на cp1251? Пишите мне скрипты сразу в UTF-8, я и её читать научился! И так далее." Про "дрожание" нпс еще совсем рано рассуждать, для начала надо сделать ядро text.dll.
-
Но в любом случае, сначала я доведу версию "моего" text.dll до эталонной 3.01, потом возможно ее чуточку модифицирую (фикс перегрузки для ребят с Тамриэль Ребилда), а потом уж сделаю а-ля шлюз, установлю зависимости доп библиотек, чтобы основной text.dll вливал в память игры помимо себя и соседние файлы (что является идеальным началом для тотального расширения инструментария text.dll) Как я вижу будущее: По поводу совместимости с mcp я принял решение оставить его "отдельным", не тащить оттуда все подряд и делать из чистого text.dll непонятную "цифровую химеру". Но добавить возможность авторам MCP добавлять свои модули через text.dll путем того же шлюза. По поводу lua: предстоит огромное количество работы, технически( пока в большей степени гипотетически) возможно убрать костыль mwse и научить Морровинд напрямую читать Lua файлы. По поводу кодировки - спорный момент, но я попытаюсь научить Морровинд читать и кодировку UTF-8, оставив при этом в нем знание родной кодировки cp1251. Идей очень много на самом деле. а за ссылки огромное спасибо!
-
Спасибо за прояснение! Теперь путаницав версиях text.dll окончательно исчезла ! Ваша команда проделала огромную работу! И я постараюсь, чтобы этот text.dll стал достойной базой для будущих творчеств мододелов и плагиностроителей ! Единственная полностью отличная версия - та о которой сказал Siberian Crab, та что весит 23 КБ (интересно что там)
-
Итак, спустя 7-8 часов анализа я готов предоставить следующий отчет исходя из источников темы про GFM на fullrest : исходя из readme и всех txt файлов в версий 5.7, 7.3.4: https://www.fullrest.ru/files/gfm5/files и исходя из readme и всех txt файлов версии 6.3.2 https://community.pcgamingwiki.com/files/file/1261-tes-iii-morrowind-general-fixes-mod/ в версиях 5.7 и 6.3.2 лежат АБСОЛЮТНО ОДИНАКОВЫЕ text.dll версии 3.01: с одной датой компиляции Sep 23 2010; один и тот же копирайт: Copyright (C) 2005; одну и ту же версию Angel, File Version 3.0.0.0 Главное отличие в них (text.dll+angel.ini) — до смешного простое, которое заключается в Angel.ini: в ini от Angel Death значение строки fix_unarmored_bug=1 в ini от Fritz значение строки fix_unarmored_bug=0 (он передал это исправление, судя по readme, полностью во власть Morrowind Code Patch, т.к. тот (со временем становился всё сильнее и обхватывать стал многое) Что это мне даёт? - Освобождение и полное спокойствие, то что моя версия 3.00 отличается от их одинакового dll всего на 0.01 - это фикс сообщений при поднятии уровня FixLevelUpMessages и никаких критических исправлений между ними не было! Ну и в оконцовке своего анализа я бы хотел добавить что я предположил, и, как я понял философии этих двух мастеров-мододелов, исходя из анализа их файлов, структуры их папок, их readme.txt и т.д.: Чтобы понять суть конфликта их философий, нужно понимать, что у этих двух мастеров были совершенно разные цели и подходы к «лечению» игры. Философия Angel Death: Хирург-Пурист (исходя из написанного в ридми) главная цель Angel Death и команды GFM 5.x заключалась в том, чтобы действовать как хирурги: вносить минимальные, но критически важные изменения, не нарушая целостности «тела» игры. Принцип «Чистоты»: Их девизом было «мухи отдельно, котлеты отдельно» о чём прямо указано в txt файле. Это означало строжайшее разделение исправлений (.esp, .dll) от любого нового или изменяющего визуал контента (моделей, текстур). Их мод должен был быть максимально совместимым с любыми другими плагинами. Ключевой Инструмент: Их главным «скальпелем» был text.dll. Они использовали его для исправления глубоких ошибок движка, которые невозможно было исправить обычным плагином, например, баг с бездоспешным боем или отсутствующие сообщения при повышении уровня. Стратегия: Они создавали фундамент, на который другие моддеры могли бы безопасно ставить свои творения. Философия Fritz: Прагматичный Архитектор (исходя из наполнения папок и содержимого txt файлов) Главная цель Fritz была другой. Он хотел создать не просто фундамент, а законченное, идеальное «здание». Он действовал как архитектор-модернист, готовый снести старые перегородки ради лучшей и более стабильной конструкции. Принцип «Всё включено»: Fritz отбросил старую философию. Он включил в свой мод всё, что считал нужным для идеального результата: и исправления кода, и новые модели, текстуры, иконки и звуки. Именно поэтому его версия требует начинать новую игру. Ключевой Инструмент: Его главным «инструментом» был прагматизм. Он понял, что Morrowind Code Patch (MCP) со временем стал лучше справляться с некоторыми задачами, чем старый text.dll. Поэтому он сознательно отключил в своей конфигурации (angel.ini) исправление бага бездоспешного боя (fix_unarmored_bug=0), передав эту задачу более современному инструменту, чтобы избежать конфликтов. Стратегия: Он создавал финальный, ультимативный продукт, который должен был работать «из коробки» как единое целое, пусть и ценой нарушения "принципа совместимости". Мой итог анализа: кто-то увидел в этих номерах 5.7 и 6.3.2 просто цифры, я увидел в этих цифрах и файлах столкновение двух идеологий: Консерватор (Angel Death/GFM 5.x): Считали, что исправления должны быть чистыми, отдельными и максимально ненавязчивыми. Модернист (Fritz/GFM 6.x): Считал, что цель (идеально работающая игра) оправдывает средства (нарушение "принципа совместимости", объединение всего в один пакет, зависимость от новых утилит). На этих словах я отправляюсь спать и думать теперь как: а) добавить этот фикс по всплывающим табличкам "о повышении уровня" б) латать дыру по ошибке переполнения буфера: "Microsoft Visual C++ Runtime Library - Buffer overrun detected" дабы ребята с Tamriel Rebuild могли спокойно и с комфортом продолжать своё творчество.
-
Я не такой явный эксперт в С++, но что-то мне подсказывает, что это как-то связано с переполнением буфера программ, работающих на С++ (привет Морровинд). Возможен Конфликт DLL библиотек даже (не исключаю). Во-первых (если взять тот плагин из 2010 года, надо понять каким образом он вычисляет количество убитых моровых монстров, как фильтрует (т.е. надо смотреть сам скрипт плагина). Во-вторых касательно Tamriel Rebuilt у меня есть одна гипотеза связанная с взаимодействием нескольких модов ЛИБО одного большого, как ваш проект: EnableConsole (как я писал в одном из первых постов) не ВКЛЮЧАЕТ консоль, а, скорее всего, РАСШИРЯЕТ её (расширяя консольную функциональность — новые команды), которая при обработке длинных скриптов (либо огромного количества модов со скриптами) превышает размер внутреннего буфера. Что происходит, если объяснять технически: Tamriel Rebuilt добавляет диалоги с длинными скриптами в поле "результат" Text.dll моей версии, v3.01, версии GFM имеет измененную логику работы с консолью. EnableConsole=1 расширяет функционал, но использует буфер фиксированного размера При обработке длинного скрипта (комплекса скриптов) происходит buffer overrun Почему работают обходные пути (изменение значения с 1 на 0 в строке EnableConsole=): EnableConsole=0 - отключает проблемный функционал Text.dll с диска 1С - использует другую реализацию/размеры буферов (у меня нет исходника оригинального text.dll с диска 1С, только исходники от Angel Death) Итого: Я проверю свою гипотезу, если она подтвердится, то постараюсь придумать что делать с буфером, который вызывает эту ошибку. Я постараюсь его расширить, но неизвестно какие последствия это может вызвать. Спасибо, что указали на эту дыру 😃 upd: глянул тот скрипт по убийству монстров....это конечно сильно 😄 на мой взгляд данный скрипт создаёт очень большую строку байткода, EnableConsole=1 добавляет дополнительную обработку/логирование, а в наших text.dll ограниченный буфер для этой операции. Как итог - скорее всего да, надо вносить расширение буффера, либо отключите пока на 0 EnableConsole. Если вы не разработчик text.dll, то по сути она вам и не нужна. Это конечно врядли исправит буффер с ЦЕЛЫМ Tamriel Rebuild, но кто знает, раз в год и палка стреляет.
-
Провожу логическую цепочку: а) появляется text.dll от Angel_Death версии 3.0.0. с исходниками б) появляется MCP (а если судить по сайту Fullrest, появляется в 2010 году (первое упоминание)), который патчит как оригинальный text.dll от Бладмун, так и тот, что от Ангела. МСP обновляется до 2018 года (на нексусе и по сей день) в) в этом же 2010 году появляется GFM FIX в) без исходников (если они есть, то я их не нашёл) появляются две версии text.dll: 3.0.0 для GFM 6.3 и 3.0.1 который по ссылке https://www.fullrest.ru/files/russian_text_input#6235 г) я не знаю один и тот же это Text.dll (GFM - и тот что по ссылке), одни ли у них исходники, но год обновления у text.dll (того что по ссылке 2016). д) моему внутреннему перфекционисту яро хочется найти эти исходники обеих версий и поставить точку уже в номере версии, объединив исправления (отличия если они имеются) и создать единый text.dll (версию для своего text.dll как вы видите я не менял, я даже не думал что есть такая проблема в версиях, которая может вызвать серьёзную путаницу) но тем не менее (я буквально только что проверил), с моим text.dll устанавливается альтернативная анимация плавания аргониан, меню создание заклинаний и алхимии нормально пропатчилось, соответственно должны и устанавливаться другие патчи. Что это нам даёт? Я точно знаю, что MCP патчит Morrowind.exe, меняя его crc ключ и внося в него свои какие-то изменения. Я понятия не имею что именно патчит MCP в text.dll. Таким образом исходя из п.1 и п.2 я локально меняю свой приоритет (откладываю пока Морровинд AI и погружаюсь в изучение Python версии MCP). Мне надо понять как он взаимодействует с text.dll, чтобы не искать черную кошку ночью в темном сарае. upd: прикрепляю исходники (пока репозиторий на гитхаб не создан), которые уже исправлены мной (внесены мои обновления по смене раскладки и т.д.), если кто-то имеет желание помочь. На данный момент 2 задачи: Понять как взаимодействует MCP с text.dll и помирить MCP с универсальным text.dll Объединить исправления из моего text.dll, text.dll От GFM и text.dll по ссылке (если есть какие-то отличия моего text.dll от text.dll по ссылке https://www.fullrest.ru/files/russian_text_input#6235 ). Залить репозиторий этого единсвтенного общего text.dll на гитхаб. Таким образом поставить жирную точку в путанице версий text.dll. morr_text_dll-master_ksteel_update_2025.zip
-
исходники взяты с гитхаба, соответственно исходники от версии 3.0. Исходники версии 3.0.1 я не находил (к сожалению), если мне их предоставят, либо просто скажут куда что дописать, то я обязательно внесу это в своё дополнение, из этой темы, либо автор исправления про "таблички" может внести свои изменения в мои и перекомпилировать text.dll заново. По поводу этих табличек: "Исправлено отсутствие сообщений при повышении уровня" - это вот эти таблички по типу "вы так долго и упорно трудились и вот вы наконец пришли к этой цели. (Цитата не дословная, просто видел в каком-то файле игры эти строки давным давно. Вроде как в файле журнала (в который заносятся все записи про разные квесты, в игре.) Не помню где я его находил) По поводу GFM не совсем понял...GFM это же esp файл? Насколько я знаю, в ту же сборку в Fullrest Repack он уже встроен по умолчанию Если я где-то ошибся, то поправьте меня. Я буквально как пару недель занимался text.dll. За темами на форуме (GFM и другие) не особо следил.
-
Питон версия MCP 🤔 я про такую даже не слышал. Ну 621 строчка кода в main.py это очень серьёзно, пару дней точно понадобится на разбор, но эта не та версия. Я не помню, чтобы устанавливал MCP отдельно от Fullrest Репака — единственное, что я с ним делал, так это обновил MWSE (скачивал с нексуса, апдейтил через: Сомневаюсь, конечно, что анализ питон версии поможет, но я посмотрю его 😃 в целях накопления информации. Я приложу свою версию "mcp.exe" и папку от него "mcpatch" в архиве mcp.zip
-
MCP если я ничего не путаю, как раз-таки с Fullrest репака, а нейросети вот инструкция https://docs.google.com/document/d/13JVzJQ54jxppOsg8dlxnoQOhkzPOWb8SfKl3mtlZ34Q/edit?tab=t.0, а вот гитхаб автора https://github.com/drzdo/immersive_morrowind_llm_ai. (з.ы. Это не моя страница и лично автора я не знаю, автором мода НЕ являюсь, даже не общался с ним) там есть ссылки и на гитхаб и на ютуб с плейлистом, очень комичные моменты у него присутствуют. Интегрирую — это я конечно громко сказал (автор мода уже их интегрировал) внесу ясность - я занимаюсь рефакторингом этого мода. (кстати именно для него я и перекомпелировал text.dll, чтобы было удобнее общаться с АИ НПС в обычном диалоговом окне с ЛЮБЫМ НПС) Если он это один сделал, то он очень талантливый человек (по моему мнению), даже слишком талантливый х). Идея класс, но реализация (для меня), спорная. Там (в оригинале) доступны 3 нейросети на выбор - Gemini flash, Mistral, и ещё что-то. Любая нейронка на Open Ai. Можно даже запустить через LLM Studio локально на пк (но для этого нужен компудахтер мощностью сравнительный с компудахтером NASA для управления всеми спутниками Земли, потому я отказался от локальной реализации этого мода). Так вот, я добавил ещё deepseek-chat. (В планах вообще ещё добавить yandex gpt и Giga chat. Для пользователей из РФ их проще оплачивать). Там ничего сложного — просто поменять строчки в confyg.yml Естественно все АИ требуют api ключи от нейросетей (ну Gemini flash можно использовать 15 минут в день и то по ограниченному количеству токенов, или найти какой-либо ещё один "бесплатный ключ" в чём-то ограниченный). В этом плане deep seek (опять по моему скромному мнению) явно выигрывает - дешево (даже очень) и сердито. Умный быстрый, контекст понимает, за ЛОР шарит, хахамбы и кеки не выдает (если самому в промт не вписать. В будущем (не знаю насколько далёком) хочу перенести этот мод вообще на OpenMW (в данный момент ознакамливаюсь с документацией) Lua скрипты новее, движок открытый, костылей никаких не надо, я надеюсь. (по типу используемой заглушки от автора оригинала мода для UI Extensions (что кстати очень гениально было и тонко на мой взгляд). Что мною было сделано на данный момент: проведен тотальный анализ всех файлов — кто за что отвечает, зачем нужен, какие взаимосвязи, тестово убрал их Промтов: "мат и всякую не лорную бредятину — какие-то частушки, матерные частушки, современные слова по типу "прикольно" и т.д. изменил полностью npc_personality_generator.py, теперь он собирает архетип личности не по типу: "ты родился в Балморе вчера, ты орк, который ненавидит легкие доспехи и любит вонючих грязекрабов, ты бьешь всех кто с тобой не согласен. И ещё ты называешь главного героя Н'Вахом. И плевать что ты орк.", а нормально: - Пол/Раса/Знак/Класс/Фракция/Ранг учитываются даже АРХЕТИПЫ личностей (сангвиник, холерик, меланхолик флегматик, их помеси). Получается при генерации что: - не все данмеры местные (кстати тут включена функция исключения по типу Камонны Тонг, Шестого дома, некоторые ранги в некоторых фракциях и т.д.), не все каджиты наркоманы и любят лунный сахар, не все орки тупые, не все норды грязные варвары любящие рыгать и пердеть, не все босмеры Фаргот и так далее. занялся сейчас npc_spаwn_list.py - хочу сделать из маленькой ограниченной книги "того что может давать тебе нпс" на целые лорные библиотеки (Construction Set мне в помощь). ну и другие изменения (их очень много, например чтобы нпс при разговоре не подходили в плотную к тому с кем разговаривают, да это добавляет своего рода иммерсивности......но...вы помните того погонщика Силт Страйдера из Гнисиса, который вечно проваливал под мостик и умирал? Либо Лодочников, которые вечно тонули из-за того что они смещались с места? Вот то-то и оно 😃 . Чтобы НПС не пялились все на тебя, словно ты в западном вестерне весь такой чужак, зашёл в местную таверну с револьвером на перевес (кстати, из-за этой функции на тебя смотрят даже убитые НПС (трупы крутятся 😄). Работы очень много, особенно очень много захламлённых файлов, которые отнимают 70 (если не 85)% всего времени: Аналогия: Директор сидит в кабинете. ПО ИДЕЕ директор должен просто собирать информацию, принимать отчёты от всех менеджеров (которые прибегают к директору в кабинет, кладут отчёт на стол и убегают во свояси, в свою рабочую дочернюю папку обратно). После этого директор ставит резолюцию "ВСЕ ПРОВЕРЕНО, ДОКУМЕНТЫ ГОТОВЫ"и отправляет структурированный понятный отчёт дальше (куда-то там в головной офис допустим). ЧТО МЫ ИМЕЕМ НА ДАННЫЙ МОМЕНТ Этот бедолага директор, не то что собирает эти отчёты — ОН САМ ЛИЧНО носится по всему заводу, крутит гайки, меняет колёса у тракторов и ещё и в столовой кушать готовит для работников завода :D. Естественно миллиард функций и блоков кода вписано в бедные раздутые жирные файлы. А ведь можно сделать элегантнее и красивЕе. И таких вот горе-дерикторов (файлов) целая Python часть мода (Lua часть маленькая, всего 19 файлов): Так что когда будет форк — не скажу точно. (там уже есть один на бесплатные разщговоры нпс голосом но по моему мнению, как кто-то выразился на ютубе и, я его мнение целиком поддерживаю, для меня Морровинд - это больше буковки в тексте и чтение, чем общение голосом и отеты голосом нпс. (з.ы. я сам играл в мод совсем немного - но увлёкся настолько, что аж погрузился в разработку и тестирование, но рассказать и убедить Селлуса Гравиуса (именно его первого, потому что он главный по званию !!! по биографии!!), по приказу Селлуса: Ганциеля Дуара, и ещё пару легионеров о том, что в пещере Аддумасартус контрабандисты рабов держат было весело. Притом что Гравиус остался снаружи, а легионеры со мной внутрь пошли, после чего меня оттуда выгнали (если бы я не ушёл они бы выписали мне шрафт) т.к. я ГРАЖДАНСКИЙ и не состою в легионе, был первого уровня в рваном тряпье и т.д. А Гравиус категорически не хотел меня пускать внутрь как гражданское лицо, сказал ждать, что легионеры сами справятся 😄 А я то блин понимаю, что пока меня там нету - ячейка мертва, там ничего не происходит, это не Тес 5 Скурим. Так и простоял прау минут, после чего зашёл алегионеры что стояли у входа давай меня выгонять из пещеры, мол капитан Гравиус сказал бла бла бла. Весело вобщем, эмоций полный вагон)) А если не читаете "многобуков", то короткая ремарка: человек открыл (по крайне мере для меня) дверь в АИ + Морровинд - создал "базу для этого", а я вошёл в комнату, где начал наводить свой порядок 😃
-
А возможно он ругается на вес dll (отличия моего 241 кб и оригинального 170кб) cуммы не совпадают. Если бы у меня были исходники MСP, я бы смог посмотреть в чём проблема. Но я их найти не могу, к сожалению. А так да, судя по логам MCP патчи ставятся. MCP и MGE видны при загрузке и в главном меню игры. Использовал Fullrest Repack последней версии со всеми аддонами.