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

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

    Ссылка на конкурсную тему - тык

Не стесняюсь спросить....

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Ни к чему изменение флага NPC_FLAG_GHOST - не приведёт, ибо нельзя поменять свойства материала на ходу, а именно применить вдруг внезапно альфа-канал.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Как там в том анегдоте говорится солдат должен быть смел и находчив, так и модостроители должны быть пытливы и сообразительны. Давай те рассуждать в Г2 впринципе ГГ может поменять визуал используя свитки превращения, а значит лазейка имеется. Попытаемся ею воспользоваться:

Итак прописывает в constsnts.d новое заклинание:
Код:
const int SPL_DedMahno         = 64; //Превращение в деда Махно
В свойствах пойла прописываем:
Код:
    spell = SPL_DedMahno ;
В Spell_Transform.d пишем что-то типа такого:
Код:
func int Spell_Logic_Trf DedMahno (var int manaInvested)
{
   Npc_SetActiveSpellInfo(self, DedMahno );
return SPL_SENDCAST;
 };
Естественно нам еще следует прописать инстанцию чудо зверя Деда Махно, которая отличается от инстанции ГГ только флагом.
p.S. Это только мысли вслух. Будет ли это работать не знаю и в данный момент нет возможности проверить. Так что когда проверите скажите самому интересно:)
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
Интересная задачка. Сначала я думала, что флаг невидимости срабатывает, когда на модель накладывается визуал. Однако повторный вызов Mdl_SetVisualBody прозрачности ГГ не добавил, хотя внешность изменил. Оверлей тоже не сработал. Зато если выпить зелье и сохранить-загрузить игру, то ГГ становится прозрачным.
Вывод - прозрачность накладывается только при вставке NPC в мир. Придется вызвать вставку. Загрузка-сохранение очевидно не подходят, переход в другую локацию тоже. Остается телепортация. К счастью, телепортироваться можно куда угодно, в том числе к самому себе.
Итак, код для ГГ (проверено, рабочий):
Код:
if (Hlp_GetInstance(self) == Hlp_GetInstance(PC_Hero))
{
    self.flags = NPC_FLAG_GHOST;
    AI_Teleport(self,"PC_HERO");
};
Разумеется, можно вписать другого NPC, но нужно заранее знать его "название" в скриптах. Можно развить идею и для любого NPC, который выпьет зелье, реализовав цепочку "вставить спец.предмет на место NPC" -> "телепорт к предмету" -> "удаление предмета из мира".
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Вот пчелка умница.Всех посрамила:D
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
Решил все-таки разобраться со всеми видами анимаций. Нужна помощь.
Создание статической анимации:
  • Статический объект. Именуем через приставку zm_. (Само имя может быть любым)
  • Dummy объект с именем начинающимся через префикс Bip01 . Отвечает за отображение фокусного имени объекта. Располагается на высоте 97 - 100 см.
  • Импортируем Hum_Body_Naked0.max.
  • Удаляем из скелета все объекты начинающиеся с префикса zs_.
  • Dummy объект определяющий начальное положение при создании анимации. Даем имя ZS_POS0. Расположена на высоте 99,95 и по оси Y = -7,377.
  • Связываем Dummy объекты. ZS_POS с Bip01 [NAME].
  • Анимируем персонаж.
  • Экспортируем ASC файл содержащий данные Mesh объекта.
  • Экспортируем ASC файл анимации персонажа, предварительно удалив Mesh - объект.
  • Прописываем сценарий в Human.mds
  • Вставляем в Spacer.
  • Тестируем в игре.
Вопрос: Ничего не упустил?

Вопрос 2: Касается скриптов анимации.

Из описания по скриптам значится:
Префикс "s_": State-Ani (Состояние анимации)
Префикс "t_": Transition-Ani (Переход состояния анимации)

А что означают префиксы R_ и C_?

Вопрос 3: Сколько текстур можно использовать для одних доспехов?
(Разобрался. Не более четырех).
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
А что означают префиксы R_ и C_?

R_* - рандомные анимации. Насколько я понял, они воспроизводятся из заскриптованного распорядка, выполняемого неписем.

