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

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

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

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Его и небыло никогда ибо Г3 как и все последующее уг, модкитов не представляло, а значит достаточно обычной темы в разделе Готики 3..
Попробуй сыграть в это "УГ" со всеми патчами. Возможно, изменишь свое мнение, так как у тебя мнение о Г3 со времен версий 1.09-1.12. С тех пор все очень изменилось.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Это вряд ли, т.к. у меня претензии были к самой игре, а не ее багам... ;)
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
Подскажите пж где прописаны диалоги Драконов, овец и Ур-шака.

И еще разве функция:
B_SetAttitude(self,ATT_FRIENDLY);
не должна делать НПС дружелебным ГГ?
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.190
Благодарности
3.373
Баллы
485

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
Как оказалось с гильдией все просто.
Поставил гильдию GIL_SHEEP. Все анимации проигрываются.

Столкнулся с другой проблемой, не могу начать диалог с НПС.

instance Gobbo_Skeleton_Servant(Mst_Default_Gobbo_Skeleton)
{
name[0] = "Прислужник";
guild = GIL_SHEEP;
aivar[AIV_MM_REAL_ID] = id_summoned_gobbo_skeleton;
level = 0;
aivar[AIV_PARTYMEMBER] = TRUE;
B_SetAttitude(self,ATT_FRIENDLY);
B_SetAttitude(KDF_687_Faron,ATT_FRIENDLY);
start_aistate = ZS_MM_AllScheduler;
B_SetVisuals_Gobbo_Skeleton();
Npc_SetToFightMode(self,ItMw_1h_Bau_Mace);
};

Диалог создан в папке: Story/B_AssignAmbientInfos

instance DIA_GSS_EXIT(C_Info)
{
npc = Gobbo_Skeleton_Servant;
nr = 999;
condition = DIA_GSS_EXIT_Condition;
information = DIA_GSS_EXIT_Info;
permanent = TRUE;
description = Dialog_Ende;
};

func int DIA_GSS_EXIT_Condition()
{
return TRUE;
};

func void DIA_GSS_EXIT_Info()
{
AI_StopProcessInfos(self);
};

instance DIA_GSS_HI(C_Info)
{
npc = Gobbo_Skeleton_Servant;
nr = 99;
condition = DIA_GSS_HI_Condition;
information = DIA_GSS_HI_Info;
permanent = FALSE;
description = "Кто ты?";
};

func int DIA_GSS_HI_Condition()
{
return TRUE;
};

func void DIA_GSS_HI_Info()
{
AI_Output(other,self,"DIA_GSS_HI_15_00"); //Кто ты?
AI_Output(self,other,"DIA_GSS_HI_04_01"); //Славный мертвец. Принес полный ларец. Ярких чудес и лунного света чашу.
AI_Output(other,self,"DIA_GSS_HI_15_02"); //Я не понимаю.
AI_Output(self,other,"DIA_GSS_HI_04_03"); //Мой удел служение.
AI_Output(other,self,"DIA_GSS_HI_15_04"); //Значит ты служишь Фарону. Расскажи, ты помнишь о своем прошлом?
AI_Output(self,other,"DIA_GSS_HI_04_05"); //Никогда более.
AI_StopProcessInfos (self);
};

instance DIA_GSS_HI2(C_Info)
{
npc = Gobbo_Skeleton_Servant;
nr = 699;
condition = DIA_GSS_HI2_Condition;
information = DIA_GSS_HI2_Info;
description = "Посмотри, что у меня есть.";
};

func int DIA_GSS_HI2_Condition()
{
if(Npc_HasItems(other,ItMi_IvaSecretsBox_MIS)>= 1)
{
return TRUE;
};
};

