• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Это снова вы, и это снова я - MEG@VOLT, какаяя радость.
    А значит нас всех снова скоро ожидают технические работы на форуме.
    Очередные работы запланированы на начало марта, 7-9 числа.

Union Union - мини плагины

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
  • Первое сообщение
  • #1
Здесь будут собираться плагины, создание отдельной темы для которых было бы излишним.


Плагины, распространяемые с помощью exe-инсталлятора, можно деинсталлировать им же.
Плагины, распространяемые в виде vdf тома, следует помещать в папку Data/Plugins/.
Каждый плагин, если не указано иного, должен работать на любых версиях игры: Gothic I Classic (G1), Gothic I Sequel (G1A), Gothic II Classic (G2), Gothic II Addon (G2A).
Код плагинов и сами плагины, автором которых являюсь я, можно распространять и использовать без ограничений.


При наличии нескольких одноименных вложений в одном посте следует скачивать последнее. Удалять старые вложения прав нет.

  1. Плагин zNoFocusFlag (Автор: Slavemaster). Для модостроителей. Делает NPC с флагом NPC_FLAG_NFOCUS полностью прозрачными для фокуса ГГ.
  2. Плагин AlterDamage (Автор: Slavemaster). Есть проблемы с совместимостью. Меняет формулы урона. Добавляет всплывающие сообщения о нанесённом уроне.
  3. Плагин zSavesBackuper (Автор: Slavemaster). Осуществляет резервное копирование сделанных сохранений.
  4. Плагин Union_Hotbar_1.0k (Автор: Haart). Добавляет панель быстрого доступа для предметов из инвентаря.
  5. Плагин QuickLoot (Автор: Slavemaster). Быстрый сбор предметов при помощи правой кнопки мыши.
  6. Плагин MarvinHelper (Автор: Slavemaster). Дополнительные возможности для консоли разработчика.
  7. Плагин MunitionInfo (Автор: Xeдин). Отображает кол-во стрел/болтов в инвентаре.
  8. Плагин zAsyncSaveLoad. (Автор: Slavemaster).Плагин делает окно игры отзывчивым к сочетанию Alt+Tab во время загрузки, сохранения и просмотра видео.
  9. Плагин Union_SaveLoadManager_i (Автор: Haart). Позволяет сохраняться в разные слоты без лишних усилий.
  10. Плагин zBugFixes (Автор: Slavemaster). Плагин содержит исправления некоторых ошибок движка Готики.
  11. Плагин zTorchControl (Автор: Slavemaster). Плагин предотвращает удаление горящих факелов при загрузке, а также позволяет их использовать по горячей клавише.
  12. Плагин zMarkItems (Автор: Slavemaster).Плагин осуществляет маркировку предметов внутри ячеек инвентаря.
  13. Плагин zMiscUtils (Автор: Slavemaster). Плагин реализует множество функций, не объединённых единой тематикой.
  14. Плагин SimpleRegen (Автор: Xeдин). Плагин реализует простой алгоритм регенерации жизни и/или маны.
  15. Плагин Union_Thief_Helper (Автор: Xeдин). Помощник вора. Маркировка не обворованных и обворованных NPC и подсказки при взломе.
  16. Плагин Union_XP_Bar (Автор: Xeдин). Плагин для отображения полоски опыта.
  17. Плагин OdyAlt (Автор: N1kX). Подробное многостраничное меню навыков для мода Одиссея 2.6.4.
  18. Плагин OdyAltMenu (Автор: N1kX). Подробное многостраничное меню навыков для мода Одиссея 2.7.0+.
  19. Плагин zUtilities (Автор: Franisz). Несколько удобных функций.
  20. Плагин oDamageHelper (Автор: Gratt). Для модостроителей. Позволяет менять наносимый урон с помощью скриптов.
  21. Плагин Union_DamageInfo (Автор: Xeдин). Плагин выводит урон по врагам и по главному герою.
  22. Плагин Union_RandomRainDX11 (Автор: Haart). При использовании с DX11 дождь будет начинаться в случайное время суток.
  23. Плагин Union_Ext_Stat (Автор: Xeдин). Небольшая дополнительная статистика по количеству убитых, выпитых зелий, квестам и времени игры.
  24. Плагин Union_Show_FPS (Автор: Xeдин). Простенький плагин на показ FPS для всех версий Готики, с возможностью отключения в меню и задания позиции отображения.
  25. Плагин zImprovedLegacyFrying (Автор: Slavemaster). Добавляет диалоги жарки мяса для костра и плиты.
  26. Плагин Union_Keep_Last_Save (Авторы: Gratt, Xeдин). Плагин для удобной работы с последним слотом записи.
  27. Плагин EquippedWeapon (Автор: MEG@VOLT). Для модостроителей. Добавляет функции экипировки / деэкипировки оружия.
  28. Плагин TradeMissItems (Автор: MEG@VOLT). Плагин создан для защиты от случайной продажи квестовых предметов.
  29. Плагин zUnstuckSlidingPlayer (Автор: Slavemaster). Автоматическая телепортация игрока при длительном скольжении.
  30. Плагин KillMeatBugs (Автор: MEG@VOLT). Позволяет затаптывать мясных жуков.
  31. Плагин ezFistMode (Автор: fyryNy). Хоткей для перехода в режим кулачного боя.
  32. Плагин Union_2hSplash (Автор: Strange). Урон по площади для двуручного оружия.
  33. Плагин CastOnDamage (Автор: MEG@VOLT). Убирает прерывание чтения заклинания, если героя атакуют. Только для Готики I.
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
LikerGothic, в чём суть фикса? Не костыль?
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, короче часть сэмплов звуков была "свободна", но фактически нет. В итоге когда звуков много = всё ломалось. Я каждый кадр очищаю 1 свободный сэмпл (если их > 5 всего). В итоге звук больше вообще не багается в принципе. Дал игрокам на тест, потом отпишу.