C_* - покадровые состояния, например, взгляд в нужном направлении. Предполагаю, что движок в зависимости от ситуации использует одно из этих состояний.
Код:
// LOOK Autoaiming
// Seitenwinkel: +/- 60°    Hцhenwinkel: +/- 45°
            ani            ("c_look_1"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    0    0)
            ani            ("c_look_2"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    1    1)
            ani            ("c_look_3"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    2    2)
            ani            ("c_look_4"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    3    3)
            ani            ("c_look_5"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    4    4)
            ani            ("c_look_6"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    5    5)
            ani            ("c_look_7"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    6    6)
            ani            ("c_look_8"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    7    7)
            ani            ("c_look_9"                9    ""                0.0    0.0    .    "Hum_Look_Autoaim_M01.asc"    F    8    8)
 
            aniComb        ("t_look"                9    "t_look"        0.3    0.3    M.    "c_look_"    9)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
Подскажи. А порядок создания анимации верный? А то что-то не получается никак.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Мне ещё не доводилось делать полноценную связку объект-анимация, поэтому алгоритм действий мне не известен. Я правил объект под существующую анимацию или правил существующую анимацию под готовый объект, но с нуля не делал.

В твоём алгоритме действий смущает это:
- Объекты Dummy с именем zs_POS0... zs_POSN, где N - количество исходных позиций персонажа.

В исходнике для компиляции тип этих объектов должен быть "HELPEROBJECT"
*HELPEROBJECT {
*NODE_NAME "ZS_POS0"
*NODE_TM {
*NODE_NAME "ZS_POS0"
*TM_ROW0 1.0 0.0 0.0
*TM_ROW1 0.0 1.0 0.0
*TM_ROW2 0.0 0.0 1.0
*TM_ROW3 -46.2848 -65.445 97.4066
*TM_POS -46.2848 -65.445 97.4066
*TM_ROTAXIS 0.0 0.0 0.0
*TM_ROTANGLE 0.0
*TM_SCALE 1 1 1
*TM_SCALEAXIS 0 0 0
*TM_SCALEAXISANG 0 0 0
}
}

Кстати, в некоторых моделях после декомпиляции присутствуют объекты с именем "Dummy", которые теряются в процессе импорта-экспорта в Макс. Я такие объекты перед компиляцией восстанавливал в исходнике вручную, не особенно понимая, для чего они нужны.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
DUMMY вроде как отвечает за фокус в котором будет отображаться имя объекта.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
В исходнике для компиляции тип этих объектов должен быть "HELPEROBJECT"
Dummy объект имеет приставку BIP_ когда используется в качестве точки опоры (кости) и определения точки фокуса.
Приставку ZS_POS0 - для определения положения персонажа из которого он будет начинать воспроизводить анимацию. :)
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
61
Баллы
170
Доброго времени суток. Есть вопрос: можно как-нибудь отследить удар по гг через скрипты? Пробовал в B_Assess_Damage сделать проверку if(Npc_IsPlayer(self)), но это не сработало.
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
Через обработку PERC_ASSESSOTHERSDAMAGE. Через него, например, выводятся комментарии к драке. Только там есть баг - восприятие срабатывает не только на урон, но и когда игрок делает шаг назад, причем не один раз, а много.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Я проверку урона по ГГ делал через связку триггер-скрипт и состояние атакующего.
Каждый цикл проверяется здоровье ГГ и сравнивается с ранее сохраненным показателем здоровья в переменной. Если в момент состояния атаки НПЦ здоровье ГГ уменьшается относительно ранее сохраненной переменной, обрабатываться урон по ГГ, а текущее здоровье записывается в переменную. Атакующий определяется из состояния атаки ZS_Attack для людей или ZS_MM_Attack для монстров и орков. Таким образом реализовал ядовитых шершней.
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
61
Баллы
170
Я проверку урона по ГГ делал через связку триггер-скрипт и состояние атакующего.
Каждый цикл проверяется здоровье ГГ и сравнивается с ранее сохраненным показателем здоровья в переменной. Если в момент состояния атаки НПЦ здоровье ГГ уменьшается относительно ранее сохраненной переменной, обрабатываться урон по ГГ, а текущее здоровье записывается в переменную. Атакующий определяется из состояния атаки ZS_Attack для людей или ZS_MM_Attack для монстров и орков. Таким образом реализовал ядовитыех шершней.
Можешь выложить функцию, вызываемую триггером, если не трудно?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Можешь выложить функцию, вызываемую триггером, если не трудно?
Возможно позже, обработка урона ГГ завязана не только на функции триггер-скрипта, да и сама функция вызываемая через триггер-скрипт содержит не только обработку урона для ГГ а еще около тысячи строк кода.
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Всем привет!
Возник неприятный баг с водным мешом: ГГ (как и НПС) иногда проваливаются сквозь воду и ходят по дну. Думаю, многие с этим сталкивались. Так вот, мой вопрос: что служит причиной этого бага? Может, то, что водный веш пересекается с мешом мира? Или под водный меш нужно отводить определенное кол-во полигонов?
В любом случае, я перелелал меш так, чтобы он не пересекался с мешем мира и отвел на него 40 полигонов по Х и 40 полигонов по Y. Теперь вопрос в том, как это затекстурить? При экспорте в 3дс плагины превращают каждый полик в два треугольника, а в Спейсере есть возможность только поштучного выделения полигонов, то есть мне придется выделить 40*40*2 полигонов с каждой стороны водной плоскости, а это геммор -_-
Словом, жду советов от знающих людей *flowers*
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.048
Благодарности
1.163
Баллы
340

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
Подскажите:

1. Где меняется назначение клавиш? В Ребалансе, например, вместо карты, стоит спринт, а карта убрана совсем.

2. Есть ли ограничение на количество клавиш?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
1. Где меняется назначение клавиш?

Во время игры из главного меню: Опции -> Управление.
В файле Gothic.ini есть секция KEYS:
[KEYS]
keyEnd=0100
keyHeal=2300
keyPotion=1900
keyLockTarget=4f00
keyParade=cf000d02
keyActionRight=d100
keyActionLeft=d300
keyUp=11000b02
keyDown=d0001f00
keyLeft=cb001000
keyRight=cd001200
keyStrafeLeft=d3001e00
keyStrafeRight=d1002000
keyAction=1d000c02
keySlow=2a003600
keySMove=38009d00
keyWeapon=39000e02
keySneak=2d00
keyLook=13005200
keyLookFP=21005300
keyInventory=0f000e00
keyShowStatus=30002e00
keyShowLog=31002600
keyShowMap=3200

Где посмотреть коды клавиш, не знаю, думаю, это стандартны значения. Можно назначить клавишу через меню игры и посмотреть, какое значение прописалось в ini-файле.
 

Диккен

Участник форума
Регистрация
12 Июн 2004
Сообщения
470
Благодарности
127
Баллы
210
1. Где меняется назначение клавиш? В Ребалансе, например, вместо карты, стоит спринт, а карта убрана совсем.
Все ключи из списка "В файле Gothic.ini есть секция KEYS:" прописанны в движке игры (engine) gothic2.exe и поменять их невозможно. В Ребалансе идет замещение скрипта, к. выполняется при вызове "карта" из \PrjGOTHIC\Story\Dialog_Mobsis\B_OnHotkey.d через внешнюю функцию func int player_hotkey_screen_map()

Вот так можно внести свой код на исполнение, до вызова основного цикла:
Код:
func int player_hotkey_screen_map()
{
    var int OldInstance;
    var int NewInstance;
    if(Npc_HasItems(hero,itmi_keyring) >= 1)
    {    OldInstance = itmi_keyring;
        return OldInstance; };

при этом в инстанции вещи должно быть объявлена внешняя функция через on_state[0] = Use_ХХХХХ, иначе ничего не сработает.
Код:
instance ITMI_KEYRING(C_Item)
{
    name = "Кольцо для ключей";
    mainflag = ITEM_KAT_DOCS;
    flags = ITEM_MISSION;
    visual = "ItKe_Key_01.3ds";
    material = MAT_METAL;
    on_state[0] = Use_keyring;
    scemeName = "MAP";
    description = name;

это позволит использовать предмет "кольцо для ключей" при нажатии на клавишу вызова карты. Всего есть три клавиши, к. можно переназначить через скрипты:
1. карта - func int player_hotkey_screen_map()
при usePotionKeys=1
2. зелье жизни - func void player_hotkey_lame_heal()
3. зелье маны - func void player_hotkey_lame_potion()

2. Есть ли ограничение на количество клавиш?
конечно, см. ответ #3219.
 
Сверху Снизу