func void DIA_GSS_HI2_Info()
{
AI_Output(other,self,"DIA_GSS_HI2_15_00"); //Посмотри, что у меня есть.
AI_Output(self,other,"DIA_GSS_HI2_04_01"); //В небе я синие звёзды зажгу. Сонных волшебников я разбужу, Серых зайчат я в лесу разыщу.
AI_Output(other,self,"DIA_GSS_HI2_15_02"); //Открой его.
AI_Output(self,other,"DIA_GSS_HI2_04_03"); //Это кукла Веретенка и ее дружок конек Бу. Это листочек выручай-травы и белый цветочек папоратника.
AI_Output(other,self,"DIA_GSS_HI2_15_04"); //Ты ведь Ива, так?
AI_Output(self,other,"DIA_GSS_HI2_04_05"); //Ива? Да...
AI_Output(other,self,"DIA_GSS_HI2_15_06"); //Хочешь к папе? Папа тебя ждет.
AI_Output(self,other,"DIA_GSS_HI2_04_07"); //Нет! Нет, нет, нет. Только не к папе!
B_LogEntry(TOPIC_GirlWizzard,"После нашего разговора ее подобие жизни прервалось. Как я и подозревал, прислужник-нежить Фарона оказался Ивой. Значит он убил ее и превратил в нежить. Но, что она говорил о своем отце? Надо будет с ним серьезно поговорить.");
AI_StopProcessInfos (self);
};

Что может быть не так? Подскажите.
Может быть, я не знаю, есть какой-то скрипт где прописано какие монстры могут говорить, а какие нет?
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Столкнулся с другой проблемой, не могу начать диалог с НПС.
Присоединяюсь к совету об изучении тутора Вама для начала. :)

