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

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

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

Юберион_09.05.1945

Участник форума
Регистрация
1 Апр 2016
Сообщения
117
Благодарности
15
Баллы
185
Ну, вот это
Код:
const string TXT_TALENTS[12] =
{
   "",
   "Одноручный меч",
   "Двуручный меч",
   "Лук",
   "Арбалет",
   "Вскрытие замков",
   "Кража",
   "Магия",
   "Подкрадывание",
   "Восстановление",
   "Мастер огня",
   "Акробатика"
};

const string TXT_TALENTS_SKILLS[12] =
{
   "",
   "не обучен|обучен|мастер",
   "не обучен|обучен|мастер",
   "не обучен|обучен|мастер",
   "не обучен|обучен|мастер",
   "не обучен|обучен|мастер",
   "не обучен|обучен|мастер",
   "не обучен|Круг 1|Круг 2|Круг 3|Круг 4|Круг 5|Круг 6",
   "не обучен|обучен",
   "|",
   "|",
   "не обучен|обучен"
};
косвенно указывает на то, что навыки "Восстановление" и "Мастер огня" должны были иметь только два значения. Вероятно, "не обучен|обучен". :oops:
А что дает мастер огня?И при каких условиях?
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Посмотрел я навыки "Восстановление" и "Мастер огня" в движках 1.08 и 1.04. Никак они не используются движком. Можно устанавливать скил, но использовать все это только в скриптах. Жаль недоступна top-secret-demo 1.01.
2ElderGamer
Вот в скриптах 1.04 подтверждение твоего предположения
Код:
const string TXT_TALENTS[12] =
{
    "",
    "Einhänder",
    "Zweihänder",
    "Bogen",
    "Armbrust",
    "Schlösser öffnen",
    "Taschendiebstahl",
    "Magie",
    "Schleichen",
    "Regeneration",
    "Meister des Feuers",
    "Akrobatik"
};

const string TXT_TALENTS_SKILLS[12] =
{
    "",
    "ungeübt|ausgebildet|gemeistert",
    "ungeübt|ausgebildet|gemeistert",
    "ungeübt|ausgebildet|gemeistert",
    "ungeübt|ausgebildet|gemeistert",
    "ungeübt|ausgebildet|gemeistert",
    "ungeübt|ausgebildet|gemeistert",
    "nein|1.Kreis|2.Kreis|3.Kreis|4.Kreis|5.Kreis|6.Kreis",
    "nein|ja",
    "nein|ja",
    "nein|ja",
    "nein|ja"
};
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Речь идёт о значениях навыка NPC_TALENT_REGENERATE или атрибутах ATR_REGENERATEHP и ATR_REGENERATEMANA? Т.е. если задать значения больше 1, то регенерация будет идти медленнее или быстрее?
Идет речь именно про NPC_TALENT_REGENERATE. остальные 2 на сколько я помню зависят от него.
Если задать значение 1 - то регенерация пойдет, если задать значение 3 - то регенерация побежит, если задать значение 6 - то регенерация полетит.
Это проверено.
косвенно указывает на то, что навыки "Восстановление" и "Мастер огня" должны были иметь только два значения. Вероятно, "не обучен|обучен". :oops:
указывает-то указывает, но работает по другому.
на счет мастера огня, я так и не понял что оно делает, только лишь предположения, высказанные ранее.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Идет речь именно про NPC_TALENT_REGENERATE. остальные 2 на сколько я помню зависят от него.
Если задать значение 1 - то регенерация пойдет, если задать значение 3 - то регенерация побежит, если задать значение 6 - то регенерация полетит.
Гм, в Г1 на движке 1.08 закономерность иная, если судить по "методу тыка". При значении ATR_REGENERATEHP = 2 (2 секунды между повышениями здоровья на 1 пункт) и значении NPC_TALENT_REGENERATE = 1 счётчик здоровья увеличивается на 10 пунктов за 20 секунд. Если выставить значение таланта больше 1 (проверял значения 2, 3, 4, 5 и 10), то счётчик здоровья увеличивается на 5 пунктов за 20 секунд.
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Идет речь именно про NPC_TALENT_REGENERATE. остальные 2 на сколько я помню зависят от него.
Если задать значение 1 - то регенерация пойдет, если задать значение 3 - то регенерация побежит, если задать значение 6 - то регенерация полетит.
Это проверено.
Что-то ты напутал. В файле constants.d указана константа
const int NPC_TALENT_REGENERATE = 9;
Это номер таланта
Ты не можешь его изменить. А вот ATR_REGENERATEHP и ATR_REGENERATEMANA непосредственно используются движком для расчета времени задержки при восстановлении хп и маны. И насколько я могу судить, они не зависят установлен талант регенерации или нет.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Гм, в Г1 на движке 1.08 закономерность иная, если судить по "методу тыка". При значении ATR_REGENERATEHP = 2 (2 секунды между повышениями здоровья на 1 пункт) и значении NPC_TALENT_REGENERATE = 1 счётчик здоровья увеличивается на 10 пунктов за 20 секунд. Если выставить значение таланта больше 1 (проверял значения 2, 3, 4, 5 и 10), то счётчик здоровья увеличивается на 5 пунктов за 20 секунд.
Ну... счетчик здоровья я не смотрел, сколько на сколько поднимается, просто видел ускорении поднятия HP и маны.
Что-то ты напутал. В файле constants.d указана константа
const int NPC_TALENT_REGENERATE = 9;
Это номер таланта
Ты не можешь его изменить. А вот ATR_REGENERATEHP и ATR_REGENERATEMANA непосредственно используются движком для расчета времени задержки при восстановлении хп и маны. И насколько я могу судить, они не зависят установлен талант регенерации или нет.
Изменять то его можно. И ты тоже прав, тут именно ATR_ меняется...
Вырезка из мода:
Код:
  if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 0)
   {
     Info_AddChoice(chuvak_dva_lenin,"Первый уровень регенерации (5 очков обучения)",chuvak_dva_lenin_odin);
   };
   if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 1)
   {
     Info_AddChoice(chuvak_dva_lenin,"Второй уровень регенерации (2 очков обучения)",chuvak_dva_lenin_dva);
   };
   if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 2)
   {
     Info_AddChoice(chuvak_dva_lenin,"Третий уровень регенерации (2 очков обучения)",chuvak_dva_lenin_tri);
   };
   if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 3)
   {
     Info_AddChoice(chuvak_dva_lenin,"Четвертый уровень регенерации (2 очков обучения)",chuvak_dva_lenin_chetyre);
   };
   if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 4)
   {
     Info_AddChoice(chuvak_dva_lenin,"Пятый уровень регенерации (2 очков обучения)",chuvak_dva_lenin_pat);
   };
   if(Npc_GetTalentSkill(hero,NPC_TALENT_REGENERATE) == 5)
   {
     Info_AddChoice(chuvak_dva_lenin,"Последний уровень регенерации (2 очков обучения)",chuvak_dva_lenin_shest);
   };

