Перейти к содержанию

Активность

Лента обновляется автоматически

  1. Последний час
  2. Ох ты ж, да там и исходники есть! Обязательно ознакомлюсь с его творчеством !
  3. Сегодня
  4. Итак, спустя 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 могли спокойно и с комфортом продолжать своё творчество.
  5. Кстати, в толки морровинд есть еще text.dll от VICSHANN на 23Кб, с которым я играю черт знает сколько лет и все работает
  6. значит Angel Death что-то да утаил в своём text.dll 😃 значит будем искать. п. с. Можно конечно предположить самое страшное - локализацию 2000х годов. Что где-то что-то пролюбили при переводе и английский оригинальный DLL внутри выглядит совсем по другому, нежели наш.
  7. я думал что на использование оперативы. В любом случае это переполнение случается только на text.dll версии 3.0 и старше. у буржуев такой проблемы вообще нет, никто не жалуется на те диалоги в ребилте.
  8. Спасибо, что подтвердили мою гипотезу! Я обязательно начну над этим работать! Надо определённо расширить буфер памяти "движка" через text.dll, раз он не хочет вылезать за свои рамки (вредный).
  9. вот скрипт из поля результат проблемного диалога в Тамриэль ребилт 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 в сообществе.
  10. и попробуйте установить (предварительно сделав бэкапы text.dll и morrowind.exe) авось поможет И тут встает логичный вопрос, если mcp патчит игру на 4 gb, то для чего? Раз появляется переполнение буфера.
  11. Я не такой явный эксперт в С++, но что-то мне подсказывает, что это как-то связано с переполнением буфера программ, работающих на С++ (привет Морровинд). Возможен Конфликт 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, но кто знает, раз в год и палка стреляет.
  12. Тут на днях всплыла такая ошибка: При активации определенных диалогов из мода 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 и не парится, кстати в дисковом морровинде, она как раз по умолчанию выкл. И вопрос всем: что все таки делает эта опция?
  13. спасибо! всё на благо моддинга 😄
  14. Может ли быть так, что исходники с Гитхаба уже содержат исправления, которые просил Fritz? Потому что дата обновления исходников на гитхабе новее создания темы про GFM...я очень надеюсь и хочу чтобы это так было 😄
  15. Задача № 1 вроде как решена, мой форк MCP патчит text.dll (рабочая предрелизная версия форка) 2. Более сложная задача - собрать воедино исходники разных версий text.dll (все обновления и дополнения) и сделать один.
  16. И снова здравствуйте уважаемые форумчане! Спешу вам сообщить, что проведя несколько бессонных ночей я таки примирил версию 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
  17. Вчера
  18. Я не отслеживал изменения 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
  19. Провожу логическую цепочку: а) появляется 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
  20. То что code patch патчит text.dll я уже тоже понял, но вот версию он вряд ли меняет, если и меняет то на что то свое а не 3.01. MCP как раз проверяет по хэшу файл и патчит только ту для которой у него совпадает хэш. Судя по описанию MCP патчит либо ванильный text.dll с диска либо GFM. у меня стоит 3.01 с фулреста https://www.fullrest.ru/files/russian_text_input/files и MCP его принимает. В GFM 5.10 лежит 3.01, если верить ридми. но для надежности проверил методом научного тыка в 3.01 работают сообщения при повышении уровня а вот в этой доработанной ksteel нет, так что исходник с гитхаба точно 3.0 что плохо. А так же плохо что кодепатч видимо не вносит в него свои исправления. а это "В русской локализации уникальная анимация плавания аргониан не проигрывалась из-за неверной проверки на ID расы. Теперь это исправлено и аргониане будут плавать отлично от других рас.Исправлена ширина меню создания заклинаний. Окно было слишком узким, из-за чего обрезался ползунок регулировки длительности.Исправлен внешний вид окна повышения уровня, чтобы избежать обрезки значения характеристики." вряд ли он читает этот форум и уж тем более горит желанием снова этим заниматься.
  21. На самом деле, все еще чудесатее. В комплекте с Бладом идет 2.050 версия Техт.длл 48кб от 2003его. Затем откуда-то появляется версия 3.0, 1.0.0.1 уже от 2005го года и тоже от Ангела. А далее, начинаются вариации на тему ее размера. При этом, МСП точно добавляет туда свои патчи, которые, возможно и влияют на версию(?). Собсно см. аттач, несколько разных версий, хоть для истории, хоть для научного развития, а можно использовать в качестве "мантры" напевая перед сном Гимны Эшленда и камлая в бубен над 3мя версиями. Это точно, что 3.01, а не 3.0.0 1.0.0.1? 6.3 версии имеет в составе Техт.длл версии 3.0.0.0 1.0.0.1, если речь об этом. Весом 170кб от 2010го года. В остальном, это ецп файл и некоторое кол-во моделей. ПС. И "ангел_деф" является оригинальным автором этого самого Длла со времен работы в Акелле еще . textddls.7z
  22. Я имел ввиду что с GFM(ну по коайней мере в вкрсии 5.1)тоже в комплекте лежит text.dll и он тоже 3.01. в общем уже не важно. я хотел лишь уточнить, правильно ли понял, что вы на основе 3.0 делаете. Не представляю где искать исходники последней версии или автора, может кто из старожил фулреста что то знает. а в уже существующий text.dll никак не получится заглянуть?
  23. Последняя неделя
  24. Никогда не делал офромление форков на гитхабе, но я постараюсь 😃
  25. исходники взяты с гитхаба, соответственно исходники от версии 3.0. Исходники версии 3.0.1 я не находил (к сожалению), если мне их предоставят, либо просто скажут куда что дописать, то я обязательно внесу это в своё дополнение, из этой темы, либо автор исправления про "таблички" может внести свои изменения в мои и перекомпилировать text.dll заново. По поводу этих табличек: "Исправлено отсутствие сообщений при повышении уровня" - это вот эти таблички по типу "вы так долго и упорно трудились и вот вы наконец пришли к этой цели. (Цитата не дословная, просто видел в каком-то файле игры эти строки давным давно. Вроде как в файле журнала (в который заносятся все записи про разные квесты, в игре.) Не помню где я его находил) По поводу GFM не совсем понял...GFM это же esp файл? Насколько я знаю, в ту же сборку в Fullrest Repack он уже встроен по умолчанию Если я где-то ошибся, то поправьте меня. Я буквально как пару недель занимался text.dll. За темами на форуме (GFM и другие) не особо следил.
  26. я тут заглянул одним глазом в исходники, там в файле versions.txt указан версия 3.0 в файле morr_text_dll.rc тоже версия файла 3.0 указана. а исходники точно от последней версии? на фулресте https://www.fullrest.ru/files/russian_text_input#6235 или в GFM лежит версия v3.01 судя по описанию "Исправлено отсутсвие сообщений при повышении уровня" в ней довольно важное исправление было. Я конечно допускаю что когда 3.01 делали могли в проекте не поправить, но файл versions.txt то на фулресте поправлен, а на гитхабе старый сомнительно. Выбор клавиши конечно хорошо, но терять исправление не хочется.
  27. Не за что. Еще бы репозиторий залить на Гит для будущих поколений
  1. Загрузить ещё активность
×
×
  • Создать...