Активируй режим Марвина, подойди к неписю, возьми его в фокус, нажми на клавиатуре клавишу "T". На экран будет выведен список активизированных восприятий непися. Для того, чтобы с неписем можно было поговорить, у него должно быть активизировано восприятие PERC_ASSESSTALK. Используй поиск по проекту, чтобы разобраться, как активируется это восприятие у других неписей.
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.190
Благодарности
3.373
Баллы
485
Может быть, я не знаю, есть какой-то скрипт где прописано какие монстры могут говорить, а какие нет?
Назначь своему существу уникальный id и начни новую игру.
Daedalus:
instance Follow_Sheep(Mst_Default_Sheep)
{
    name[0] = "Бетси";
    level = 0;
    id = 167;
    aivar[AIV_ToughGuy] = TRUE;
    B_SetVisuals_Sheep();
...
 

Oxbow

Участник форума
Регистрация
22 Дек 2017
Сообщения
265
Благодарности
33
Баллы
200
Подскажите пж в каком месте текстура в визуализаии НПС "FaceBabe_N_GreyCloth"связывается с текстурами TGA в папке TEXTURES.
А. Уже нашел.
В файле AI\AI_Intern\AI_Constants.
 
Последнее редактирование:

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Добрый день.

Подскажите нубу, как (без скриптовых расширителей) реализовать временное повышение параметров после поедания некой жратвы?

Я пытался делать через AI_StartState (новое состояние с нужным сроком), но у меня слишком мало знаний и само состояние длится сколько нужно, но ГГ не может сдвинуться с места, пока оно не закончится.

Есть какие-то варианты позволить свободно двигаться/сражаться в состоянии?
Или всё делается проще? Если да, то как?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.129
Благодарности
5.626
Баллы
910
Добрый день.

Подскажите нубу, как (без скриптовых расширителей) реализовать временное повышение параметров после поедания некой жратвы?

Я пытался делать через AI_StartState (новое состояние с нужным сроком), но у меня слишком мало знаний и само состояние длится сколько нужно, но ГГ не может сдвинуться с места, пока оно не закончится.

Есть какие-то варианты позволить свободно двигаться/сражаться в состоянии?
Или всё делается проще? Если да, то как?

Самое простое, посмотреть как реализовано зелье скорости в Г2 в файле
...\Items\IT_Potions.d
Строка instance ItPo_Speed(C_Item)
В спойлере сам скрипт зелья
Daedalus:
const int Value_Speed = 200;
const int Time_Speed = 300000;
instance ItPo_Speed(C_Item)
{
    name = NAME_Trank;
    mainflag = ITEM_KAT_POTIONS;
    flags = ITEM_MULTI;
    value = Value_Speed;
    visual = "ItPo_Speed.3ds";
    material = MAT_GLAS;
    on_state[0] = UseItPo_Speed;
    scemeName = "POTIONFAST";
    wear = WEAR_EFFECT;
    effect = "SPELLFX_ITEMGLIMMER";
    description = "«елье ускорени¤";
    text[1] = "¬ременно повышает скорость.";
    text[3] = NAME_Duration;
    count[3] = Time_Speed / 60000;
    text[5] = NAME_Value;
    count[5] = value;
};
//Функция, после которой к ГГ применяется анимация бега на определенное время
//Ну а для характеристик ГГ думаю можно сделать константу времени, условие, внутри
//условия меняешь характеристики на большее, после возвращаешь, как и было до этого
//Ну это утрировано
func void UseItPo_Speed()
{
    Mdl_ApplyOverlayMdsTimed(self,"HUMANS_SPRINT.MDS",Time_Speed);
};
Пример с зельем увеличивающим ману
Daedalus:
instance ItPo_Perm_Mana(C_Item)
const int Value_ManaMaxElixier = 1500;
const int ManaMax_Elixier = 5;
const int Time_Speed = 300;
instance ItPo_Perm_Mana(C_Item)
{
    name = NAME_Trank;
    mainflag = ITEM_KAT_POTIONS;
    flags = ITEM_MULTI;
    value = Value_ManaMaxElixier;
    visual = "ItPo_Perm_Mana.3ds";
    material = MAT_GLAS;
    on_state[0] = UseItPo_Perm_Mana;
    scemeName = "POTIONFAST";
    wear = WEAR_EFFECT;
    effect = "SPELLFX_MANAPOTION";
    description = NAME_ManaMax_Elixier;
    text[1] = NAME_Bonus_ManaMax;
    count[1] = ManaMax_Elixier;
    text[5] = NAME_Value;
    count[5] = Value_ManaMaxElixier;
};

func void UseItPo_Perm_Mana()
{
if (const int Time_Speed == 300)
{
    B_RaiseAttribute(self,ATR_MANA_MAX,ManaMax_Elixier);
    Npc_ChangeAttribute(self,ATR_MANA,ManaMax_Elixier);
}
else
{
    B_RaiseAttribute(self,ATR_MANA_MAX,-ManaMax_Elixier);
    Npc_ChangeAttribute(self,ATR_MANA,-ManaMax_Elixier);
};
};
 
Последнее редактирование:

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Нет, это вряд ли подойдёт.
Эта функция работает на анимацию, а мне нужно что-то, что будет проверять конкретный параметр ГГ и снижать его по истечении заданного времени.
Вероятно нужен триггер, но у меня с ними большие проблемы и нужна подсказка - как именно настроить его так, чтобы он снизил параметр через энное число секунд и отключился?
При этом он не должен мешать ГГ совершать любые другие действия.

Проще говоря - съедаем предмет - получаем +100 силы - проходит 60 секунд и снимается 100 силы.
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.770
Благодарности
557
Баллы
275
Нет, это вряд ли подойдёт.
Эта функция работает на анимацию, а мне нужно что-то, что будет проверять конкретный параметр ГГ и снижать его по истечении заданного времени.
Вероятно нужен триггер, но у меня с ними большие проблемы и нужна подсказка - как именно настроить его так, чтобы он снизил параметр через энное число секунд?
При этом он не должен мешать ГГ совершать любые другие действия.

Вместо анимации
Код:
Mdl_ApplyOverlayMdsTimed(self,"HUMANS_SPRINT.MDS",Time_Speed);
пропишите, что вам надо.

и константу
Код:
Time_Speed
замените на свою.
 

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Функцию меняющую параметр, вместо анимации?
Хм... и прокатит?

Ну попробую, но что-то сомнительно.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.129
Благодарности
5.626
Баллы
910
Проще говоря - съедаем предмет - получаем +100 силы - проходит 60 секунд и снимается 100 силы.
Как-то так
const int Value_Apple = 8;
const int STR_Apple = 100;
const int Time_Speed = 300;

Daedalus:
instance ItFo_Apple(C_Item)
{
    name = "Яблоко";
    mainflag = ITEM_KAT_FOOD;
    flags = ITEM_MULTI;
    value = Value_Apple;
    visual = "ItFo_Apple.3DS";
    material = MAT_LEATHER;
    scemeName = "FOOD";
    on_state[0] = Use_Apple;
    description = name;
    text[1] = NAME_Bonus_HP;
    count[1] = HP_Apple;
    text[3] = "Свежее яблоко,";
    text[4] = "твердое и сочное.";
    text[5] = NAME_Value;
    count[5] = Value_Apple;
};

//Функция, срабатывает при поедании яблока
func void Use_Apple()
{
//Все просто, пока время 60 секунд
if (Time_Speed == 300)
{
    //увеличиваем максимум силы на величину константы STR_Apple
    B_RaiseAttribute(self,ATR_STRENGTH,STR_Apple);
//Увеличиваем текущие силы на 100 пунктов
    Npc_ChangeAttribute(self,ATR_STRENGTH,STR_Apple);
//проигрываем музыку
    Snd_Play("LevelUp");
}
else
{
//уменьшаем максимум силы на величину константы STR_Apple
    B_RaiseAttribute(self,ATR_STRENGTH,-STR_Apple);
//уменьшаем текущие силы на 100 пунктов
    Npc_ChangeAttribute(self,ATR_STRENGTH,-STR_Apple);
};
};
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Подскажите нубу, как (без скриптовых расширителей) реализовать временное повышение параметров после поедания некой жратвы?
Тебе нужен циклический триггер-скрипт. При поедании травки изменяется переменная, устанавливающая время, изменяется нужный параметр (+100, например). В циклическом триггере переменная-таймер постепенно уменьшается на 1, и когда она станет равной 1, уменьшаешь нужный параметр (-100).

У меня, например, циклический триггер вызывается примерно 10 раз в секунду. Чтобы задать интервал времени 5 мин (300с), нужно задать значение таймера 3000.

Советы, приведённые выше, не помогут. ;)
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Магнитные бури? *facepalm*