____________________________________________________________


func void chuvak_dva_lenin_odin()
{
   if(hero.lp > 4)
   {
     hero.lp = hero.lp - 5;
     Npc_SetTalentSkill(hero,NPC_TALENT_REGENERATE,1);
     Npc_SetTalentSkill(hero,NPC_TALENT_FIREMASTER,1);
     hero.attribute[ATR_REGENERATEHP] = 10;
     hero.attribute[ATR_REGENERATEMANA] = 10;
     Npc_SetTalentSkill(hero,NPC_TALENT_REGENERATE,1);
     AI_Output(self,other,"CHUVAK_DVA_Lenin_Odin");   //Раслабь свое тело.
     PrintScreen("Регенерация изучена",-1,-1,FONT_ScreenSmall,10);
     Snd_Play("LevelUp");
   }
   else
   {
     B_Say(self,other,"$NOLEARNNOPOINTS");
   };
};

func void chuvak_dva_lenin_dva()
{
   if(hero.lp > 1)
   {
     hero.lp = hero.lp - 2;
     hero.attribute[ATR_REGENERATEHP] = 8;
     hero.attribute[ATR_REGENERATEMANA] = 8;
     Npc_SetTalentSkill(hero,NPC_TALENT_FIREMASTER,2);
     Npc_SetTalentSkill(hero,NPC_TALENT_REGENERATE,2);
     AI_Output(self,other,"CHUVAK_DVA_Lenin_Dva");   //Будь свободнее в движениях.
     PrintScreen("Регенерация повышена",-1,-1,FONT_ScreenSmall,10);
     Snd_Play("LevelUp");
   }
   else
   {
     B_Say(self,other,"$NOLEARNNOPOINTS");
   };
};

и т.д...

15 лет с регенерацией не связывался...
еще один нюанс:
ATR_REGENERATEHP
ATR_REGENERATEMANA
идут в обратном направлении. т.е. от 10 до 1(ну это по крайней мере у меня в моде). При этом скорость регенерации увеличивается.
 
