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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте

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

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
посох
Daedalus:
if (item.damageType == DAM_BLUNT) && (item.flags & ITEM_2HD_AXE)
Дубинки, молотки боюсь тоже протиснутся в эту категорию :)
Пост автоматически объединён:

Финальный скрипт....не работает)
Игра спотыкается на Undefined function: STR_TOUPPER

Daedalus:
func void UpdateBattleOverlays(var C_NPC npc)
{
    if Npc_GetTrueGuild(npc) >= GIL_SEPERATOR_HUM
    {
        return;
    };

    var C_ITEM item;
    item = Npc_GetReadiedWeapon(npc);

    if !Hlp_IsValidItem(item)
    {
        item = Npc_GetEquippedMeleeWeapon(npc);
    };

    if !Hlp_IsValidItem(item)
    {
        return;
    };

    // **Проверка: по имени или по визуалной модели на "Посох" - ПЕРВАЯ ПРОВЕРКА**
    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 для Топоров
        }
        else
        {
            // **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для Топоров**
        };
    }
    // **Проверка на УНИКАЛЬНОЕ ОРУЖИЕ BELIAR - ТРЕТЬЯ ПРОВЕРКА (теперь без проверки навыка)**
    else if (Str_Contains(name, "_BeliarWeapon"))
    {
        // **Удалена проверка уровня навыка, всегда применяем HUMANS_1X2ST3.MDS**
        ReapplyOverlay(npc, "HUMANS_1X2ST3.MDS"); // Оверлей HUMANS_1X2ST3.MDS для Уникального оружия Beliar (без учета навыка)
    }
    // **Проверка на ОДНОРУЧНЫЙ МЕЧ - ЧЕТВЕРТАЯ ПРОВЕРКА (теперь с проверкой на атрибут ловкости по всем трем индексам)**
    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_RAPIER_ST1.MDS"); // Оверлей ST1 для рапир (одноручных мечей, требующих ловкость)
            }
            else if (skillLevel_1H == 2)
            {
                ReapplyOverlay(npc, "HUMANS_RAPIER_ST3.MDS"); // Оверлей ST2 для рапир (одноручных мечей, требующих ловкость)
            }
            else
            {
                // **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для рапир**
            };
        }
        // **Если меч НЕ требует ловкости (ни в одном из первых трех элементов cond_atr), то ничего не делаем, игра использует стандартные анимации**
        else
        {
            // **Не накладываем overlay, игра использует стандартные анимации для одноручных мечей, не требующих ловкости**
        };
    }
    // **БЛОК ДЛЯ "ВСЕГО ОСТАЛЬНОГО ОРУЖИЯ" **
};
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.034
Благодарности
995
Баллы
295
Дубинки, молотки боюсь тоже протиснутся в эту категорию :)
а есть двуручные дубины?:) тогда добавь проверку по range, посохи должны быть длинные. ну или просто выпиши в отдельную проверку все посохи и проверь по инстанции.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.034
Благодарности
995
Баллы
295
мне кажется это бессмысленная дичь. лучше через функцию экипировки назначать оверлеи для конкретных инстанций.
 

Вложения

  • UpdateBattleOverlays.zip
    1,3 KB · Просмотры: 0
Последнее редактирование:

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
MW 7, Не, я рукожоп.
Кодить не умею от слова совсем.
А эту муть мне Gemini накидала, и то не работает нифига.
а если просто добавить в функцию экипировки?

Код:
instance ItMw_Addon_Stab03(C_Item)
{
...
    on_equip = Equip_ItMw_Addon_Stab03;
...
};

func void Equip_ItMw_Addon_Stab03rstab()
{
        ReapplyOverlay(self, "HUMANS_1HST2.MDS");
};
Gratt упоминал, что через On_equip,
Но, как я понял, Slavemaster реализовал через другую функцию. Мб разница непринципиальна или есть какие нибудь нюансы
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.034
Благодарности
995
Баллы
295
Dreamtrust, скинь оверлеи. у тебя какая версия игры?
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
MW 7, тестирую на Г2 Ночь Ворона. Анимации предварительные. Как скрипт заработает подберу более-менее.
P.S: Честно сворованные из НБ :) Но с разрешения разработчиков.
 

Вложения

  • UpdateBattleOverlays.d
    1,5 KB · Просмотры: 2
  • zUpdateBattleOverlays.vdf
    1,2 MB · Просмотры: 1

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.034
Благодарности
995
Баллы
295
мне кажется смысла в этом мало. лучше делать через функцию экипировки для конкретных инстанций.
 