Вот весь фикс: (тут адреса к MSS библиотеки прописаны внутри там)

1772191775746.png
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.685
Благодарности
3.451
Баллы
525
Но там какие-то последствия будут, уже не помню.
Среди проигнорированных евентов могут присутствовать евенты *eventPFXStop. При нештатном завершении анимации запущенные в её начале эффекты могут остаться запущенными и после её завершения.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
LikerGothic, возможно, было бы лучше отследить, какая функция закидывает неосвобожденные самплы в этот список, и исправить её
Среди проигнорированных евентов могут присутствовать евенты *eventPFXStop. При нештатном завершении анимации запущенные в её начале эффекты могут остаться запущенными и после её завершения.
Да, как вариант
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Ну самый простой способ = поворот мышкой + идти вперед. Там надо приноровится = вызовется примерно 40-80 звуков ходьбы/поворота, по 1-2 раза на кадр и так несколько кадров. В итоге слышен треск. Так-то по себе это не страшно. (это баг когда анимы вызывают звуки)

Slavemaster, как мне писал создатель dx11 (King), баг в самой Mss32.dll библиотеке. Возможно, даже не в Готике. Так что если способ работает = уже хорошо.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, при ЗАКРЫТИИ карты (реже других документов) частенько ловлю вылет из игры.
Ты не фиксил этот баг? Мб какой патч есть? Где-то он есть, пока ловлю, но отловить сложно.

Вылет идет в zCViewObject::RemoveAllChildren, то есть там двойной вызов чтоли...
***
При вылете внутри ListChildren 2 элемента, а не 1 как обычно.

Assertion failed: refCtr<=0 in file P:\dev\g2addon\release\ZenGin\_dieter\zObject.cpp, Line: 131
Reason: D: OBJ: tried to delete zCObject with refCtr greater than 0 !

0023:005A8CEA (0xA3C59B40 0xA3C59C3C 0x00000000 0x9146CCE8) Gothic2.exe, zCObject::~zCObject()+154 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zObject.cpp, line 131+114 byte(s)
0023:00691AEA (0xFFFFFFFF 0x006933E9 0xA3C59C3C 0x00000000) Gothic2.exe, zCViewObject::~zCViewObject()+266 byte(s), P:\dev\g2addon\release\ZenGin\_roman\zViewObject.cpp, line 88+60 byte(s)
0023:00816998 (0x010502A8 0x00000007 0x9155B948 0x00000000) Gothic2.exe, SetFileAttributesA()+208340 byte(s)
 
Последнее редактирование:

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, я научился ловить баг, в общем при открытии карты в ListChildren попадает 2 элемента вместо 1, при закрытии 2 элемент пытается в Release() но код падает. Проверяю, потом отпишу.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, кажется я нашел причину бага и почему он редкий. Если ты открываешь документ (книгу, записку, карту) и в этом время гг что-то говорил в стиле
B_Say(hero,hero,"$VERYCOLD"); = AI_OutputSVM(slf,oth,text);
то туда (внутрь менеджера карты) добавляется лишняя view, и при закрытии будет 100% вылет. Щас всё проверю точно.

