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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Форум аддона "Возвращение" 2.0:
    — Обсудить игру, почитать о прохождениях и/или разрешить свои вопросы по игре вы можете в одной из тем одноименного форума. Посетить...
    — Прочитать историю изменения и/или скачать последнюю версию аддона "Возвращение", вы можете на страницах наших ресурсов. Скачать...
    Скрыть объявление

Важно Динамическая модель: описание eventTag'ов

Тема в разделе "Скриптинг", создана пользователем MEG@VOLT, 4 дек 2014.

  1. MEG@VOLT

    MEG@VOLT ★★★★★★★
    Модератор

    Регистрация:
    24 мар 2006
    Сообщения:
    1.631
    Благодарности:
    665
    Баллы:
    290
    Код:
    *eventTag(0 "DEF_DAM_MULTIPLY" "МНОЖИТЕЛЬ")
    Введение
    Описание формата MDS-файлов можно прочитать на «этой странице»:Динамическая модель (3DS Max, анимация и меши). Однако тот документ не содержит информации о событии eventTag, встречающейся в MDS-файле. Что ж, восполним пробел.

    Замечание. Информация, приведенная ниже, может быть местами неполной или даже неверной. Если у кого-то из моддеров будут дополнения/возражения, пишите, не стесняйтесь.

    Событие eventTag опционально и помещается в блок событий, который следует сразу за фазой анимации ani. Событие – это определенное действие, которое запускается во время проигрывания фазы анимации в определённом кадре или кадрах.

    Синтаксис:
    Код:
    ani ( ... НАЧ_КАДР КОН_КАДР )
    {
           *eventTag (КАДР "ИМЯ" "ПАРАМ1" "ПАРАМ2" "ПАРАМ3" "ПАРАМ4")
    }
    Здесь КАДР - целое число, НАЧ_КАДР ⇐ КАДР ⇐ КОН_КАДР. КАДР указывает время, когда движок должен выполнить дополнительное действие. Имя и параметры всегда в кавычках. Разделителями могут быть пробелы и знаки табуляции.

    Имя указывает тип eventTag'а - см. ниже. Число параметров может меняться от 0 до 4.

    Каждый eventTag имеет локальный характер - то есть указывает действия во время конкретной анимации. Еще применяется команда
    Код:
    modelTag (КАДР "ИМЯ" "ПАРАМ1" "ПАРАМ2" "ПАРАМ3" "ПАРАМ4")
    которая работает аналогично eventTag'у, но записывается внутри блока aniEnum и распространяется на все анимации модели.

    Проверка допустимости параметров eventTag'а выполняется не во время компиляции динамической модели, а непосредственно во время анимации - то есть в процессе игры. Недопустимое имя просто не обрабатывается, вылета в Windows не будет.

    Действие, выполняемое eventTag'ом, зависит от имени. Ниже приведен список вариантов eventTag'а с разными именами.

    1. Операции над слотами
    1.1. DEF_CREATE_ITEM

    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_CREATE_ITEM" "СЛОТ" "ПРЕДМЕТ")
    Создает предмет в слоте. При этом новый предмет вставляется в мир, т.е. предмет берется не из инвентаря NPC. «ПРЕДМЕТ» - это имя инстанции предмета. Предмет вставляется в мир не насовсем, а только до конца выполнения текущего набора анимаций, связанного с использованием предмета/MOB'а.

    Пример (использование наковальни):
    Код:
    ani    ("t_BSANVIL_Stand_2_S0"    1    "s_BSANVIL_S0"    0.1    0.0    M.    "Hum_BSAnvil_Jue00.asc"    F    0    2)
    ani    ("s_BSANVIL_S0"    1    "s_BSANVIL_S0"    0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"    F    3    3)
    ani    ("t_BSANVIL_S0_2_Stand"    1    ""    0.0    0.1    M.    "Hum_BSAnvil_Jue00.asc"    R    0    2)
    ani    ("t_BSANVIL_S0_2_S1"    1    "s_BSANVIL_S1"    0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"    F    4    9)
    {
        *eventTag    (4    "DEF_INSERT_ITEM"    "ZS_LEFTHAND")    // (1)
        *eventTag    (4    "DEF_CREATE_ITEM"    "ZS_RIGHTHAND"    "ItMw_1H_Mace_L_04")    // (2)
    }
    ani    ("s_BSANVIL_S1"    1    "s_BSANVIL_S1"    0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"    F    10    47)
    ani    ("t_BSANVIL_S1_2_S0"        1    "s_BSANVIL_S0"    0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"    R    4    9)
    {
        *eventTag    (4    "DEF_DESTROY_ITEM")    // (3)
    }
    В Spacer'е определено, что наковальня используется с предметом «ItMiSwordrawhot» (Раскаленная сталь), поэтому строка (1) на 4-м кадре вставит в левую руку NPC предмет ItMiSwordrawhot. Далее, строка (2) создаст в правой руке NPC предмет «ItMw_1H_Mace_L_04» (Кузнечный молот). В строке (3) используемый предмет «ItMiSwordrawhot» удаляется из мира. Вместо раскаленной стали уже скриптом вставляется тот или иной меч.

    1.2. DEF_INSERT_ITEM
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_INSERT_ITEM" "СЛОТ")
    Вставляет предмет из инвентаря в указанный слот. Предмет из инвентаря удаляется. eventTag «DEF_INSERT_ITEM» применяется в анимации использования предмета в инвентаре, пример:
    Код:
    // POTIONFAST
    ani    ("t_potionfast_Stand_2_S0"    1    "s_potionfast_S0"    0.1    0.0    M.    "Hum_DrinkPotion_M02.ASC"    F    1    5)
    {
        *eventTag    (5    "DEF_INSERT_ITEM"    "ZS_LEFTHAND")    // (1)
    }
    ani    ("s_potionfast_S0"    1    "s_potionfast_S0"    0.0    0.0    M.    "Hum_DrinkPotion_M02.asc"    F    6    6)
    ani    ("t_potionfast_S0_2_Stand"    1    ""    0.0    0.1    M.    "Hum_DrinkPotion_M02.asc"    F    7    39)
    {
        *eventSFX    (19    "DrinkBottle"    R:1000    )
        *eventTag    (35    "DEF_DESTROY_ITEM")    // (2)
    }
    Строка (1) на 5-м кадре анимации удаляет напиток из инвентаря и вставляет в левую руку NPC. Строка (2) удаляет напиток из левой руки NPC и из мира.

    Замечание. Один известный баг Готик: если ГГ пьет напиток и его в этот момент кто-то бьет, то эффект напитка применяется, однако напиток остается в инвентаре. Причина бага в том, что использованный напиток удаляется из мира в конце анимации питья, в то время как эффект напитка (скриптовая функция, увеличивающая характеристику ГГ) применяется в самом начале анимации. Когда ГГ бьют, анимация питья до конца не проигрывается, и напиток не успевает удалиться из мира.

    Другой пример (использование MOB'а):

    В Spacer'е записывается (поле useWithItem), какой предмет нужен для использования MOB'а. Этот предмет и будет вставлен в слот по команде eventTag «DEF_INSERT_ITEM».

    1.3. DEF_REMOVE_ITEM
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_REMOVE_ITEM")
    Убирает предмет, вставленный в слот через «DEF_INSERT_ITEM», из слота назад в инвентарь.

    1.4. DEF_DESTROY_ITEM
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_DESTROY_ITEM")
    Уничтожает предмет, вставленный в слот через «DEF_INSERT_ITEM». Предмет удаляется из мира.

    1.5. DEF_PLACE_ITEM
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_PLACE_ITEM")
    Удаляет предмет, вставленный через eventTag «DEF_INSERT_ITEM», из слота и из мира. По своему действию eventTag «DEF_INSERT_ITEM» является синонимом «DEF_DESTROY_ITEM».

    Замечание. Предположительно, изначально подразумевалось другое поведение eventTag'а «DEF_PLACE_ITEM», а именно: Если NPC взаимодействует с MOB'ом и у этого MOB'а есть слот «ZS_SLOT», то переместить предмет, вставленный через «DEF_INSERT_ITEM», из слота NPC в слот «ZS_SLOT» MOB'а. Пример (сердца орочьих жрецов в храме Спящего, Г1):
    Код:
    // Sleeper Portal
    ani    ("t_SPORTAL_Stand_2_S0"    1    "s_SPORTAL_S0"    0.0    0.0    M.    "Hum_SleeperPortal_M01.asc"    F    0    19)
    ani    ("s_SPORTAL_S0"    1    "s_SPORTAL_S0"    0.0    0.0    M.    "Hum_SleeperPortal_M01.asc"    F    20    20)
    ani    ("t_SPORTAL_S0_2_Stand"    1    ""    0.0    0.2    M.    "Hum_SleeperPortal_M01.asc"    R    0    19)
    ani    ("t_SPORTAL_S0_2_S1"        1    "s_SPORTAL_S1"    0.0    0.0    M.    "Hum_SleeperPortal_M01.asc"    F    21    90    FPS:10)
    {
        *eventTag    (60    "DEF_INSERT_ITEM"    "ZS_RIGHTHAND")    // (1)
        *eventTag    (90    "DEF_PLACE_ITEM")    // (2)
    }
    ani    ("s_SPORTAL_S1"    1    "s_SPORTAL_S1"    0.0    0.0    M.    "Hum_SleeperPortal_M01.asc"    F    91    91)
    ani    ("t_SPORTAL_S1_2_Stand"    1    ""    0.0    0.2    M.    "Hum_SleeperPortal_M01.asc"    F    90    100)
    Выполнение строки (1) приводит к тому, что на 60-м кадре ГГ достает меч орочьего жреца (из инвентаря), а строка (2), предположительно, должна была оставлять вставленный в сердце меч торчащим из этого сердца. Для этого слот «ZS_SLOT» для MOB'а и нужен - чтобы указать местонахождение меча после вставки в сердце.

    На самом деле, строка (2) просто удаляет меч из мира, как «DEF_DESTROY_ITEM». Предположительно, eventTag «DEF_PLACE_ITEM» -это еще одна задумка Пираний, не доведенная до конца в Г1. В Г2 eventTag «DEF_PLACE_ITEM» не используется.

    1.6. DEF_EXCHANGE_ITEM
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_EXCHANGE_ITEM" "СЛОТ" "ПРЕДМЕТ")
    Заменяет предмет в слоте другим предметом. Предмет удаляется из слота и из мира, а вместо него создается другой предмет (имя инстанции которого указывается) в том же слоте.

    2. Доставание и убирание оружия
    2.1. DEF_FIGHTMODE
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_FIGHTMODE" "БОЕВОЙ_РЕЖИМ")
    Используется в переходных анимациях типа «t_1h_2_1hRun» и выполняет переключение NPC в один из боевых режимов.

    Здесь «БОЕВОЙ_РЕЖИМ» - одно из значений:
    • »» - убрать оружие;
    • «FIST» - кулаки;
    • «1H» или «1HS» - одноручное оружие;
    • «2H» или «2HS» - двуручное оружие;
    • «BOW» - лук;
    • «CBOW» - арбалет;
    • «MAG» - магия.
    Например, для параметра «1H» выполняется удаление меча из слота «ZS_SWORD» и вставка меча в слот «ZS_RIGHTHAND», устанавливается следующая анимация (запустится после завершения текущей) «s_1h».

    2.2. DEF_PLACE_MUNITION
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_PLACE_MUNITION" "СЛОТ")
    Создает амуницию, например стрелу для лука в процессе перезарядки после выстрела. «СЛОТ» - это имя слота, где создается амуниция.

    Допустимы только два наименования слота: «ZS_LEFTHAND» и «ZS_RIGHTHAND». Амуниция всегда соответствует экипированному оружию стрелковому оружию(поле munition в описании инстанции C_Item). Пример:
    Код:
    instance ItRw_Sld_Bow(C_Item)
    {
        name = "Лук";
        mainflag = ITEM_KAT_FF;
        flags = ITEM_BOW;
        material = MAT_WOOD;
        value = Value_SldBogen;
        damageTotal = Damage_SldBogen;
        damagetype = DAM_POINT;
        munition = ItRw_Arrow;
        cond_atr[2] = ATR_DEXTERITY;
        cond_value[2] = Condition_SldBogen;
        visual = "ItRw_Sld_Bow.mms";
        description = name;
        text[2] = NAME_Damage;
        count[2] = damageTotal;
        text[3] = NAME_Dex_needed;
        count[3] = cond_value[2];
        text[5] = NAME_Value;
        count[5] = value;
    };
    2.3. DEF_REMOVE_MUNITION
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_REMOVE_MUNITION")
    Удаляет ранее экипированную амуницию (см. описание DEF_PLACE_MUNITION).

    2.4. DEF_DRAWSOUND
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_DRAWSOUND")
    Начинает проигрывание звукового эффекта вытаскивания оружия:
    • «DrawSound_WO.wav» - для деревянного оружия;
    • «DrawSound_ME.wav» - для металлического оружия.
    2.5. DEF_UNDRAWSOUND
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_UNDRAWSOUND")
    Начинает проигрывание звукового эффекта убирания оружия:
    • «UndrawSound_WO.wav» - для деревянного оружия;
    • «UndrawSound_ME.wav» - для металлического оружия.
    2.6. DEF_SWAPMESH
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_SWAPMESH" "СЛОТ1" "СЛОТ2")
    Поменяет местами предметы в слотах; «СЛОТ1» и «СЛОТ2» - это имена слотов, объекты в которых нужно поменять. Пустые имена не допускаются.

    Не рекомендуется использовать «ZS_RIGHTHAND» и «ZS_LEFTHAND» в качестве имени первого или второго слота, т.к. в этом случае движок произведет попытку перевести NPC в один из боевых режимов (аналогично eventTag «DEF_FIGHTMODE»), что иногда может закончиться зависанием игры.

    Существует похожий способ переставлять предметы в слотах - это команда
    Код:
    *eventSwapMesh(КАДР "СЛОТ1" "СЛОТ2")
    Основные отличия: eventSwapMesh меняет местами только меши предметов в слотах, а eventTag «DEF_SWAPMESH» меняет местами сами эти предметы. Кроме того, eventSwapMesh одинаково работает для любых имен слотов, а eventTag «DEF_SWAPMESH» имеет особое поведение, когда один из слотов является «ZS_LEFTHAND» или «ZS_RIGHTHAND».

    3. Операции с факелами
    3.1. DEF_DRAWTORCH

    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_DRAWTORCH")
    Ничего не делает.
    3.2. DEF_INV_TORCH
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_INV_TORCH")
    Если в левой руке NPC нет факела, то ничего не делает.

    Если же в левой руке NPC держит факел, то убирает факел в инвентарь до конца текущего набора анимаций, связанных с использованием предмета/MOB'а. Пример: NPC подходит с горящим факелом к кровати, ложится спать. Нужно временно убрать факел из левой руки, иначе NPC может поджечь кровать ;)
    3.3. DEF_DROP_TORCH
    Синтаксис:
    Код:
    *eventTag(КАДР "DEF_DROP_TORCH")
    То же, что и DEF_INV_TORCH, только факел не убирается в инвентарь, а кидается на землю.
    4. Атака и защита
    4.1. DEF_HIT_LIMB
    Синтаксис:
    Код:
    *eventTag(0 "DEF_HIT_LIMB" "КОНЕЧНОСТЬ1" "КОНЕЧНОСТЬ2" "КОНЕЧНОСТЬ3" "КОНЕЧНОСТЬ4")
    Устанавливает, какой частью тела персонаж наносит повреждение другим персонажам. В качестве параметров используются имена костей/слотов. Можно указать до четырех повреждающих конечностей.

    Пример:
    Код:
    //для кулачной драки устанавливается
    *eventTag(0 "DEF_HIT_LIMB" "Bip01 R Hand")
    //для драки одноручным оружием устанавливается
    *eventTag(0 "DEF_HIT_LIMB"    "ZS_RIGHTHAND")
    //(в боевом режиме одноручное оружие находится в слоте "ZS_RIGHTHAND")
    //для кусающегося снеппера устанавливается
    *eventTag(0 "DEF_HIT_LIMB"    "BIP01 HEAD")
    4.2. DEF_HIT_DIR
    Синтаксис:
    Код:
    *eventTag(0 "DEF_HIT_DIR" "НАПРАВЛЕНИЕ")
    Устанавливает направление удара - влияет на выбор анимации защиты. Например, если первый NPC бьет другого посредством анимации
    Код:
    ani ("s_2hAttack" ...)
    {
            ...
            *eventTag (0 "DEF_DIR"  "U")
            ...
    }
    а другой, дерущийся одноручным оружием, успевает заблокировать удар, то будет использована анимация «t_1hParade_U» для блока. То есть при определении анимации атаки можно указать, какой анимацией нужно поставить блок. (Понятно, что если атакуемый NPC - сам игрок, то выбор соответствующей анимации для блока выполнит движок, а не человек.)
    «НАПРАВЛЕНИЕ» - любая строка текста длиной до 10 символов. Направление по умолчанию - «O» (заглавная английская буква, не ноль). То есть
    Код:
    //отсутствие строчки
    *eventTag (0 "DEF_DIR" ...)
    //дает то же, что и присутствие
    *eventTag (0 "DEF_DIR" "O")
    4.3. DEF_DAM_MULTIPLY
    Синтаксис:
    Код:
    *eventTag(0 "DEF_DAM_MULTIPLY" "МНОЖИТЕЛЬ")
    Позволяет указать множитель урона для анимации атаки. То есть, например, если для какой-то анимации атаки мы пишем
    Код:
    ani    ("s_2hAttack_1" ...)
    {
        ...
        *eventTag    (0 "DEF_DAM_MULTIPLIER"    "2.0")
        ...
    }
    то это означает, что эта атака будет наносить урон вдвое больший, чем вообще-то положено при таких соотношениях силы, урона оружия и брони противника. Урон будет умножаться на два независимо от того, критическая атака или нет. Можно написать число, меньшее 1.0, и тогда урон будет уменьшен.

    4.4. DEF_PAR_FRAME
    Синтаксис:
    Код:
    *eventTag(0 "DEF_PAR_FRAME" "НАЧ_КАДР КОН_КАДР")
    Используется для анимации блокирования. Указывает, начиная с какого кадра и заканчивая каким блок будет давать защиту от урона. Если не указать такой eventTag или указать «0 0» в качестве начального и конечного кадров, то блок будет давать защиту все время проигрывания анимации.

    4.5. DEF_OPT_FRAME
    Синтаксис:
    Код:
    *eventTag(0 "DEF_OPT_FRAME" "КАДР1 КАДР2 КАДР3 ... КАДР10")
    Используется для анимации атаки. Указываются кадры (числом от 1 до 10), когда нужно проверять на столкновение повреждающей конечности (см. описание «DEF_HIT_LIMB») и жертвы. Несколько кадров указывается, чтобы реализовать комбоудар. Таким образом, комбоудар может состоять из максимум 10 ударов. Обычно eventTag «DEF_OPT_FRAME» применяется вместе с «DEF_HIT_END» и «DEF_WINDOW».
    Пример (mds_overlay\human_2hST2.mds, Г2):
    Код:
    ani ("s_2hAttack" 1 "s_2hAttack" 0.0 0.2 M. "Hum_2hAttackComboT3_M02.asc" F 1 150)
    {
        *eventTag (0 "DEF_HIT_LIMB" "ZS_RIGHTHAND")
        *eventTag (0 "DEF_OPT_FRAME" "5 45 90 138")
        *eventTag (0 "DEF_HIT_END" "35 75 120 147")
        *eventTag (0 "DEF_WINDOW" "13 41 53 81 98 126 146 149")
        ...
    }
    Анимация содержит кадры с 1 по 150. Полный комбоудар будет состоять из 4 ударов - на 5, 45, 90 и 138 кадрах. При этом возможны случаи:
    • Если игрок не нажмет клавишу «вверх» между 13 и 41 кадрами, то его персонаж нанесет только 1 удар и анимация закончится на 35 кадре;
    • Если игрок нажмет клавишу «вверх» между 13 и 41 кадрами, но не нажмет клавишу «вверх» между 53 и 81 кадрами, то его персонаж нанесет 2 удара и анимация закончится на 75 кадре;
    • Если игрок нажмет клавишу «вверх» между 13 и 41 кадрами, нажмет клавишу «вверх» между 53 и 81 кадрами, но не нажмет клавишу «вверх» между 98 и 126 кадрами, то его персонаж нанесет 3 удара и анимация закончится на 120 кадре;
    • и т.д.

    4.6. DEF_HIT_END
    Синтаксис:
    Код:
    *eventTag(0 "DEF_HIT_END" "КАДР1 КАДР2 КАДР3 ... КАДР10")
    Указывает кадр, на котором «обрубается» комбоудар, если не нажать во время клавишу «вверх» (Г1) или левую кнопку мыши (Г2). Баг Готик в том, что в этом случае мы услышим все звуковые эффекты, следующие за этим кадром, а анимация заканчивается характерным передёргиванием персонажа.
    Число кадров, указанное в этой записи, должно совпадать с числом кадров eventTag'а «DEF_OPT_FRAME».

    4.7. DEF_WINDOW
    Синтаксис:
    Код:
    *eventTag(0 "DEF_WINDOW" "НАЧ_КАДР1 КОН_КАДР1 НАЧ_КАДР2 КОН_КАДР2 ... НАЧ_КАДР10 КОН_КАДР10")
    позволяет задать «окно» на анимации - интервал кадров, в течение которого нужно нажать клавишу «вверх» (Г1) или левую кнопку мыши (Г2), чтобы продолжить комбоудар. Если не успеть - см. выше, что будет.

    Число интервалов должно совпадать с числом кадров eventTag'а «DEF_OPT_FRAME» (см. пример выше).

    *P.S.* Спасибо *alex_draven* и *Ukur*'у за ценные замечания.

    Автор - Kerrax.
     
  2. Bezio

    Bezio Участник форума

    Регистрация:
    27 июн 2012
    Сообщения:
    162
    Благодарности:
    161
    Баллы:
    150
    Пол:
    Мужской
    На сию тему появился вопрос:

    Нигде не написано (Да и сам найти в скриптах не смог), какая же функция отвечает за переход предмета "из слота в мир"? Единственное, что по этому поводу есть в статье - DEF_DROP_TORCH, однако она действует, вроде, только с факелом в левой руке и только при определенных условиях... Просто есть несколько действий, при который предмет действительно из слота (К примеру Zs_Righthand) переходит в мир и падает, а именно: Непосредственно сам ItemDrop, при нем определенный предмет из инвентаря появляется в слоте правой руки (Zs_Righthand) и на 7-ом кадре выпадает из него "В мир", однако в MDS-файле ни малейшего упоминания об этих процессах:

    Открыть спойлер

    ani ("t_Stand_2_IDrop" 1 "s_IDrop" 0.1 0.0 M. "Hum_ItemDrop_A01.asc" F 1 6)
    ani ("s_IDrop" 1 "s_IDrop" 0.0 0.0 M. "Hum_ItemDrop_A01.asc" F 7 7)
    ani ("t_IDrop_2_Stand" 1 "" 0.0 0.1 M. "Hum_ItemDrop_A01.asc" F 8 14)



    Так же и с неиспользованным броском предмета из Г1 (Происходит, когда в положении Ambient (Стандартное положение, без каких-либо боевых режимов) в слоте правой руки есть какой-либо предмет, тогда при зажатии действия ГГ размахнется и швырнет этот предмет, хотя и пролетит он недалеко - упадет на таком же расстоянии, что и если его просто из инвентаря сбросить), Однако суть в том, что тут тоже действует этот самый переход "из слота в мир" и, опять же, в скрипте нигде ничего не сказано:

    Открыть спойлер

    ani ("t_Stand_2_IAim" 1 "s_IAim" 0.1 0.1 M. "Hum_ItemThrow_M01.asc" F 1 6)

    ani ("c_IAim_1" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 47 47)
    ani ("c_IAim_2" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 8 8)
    ani ("c_IAim_3" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 125 125)
    ani ("c_IAim_4" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 86 86)
    aniComb ("s_IAim" 1 "s_IAim" 0.2 0.2 M. "c_IAim_" 4)

    aniAlias ("t_IAim_2_Stand" 1 "" 0.1 0.1 M. "t_Stand_2_IAim" R)

    ani ("c_IAim_2_IThrow_1" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 48 58)
    ani ("c_IAim_2_IThrow_2" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 9 19)
    ani ("c_IAim_2_IThrow_3" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 126 136)
    ani ("c_IAim_2_IThrow_4" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 87 97)
    aniComb ("t_IAim_2_IThrow" 1 "s_IThrow" 0.2 0.2 M. "c_IAim_2_IThrow_" 4)

    ani ("c_IThrow_1" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 59 59)
    ani ("c_IThrow_2" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 20 20)
    ani ("c_IThrow_3" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 137 137)
    ani ("c_IThrow_4" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 98 98)
    aniComb ("s_IThrow" 1 "s_IThrow" 0.2 0.2 M. "c_IThrow_" 4)

    ani ("c_IThrow_2_Stand_1" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 60 83)
    ani ("c_IThrow_2_Stand_2" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 21 44)
    ani ("c_IThrow_2_Stand_3" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 138 161)
    ani ("c_IThrow_2_Stand_4" 4 "" 0.0 0.0 . "Hum_ItemThrow_M01.asc" F 99 122)
    aniComb ("t_IThrow_2_Stand" 1 "" 0.2 0.2 M. "c_IThrow_2_Stand_" 4)



    Добавлял его к себе в Humans.mds из Г2 и, что странно, в скрипте тоже нигде не написано или же я этого не вижу, при таком же положении и нажатии действия ГГ тоже вставал в позу броска, но так в ней и замирал (Даже с управлением из Г1), похоже особое управление в самой Г1 активировало продолжение фаз, или же где-то в скриптах (Не представляю, где) это написано, однако тогда непонятно, зачем было оставлять реакцию на этот "Бросок", если самих анимаций и их фаз в Г2 нет... Но отошел от темы..

    Так же переход "из слота в мир" происходит, если опять же, в амбиент-состоянии иметь в правой руке какой-нибудь предмет, а потом открыть меч, или же перейти в какой-либо другой боевой режим - предмет из слота правой руки снова выпадет (И в случае "вытеснения" его другим предметом в слоте, и даже если перейти в режим кулаков (Fist))

    Еще, конечно же, переход "из слота в мир" происходит, когда персонаж погибает или оглушается с оружием в руках: и орудие и снаряд выпадают (Хотя, когда в Темной Саге щиты и дуал-мечи были "арбалетами", искусственно вставленными в слот левой руки (Zs_Leftthand), они при гибели или оглушении либо прятались в инвентарь, либо оставались висеть в слоте, что указывает на "движковую" природу этого дропа)

    У Сатураса в AST-е (Я было дело, немного тестил) при выстреле из какого-либо стрелкового орудия, не поразивший цель и упавший (Теперь и воткнувшийся) снаряд можно подобрать, пока он не "Растворился", что тоже из себя представляет некий переход "в мир".

    Лично мне это нужно для пары своих идей, и самая простая из них - бросок камня (Как эксперимент, при активации его из инвентаря, потом можно доразвить до того же ItemThrow, но с нормально дугой), анимация пролета камня по нормальной дуге - анимация слота Zs_Righthand, по окончанию полета, но еще в воздухе камень должен выйти из слота в мир и под хоть какой-то физикой Готики доупасть на землю. Да, есть небольшие казусы, к примеру, если дуга окажется ниже ландшафта, тогда камень пройдет сквозь него, или же если дуга окажется наоборот, значительно выше уровня ландшафта, тогда в момент выхода в мир камень будет лететь по прямой вниз, что будет выглядеть угловато.

    ЗЫ. DEF_PLACE_ITEM - по идее был переход предмета из слота персонажа в слот Mobsi-объекта, в Г1 были так же орочий саркофаг, на грудь которому нужно было что-то поставить, напольная платформа, в которую нужно вставить меч (Использовалась для открывания ворот в храме Спящего), те же сердца орочьих жрецов. Можно ли как-нибудь реанимировать этот необычный переход?


    И кстати да, из моей заезженной темы о взаимодействиях между NPC, вроде, в более ранних версиях Г1 (К примеру, дэмо-версия) я нашел такую анимацию, как "Передать предмет" (TradeItem) и выглядит она соответственно: Персонаж протягивает руку вперед ладонью (Если бы она у него была...) вверх. Можно было бы сделать передачу предмета более детально, чем есть в Готике (Надписи о получении и отдаче), при которых бы ГГ доставал предмет (или сверток\кошелек) и протягивал его персонажу, а тот бы его брал обычной анимацией поднятия предмета на средней высоте (Тут бы и происходил переход из слота одного персонажа в слот другого). Мелочь, а добавила бы красивости в диалоге. (В моде Одиссея эта анимация используется в диалогах)
     
    Последнее редактирование: 5 дек 2015
    Дикарь, MEG@VOLT и hell9999 поблагодарили.
  3. MaGoth

    MaGoth ★★★★★★★★★★★
    Администратор

    Регистрация:
    7 янв 2005
    Сообщения:
    13.428
    Благодарности:
    5.907
    Баллы:
    740
    Пол:
    Мужской
    Функция движка, не ?! ::)
     
  4. alex_draven

    alex_draven
    Модостроитель

    Регистрация:
    13 сен 2007
    Сообщения:
    1.272
    Благодарности:
    1.524
    Баллы:
    315
    Пол:
    Мужской
    Движок, конечно. Остальное - разной степени огрызки от нереализованных идей. Подчищено в Готике 2.
    Именно так. Но не доведено до ума.
     
    neromont и Bezio поблагодарили.
  5. ElderGamer

    ElderGamer
    Модостроитель

    Регистрация:
    16 апр 2008
    Сообщения:
    1.346
    Благодарности:
    828
    Баллы:
    260
    Вот цитата камрада Керракс:

    С оригинальным движком Г1 это работает. По иронии судьбы в Генжине взаимодействие с объектом oCMobItemSlot вызывает вылет. Недостатки:
    1. после загрузки сохранения объект возвращается в первоначальное состояние S0;
    2. предмет не перестаёт появляться в фокусе, и его можно взять без проигрывания анимаций взаимодействия с объектом.
     
    Bezio и НастасьСанна поблагодарили.
  6. SinnerSmile

    SinnerSmile Участник форума

    Регистрация:
    3 фев 2017
    Сообщения:
    91
    Благодарности:
    33
    Баллы:
    30
    Пол:
    Мужской
    Добрый день, было бы чУдно добавить к DEF_WINDOW информацию о том, что именно конец каждого интервала в DEF_WINDOW используется движком для определения с какого кадра начинать следующую анимацию удара в комбо. А не HIT_END, как можно было бы подумать.
     

Поделиться этой страницей

Neverwinter