Последнее редактирование:

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Изменять то его можно. И ты тоже прав, тут именно ATR_ меняется...
Величину скила (NPC_TALENT_REGENERATE/NPC_TALENT_FIREMASTER) можно менять сколько угодно и использовать по своему усмотрению. Я хотел сказать то, что двиг не обращает на них внимания, а на атрибуты (ATR_REGENERATEHP/ATR_REGENERATEMANA) - обращает. А ElderGamer говорил о том, как они на экране показывались (в ранних версиях). Регенерация (изучено/не изучено). Повелитель огня (изучено/не изучено).
 

unknown111

Участник форума
Регистрация
5 Фев 2013
Сообщения
1.075
Благодарности
1.586
Баллы
290
Спустя 15 лет началось расследование регенерации *reverence*
Я как-то попробовал её использовать в моде на Г2НВ, но столкнулся с такой проблемой - жизнь регенерировала со скоростью 1 в сек., а мана восстанавливалась мгновенно...
Так вот вопрос - это я что-то не досмотрел, или всё же регенерация подглючивает? :oops:
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Спустя 15 лет началось расследование регенерации *reverence*
Я как-то попробовал её использовать в моде на Г2НВ, но столкнулся с такой проблемой - жизнь регенерировала со скоростью 1 в сек., а мана восстанавливалась мгновенно...
Так вот вопрос - это я что-то не досмотрел, или всё же регенерация подглючивает? :oops:
скорее всего не досмотрел. т.к. у меня она нормально работает, с тем кодом, который я выше выложил.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Так вот вопрос - это я что-то не досмотрел, или всё же регенерация подглючивает?
Нужно выставить высокие значения ATR_REGENERATEHP/ATR_REGENERATEMANA по-умолчанию, например, 9999. Тогда после активации таланта счётчики не будут восстанавливаться мгновенно.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Да че вы так к этой недорегенерации привязались то?

Кстати а будет ли интересна такая штука, как запись всех предметов инвентаря нпс в сейв со всеми параметрами? Таким образом можно редактировать прямо в игре оружие\предметы независимо от скриптов, и все это будет переживать сохранение, как мысль?
 
Последнее редактирование модератором:

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Выпущу мод и можно будет увидеть - сейчас светить готовыми квестами, чтобы уже заранее всё знали = это спойлерство.

Чтобы унифицировать названия квестов в Минентале у каждого квеста свой номер (Old 1.2.3.4.5....). Но и тут странности начались:

имеем диалог:
instance DIA_9112_Old5(C_Info)
instance DIA_9112_Old5a(C_Info)

Чтобы правильно всё прописалось приходится у Old5 ставить номера с 14, у Old5a с 15:
AI_Output(other,self,"DIA_9112_Old5_14_00"); //Ну как? Все еще много работы?

AI_Output(self,other,"DIA_9112_Old5a_15_00"); //Готово! Эх и здорово же вышло, один в один!

Иначе компилятор смешивает в один диалог (если в обоих DIA_9112_Old5 и DIA_9112_Old5a будут 14_00) - чья ошибка Вам разбираться.

Введите вы 2 переменные для того, чтобы разделить 2 инстанции. Ведь я так понимаю, что при различных условиях различные варианты событий. Вам надо ввести одну и перевести ее в - TRUE в одном диалоге, и другую в другом. Может я ошибаюсь, но тут как то не очень понятно написано.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.128
Благодарности
5.625
Баллы
910
В Готике 2 НВ в файле Gothic.dat sourcer не дает скомпилировать, ссылаясь что нельзя преобразовывать тип int в instanse
Жирным выделил условие
instance DIA_DiegoNW_HaveYourGold(C_Info)
{
npc = PC_Thief_NW;
nr = 31;
condition = DIA_DiegoNW_HaveYourGold_Condition;
information = DIA_DiegoNW_HaveYourGold_Info;
permanent = TRUE;
description = "Я нашел твое золото!";
};

func int DIA_DiegoNW_HaveYourGold_Condition()
{
if(((OpenedDiegosBag == TRUE) || (Npc_HasItems(other,ItSe_DiegosTreasure_Mis) >= 1)) && (MIS_HelpDiegoNW == LOG_Running) && (Diego_IsOnBoard != LOG_SUCCESS))
{
return TRUE;
};
};

func void b_diegonw_diegosrevenge()
{
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_05"); //Очень хорошо. Пусть Гербрандт теперь дрожит от страха.
};

var int DiegosRevenge;