Да, я вручную вызыфаю фразу пока документ активен или закрывается -> сразу или через 1-2 вызова crash.
В общем внутри oCDocumentManager::HandleEvent есть DlgDocumentMain, у него есть ListChildren, при норме там 1 элемент, но во время бага их 2 (из-за view для субтритов, предположительно). Как в итоге при попытке закрыть карту -> вылет.

  1. Даже если вылета нет сразу -> через 2-3 открытия документа все равно он произойдет.
  2. Даже если вырубить subTitlesNoise = 0 View субтитров нет, но краш все равно есть.
  3. 90% баг именно с картами, с документами обычными реже
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
LikerGothic, наверное тут ошибка:
C++:
protected:
    oCViewDocument        ViewArrow    ;
Все zCObject-ы должны как указатели создаваться, а не так

Когда НЕ вылетает мапа при закрытии - возможно есть утечка
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, да, SayansKing тоже согласен что причина там. Ну, будем думать, он предлагает ref = 0 в начале поставить, в общем надо бы этот баг зафиксить :)
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
он предлагает ref = 0 в начале поставить, в общем надо бы этот баг зафиксить
лучше -=1 в деструкторе, типа такого
C++:
struct oCViewDocumentMap_Destructor : oCViewDocumentMap { void operator()(); };
BindedHook Ivk_oCViewDocumentMap_Destructor{ ZENFOR(0x00725E90, 0x007633E0, 0x00772440, 0x0068D470), &oCViewDocumentMap_Destructor::operator() };
void oCViewDocumentMap_Destructor::operator()()
{
    ViewArrow.refCtr -= 1;
    THISCALL(Ivk_oCViewDocumentMap_Destructor)();
}
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster,
1772554983218.png

К сожалению, вылет остался. Адрес viewArrow и для того забаганного элемента не совпадает.

Хотя мб это не то, в общем тестирую дальше.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, а, я уже пробовал принудительно понизить кол-во ссылок -> не помогает, даже если вручную 0 поставить и delete сделать. Вылет все равно.

1772555544373.png


Вот этот элемент, вызывается декстуртор и он падает , второго вывода уже нет.

1772555563374.png
 
Последнее редактирование:

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, уменьшаю, на скрин не попало. То есть там было 2, стало 1.

1772557027671.png


Кинг посмотрел, сказал легче весь класс переписать... хз в общем.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.175
Благодарности
2.048
Баллы
320
LikerGothic, вот так , сразу после загрузки исполняю код и нажимаю ПКМ = вылет
C++:
auto& docs = oCDocumentManager::GetDocumentManager();
int id = docs.CreateMap();
docs.CreateMap();
docs.Show(id);

Ставлю фикс на деструктор и у меня вылет пропадает. У тебя так же? Или там обязательно надо B_Say, чтобы вылет с фиксом повторить?
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, Кинг говорит, что это 2 разных проблемы. Потому что я не вызывал 2 раза CreateMap.
У меня: B_Say (AI_OutputSVM)
(на кнопку вызываю сам во время карты) + открытие закрытие = на 2-7 раз оно вылетает.

if (zKeyPressed(KEY_F1))
{
//CLR_KEY(KEY_F1);
oCNpc* target = player;
oCNpc* npc = player;
if (npc) {
if (target) {

zCEventMessage* evMsg = target->GetTalkingWithMessage(npc);
if (evMsg) {
oCMsgConversation* msg = zNEW(oCMsgConversation)(oCMsgConversation::EV_WAITTILLEND, target);
msg->watchMsg = evMsg;
npc->GetEM()->OnMessage(msg, npc);
}
}
oCMsgConversation* convMsg = zNEW(oCMsgConversation)(oCMsgConversation::EV_OUTPUTSVM, "$VERYCOLD"); // тут из оригинала фразу подставь
convMsg->target = target;
npc->GetEM()->OnMessage(convMsg, npc);
}
}
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
2.077
Благодарности
3.299
Баллы
515
Slavemaster, мб это как-то связано с глобальный документом? он же используется для внешек... например в Doc_MapCoordinates
1772557678654.png


** А хотя походу это отладочные функции...

Строго говоря конструктор ViewArrow не вызывается при закрытии карты. И сам объект oCDocumentManager существует на всю игру, смена сейва или загрузка локаций не удаляет его.
 
Последнее редактирование:
Сверху Снизу