Oxbow
Участник форума
- Регистрация
- 22 Дек 2017
- Сообщения
- 265
- Благодарности
- 33
- Баллы
- 200
Не подскажете, почему НПС не переходит в более злым вариантам диалога и почему у меня две строчки "Конец":
Ну, вообще, сейчас именно прохода. Про дом я для общего развития спрашивал, потому что думал, что это схожие функции.
Daedalus:
const string Wnd_1618_Checkpoint = "NW_WANDCAMP1_TENT1";
instance DIA_Wnd_1618_Wanderer_FirstWarn(C_Info)
{
npc = WND_1618_Wanderer;
nr = 1;
condition = DIA_Wnd_1618_Wanderer_FirstWarn_Condition;
information = DIA_Wnd_1618_Wanderer_FirstWarn_Info;
permanent = TRUE;
important = TRUE;
};
func int DIA_Wnd_1618_Wanderer_FirstWarn_Condition()
{
if((MIS_ChilledRevenge != LOG_Running) && (self.aivar[AIV_Guardpassage_Status] == GP_NONE) && (self.aivar[AIV_PASSGATE] == FALSE) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE))
{
return TRUE;
};
};
func void DIA_Wnd_1618_Wanderer_FirstWarn_Info()
{
AI_Output(self,other,"DIA_Wnd_1618_Wanderer_FirstWarn_01_00"); //Стой! Куда это ты идешь?
AI_Output(other,self,"DIA_Wnd_1618_Wanderer_FirstWarn_15_01"); //Я хотел...
AI_Output(self,other,"DIA_Wnd_1618_Wanderer_FirstWarn_01_03"); //Здесь не на что смотреть. Иди своей дорогой.
other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,Wnd_1618_Checkpoint);
self.aivar[AIV_Guardpassage_Status] = GP_FirstWarnGiven;
};
instance DIA_Wnd_1618_Wanderer_SecondWarn(C_Info)
{
npc = WND_1618_Wanderer;
nr = 2;
condition = DIA_Wnd_1618_Wanderer_SecondWarn_Condition;
information = DIA_Wnd_1618_Wanderer_SecondWarn_Info;
permanent = TRUE;
important = TRUE;
};
func int DIA_Wnd_1618_Wanderer_SecondWarn_Condition()
{
if((MIS_ChilledRevenge != LOG_Running) && (self.aivar[AIV_Guardpassage_Status] == GP_FirstWarnGiven) && (self.aivar[AIV_PASSGATE] == FALSE) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE) && (Npc_GetDistToWP(other,Wnd_1618_Checkpoint) < (other.aivar[AIV_LastDistToWP] - 50)))
{
return TRUE;
};
};
func void DIA_Wnd_1618_Wanderer_SecondWarn_Info()
{
AI_Output(self,other,"DIA_Wnd_1618_Wanderer_SecondWarn_01_01"); //Ты же не хочешь ЗАСТАВИТЬ меня ударить тебя, правда?
other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,Wnd_1618_Checkpoint);
self.aivar[AIV_Guardpassage_Status] = GP_SecondWarnGiven;
AI_StopProcessInfos(self);
};
instance DIA_Wnd_1618_Wanderer_Attack(C_Info)
{
npc = WND_1618_Wanderer;
nr = 3;
condition = DIA_Wnd_1618_Wanderer_Attack_Condition;
information = DIA_Wnd_1618_Wanderer_Attack_Info;
permanent = TRUE;
important = TRUE;
};
func int DIA_Wnd_1618_Wanderer_Attack_Condition()
{
if((MIS_ChilledRevenge != LOG_Running) && (self.aivar[AIV_Guardpassage_Status] == GP_SecondWarnGiven) && (self.aivar[AIV_PASSGATE] == FALSE) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE) && (Npc_GetDistToWP(other,Wnd_1618_Checkpoint) < (other.aivar[AIV_LastDistToWP] - 50)))
{
return TRUE;
};
};
func void DIA_Wnd_1618_Wanderer_Attack_Info()
{
other.aivar[AIV_LastDistToWP] = 0;
self.aivar[AIV_Guardpassage_Status] = GP_NONE;
AI_StopProcessInfos(self);
B_Attack(self,other,AR_GuardStopsIntruder,1);
};
instance WND_1618_Wanderer_EXIT(C_Info)
{
npc = WND_1618_Wanderer;
nr = 999;
condition = WND_1618_Wanderer_EXIT_Condition;
information = WND_1618_Wanderer_EXIT_Info;
permanent = TRUE;
description = "Конец";
};
func int WND_1618_Wanderer_EXIT_Condition()
{
return TRUE;
};
func void WND_1618_Wanderer_EXIT_Info()
{
AI_StopProcessInfos(self);
};
Дома или прохода? Это разные вещи. Приведённые тобой фрагменты кода относятся к диалогам по защите прохода (стражники на воротах, например). Фактически, это система диалогов, запрещающих ГГ приближаться к определённому вейпоинту, находящемуся позади стражников.
Зашита ДОМА от проникновения туда нежданного гостя в виде ГГ - это область функций ИИ.
Ну, вообще, сейчас именно прохода. Про дом я для общего развития спрашивал, потому что думал, что это схожие функции.
Последнее редактирование: