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

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

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

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

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.449
Благодарности
779
Баллы
375
гг разговаривает с персонажем. Слово за слово, персонаж атакует гг.

Код:
AI_StopProcessInfos(self);
B_Attack(self,other,AR_NONE,1);

1. Как заставить персонажа атаковать не тем оружием, которым экипирован, а кулаками?
2. Как отменить состояние атаки, когда гг сумел убежать от персонажа?

Пока держу в голове следующие варианты:

1. Разэкипировать персонажа

2. Как-то отслеживать через триггер-скрипт (по времени, что ли?)

Применение Npc_SetToFistMode(self) не помогает, поскольку персонаж становится в боевую стойку в начале диалога, а дерется все равно дубинкой.

Еще проблема: гг в процессе диалога пьет вино. Он должен захмелеть. Я применяю

Wld_PlayEffect("SLOW_TIME",other,other,0,0,0,FALSE);

Но в одних случаях это срабатывает в начале (ветки) диалога. В другом случае в конце (в разных функциях. Для каждой функции в свой момент. Ситуация повторяется из раза в раз. То есть для каждой функции свое время срабатывания. Одно и то же.) но только не в тот момент, в который этот вызов поставлен.

Может кто подскажет, где грабли?
Не знаю, поможет ли, но попытка не пытка:)
1. НастасьСанна чуть раньше предлагала по немного другому поводу вот такое решение:
можно почистить инвентарь от всего или сделать спец. инстанцию оружия. В этой спец. инстанции указываем, например, damage[0] = 9999; Реально этот урон наноситься не будет, а вот учитываться при выборе оружия - будет. Только строчку нужно прописать после damageTotal и damagetype.
Что если указать дамаг с минусом? Кулаки тогда окажутся всяко лучше, и НПС будет драться ими. Не уверен, но попробовать бы стоило.
2. У Вама нашел такую вещь:

// если расстояние между НПС и агрессором > дистанции преследования
if(Npc_GetDistToNpc(self,other) > FIGHT_DIST_CANCEL)
{
// очистка очереди AI состояний НПС
Npc_ClearAIQueue(self);
return LOOP_END;
};

