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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
  • Первое сообщение
  • #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). Позволяет затаптывать мясных жуков.
 
Последнее редактирование:

JIeruon

Участник форума
Регистрация
7 Янв 2017
Сообщения
11
Благодарности
0
Баллы
155
N1kX, здравствуйте. Хотел у вас спросить по поводу платина OdyAltMenu. Можно как-нибудь изменить кнопку Y на другую. Привязана к плагину на силовой взлом. Спасибо)
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.275
Баллы
910
N1kX, здравствуйте. Хотел у вас спросить по поводу платина OdyAltMenu. Можно как-нибудь изменить кнопку Y на другую. Привязана к плагину на силовой взлом. Спасибо)
Немного изменил эту фиговину.
Перекачай и замени файл.

После загрузки сохранения/начала игры ищи в gothic.ini
Код:
[MOD_ODYSSEE]
ZKEYMENU=KEY_Y

ZKEYMENU меняешь на любую другую клавишу от key_a до key_z (добавил пока что только алфавит) например на

Код:
ZKEYMENU=key_j
 
Последнее редактирование:

JIeruon

Участник форума
Регистрация
7 Янв 2017
Сообщения
11
Благодарности
0
Баллы
155
Немного изменил эту фиговину.
Перекачай и замени файл.

После загрузки сохранения/начала игры ищи в gothic.ini
Код:
[MOD_ODYSSEE]
ZKEYMENU=KEY_Y

ZKEYMENU меняешь на любую другую клавишу от key_a до key_z (добавил пока что только алфавит) например на

Код:
ZKEYMENU=key_j
Спасибо вам))
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
zSavesBackuper
Резервное копирование сохранений
Google Drive
Функции плагина
  • Плагин может осуществлять резервное копирование в указанную папку
  • Плагин может осуществлять резервное копирование в указанный диапазон слотов сохранений
Исходные коды
Конфигурация
INI:
[ZSAVESBACKUPER]

BackupToDirPath=\backups\
; ... полный или относительный путь для директории с сохранениями

BackupToDirLimit=50
; ... максимальное кол-во резервных сохранений (для каждого мода отдельно)
; установите -1 для неограниченного числа сохранения
; установите 0 для деактивации резервного копирования в папку

BackupToSlotMin=10
BackupToSlotMax=20
; ... диапазон слотов, в который будет копироваться каждое сохранение
; для деактивации установите 0 и -1

DoNotBackupSlotMin=0
DoNotBackupSlotMax=-1
; ... диапазон слотов, сохранение в которые игнорируется плагином
; для деактивации установите 0 и -1

CopyAlgorithm=2
; ... внутренний алгоритм копирования файлов
; 1 - используется SHFileOperation
; 2 - используется std::filestream (по умолчанию)
; любое другое значение - используется std::filesystem::copy
 
Последнее редактирование:

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.345
Благодарности
1.888
Баллы
335
Спасибо за плагин, я всегда вручную бэкапил почти все сейвы с некоторой периодичностью, что бы можно было вернутся, переиграть или проверить что-нибудь. С плагином будет все автоматизированно, надо попробовать. Выставить последний слот на бэкап и сделать безлимит. :)
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
Выставить последний слот на бэкап и сделать безлимит. :)
Бэкап создаётся для любых сохранений. Диапазон слотов указывается для дополнительного бэкапа, чтобы можно было откатиться на один из предыдущих сейвов не выходя из игры. Если, вдруг, неправильно понял.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.345
Благодарности
1.888
Баллы
335
Slavemaster, ага видимо не так понял. Но все слоты бэкапить мне кажется лишнее, было бы неплохо все-таки указать какие слоты вообще можно бэкапить, а какие временные и не особо важные.
 

Raswen

Гражданин Хориниса
Регистрация
18 Фев 2014
Сообщения
1.278
Благодарности
745
Баллы
260

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
"Видео" - это разрабы таким вот кривым способом исправили то, что я называю "багом последней стрелы". В Г1 и классической Г2 есть такой баг, когда после выстреливания последней стрелы лук перемещается за спину, оставаясь в натянутом состоянии. Это легко исправляется на уровне анимаций, но разрабы, видимо, простых путей не искали. :D
 

Raswen

Гражданин Хориниса
Регистрация
18 Фев 2014
Сообщения
1.278
Благодарности
745
Баллы
260

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
Патч для любителей создавать "новые" шрифты путём переименования .FNT файлов. Теперь именем шрифта всегда будет считаться имя файла, а не строка, записанная туда.
Union:
#engine [G1, G1A, G2, G2A]
    #patch [zDoNotLoadFontName]
        // engine specific
        INT asm_start = ZenDef(0x006E005F, 0x00718625, 0x0072990B, 0x0078934B)
        // end of engine specific
        
        INT dummyName = CreateMemString("")
    
        #assembler [asm_start]
            add esp, 4
            push $dummyName
            orgcode
        #/assembler
    #/patch
#/engine
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.345
Благодарности
1.888
Баллы
335
Сделал еще альтернативный плагин для мониторинга очков здоровья ГГ и близлежащих мобов/нпс. Плагин работает вообще без хуков и полезен в модах где урон идет нестандартными методами, дотами, способности, .. Также по нему видно не только уменьшение, но и увеличение здоровья.



Ссылка таже https://worldofplayers.ru/threads/41521/post-1137466
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.345
Благодарности
1.888
Баллы
335

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
Переименовал последний патч, теперь он также чинит алгоритм определения движения персонажа при выборе анимации убирания оружия (G2 & G2A).
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
Патч zSmoothFightMode для Г2НВ немного улучшает анимации в боевом режиме:
  1. Персонаж плавно останавливается (за исключением остановки во время кадра перехода от анимаций разбега к анимациям бега)
  2. Патч zRemoveWeaponFix, который устанавливает правильные анимации при убирании оружия нажатием кнопок 0-9, не позволяет поворачиваться во время их проигрывания. Данный патч разблокирует эту возможность.
  3. Повороты во время атаки с разбега, обнажения или убирания оружия с остановкой в процессе производятся без анимаций поворота, так как они перекрывали основную анимацию.
Старый код:
Union:
#engine [G2A]
    #patch [zSmoothFightMode]
        // engine specific
        INT text_oCNpc_EV_DrawWeapon_call_human_ai_PC_Turnings = 0x0074D224
        INT text_oCNpc_EV_RemoveWeapon_call_human_ai_PC_Turnings = 0x0074E3F5
        INT text_oCNpc_EV_RemoveWeapon1_call_anictrl_StopTurnAnis = 0x0074E4FC
        INT text_oCNpc_EV_AttackRun_call_human_ai_PC_Turnings = 0x00751957
        INT text_oCAniCtrl_Human__Stand_jz_npc_GetWeaponMode = 0x006B762E
        INT text_oCAniCtrl_Human__Stand_success_GetModel_IsAniActive__s_walkl = 0x006B7618
        INT text_oCAIHuman_FightMelee_success_IsWalking_g1 = 0x00696FB5
        INT text_oCAIHuman_FightMelee_fail_IsWalking_g1 = 0x00696FF9
        INT text_oCAIHuman_FightMelee_success_IsWalking_g2 = 0x0069791C
        INT text_oCAIHuman_FightMelee_fail_IsWalking_g2 = 0x00697A12
       
        INT var_oCNpc_EV_DrawWeapon_model = 0x68 + 0x8 - 0x54
        INT var_oCAIHuman_FightMelee_g2_model = 0x6C - 0x54
       
        INT field_oCMsgWeapon_duringRun = 0x48
        INT field_oCAniCtrl_Human__t_turnl = 0x1028
        INT field_oCAniCtrl_Human__t_turnr = 0x102C
        INT field_oCAniCtrl_Human__s_walk = 0x1008
        INT field_oCAniCtrl_Human__s_walkl = 0x1014
        INT field_oCAniCtrl_Human__t_walk_2_walkl = 0x100C
       
        INT func_zCModel_GetAniFromAniID = 0x00472F50
        INT func_zCModel_IsAniActive = 0x00472F90
        INT func_zCModel_StopAni = 0x0057ABE0
        INT func_oCAIHuman_PC_Turnings = 0x0069A940
        // end of engine specific
       
        // void oCAIHuman::PC_Turnings_no_ani(int)
        #assembler [func_oCAIHuman_PC_Turnings_no_ani]
            xor edx, edx
           
            mov eax, [ecx+$field_oCAniCtrl_Human__t_turnl]
            push eax
            mov [ecx+$field_oCAniCtrl_Human__t_turnl], edx
           
            mov eax, [ecx+$field_oCAniCtrl_Human__t_turnr]
            push eax
            mov [ecx+$field_oCAniCtrl_Human__t_turnr], edx
       
            push ecx
           
            push dword ptr [esp+8]
            call $func_oCAIHuman_PC_Turnings
       
            pop ecx
           
            pop eax
            mov [ecx+$field_oCAniCtrl_Human__t_turnr], eax
           
            pop eax
            mov [ecx+$field_oCAniCtrl_Human__t_turnl], eax
           
            ret 4
        #/assembler
       
        #assembler [text_oCNpc_EV_DrawWeapon_call_human_ai_PC_Turnings]
            test byte ptr [ebp+$field_oCMsgWeapon_duringRun], 1
            jz continue
           
            push ecx
           
            mov eax, [ecx+$field_oCAniCtrl_Human__s_walk]
            push eax
            mov ecx, [esp+$var_oCNpc_EV_DrawWeapon_model]
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, [esp+$var_oCNpc_EV_DrawWeapon_model]
            call $func_zCModel_IsAniActive
           
            pop ecx
           
            test eax, eax
            jz continue
           
            call $func_oCAIHuman_PC_Turnings_no_ani
            jmp return
           
        continue:
            call $func_oCAIHuman_PC_Turnings
           
        return:
        #/assembler

        #assembler [text_oCNpc_EV_RemoveWeapon_call_human_ai_PC_Turnings]
            test byte ptr [edi+$field_oCMsgWeapon_duringRun], 1
            jz continue
           
            push ecx
           
            mov eax, [ecx+$field_oCAniCtrl_Human__s_walk]
            push eax
            mov ecx, esi
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, esi
            call $func_zCModel_IsAniActive
           
            pop ecx
           
            test eax, eax
            jz continue
           
            call $func_oCAIHuman_PC_Turnings_no_ani
            jmp return
           
        continue:
            call $func_oCAIHuman_PC_Turnings
           
        return:
        #/assembler
       
        #assembler [text_oCNpc_EV_RemoveWeapon1_call_anictrl_StopTurnAnis]
            push ecx
           
            push 0
            call $func_oCAIHuman_PC_Turnings
           
            pop ecx
            orgcode
        #/assembler
       
        MemSet(text_oCAniCtrl_Human__Stand_jz_npc_GetWeaponMode, '90', 2)
       
        #assembler [text_oCAIHuman_FightMelee_success_IsWalking_g1]
            mov eax, [esi+$field_oCAniCtrl_Human__s_walk]
            push eax
            mov ecx, edi
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, edi
            call $func_zCModel_IsAniActive
           
            test eax, eax
            jz continue
           
            mov eax, [esi+$field_oCAniCtrl_Human__s_walkl]
            push eax
            mov ecx, edi
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, edi
            call $func_zCModel_IsAniActive
           
            test eax, eax
            jnz $text_oCAIHuman_FightMelee_fail_IsWalking_g1
           
        continue:
            orgcode
        #/assembler
       
        #assembler [text_oCAIHuman_FightMelee_success_IsWalking_g2]
            mov eax, [esi+$field_oCAniCtrl_Human__s_walk]
            push eax
            mov ecx, [esp+$var_oCAIHuman_FightMelee_g2_model]
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, [esp+$var_oCAIHuman_FightMelee_g2_model]
            call $func_zCModel_IsAniActive
           
            test eax, eax
            jz continue
           
            mov eax, [esi+$field_oCAniCtrl_Human__s_walkl]
            push eax
            mov ecx, [esp+$var_oCAIHuman_FightMelee_g2_model]
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, [esp+$var_oCAIHuman_FightMelee_g2_model]
            call $func_zCModel_IsAniActive
           
            test eax, eax
            jnz $text_oCAIHuman_FightMelee_fail_IsWalking_g2
           
        continue:
            orgcode
        #/assembler
       
        #assembler [text_oCAniCtrl_Human__Stand_success_GetModel_IsAniActive__s_walkl]
            mov edx, [esi+$field_oCAniCtrl_Human__t_walk_2_walkl]
            push edx
            mov ecx, edi
            call $func_zCModel_GetAniFromAniID
           
            test eax, eax
            jz continue
           
            push eax
            mov ecx, edi
            call $func_zCModel_IsAniActive
           
            test eax, eax
            jz continue
           
            mov edx, [esi+$field_oCAniCtrl_Human__t_walk_2_walkl]
            push edx
            mov ecx, edi
            call $func_zCModel_StopAni
           
        continue:
            orgcode
        #/assembler
       
        #assembler [text_oCNpc_EV_AttackRun_call_human_ai_PC_Turnings]
            push ecx
           
            mov eax, [ecx+$field_oCAniCtrl_Human__s_walk]
            push eax
            mov ecx, ebx
            call $func_zCModel_GetAniFromAniID
           
            push eax
            mov ecx, ebx
            call $func_zCModel_IsAniActive
           
            pop ecx
           
            test eax, eax
            jz continue
           
            call $func_oCAIHuman_PC_Turnings_no_ani
            jmp return
           
        continue:
            call $func_oCAIHuman_PC_Turnings
           
        return:
        #/assembler
    #/patch