Вместо анимации
Серьезно? :oops:

Как так-то?
Функция Use_Apple() срабатывает только при использовании предмета, Time_Speed у тебя нигде не считается, когда в условии оно станет Time_Speed == 300?
В твоем примере, при каждом употреблении яблока у НПЦ будет срабатывать условие else и сила будет уменьшаться на STR_Apple, т.к. Time_Speed нигде не считается и всегда равен 0.

Не заметил константу const int Time_Speed = 300;, тогда наоборот Time_Speed всегда будет 300 и сила всегда будет прибавляться на STR_Apple при каждом использовании предмета.
 
Последнее редактирование:

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Советы, приведённые выше, не помогут. ;)
Я так и подумал)
Но мало ли - если пытаются подсказать, вдруг действительно знают, о чём говорят.

Тебе нужен циклический триггер-скрипт.
Можно попросить кусок скрипта с работой триггера именно какое-то определённое время?
Не знаком с этой функцией и без примера мне сложно разобраться.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Можно попросить кусок скрипта с работой триггера именно какое-то определённое время?
Тут тема есть одноименная создание триггера, в нем и весь разбор, сделать не сложно коли полез в скрипты.. Возможно ее в раздел уроков по скриптингу перенесли, там глянь..
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Циклический триггер-скрипт - это не только функция в скриптах. Это ещё специальные объекты во всех локациях игрового мира. Да, для новичка это может представлять проблему, но обзавестись циклическим триггером нужно как можно скорее. Он позволяет делать многое из того, что недоступно обычными средствами. Попробуй поискать по сочетанию "циклический триггер". Здесь на форуме не раз об этом писалось. Вот камрад Укур/Мухоmор, например, об этом писал с катринками. :)
 
Сверху Снизу