func void DIA_DiegoNW_HaveYourGold_Info()
{
AI_Output(other,self,"DIA_DiegoNW_HaveYourGold_15_00"); //Я нашел твое золото!
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_01"); //Отлично. Покажи.
if(Npc_HasItems(other,ItSe_DiegosTreasure_Mis) >= 1)
{
B_GiveInvItems(other,self,ItSe_DiegosTreasure_Mis,1);
b_diegonw_diegosrevenge();
DiegosRevenge = TRUE;
}
else if(Npc_HasItems(other,ItMi_Gold < DiegosTreasure))
{
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_02"); //Но здесь не все! Ты что, не доверяешь мне? Мне нужна вся сумма.
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_03"); //Если мой план сработает, золота останется достаточно и для тебя.
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_04"); //Так что, пожалуйста, принеси всю сумму. Это очень важно!
}
else
{
B_GiveInvItems(other,self,ItMi_Gold,DiegosTreasure);
b_diegonw_diegosrevenge();
DiegosRevenge = TRUE;
};
if((Npc_IsDead(Gerbrandt) == FALSE) && (DiegosRevenge == TRUE))
{
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_06"); //Послушай, я все еще не договорился со стражей.
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_07"); //Я хочу, чтобы ты отнес это письмо Гербрандту. Это один из торговцев в верхнем квартале.
AI_Output(self,other,"DIA_DiegoNW_HaveYourGold_11_08"); //Передай ему привет от меня. А затем встретимся перед домом Гербрандта.
CreateInvItems(self,ItWr_DiegosLetter_MIS,1);
B_GiveInvItems(self,other,ItWr_DiegosLetter_MIS,1);
B_StartOtherRoutine(Gerbrandt,"WaitForDiego");
MIS_HelpDiegoNW = LOG_SUCCESS;
MIS_DiegosResidence = LOG_Running;
B_GivePlayerXP(XP_HelpDiegoNW);
Log_CreateTopic(TOPIC_DiegosResidence,LOG_MISSION);
Log_SetTopicStatus(TOPIC_DiegosResidence,LOG_Running);
B_LogEntry(TOPIC_DiegosResidence,"Диего дал мне письмо для торговца Гербрандта.");
AI_StopProcessInfos(self);
};
};
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.128
Благодарности
5.625
Баллы
910

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

Участник форума
Регистрация
6 Дек 2012
Сообщения
350
Благодарности
521
Баллы
325
В Готике 2 НВ в файле Gothic.dat sourcer не дает скомпилировать, ссылаясь что нельзя преобразовывать тип int в instanse
Скобки неправильно стоят. Надо:
if(Npc_HasItems(other,ItMi_Gold) < DiegosTreasure)
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Сейчас ещё вопрос появился (перед сдачей версии на тесты):

Я имею вход на локацию с трёх мест и мне нужно:
Если попадаешь на локацию срабатывал триггер. Но мне можно поставить с одним названием в трёх местах триггер или для каждого места отдельно названный триггер нужен? (1 или 3 названия подбирать, что существенно)

scriptFunc = одинаковое название файла *.d можно использовать в трёх триггерах или нужно каждый раз различное использовать (прописывается ведь в Spacer, а Spacer это движок. А у меня нет информации, что в этот раритет напихали)

Зашли на локацию, глобальная переменная изменилась. Вышли из локации, глобальная переменная стала обычной. Итого 3 триггера на вход и 3 на выход (2 или 6 названия, это пустяк?)
 
Последнее редактирование:

Vic7im

Участник форума
Регистрация
15 Мар 2016
Сообщения
49
Благодарности
18
Баллы
175
Hello everyone, I was playtesting my mod this morning and I noticed something REALLY bad. NPCs don't react to damage anymore.
Let me explain, Cavalorn was attacked by goblins, he kills the FIRST one that attacked him, then he simply stops, he doesn't turn on the others.

I have no idea what's causing this, what could it be possibly related to?

Also, sheep aren't following their routines either, and yet again I have no clue why. Which are the scripts that are usually called by Npcs to react to monsters/enemies?

Thank you all for the answers and sorry for writing in english, have a nice day!
 

Boka

Забанен
Регистрация
27 Апр 2016
Сообщения
47
Благодарности
24
Баллы
165
Вопросик. Изменил скрипт, упаковал все через VDFS в *.mod, создал ini. Запускаю через стартер, все изменения работают, но главный герой (безымянный) имеет какую-то непонятную голову, в инвентаре куча золота и предметов. Почему так и как это изменить? :confused:
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
I have no idea what's causing this, what could it be possibly related to?
Менялось ли что-то в функциях AI?

герой (безымянный) имеет какую-то непонятную голову, в инвентаре куча золота и предметов.
В ИНИшнике точно прописан твой ГГ?
 
Сверху Снизу