Чтобы НПС потом не агрился, попробуй добавить внутрь условие
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(*инстанция необходимого НПС*))
{
*инстанция необходимого НПС*.npcType = NPCTYPE_NEUTRAL;
ИЛИ
*инстанция необходимого НПС*.npcType = NPCTYPE_FRIEND;
(В зависимости от ситуации, которая у тебя там)
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
1. Как заставить персонажа атаковать не тем оружием, которым экипирован, а кулаками?
2. Как отменить состояние атаки, когда гг сумел убежать от персонажа?

1. В состоянии атаки периодически вызывается функция выбора оружия. Нужно либо изменить эту функцию (добавить исключение) таким образом, чтобы данный непись в данном случае использовал именно кулаки, либо создать для него альтернативное состояние атаки в котором используются только кулаки, а не оружие.

2. Скорее всего, состояние атаки само сбросится после инициализации непися, когда ГГ удалится от него, а затем снова приблизится.


Еще проблема: гг в процессе диалога пьет вино. Он должен захмелеть. Я применяю

Wld_PlayEffect("SLOW_TIME",other,other,0,0,0,FALSE);

Но в одних случаях это срабатывает в начале (ветки) диалога. В другом случае в конце (в разных функциях. Для каждой функции в свой момент. Ситуация повторяется из раза в раз. То есть для каждой функции свое время срабатывания. Одно и то же.) но только не в тот момент, в который этот вызов поставлен.

Может кто подскажет, где грабли?

Возможно, поможет использование данного эффекта в функции, вызываемой при использовании предмета (выпивании вина).

PS: Кстати, а как вообще прекратить состояние атаки?

В состоянии атаки предусмотрено несколько вариантов выхода, например, когда противник валяется, умер или убегает некоторое время. Вполне реально добавить туда исключение, чтобы в конкретном случае непись прекращал атаку, при достижении оговоренной дистанции. Бросился он на ГГ с кулаками, ГГ отбежал на 10 метров от него, непись остановился, прекратил атаку, крикнул вслед пару ласковых и пошёл на своё место.

P. S. Я недостаточно хорошо знаком с функциями ИИ Г2. Наверняка они имеют свои особенности. Данные соображения высказываю на основании функций ИИ Г1.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Убегание не помогает. Когда возвращается гг, персонаж снова атакует. Пытаюсь перебирать параметр "причина атаки".

С эффектом уже наткнулся на решение. Поставить перед B_useitem. Но там тоже не так все просто. В некоторых случаях эффект срабатывает раньше, чем гг достает бутылку.

Остается вопрос "как прекратить атаки персонажа на гг"
 

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

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
1. Как заставить персонажа атаковать не тем оружием, которым экипирован, а кулаками?
Код:
AI_UnequipWeapons(self);
Npc_SetToFistMode(self);
B_Attack(self,other,AR_None,0);
Этого должно быть достаточно. Если не получится, то как уже было написано, править B_SelectWeapon.
Причина атаки на выбор оружия влияет мало, только дальнобойное оружие не будет выбираться, если персонаж не хочет убивать противника.
2. Как отменить состояние атаки, когда гг сумел убежать от персонажа?
Установить у персонажа npcType = NPCTYPE_FRIEND (см. Альрика). Через переменные aivar[AIV_MM_FollowTime], aivar[AIV_FightDistCancel], aivar[AIV_MaxDistToWp] можно управлять расстоянием и временем преследования.
Персонаж начинает снова атаковать ГГ, когда тот возвращается, потому что в ZS_Attack_End прописано:
Код:
if(self.aivar[AIV_PursuitEnd] == TRUE)
    {
        if(Hlp_IsValidNpc(other) && Npc_IsPlayer(other) && (self.npcType != NPCTYPE_FRIEND))
        {
            Npc_SetTempAttitude(self,ATT_HOSTILE);
        };
        ...
    };
Т.е. когда ГГ убежал, персонаж временно переводится во враждебное состояние. Можно здесь что-то подправить.
Но в одних случаях это срабатывает в начале (ветки) диалога. В другом случае в конце (в разных функциях. Для каждой функции в свой момент. Ситуация повторяется из раза в раз. То есть для каждой функции свое время срабатывания. Одно и то же.) но только не в тот момент, в который этот вызов поставлен.
Для Темной Саги redleha придумал очень простое решение. В начале диалога добавляем любою переменную, а когда нужно срабатывание, проверяем ее значение, например:
Код:
var int x; x = 0;
...
x = 1;
if (x == 1) {
    //здесь пишем то, что должно сработать в нужный момент
};
PS: Кстати, а как вообще прекратить состояние атаки?
Можно попробовать:
а) Начать любое другое состояние через AI_StartState с behavior=0 и установить Npc_SetTempAttitude(self,ATT_NEUTRAL); Может не сработать, если вызовется ZS_Attack_End.
б) Установить aivar[AIV_FightDistCancel] = 0 и npcType = NPCTYPE_FRIEND. Только потом это отменить, иначе персонаж вообще перестанет драться.
 

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.449
Благодарности
779
Баллы
375
Подскажите анимацию, при которой НПС протягивает руку вперед, будто указывает на что-то.
 

Дмитрий Великий

Участник форума
Регистрация
14 Сен 2009
Сообщения
14
Благодарности
1
Баллы
150
Возник таки вопрос. У меня есть карта с обьектами находящаяся в одних и тех же координатах с оригинально но на ней изменены текстуры. А на оригинальной расставлены обьекты как мне загрузить все обьекты на эту карту.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Если я правильно понял, у тебя есть изменённый 3ds-меш и ты хочешь подцепить к нему все объекты оригинального ZENа. Тогда тебе нужно перекомпилировать ZEN игрового мира с использованием нового меша. 10 страниц назад в этой теме уже упоминался этот процесс.
 

HGn

Участник форума
Регистрация
25 Июн 2013
Сообщения
32
Благодарности
0
Баллы
155
Да, потребуется правка мешей в 3D-редакторе. Некоторая сложность заключается в том, что в этом месте проходит стык двух мешей, образующих рудниковую долину. Править придётся оба меша, как-то исхитрившись, чтобы их стык после правки совпал.

Можно немного поподробнее на счёт стыка двух мешей?
 

Test Level

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

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.449
Благодарности
779
Баллы
375
Подскажите где посмотреть пример зацикленного триггера типа: в инвентаре ГГ появился предмет - начался квест?

