- Регистрация
- 26 Мар 2004
- Сообщения
- 2.058
- Благодарности
- 1.017
- Баллы
- 315
Добавил еще одно описание для функции:
TA_BeginOverlay()
ну и все сопуствующие : TA_EndOverlay и TA_RemoveOverlay.
примеры
Добавил еще одно описание для функции:
TA_BeginOverlay()
ну и все сопуствующие : TA_EndOverlay и TA_RemoveOverlay.
// ---------------------------------
// ---------------------------------
// напарник курит и ждёт
func void ZS_SJ_FP() { ZS_Smoke_Joint(); };
func int ZS_SJ_FP_Loop()
{
if (hero.aivar[AIV_INVINCIBLE] == false)
{
TA_RemoveOverlay(self);
AI_ContinueRoutine(self);
};
return ZS_Smoke_Joint_Loop();
};
func void ZS_SJ_FP_End() { ZS_Smoke_Joint_End(); };
// ---------------------------------
// ---------------------------------
Daedalus:
| Игровое время 11:08 |
func void B_SJ_FP_start()
{
if hero.aivar[AIV_INVINCIBLE] == false { return; };
if self.aivar[AIV_INVINCIBLE] == true { return; }; // герой говорит с напарником
// если герой решил с кем то поболтать/ поспать /поработать в кузне
var string NearestWP;
NearestWP = Npc_GetNearestWP(self);
Hlp_PrintConsole(Str_Format("B_SJ_FP_start[%s]: NearestWP = %s", self.name, NearestWP));
TA_BeginOverlay(self);
TA(self, 00,12, ZS_SJ_FP, NearestWP);
TA(self, 12,00, ZS_SJ_FP, NearestWP);
//TA_Min(self, 23,00, 08, 00, ZS_SJ_FP, NearestWP);
TA_EndOverlay(self);
AI_ContinueRoutine(self);
};
// ---------------------------------
func int ZS_Follow_Player_Loop ()
{
B_SJ_FP_start();
return ZS_Follow_Player_Loop_old();
};
func void ZS_SJ_FP_start()
{
if hero.aivar[AIV_INVINCIBLE] == false { return; };
if self.aivar[AIV_INVINCIBLE] == true { return; }; // герой говорит с напарником
if self.aivar[AIV_PARTYMEMBER] == false { return; };
//if Npc_IsInState(self,ZS_Follow_Player)
// self это напарник героя. Напарник будет ждать героя
// если герой решил с кем то поболтать/ поспать /поработать в кузне
var string NearestWP;
NearestWP = Npc_GetNearestWP(self);
Hlp_PrintConsole(Str_Format("ZS_SJ_FP_start[%s]: NearestWP = %s", self.name, NearestWP));
TA_BeginOverlay(self);
TA(self, 00,12, ZS_Smoke_Joint, NearestWP);
TA(self, 12,00, ZS_Smoke_Joint, NearestWP);
TA_EndOverlay(self);
AI_ContinueRoutine(self);
self.aivar[AIV_PARTYMEMBER] = 666; // Маркер
};
func void ZS_SJ_FP_end()
{
if self.aivar[AIV_PARTYMEMBER] != 666 { return; };
Hlp_PrintConsole(Str_Format(" ZS_SJ_FP_end = [%s]", self.name));
self.aivar[AIV_PARTYMEMBER] = true;
TA_RemoveOverlay(self);
AI_ContinueRoutine(self);
};
func event GameLoop()
{
var int xyz;
if PLAYER_MOBSI_PRODUCTION != false
&& xyz == 0
{
xyz = 1;
AI_SetNpcsToState(hero, ZS_SJ_FP_start, 1000); //-kairo
};
if PLAYER_MOBSI_PRODUCTION == false
&& xyz == 1
{
AI_SetNpcsToState(hero, ZS_SJ_FP_end, 1000); //-kairo
xyz = 0;
};
};
func void DIA_Bilgot_Pause_Info()
{
if self.aivar[AIV_PARTYMEMBER] == 666
{
AI_Output(other,self,"DIA_Addon_Diego_ComeOn_15_00"); //Пойдем со мной.
AI_Output(self,other,"DIA_Bilgot_TAKEYOUWITHME_05_03"); //Я готов!
self.aivar[AIV_PARTYMEMBER] = true;
TA_RemoveOverlay(self);
}
else
{
//AI_Output(other,self,"DIA_Bilgot_LAUFSCHNELLER_15_00"); //Ты не мог бы идти немного быстрее?!
//AI_Output(self,other,"DIA_Bilgot_LAUFSCHNELLER_05_01"); //Я иду так быстро, как могу.
AI_Output(other,self,"DIA_Addon_Diego_WarteHier_15_00"); //Подожди здесь!
AI_Output(self,other,"DIA_Bilgot_BEIBRUECKEANGEKOMMEN_05_03"); //Прощай!
var string NearestWP;
NearestWP = Npc_GetNearestWP(self);
Hlp_PrintConsole(Str_Format("DIA_Bilgot_Pause_Info[%s]: NearestWP = %s", self.name, NearestWP));
TA_BeginOverlay(self);
TA(self, 00,12, ZS_Smoke_Joint, NearestWP);
TA(self, 12,00, ZS_Smoke_Joint, NearestWP);
TA_EndOverlay(self);
self.aivar[AIV_PARTYMEMBER] = 666; // Маркер
};
AI_StopProcessInfos(self);
};
Если я правильно понял, ссылка нужна тебе для того, чтобы заставить непися в состоянии следования за ГГ что-то сделать. Если да, то в этом случае можно (и нужно) использовать посылку восприятия PERC_NPCCOMMAND и функцию-обработчик этого восприятия. В Г2 оно имеется, только зона действия ограничена 100 см. Это можно изменить в скриптах в функции InitPerceptions.
func event E_ZS_Follow_Player()
{
Hlp_PrintConsole(Str_Format(" E_ZS_Follow_Player[%s]: ", self.name));
Perc_SetRange (PERC_NPCCOMMAND, 3000 );
Npc_PercEnable(self, PERC_NPCCOMMAND, B_NpcCommand);
};
func event E_ZS_Guide_Player()
{
Hlp_PrintConsole(Str_Format(" E_ZS_Guide_Player[%s]: ", self.name));
Perc_SetRange (PERC_NPCCOMMAND, 3000 );
Npc_PercEnable (self, PERC_NPCCOMMAND, B_NpcCommand);
};
func event GameLoop()
{
var int xyz;
//if PLAYER_MOBSI_PRODUCTION != false
if hero.aivar[AIV_INVINCIBLE] == true
&& xyz == 0
{
xyz = 1;
Hlp_PrintConsole(" hero INVINCIBLE..");
Npc_SendPassivePerc(hero,PERC_NPCCOMMAND,hero,hero);
};
//if PLAYER_MOBSI_PRODUCTION == false
if hero.aivar[AIV_INVINCIBLE] == false
&& xyz == 1
{
Hlp_PrintConsole(" hero VINCIBLE..");
Npc_SendPassivePerc(hero,PERC_NPCCOMMAND,hero,hero);
xyz = 0;
};
};
func void B_OverlayParking_Start(var c_npc slf)
{
if hero.aivar[AIV_INVINCIBLE] == false { return; };
if slf.aivar[AIV_PARTYMEMBER] == false { return; };
if slf.aivar[AIV_INVINCIBLE] == true { return; }; // герой говорит с напарником?
//if Npc_IsInState(slf,ZS_Follow_Player)
// slf это напарник героя. Напарник будет ждать героя
// если герой решил с кем то поболтать/ поспать /поработать в кузне
var string NearestWP;
NearestWP = Npc_GetNearestWP(slf);
Hlp_PrintConsole(Str_Format("B_OverlayParking_Start[%s]: NearestWP = %s", slf.name, NearestWP));
TA_BeginOverlay(slf);
TA(slf, 00,12, ZS_Follow_Player, NearestWP);
TA(slf, 12,00, ZS_Follow_Player, NearestWP);
TA_EndOverlay(slf);
AI_ContinueRoutine(slf);
slf.aivar[AIV_PARTYMEMBER] = 666; // Маркер
};
func void B_OverlayParking_End(var c_npc slf)
{
if slf.aivar[AIV_PARTYMEMBER] != 666 { return; };
Hlp_PrintConsole(Str_Format(" B_OverlayParking_End = [%s]", slf.name));
slf.aivar[AIV_PARTYMEMBER] = true;
TA_RemoveOverlay(slf);
AI_ContinueRoutine(slf);
};
func void B_NpcCommand()
{
// там список исключений из соседнего файла
if DIA_PARTYMEMBER_Pause_Condition()
{
Hlp_PrintConsole(Str_Format(" B_NpcCommand[%s]... ", self.name));
B_OverlayParking_Start(self);
B_OverlayParking_End(self);
};
};