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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

В разработке... Union. Пожелания насчёт плагинов

Сахар

Участник форума
Регистрация
5 Янв 2017
Сообщения
62
Благодарности
47
Баллы
180
Есть ли плагин/патч для Г2, чтобы всех нпс людей, вне зависимости от враждебности, можно было убить только с помощью отдельного действия добивания, как в первой игре?
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.279
Благодарности
3.568
Баллы
535
Есть ли плагин/патч для Г2, чтобы всех нпс людей, вне зависимости от враждебности, можно было убить только с помощью отдельного действия добивания, как в первой игре?
 

Вложения

  • C_DropUnconscious.d
    546 байт · Просмотры: 13

Bioengine

Участник форума
Регистрация
29 Янв 2025
Сообщения
3
Благодарности
0
Баллы
5
Добрый день. Кто-то когда-нибудь делал патч/мод/плагин который убирает увеличение цены атрибутов на 30 и каком там дальше уровне? Чтобы всегда один поинт был? Архолос чтобы работал в идеале
 

Bioengine

Участник форума
Регистрация
29 Янв 2025
Сообщения
3
Благодарности
0
Баллы
5
Ааа mr-kav, спасибо!
Вот этот работает в Архолосе. Там можно код поменять чтобы всегда возвращать amount.
И как я его пропустил вообще…
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Доброго времени суток!
1.Идея плагина: привязать разные анимации на разные виды оружия.
Необходим .dll, который выведет события on_equip/on_unequip в скрипты.
Для того, чтобы распознать какое оружие игрок экипировал, нужен текстовый фильтр содержащий:
-Флаг, чтоб отделять мечи от всего остального
-тип урона , чтобы отделять, например, топоры от дубин/молотов
-требуемый атрибут, чтоб отделять ловкостное оружие от силового
-1р или 2р, не разбираюсь нужен ли, можно ли через флаг это выявить.
-содержание ключевых слов в названии, ID, visual. Наверное здесь будет какая-нибудь логическая функция на подобие:
если ИМЯ/Визуал/ID содержит, к примеру, "Посох", либо "staff", либо "Rod" то экипируемый предмет является посохом.
А для посохов назначена анимация 2hstaffST2.MSB, например.
Также необходима строка, позволяющая напрямую прописать ID предмета, в случае, если фильтр в каком-нибудь моде не смог выявить тип предмета.
Если я правильно понимаю как это работает, а я ни разу не программист, то вся конфигурация плагина будет находиться в легко редактируемом
текстовом файле.

2.Идея плагина: вместо одной боевой анимации, задействуется случайная из комплекса нескольких анимации, как итог
в игре при каждом обнажений оружия/либо другого события у игрока будет разная анимация боевки:
класс oCNpc, методы что-то типа oCNpc::Equip, oCNpc::UnEquip. Учти, что обычные оверлеи при применении ставятся в очередь. Чем новее, тем выше у него приоритет над остальными. Плюс в движке где-то зашиты проверки на текущие уровни владения, что при создании пероснажа сразу задает или обновляет текущие боевые оверлеи. Можно как вариант переписать еще этот метод для надежности.
Т.к. я не разбираюсь в том как это все работает, то не знаю можно ли будет реализовать эти идеи в рамках одного плагина, или надо 2 разных, будут ли они совместимы и т.д.
Буду рад любой помощи и разьяснениям.
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Сенсей, никто не хочет браться!
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Либо геморроя много
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.119
Благодарности
1.947
Баллы
320

Вложения

  • UpdateBattleOverlays.zip
    284,9 KB · Просмотры: 6

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Много геморроя, чтобы сделать качественно. Если делать абы как, то можно и быстро.