Вложения

  • UpdateBattleOverlays.zip
    1,3 KB · Просмотры: 7

Dreamtrust

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

И еще, то что придаст этому плагину фишку/уникальность.
Как сделать так, чтобы анимации стандартной боевки выбирались случайным образом из списка предоставленных 3-4.
 
Последнее редактирование:

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
MW 7, Окончательную подборку анимации я еще не закончил, но приблизительно можно оперировать HUMANS_1HST2A.MDS, HUMANS_1HST2B.MDS и HUMANS_2HST2A.MDS, HUMANS_2HST2B.MDS, HUMANS_2HST2C.MDS.
Где-то 2-3 оверлея на 1р Мастер и 3-4 оверлея на 2р Мастер.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.034
Благодарности
995
Баллы
295
HUMANS_1HST2A.MDS, HUMANS_1HST2B.MDS
Daedalus:
func void UpdateOverlays1hMDK(var C_NPC npc)
{
    var int skillLevel; // Добавляем переменную для уровня навыка двуручного оружия
    skillLevel = Npc_GetTalentSkill(npc, NPC_TALENT_1H); // Получаем уровень навыка
    
    var string Overlay;   
    
    if      (skillLevel == 1)   { Overlay = "HUMANS_1HST1.MDS"; }
    else if (skillLevel == 2)   
    {
        var int rnd; rnd = Hlp_Random(2);
        if      (rnd == 0)      { Overlay = "HUMANS_1HST2A.MDS"; }
        else /*if (rnd == 1)*/  { Overlay = "HUMANS_1HST2B.MDS"; };
    }
    else                        { Overlay = "HUMANS_1HST0.MDS"; };
    ReapplyOverlay(npc, Overlay);
};
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
var int rnd; rnd = Hlp_Random(2);
Будет ролл от 0 до 1? а если Hlp_Random(4) то от 0 до 3? В общем от нуля и до (число в скобка-1), так?

А если 4 варианта то:
Daedalus:
func void UpdateOverlays1hMDK(var C_NPC npc)
{
    var int skillLevel; // Добавляем переменную для уровня навыка двуручного оружия
    skillLevel = Npc_GetTalentSkill(npc, NPC_TALENT_1H); // Получаем уровень навыка
  
    var string Overlay; 
  
    if      (skillLevel == 1)   { Overlay = "HUMANS_1HST1.MDS"; }
    else if (skillLevel == 2) 
    {
       var int rnd; rnd = Hlp_Random(4);

        if      (rnd == 0)  { Overlay = "HUMANS_1HST2A.MDS"; }

        else if (rnd == 1)  { Overlay = "HUMANS_1HST2B.MDS"; }

        else if (rnd == 2)  { Overlay = "HUMANS_1HST2C.MDS"; }

        else if (rnd == 3)  { Overlay = "HUMANS_1HST2D.MDS"; };
    }
    else                        { Overlay = "HUMANS_1HST0.MDS"; };
    ReapplyOverlay(npc, Overlay);
};

так?


UPD.: Ага, вроде всё работает

Теперь осталось с посохом разобраться, так вроде норм:
Daedalus:
// Двуручный посох
        if (item.material == MAT_WOOD)
        && (item.range >= 110)
        {
            ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Название оверлея для шестов/посохов
            return;
        }; 
        UpdateOverlays2hMDK(npc);
        return;
 
Последнее редактирование:

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
284
Благодарности
87
Баллы
80
Вроде работает, нужен альфа тест, в плагин интегрированы:
HumanRemasterlight так, как некоторые анимации без него отказываются работать
zSmoothanitransitions, чтобы лентяи не испортили себе впечатление резкими переходами
Ну и скриптовый файл положил в плагин, чтобы народ не заморачивался.
Итого:
4 анимации на топоры: по 2 на каждый уровни владения Боец и Мастер
1 анимация на шест вне зависимости от уровня владения - пока не распознает посохи магов моды с металлическим наконечником и задействует анимации топоров
5 анимации на 1р меч: 2 на Боец и 3 на Мастер
3 анимации на 2р меч: Мастер
4 анимации на ловкостные 1р мечи: 1 -Новичок, 1 - Боец и 2 на Мастера
Gratt, Slavemaster, MW 7 - Вам, господа, огромная благодарность за помощь в реализации
LikerGothic, Haart - Вам, спасибо, что разрешили использовать анимации с НБ.

Установка: просто закинуть в Data/plugins
 

Вложения

  • zUpdateBattleOverlays.vdf
    5,8 MB · Просмотры: 3
Сверху Снизу