По поводу ZS_Practice_Magic, рассмотрим подробнее...
func void ZS_Practice_Magic()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
if(Npc_GetDistToWP(self,self.wp) >TA_DIST_SELFWP_MAX)
{
AI_GotoWP(self,self.wp);
};
};
func int ZS_Practice_Magic_Loop()
{
var int zufall;
\\ 1 условие
if(Npc_IsOnFP(self,"STAND")) \\Если НПЦ стоит на фрипоинте STAND
{
AI_AlignToFP(self);
if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
{
self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
}
\\ 2 условие
else if(Wld_IsFPAvailable(self,"STAND")) \\Иначе, если доступен (свободен) фрипоинт STAND
{
AI_GotoFP(self,"STAND");
AI_Standup(self);
AI_AlignToFP(self);
self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK;
}
\\ 3 условие
else \\Иначе выровняться по вейпоинту.
{
AI_AlignToWP(self);
if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
{
self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
};
if((Npc_GetStateTime(self) >7) && (self.aivar[AIV_TAPOSITION] == NOTINPOS)) \\Собсно скрипт анимации начинают воспроизводиться, если эти два условия выполнены.
{
zufall = Hlp_Random(100);
if(zufall <= 25)
{
AI_PlayAni(self,"T_PRACTICEMAGIC");
}
else if(zufall <= 50)
{
AI_PlayAni(self,"T_PRACTICEMAGIC2");
}
else if(zufall <= 70)
{
AI_PlayAni(self,"T_PRACTICEMAGIC3");
}
else if(zufall <= 90)
{
AI_PlayAni(self,"T_PRACTICEMAGIC4");
}
else
{
AI_PlayAni(self,"R_SCRATCHHEAD");
};
Npc_SetStateTime(self,0);
};
return LOOP_CONTINUE;
};
func void ZS_Practice_Magic_End()
{
};
Собсно, отсюда видно, что анимация начнет работать, только тогда, когда self.aivar[AIV_TAPOSITION] == NOTINPOS и (Npc_GetStateTime(self) >7.
С Npc_GetStateTime(self) >7 проблем быть не должно, а вот с self.aivar[AIV_TAPOSITION] == NOTINPOS может быть некоторый геморой.
self.aivar[AIV_TAPOSITION] == NOTINPOS, может установиться только в 1 и 3 условии, если уже self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK
В то же время self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK может установиться только во 2 условии, т.е. если для НПЦ доступен фрипоинт STAND
Отсюда следует, если НПЦ не будет доступен фрипоинт STAND, AIV_TAPOSITION не установиться в NOTINPOS_WALK и далее в NOTINPOS. Значит делаем вывод, что НПЦ не может получить доступ к фрипоинту.
Можно либо добавить в спейсере нужные фрипоинты, либо в скриптах упростить условия.