Проблема 146% не в этом. Разговаривать может даже болванка, умеющая только стоять на месте.
Угу. В используемых состояниях
написанных для хуманов ZS_STAND_WP и функциях завязанных на
набор восприятий людей могут быть
прописаны анимации, которых у всяких монстров просто нет, что при отработке такого состояния чревато. Поэтому для диалогов с демоном Ксардаса, овцами, варгами и прочими Йодами из Странника (кстати тоже гоблин) и множества других из различных модов пишут собственные состояния, примеров навалом.
func void ZS_Stand_WP()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
AI_GotoWP(self,self.wp);
AI_AlignToWP(self);
self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
func int ZS_Stand_WP_loop()
{
var int random;
if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
{
AI_PlayAni(self,"T_STAND_2_LGUARD");
self.aivar[AIV_TAPOSITION] = ISINPOS;
};
if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
{
random = Hlp_Random(10);
if(random == 0)
{
AI_PlayAni(self,"T_LGUARD_SCRATCH");
}
else if(random == 1)
{
AI_PlayAni(self,"T_LGUARD_STRETCH");
}
else if(random == 2)
{
AI_PlayAni(self,"T_LGUARD_CHANGELEG");
};
Npc_SetStateTime(self,0);
};
return LOOP_CONTINUE;
};
func void ZS_Stand_WP_end()
{
AI_PlayAni(self,"T_LGUARD_2_STAND");
};
Все функции прописанные ниже в наборе восприятий используются в основном хуманами и в каждой из них могут быть прописаны функции совместимые только с хуманами.
func void
Perception_Set_Normal()
{
self.senses = SENSE_HEAR | SENSE_SEE;
self.senses_range = PERC_DIST_ACTIVE_MAX;
if(Npc_KnowsInfo(self,1) || C_NpcIsGateGuard(self))
{
Npc_SetPercTime(self,0.3);
}
else
{
Npc_SetPercTime(self,1);
};
Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessPlayer);
Npc_PercEnable(self,PERC_ASSESSENEMY,B_AssessEnemy);
Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic);
Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage);
Npc_PercEnable(self,PERC_ASSESSMURDER,B_AssessMurder);
Npc_PercEnable(self,PERC_ASSESSTHEFT,B_AssessTheft);
Npc_PercEnable(self,PERC_ASSESSUSEMOB,B_AssessUseMob);
Npc_PercEnable(self,PERC_ASSESSENTERROOM,B_AssessPortalCollision);
Npc_PercEnable(self,PERC_ASSESSTHREAT,B_AssessThreat);
Npc_PercEnable(self,PERC_DRAWWEAPON,B_AssessDrawWeapon);
Npc_PercEnable(self,PERC_ASSESSFIGHTSOUND,B_AssessFightSound);
Npc_PercEnable(self,PERC_ASSESSQUIETSOUND,B_AssessQuietSound);
Npc_PercEnable(self,PERC_ASSESSWARN,B_AssessWarn);
Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk);
Npc_PercEnable(self,PERC_MOVEMOB,B_MoveMob);
};