http://port-of-rpg.com/spacer-2-trigger/
Вторая часть урока.
При помощи функции поиска найди слова:
Теперь давайте создадим простенький зацикленный триггер-скрипт. Помните, мы писали квест, в котором Ксардас просит героя принести
Оттуда и далее то, что тебе нужно, там только пример немного другой.
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
http://port-of-rpg.com/spacer-2-trigger/
Вторая часть урока.
При помощи функции поиска найди слова:
Теперь давайте создадим простенький зацикленный триггер-скрипт. Помните, мы писали квест, в котором Ксардас просит героя принести
Оттуда и далее то, что тебе нужно, там только пример немного другой.



Слона-то я и не заметил, видимо надо хоть иногда спать. Ведь сидел же и читал этот урок, не далее, как сегодня ночью.

P.S. Прошу прощения за оффтоп.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Одно уточнение. Тутор по ссылке камрада kraw содержит ошибочку. Название триггер-скрипта в функции
Wld_SendTrigger следует брать в кавычки, поскольку это текстовая величина.

Можно немного поподробнее на счёт стыка двух мешей?

Меш Миненталя состоит из нескольких частей. Эти части прописаны в ZENе локации и при стыковке образуют единое целое (с небольшими погрешностями). Две части SURFACE.3DS и NEWCAMP.3DS стыкуются как раз по рисовым полям НЛ. Если делать там водопад и речушку, то нужно оттяпать часть с прудом от меша SURFACE.3DS и приаттачить её к мешу NEWCAMP.3DS и уже после этого моделлить задуманное.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.154
Баллы
915
@ ElderGamer:
А что можно сказать о большом лесе, расположенном севернее дороги между СЛ и БЛ? Дело в том, что там в некоторых местах можно увидеть результаты грубой стыковки мешей, проявляющейся в пропадании части текстур мира G1.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
@Dimus:
Там меш не стыкуется. Пропадание кусков мира связано с глючной работой порталов, образующих сам лес. Одна грубая ошибка найдена, если вдруг кому-то будет интересно, могу поделиться деталями. Но порталы глючат и без грубых ошибок. Насколько я понимаю, нормальная работа портала имеет место, только когда он ориентирован вертикально, а все его полигоны находятся в одной плоскости. Грани призм, образующих порталы над лесом, не совсем плоские. Видимо, поэтому в некоторых местах можно словить глюк с исчезновением меша при пересечении камерой проблемного участка портала. Я пробовал их "выравнивать" средствами Спейсера, но когда плоской становится одна грань, другая искривляется, и глюк переселяется туда. :confused:
 

HGn

Участник форума
Регистрация
25 Июн 2013
Сообщения
32
Благодарности
0
Баллы
155
Добрый день, опять нуждаюсь в вашей помощи. Требуется декомпилировать .mdm доспеха, изменить название нужной текстуры и скомпилировать обратно. Пытался это всё дело осуществить с помощью Gothic Sourcer'a, но как я понял там декомпилировать .mdm не представляется возможным. Как можно решить данную проблему?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
HGn, декомпилируй файл сценариев HUMANS.MDS.
 

HGn

Участник форума
Регистрация
25 Июн 2013
Сообщения
32
Благодарности
0
Баллы
155
HGn, декомпилируй файл сценариев HUMANS.MDS.

Выдаёт ошибку: "Файл: "HUMANS.MDH" не найден или разрушен." Может я не до конца уточнил суть вопроса? Этого доспеха в игре нет и он был добавлен мной, его составляющие (.mdm и текстура) лежат в vdf'e моего "мода".
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.339
Благодарности
3.183
Баллы
525
Выдаёт ошибку: "Файл: "HUMANS.MDH" не найден или разрушен."

Нужно иметь распакованный том anims.vdf с сохранением структуры папок и файлов. Распаковывать в папку с игрой не обязательно. Декомпилятору Сорсера нужно указать путь к файлу HUMANS.MDS именно в том месте, куда это всё распаковано. На платформе Г2, возможно, нужно указывать не MDS а MSB файл. Тут нужно уточнение тех, кто работает с Г2.

Может я не до конца уточнил суть вопроса? Этого доспеха в игре нет и он был добавлен мной, его составляющие (.mdm и текстура) лежат в vdf'e моего "мода".

А откуда взялся скомпилированный вариант, если нет asc-исходника?
 
Сверху Снизу