В скриптах лишь пример, если что.
Круто, работает! Благодарю!
По тех.части:
1. Если выйти из игры, выдает ошибку :
======================================= UNHANDLED EXCEPTION OCCURED ======================================================
======================================= CRASH INFOS: =====================================================================
Gothic II - 2.6 (fix), Parser Version: 50
User: User, CPUType: 586, Mem: 4095 MB total, 1653 MB free
Camera: Pos(31870.6777/4816.65869/-17366.6758), At(-0.918714762/-0.394364208/-0.020977376)
Startup Options:-game:gothicgame.ini
=============================================== CALLSTACK : ==============================================================
0023:70C3A16A (0x006AAA40 0x0B064C68 0x0135F76C 0x0135F770) UNIONAPI.DLL, Union::processImm32Collection::GetImm32For()+218 byte(s)
0023:70C3FC67 (0x0B1B2880 0x00000000 0x6767B96E 0x775B01B0) UNIONAPI.DLL, Union::HookProviderPatch::ReleaseInRange()+327 byte(s)
0023:6FCD54F9 (0x00000002 0x0135F814 0x00000000 0x00000000) ZUPDATEBATTLEOVERLAYS.DLL, Union::SharedMemory::DllLoadCallback()+489 byte(s)
0023:77517F62 (0x1A37C498 0x00000002 0x00000000 0x763B2DE0) ntdll.dll, isalpha()+638 byte(s)
0023:7750AE99 (0x2C610000 0x0135F8D0 0x763B2DBC 0x000004B0) ntdll.dll, LdrRemoveLoadAsDataTable()+1005 byte(s)
0023:774ED12E (0x2C610000 0x00000000 0x0135FA74 0x21102918) ntdll.dll, LdrUnloadDll()+74 byte(s)
0023:76AE2EEE (0x2C610000 0x000004B0 0x00000002 0x211028CE) KERNELBASE.dll, FreeLibrary()+21 byte(s)
0023:21102918 (0x0082F0EC 0x00000006 0x000A05A0 0x0B6802E8) mss32.dll, RIB_free_provider_library()+136 byte(s)
0023:00781894 (0x0000002C 0x00000011 0xFFFFFFFF 0x00000000) Gothic2.exe, MainProg()+84 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 114
0023:00503270 (0x00400000 0x00000000 0x0147609A 0x00000001) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169
0023:00502DFD (0x0135FCA4 0x00000000 0x0147609A 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
0023:719C662F (0x00400000 0x00000000 0x0147609A 0x00000001) g2a.dll, RegisterSpecialCase()+191 byte(s)
0023:00502DFD (0x0135FCA4 0x00000000 0x0147609A 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
0023:719C662F (0x00400000 0x00000000 0x0147609A 0x00000001) g2a.dll, RegisterSpecialCase()+191 byte(s)
0023:7103D395 (0x00400000 0x00000000 0x0147609A 0x00000001) SHW32.DLL, UnionCore::CUnion::InitApp()+3349 byte(s)
0023:007D43F8 (0xFFFDE000 0x0135FFD4 0x774E96F2 0xFFFDE000) Gothic2.exe, WinMainCRTStartup()+224 byte(s)
0023:7618386D (0xFFFDE000 0x763B2A98 0x00000000 0x00000000) kernel32.dll, BaseThreadInitThunk()+18 byte(s)
0023:774E96F2 (0x007D4318 0xFFFDE000 0x00000000 0x00000000) ntdll.dll, RtlInitializeExceptionChain()+99 byte(s)
0023:774E96C5 (0x007D4318 0xFFFDE000 0x00000000 0x00905A4D) ntdll.dll, RtlInitializeExceptionChain()+54 byte(s)
2. Оверлей задействуется сразу же, без анимации доставания оружия, это никак не исправить?

3.Какая функция применяется для проверки названия оружия в игре и для проверки названия визуала?
И как будет выглядеть многоэтапная проверка сначала инстанции, если нет положительного результата следом наименования в игре, если нет совпадения, то наименование визуала.
Причем ключевых слов может быть несколько: посох, staff, rod

Код:
instance ItMw_1h_Nov_Mace(C_Item)
{
    name = "Боевой посох";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_2HD_AXE;
    material = MAT_WOOD;
    value = Value_NovMace;
    damageTotal = Damage_NovMace;
    damagetype = DAM_BLUNT;
    range = Range_NovMace;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_NovMace;
    visual = "ItMw_020_2h_Nov_Staff_01.3DS";

Еще, как я понял, игра сама может разделить 1р и 2р анимации, то есть даже при соответствии условия на 1р не может быть наложен оверлей, предназначенный на 2р. То есть, можно будет прописывать варианты для шпаг просто добавив else if? с поиском по критерию: 1р оружие, требующее ловкость и соответствующее флагу ITEM_SWD

Добавил анимации для посоха, 2р топора, и альтернативный двуруч вместо стандартного,
вроде, работает.
P.S.: Посохи идут по критерию Mace, то есть анимация посохов будет работать на любое 2р с Mace в имени, но просто для посмотреть норм.
 

Вложения

  • zUpdateBattleOverlays.vdf
    859,3 KB · Просмотры: 3
  • UpdateBattleOverlays.d
    1 KB · Просмотры: 6

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.119
Благодарности
1.947
Баллы
320
2. Оверлей задействуется сразу же, без анимации доставания оружия, это никак не исправить?
zSmoothAniTransitions стоит? Надо поставить.
1. Если выйти из игры, выдает ошибку :
Не знаю, у меня нет такого,
3.Какая функция применяется для проверки названия оружия в игре и для проверки названия визуала?
Проверяй строки item.name и item.visual
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Проверяй строки item.name и item.visual
как это будет выглядеть в скрипте?
вместо:
var string name;
name = Par_GetSymbolName(Hlp_GetInstanceID(item));
что-то вроде:
name = Par_GetSymbolName(Hlp_Getitem.name(item));
и
name = Par_GetSymbolName(Hlp_Getitem.visual(item));
или сразу писать:
var string name;
name = Par_GetSymbolName(Hlp_GetInstanceID(item));

if Str_Contains(item.name, "_AXE")

я рли ноль в программировании
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.119
Благодарности
1.947
Баллы
320

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Скорее так: if Str_Contains(Str_ToUpper(item.name), "ТОПОР")
Так правильно?

Daedalus:
// **Новая проверка: по названию ИЛИ по визуальной модели на "Посох"**
    if (Str_Contains(Str_ToUpper(item.name), "Посох")) || (Str_Contains(Str_ToUpper(item.visual), "staff"))
    {
        ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Применяем overlay для "Посоха"
    }
    else
    // **Проверки на топоры
    if (Str_Contains(name, "_AXE")
    {
        ReapplyOverlay(npc, "HUMANS_AXEST2.MDS");
    }
    else
    {
        ReapplyOverlay(npc, "HUMANS_1X2ST3.MDS");
    };


Еще подскажите, как добавить условие на уровень владения оружием?
1. 30% >= X <60% //Чтобы ST1 анимации прикрутить
2. 60%<= X // ST 2 соответственно

И условие на выявление шпаг и рапир:
1. 1р, флаг=меч, требуемый атрибут =ловкость.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.345
Благодарности
4.667
Баллы
625
if (Str_Contains(Str_ToUpper(item.name), "Посох")) || (Str_Contains(Str_ToUpper(item.visual), "staff"))
Нет, Str_ToUpper возводит текст в верхний регистр. Сравнивать надо с ПОСОХ или STAFF.

Вообще не вижу смысла проверять поле item.name. Языков куча, а работать будет только в английском и русском?? Ну и плюс я бы наверное не доверял полю item.visual.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.119
Благодарности
1.947
Баллы
320
Так правильно?
Посох и Staff надо большими буквами писать
Еще подскажите, как добавить условие на уровень владения оружием?
Используй Npc_GetTalentSkill(npc,NPC_TALENT_1H). Значения будут 0, 1, 2

1р, флаг=меч
if item.flags & ITEM_SWD {};

требуемый атрибут =ловкость
Тут надо проверять все значения item.cond_atr[0 или 1 или 2]
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
301
Благодарности
92
Баллы
80
Вообще не вижу смысла проверять поле item.name. Языков куча, а работать будет только в английском и русском??
Сомневаюсь, что среди тех четырех человек, что скачают этот плагин будут поляки/немцы *ecstatic*
Пост автоматически объединён:

Используй Npc_GetTalentSkill(npc,NPC_TALENT_1H). Значения будут 0, 1, 2
Правильно?

Daedalus:
// **Проверка: по названию ИЛИ по визуальной модели на "Посох" - ПЕРВАЯ ПРОВЕРКА**
    if (Str_Contains(Str_ToUpper(item.name), "ПОСОХ")) || (Str_Contains(Str_ToUpper(item.visual), "STAFF"))
    {
        var int skillLevel_2H;
        skillLevel_2H = Npc_GetTalentSkill(npc, NPC_TALENT_2H);

        if (skillLevel_2H == 1)
        {
            ReapplyOverlay(npc, "HUMANS_SPST1.MDS"); // Оверлей ST1 для Посохов
        }
        else if (skillLevel_2H == 2)
        {
            ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Оверлей ST2 для Посохов
        }
        else
        {
            // **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для Посохов**
        };
    }
    // **Проверка на ТОПОР - ВТОРАЯ ПРОВЕРКА **
    else if (Str_Contains(name, "_AXE"))
    {
        var int skillLevel_2H; // Переменная skillLevel_2H может быть переиспользована, так как она ограничена блоком else if
        skillLevel_2H = Npc_GetTalentSkill(npc, NPC_TALENT_2H);

        if (skillLevel_2H == 1)
        {
            ReapplyOverlay(npc, "HUMANS_AXEST1.MDS"); // Оверлей ST1 для Топоров
        }
        else if (skillLevel_2H == 2)
        {
            ReapplyOverlay(npc, "HUMANS_AXEST2.MDS"); // Оверлей ST2 для Топоров
        }
Пост автоматически объединён:

и еще верно ли проведена проверка на одноручные мечи требующие ловкости:

Daedalus:
// **Проверка на ОДНОРУЧНЫЙ МЕЧ - ТРЕТЬЯ ПРОВЕРКА (теперь с проверкой на атрибут ловкости по всем трем индексам)**
    else if (item.flags & ITEM_SWD)
    {
        // **Проверяем, требует ли меч атрибут Ловкость (ATR_DEXTERITY) в любом из первых трех элементов cond_atr**
        if ( (item.cond_atr[0] == ATR_DEXTERITY) || (item.cond_atr[1] == ATR_DEXTERITY) || (item.cond_atr[2] == ATR_DEXTERITY) )
        {
            var int skillLevel_1H; // Используем навык одноручного оружия
            skillLevel_1H = Npc_GetTalentSkill(npc, NPC_TALENT_1H);

            if (skillLevel_1H == 1)
            {
                ReapplyOverlay(npc, "HUMANS_SPADA_ST1.MDS"); // Оверлей ST1 для шпаг (одноручных мечей, требующих ловкость)
            }
            else if (skillLevel_1H == 2)
            {
                ReapplyOverlay(npc, "HUMANS_SPADA_ST2.MDS"); // Оверлей ST2 для шпаг (одноручных мечей, требующих ловкость)
            }
            else
            {
                // **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для шпаг**
            };
        }
        // **Если меч НЕ требует ловкости (ни в одном из первых трех элементов cond_atr), то ничего не делаем, игра использует стандартные анимации**
        else
        {
            // **Не накладываем overlay, игра использует стандартные анимации для одноручных мечей, не требующих ловкости**
        };
    }
 
Последнее редактирование:
Сверху Снизу