Активность
- Последний час
-
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.
-
ynuksaa присоединился к сообществу
-
Что бы внести ясность я не из команды Тамриэль Ребилда, даже не переводчик, всего лишь бэта тестер перевода. так в MCP уже же есть исправления для text.dll, значит способ у них был, в любом случае МСP в первую очередь патчит exe, я так понимаю только русские исправления и заносятся в text.dll. Может быть им кто то предоставил правки и сказал куда вставить, ничего не знаю про то как в MCP появились правки для text.dll. И надо ли им оно сейчас. Общие правки они и так делают в exe. Если вдруг возникнут новые чисто русской локализации то проще вам их самим исправить чем вразумлять авторов MCP что и куда надо добавить. Ни к чему не призываю и и не убеждаю чисто мое мнение. Ну я бы не сказал что MWSE прям уж костыль. Так то и text.dll можно считать костылем, с помощью которого воткнули поддержку русского языка. Вот на новом движке OpenMW сделали свою реализацию lua, только путаница вышла из за отсутствия совместимости, извечный выбор какие моды нужнее, тот движок и использовать и т.д. И вечные вопросы в комментах а работает ли мод A на движке Х. Нужно ли делать еще 3 вариант Lua для Морровинда, пойдет ли это на пользу? И потом если вы lua через text.dll прикрутите, в английской версии этого файла нет, а в РФ полтора землекопа lua моды делают. Останется ли совместимость с MWSE не будет ли конфликтов? Все таки подавляющее большинство сделано на английской версии игры, нужно на это ориентироваться. Тоже чисто мое мнение, может вы какой прорыв совершите, просто лично я не вижу пока необходимости замены MWSE. PS Да кстати подкину еще одну мыслю. В оригинальном движке есть проблема, при отдалении от центра мира НПС начинают "дрожать" В Анвиле очень хорошо заметно.
- Сегодня
-
Но в любом случае, сначала я доведу версию "моего" 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 КБ (интересно что там)
-
MikhailTrick присоединился к сообществу
-
GFM, text.dll и MCP - это совершенно разные вещи. Ни я ни Fritz не имеем ни какого отношения к изменениям в text.dll и MCP. В свою очередь группа Angel и разработчики MCP не причастны к GFM. Есть text.dll поставляемой с игрой от 1С, которая может быть обновлена отдельно. Новый text.dll добавлен к GFM за неимением для него отдельного мода. В GFM 5x и 6x используется один и тот же файл, не знаю какой для 5х на FR (мне было запрещено выкладывание модов в базу и на FR выложен GFM не мной). Сами файлы могут отличаться из-за наложенных патчей MCP и 4Gb.
- Вчера
-
Итак, спустя 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 могли спокойно и с комфортом продолжать своё творчество.
-
Pochtabee присоединился к сообществу
-
вот скрипт из поля результат проблемного диалога в Тамриэль ребилт choice "Неважно." 1 if ( player->GetItemCount extravagant_glove_left_01 > 0 ) if ( player->GetItemCount extravagant_glove_right_01 > 0 ) choice "Эти экстравагантные перчатки." 2 endif endif if ( player->GetItemCount "steel broadsword" > 0 ) choice "Этот стальной меч." 3 endif if ( player->GetItemCount T_Imp_Drink_WineSurilieBr_01 > 0 ) choice "Эта бутылка 'Братьев Сурили'." 4 endif if ( player->GetItemCount T_Orc_Drink_LiquorUngorth_02 > 0 ) choice "Этот кувшин унгорта." 5 endif if ( player->GetItemCount "imperial left gauntlet" > 0 ) if ( player->GetItemCount "imperial right gauntlet" > 0 ) choice "Эти имперские стальные перчатки." 6 endif endif if ( player->GetItemCount Misc_SoulGem_Greater > 0 ) choice "Этот большой камень душ." 7 endif if ( player->GetItemCount Misc_SoulGem_Grand > 0 ) choice "Этот великий камень душ." 8 endif if ( player->GetItemCount misc_lw_platter > 0 ) choice "Это алебастровое блюдо." 9 endif if ( player->GetItemCount gold_001 >= 25 ) choice "25 дрейков." 10 endif if ( player->GetItemCount gold_001 >= 50 ) choice "50 дрейков." 11 endif if ( player->GetItemCount gold_001 >= 100 ) choice "100 дрейков." 12 endif if ( player->GetItemCount gold_001 >= 150 ) choice "150 дрейков." 13 endif То же самое. В процессе ковыряния я удалял по 1 логическому условию, после удаления все вариантов с золотом, т.е 4 штук диалог заработал даже с включенной опцией. (Естественно проблема не в золоте, я и другие пробовал удалять, в общем в данном случае если убрать 4 if - endif то работает всегда) Ну мы тоже решили, что большинству игроков проще выключить и не заморачиваться. Кажется за последние лет 10 вы единственный разработчик text.dll в сообществе.
-
Я не такой явный эксперт в С++, но что-то мне подсказывает, что это как-то связано с переполнением буфера программ, работающих на С++ (привет Морровинд). Возможен Конфликт 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, но кто знает, раз в год и палка стреляет.
-
Тут на днях всплыла такая ошибка: При активации определенных диалогов из мода Tamriel Rebuilt (как выяснилось у которых в поле результат диалога длинный скрипт) происходит вылет игры, если установлен Text.dll версии 3.01 с фулреста, из GFM 5.10 c тесал или ваш модифицированный и при этом в angel.ini активирована опция EnableConsole=1. При EnableConsole=0 вылета нет. Если установить text.dll с диска 1с то вылета вроде бы нет вне зависимости от состояния EnableConsole. Я не знаю что делает функция EnableConsole, консоль в игре работает и без нее, но в версиях text.dll старше 3.0 она как то вызывает конфликт с объемом поля результат диалога. Я порылся на форуме и нашел что этот баг уже возникал в другом моде там человек тоже пришел к выводу что виновен text.dll версии 3.0+. Ну мы добавили в перевод ребилта рекомендацию установить EnableConsole=0. Это не первоочередная задача, но если вдруг в коде работающем с этой опцией есть прям какая то очевидная "детская" ошибка, было бы хорошо ее поправить. Если ничего не ясно, проще поставить EnableConsole=0 и не парится, кстати в дисковом морровинде, она как раз по умолчанию выкл. И вопрос всем: что все таки делает эта опция?
-
спасибо! всё на благо моддинга 😄
-
Проведённая работа впечатляет!
-
ksteel подписался на MCP 2025 (мой неофициальный форк)
-
И снова здравствуйте уважаемые форумчане! Спешу вам сообщить, что проведя несколько бессонных ночей я таки примирил версию MCP 2.5 Beta 7 (исходник взят с https://www.nexusmods.com/morrowind/mods/19510?tab=files mcp-python-version (огромная благодарность пользователю EJ-12 за помощь в поиске и предоставленную ссылку)) со своей версией text.dll (ОБРАЩАЮ ВАШЕ ВНИМАНИЕ, ЭТО ПРЕДРЕЛИЗНЫЙ ФОРК, РАЗРАБОТАННЫЙ ОТДЕЛЬНО НА БАЗЕ MCP Beta 7): Данная версия MCP совместима с версиями text.dll, которые НЕ СТАРЕЕ МОЕЙ ИЛИ ТОЙ ЧТО В FULLREST REPACK (внимательно следите за тем, какую версию text.dll вы используете! Если не знаете - сверяйте хэш оригинальных text.dll (с моей темы, или сборки FullRest Repack) с той, что находится в вашей папке Morrowind!!!) Естественно данный MCP поддерживает оригинальный text.dll самой игры. ВНИМАНИЕ! Т.к. данный MCP (как и мой text.dll) универсален! он показывает АБСОЛЮТНО ВСЕ ИМЕЮЩИЕСЯ У НЕГО ПАТЧИ ! Т.е. он может показывать новые патчи И ДЛЯ СТАРЫХ НЕ ПОДХОДЯЩИХ DLL! БУДЬТЕ ВНИМАТЕЛЬНЫ! НЕ СТАВЬТЕ НОВЫЕ ПАТЧИ НА СТАРЫЕ TEXT.DLL, КОТОРЫЕ НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ СТАРЫХ TEXT.DLL - сломаете либо сам длл файл, либо morrowind.exe, получите надпись "Живите в проклятом мире, который сами и создали". Я предупредил. Ну с инструкажом закончил, перехожу к наглядным объяснениям: 1. Внешний вид подредактированного MCP. 1.1 Окно приветствия (сердечно прошу не думать про какое-то моё чувство нарциссизма, моё упоминание внесено ТОЛЬКО и ИСКЛЮЧИТЕЛЬНО для того, чтобы убрать путаницу в версиях MCP): 1.2 Окно выбора исправлений (фиксов) изменено отображение (не по моему хотению, а из-за обновленной версии wxPython): пояснения: темная полоса в имени исправления — фикс уже установлен, синяя полоса в имени исправления — фикс выбран для установки, наименование исправления без выделения — фикс не установлен и не выбран в качестве установки. 1.3 Лог после установки: Если в процессе установки отображена эта надпись, значит моё обновление прошло успешно (Еще раз упомяну - используйте верную версию text.dll!!!) Итак, что было сделано: Обнаружил метод patch_ru - ядро системы валидации text.dll. Нашёл механизм хеш-проверки SHA256 "d = os.path.join(patchdir, hashlib.sha256(o).hexdigest())" Сохранил обратную совместимость с оригинальными патчами Добавил поддержку кастомных TEXT.DLL через white-list хешей. Создал список allowed_hashes c хешем моего text.dll Сохранил логику backup\restore text.dll (как и обычно ваш оригинальный text.dll будет переименован в Text.Original.dll) Ввёл задел на будущее - добавил автосоздание недостающих структур папок. Обновил все команды в mcp.py в соответствии с последней на данный момент версией wxPython. Перевёл на современный API - "EnableCheckBoxes(True)" вместо "CheckListCtrlMixin", добавил "SetItemState()", таким образом получив современные чекбоксы. Провёл полную инвентаризацию и удалил всё "ручное" управление чекбоксами - удалил все вызовы: "self.CheckItem(listidx) из AddItems" и "self.CheckItem(i, False) из UncheckAll" Изменил StaticBitmap в соответствии с новой версией wxPython: С нуля пересобрал SelectListBox, теперь он выглядит так: Ввёл задел на будущее - добавил debug сообщения в "on_select_category" (для логирования требуется запускать mcp.py через PowerShell): Главное - ввёл универсальность MCP: Провёл API модернизацию: заменил все "fromstring()" на "frombytes() (было 5 штук)": Прикладываю исходники с готовым собранным mcp.exe, всем спасибо за внимание! MCP_Python_Version-19510-2-4_Universal_06_10_2025.zip
-
tofiri8733 присоединился к сообществу
-
auvfyop присоединился к сообществу
- Последняя неделя
-
Я не отслеживал изменения text_dll. Знаю только, что Fritz общался с группой Angel и они внесли какие-то изменения по его просьбе. И в MCP внесли патч для 2х версий (которая с игрой и последней). Text_dll_versions.txt: ============= v3.01 Исправлено отсутствие сообщений при повышении уровня v3.00 добавлена поддержка Tribunal 1.4.1313 Пофикшен баг с отображением защиты, теперь значение защиты вычисляется при каждом заходе в инвентарь. v2.95 Пофикшен unarmored bug, включается в angel.ini, секция [Rules], fix_unarmored_bug=1<br> 2004/08/15 v2.70 убран вывод предупреждений о дубликатах в mrk файлах в NewWarnings.txt<br> возможно переключать язык ввода c помощью Scroll Lock (работает в том числе и в многостроковых полях ввода) <br> 2004/08/19 console fix картинки в книгах сначала пытаются загрузится из "Data Files\BookArt" (решает проблему с английскими картинками в книгах, появившуюся в Bloodmoon)<br> 2005/02/05 улучшена работа расширения консоли показывается урон на стрелах Сайты: http://angel-death.newmail.ru/ http://angel-death.freebox.ru/ email: angel_death@mail.ru