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

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

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

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Доброго времени суток форумчане, у меня вопрос касаемо скриптинга. В первой части Готики при вступлении в один из лагерей срабатывает скрипт B_GuildGreetings. Пример: при вступлении в старый лагерь от "своих" мы слышим, "за Гомеза!" Как реализовать данную фичу в Готики 2?! Пытался идентично построить скрипт, но все тщетно, может кто подправить?!

func void B_GuildGreetings(var C_Npc self,var C_Npc other)
{
if(Npc_IsInState(self,ZS_Talk) && (other.guild == GIL_KDF) && (self.guild == GIL_NOV))
{
B_Say(self,other,"$PALGREETINGS");
}
else if(Npc_IsInState(self,ZS_Talk) && (other.guild == GIL_NOV) && (self.guild == GIL_KDF))
{
B_Say(self,other,"$PALGREETINGS");
}
else if(((other.guild == GIL_MIL) && ((self.guild == GIL_MIL))) && ((Npc_GetTempAttitude(self,other) == ATT_FRIENDLY) || (Npc_GetTempAttitude(self,other) == ATT_NEUTRAL)))
{

B_Say(self,other,"$MILGREETINGS");
}
else if(((other.guild == GIL_PAL) && ((self.guild == GIL_MIL))) && ((Npc_GetTempAttitude(self,other) == ATT_FRIENDLY) || (Npc_GetTempAttitude(self,other) == ATT_NEUTRAL)))
{

B_Say(self,other,"$MILGREETINGS");
}
else if(((other.guild == GIL_MIL) && ((self.guild == GIL_PAl))) && ((Npc_GetTempAttitude(self,other) == ATT_FRIENDLY) || (Npc_GetTempAttitude(self,other) == ATT_NEUTRAL)))
{

B_Say(self,other,"$MILGREETINGS");
};

};
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Как реализовать данную фичу в Готики 2?! Пытался идентично построить скрипт, но все тщетно, может кто подправить?!
Подсказка 1: Это не функция движка. Воспользуйся поиском по скриптам Готики 1 и посмотри откуда она вызывается и сделай по аналогии.

Подсказка 2:
вызов см. в скрипте: Gothic\_work\data\Scripts\content\AI\ZS_Human\ZS_Talk.d

Подсказка 3:
Проверки типа "if (Npc_IsInState(self,ZS_Talk))" в функции "B_GuildGreetings()" не потребуются, также как и эти передаваемые параметры: "(var C_Npc self,var C_Npc other)".
 
Последнее редактирование:

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Подсказка 1: Это не функция движка. Воспользуйся поиском по скриптам Готики 1 и посмотри откуда она вызывается и сделай по аналогии.

Подсказка 2:
вызов см. в скрипте: Gothic\_work\data\Scripts\content\AI\ZS_Human\ZS_Talk.d

Подсказка 3:
Проверки типа "if (Npc_IsInState(self,ZS_Talk))" в функции "B_GuildGreetings()" не потребуются, также как и эти передаваемые параметры: "(var C_Npc self,var C_Npc other)".

Спасибо большое, был не внимателен. Внес поправки и добавил B_GuildGreetings() в ZS_Talk и заработало *dance*
 

WoOliN

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

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.168
Баллы
915
Зачем повторно изобретать велосипед, если в G2 уже есть функция B_Say_GuildGreetings(var C_Npc slf,var C_Npc oth), которая вызывается из функции обработки восприятия B_AssessPlayer()?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Будьте любезны подсказать:
состояния ZS_Pyro и ZS_MagicBurn - от каких заклинаний или событий запускаются движком ?
(особенно интересуют отличия в условиях их запуска и длительность)

Если возможно - покажите мне тот кусок кода.
B_AssessMagic()
 

Дикарь

★★★★★★★
Модератор
Регистрация
17 Апр 2007
Сообщения
7.281
Благодарности
9.049
Баллы
1.415
Что-то у меня внезапно перестали запускаться многие моды, в особенности всякие тестовые сборки, демки и т.п
Идёт заставка игры, на ней всё останавливается. На заднем фоне выскакивает окошко с сообщением об ошибке, но увидеть его можно только нажав Alt+Tab.

ошибка.jpg


С момента последнего удачного запуска никаких кардинальных изменений не вносилось. Часть модов продолжает благополучно запускаться. В чём может быть дело?
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Что-то у меня внезапно перестали запускаться многие моды, в особенности всякие тестовые сборки, демки и т.п
Идёт заставка игры, на ней всё останавливается. На заднем фоне выскакивает окошко с сообщением об ошибке, но увидеть его можно только нажав Alt+Tab.

Посмотреть вложение 54312

С момента последнего удачного запуска никаких кардинальных изменений не вносилось. Часть модов продолжает благополучно запускаться. В чём может быть дело?
Попробуй поставить фикс из этой темы https://worldofplayers.ru/threads/38933/
и зарезервируй память м. б. поможет .
 

WoOliN

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

ZS_Pyro и ZS_MagicBurn не привязаны ни к чему в обычных скриптах.

Похоже, что ZS_Pyro включается от урона огнём, если защита цели от огня не выше какого-то числа.
По использованию ZS_MagicBurn мне вообще ничего не известно.
Нужны подробности из движка.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
пиро никогда не используется. а так ZS_MagicBurn тоже не юзается в движке он закоменчен.

а лучше конечно проверь, вызывается ли вообще ZS_MagicBurn когда либо, ибо в двиге он закоменчен и в скриптах вызовов нету
 
Последнее редактирование:

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Давайте с другой стороны - состояние Горения цели от DAM_FIRE атаки Огненного ящера,
когда цель теряет что-то около 50 ХП в секунду, в течении пары секунд.