#/engine
 
Последнее редактирование:

Сумрак

Участник форума
Регистрация
25 Окт 2021
Сообщения
1.548
Благодарности
609
Баллы
155
Чистая G1, патч 4gb+player kit, Union 1.0l, Ninja 2.7.12, G1CP 1.2.
Slavemaster, Квиклут по ссылке в шапке темы самый новый или нет? А то раньше когда ставил через менеджер ресурсов всё нормально было, сейчас же установил плагин через оффлайн установщик в конфигурации пропадает клавиша MOUSE_BUTTONRIGHT, только KEY_V остается.
Haart, При включении чит-режима перестает отображаться и работать хотбар, при отключении обратно снова всё хорошо, но я например часто забываю отключать марвин да и многие думаю тоже.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.816
Баллы
240
А то раньше когда ставил через менеджер ресурсов всё нормально было, сейчас же установил плагин через оффлайн установщик в конфигурации пропадает клавиша MOUSE_BUTTONRIGHT, только KEY_V остается.
Всё правильно. В Г1 правая кнопка для прыжка используется, поэтому она не используется для квиклута по умолчанию. Можешь вручную прописать и поставить патч zNoRMBJump.

Добавил в шапку патч zSmoothFightMode с исправлениями:
  1. Убрал свой баг, из-за которого была возможна мгновенная остановка при разбеге.
  2. Сделал прыжок с остановкой плавным.
  3. Если анимация разгона была остановлена хотя бы 1 кадр (т.е. 1 кадр не зажата клавиша "вперёд"), тогда клавиша действия вызовет обычную атаку, а не с разбега.
 
Сверху Снизу