Что это за состояние?
Где и как оно расписано?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
ну вот и узнай, в режиме марвина кнопка G слева будут состояния показыват
 

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
EV_DAMAGE_PER_FRAME(0)
возможно экран обрезал пару первых букв.
В любом случае я не в курсе что за состояние вызывает такой вид дамага.

Можно ещё попросить глянуть - в движке встречается константа SPL_PYRO_DAMAGE_PER_SEC в каком-либо качестве?

Короче говоря - я пытаюсь разобраться с Горением:
что его активирует?
что не даст ему активироваться?
сколько урона наносит и сколько длится?
возможно ли изменить все эти параметры через скрипты?
есть ли ещё что-либо похожее в Г2НВ?
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
А вообще да, странно пока понять не могу где дамаг наносится, ща буду искать
const int NPC_BURN_TICKS_PER_DAMAGE_POINT = 1000;
const int NPC_BURN_DAMAGE_POINTS_PER_INTERVALL = 50;
вроде оно, да точно оно
 
Последнее редактирование:

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
347
Благодарности
196
Баллы
210
Разобрался полностью )
Спасибо за помощь
 
Последнее редактирование:

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Прошу прощение хотел создать простенький квест ,да опять всё наперекосяк
В Диалог Непися добавил следующее
Код:
instance DIA_Orry_q3 (C_Info)
{
npc = GRD_254_Orry;
nr = 1;
condition = dia_Orry_q3_condition;
information = dia_Orry_q3_info;
permanent = FALSE;
important = FALSE;
description = "Я могу ещё чем нибудь помочь";
};
func int dia_Orry_q3_condition()
{
if(Npc_KnowsInfo(other, DIA_Orry_OldCamp))
{
return TRUE;
};
};
func void dia_Orry_q3_info()
{
AI_Output(other,self,"DIA_Orry_q_15_00"); //Я могу ещё чем нибудь помочь
AI_Output(self,other,"DIA_Orry_q_03_01"); //Да ты бы мог мне принести пиво!
Info_ClearChoices(DIA_Orry_q3);
Info_AddChoice(dia_Orry_q3,"Хорошо я принесу.",dia_Orry_q3_w);
Info_AddChoice(dia_Orry_q3,"Нет, забудь",dia_Orry_q3_e);
Info_AddChoice(dia_Orry_q3,"Ты мне уже надоел.",dia_Orry_q3_r);
};
func void dia_Orry_q3_w()
{
AI_Output(other,self,"dia_Orry_q3_w_15_00"); //Хорошо я принесу тебе кольцо.
AI_Output(self,other,"dia_Orry_q3_w_03_01"); //Вот и отлично!
AI_StopProcessInfos (self);
Log_CreateTopic(TOPIC_Beer,LOG_MISSION);
Log_SetTopicStatus(TOPIC_Beer,LOG_Running);
B_LogEntry(TOPIC_Beer,"Нужно принести пиво для Ори");
};
func void dia_Orry_q3_e()
{
AI_Output(other,self,"dia_Orry_q3_e_15_00"); //Нет, забудь.
AI_Output(self,other,"dia_Orry_q3_e_03_01"); //Ну и ладно!
AI_StopProcessInfos (self);
};
func void dia_Orry_q3_r()
{
AI_Output(other,self,"dia_Orry_q3_r_15_00"); //Забудь!
AI_Output(self,other,"dia_Orry_q3_r_03_01"); //Тогда  и не нужно!
AI_StopProcessInfos (self);
};
instance DIA_Orry_q4 (C_Info)
{
npc = GRD_254_Orry;
nr = 1;
condition = dia_Orry_q4_condition;
information = dia_Orry_q4_info;
permanent = FALSE;
important = FALSE;
description = "Вот, я принёс тебе пиво";
};
func int dia_Orry_q4_condition()
{
if(Npc_HasItems(other, ItFoBeer)>= 1)
{
return TRUE;
};
};
func void dia_Orry_q4_info()
{
AI_Output(other,self,"DIA_Orry_q4_15_00"); //Вот, я принёс тебе пиво!
AI_Output(self,other,"dia_Orry_q4_03_01"); //Отлично!
b_giveinvitems(other,self, ItFoBeer,1);
B_GiveXP (XP_kirgovictory);
Log_SetTopicStatus(TOPIC_Beer,LOG_SUCCESS);
B_LogEntry(TOPIC_Beer,"Я принёс пиво Ори пиво.");
};
В Storu Globals добавил
var int Beer
В Log constants добавил
const string TOPIC_Beer = "Пиво для Орри";
Всё компилится но при заходе в игру этого диалога у непися нет как и самого квеста в журнале ткните носом что я накосячил ?
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Новые инстанции диалогов становятся доступными только после начала новой игры.
Так я и начал новую игру , а диалога нет вот и думаю где ошибка , сам я её не откопал принудительная проверка ни к чему не привела.
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
func int dia_Orry_q3_condition()
{
if(Npc_KnowsInfo(other, DIA_Orry_OldCamp))
{
return TRUE;
------------------------------------------------------------------------------------------------------------------------------
Если Непись знает инфу(диалог) DIA_Orry_OldCamp - тогда и только тогда появится диалог ниже.

Первое, я не вижу диалога DIA_Orry_OldCamp, диалог не полный?!
Второе, у тебя везде nr = 1, быть может стоить изменить по возрастанию?
Третье, тут бы я изменил следующим образом, будет логичней.

func int dia_Orry_q4_condition()
{
if((Npc_HasItems(other, ItFoBeer)>= 1) && (Npc_KnowsInfo(other, dia_Orry_q3_info))
{
return TRUE;
};
};
 
Сверху Снизу