OnNotice, OnPerception, OnSight... they all work the same way, at different radius size "bubbles".
I would think that you could use a generic OnPerception script with an additional logic check to verify that which has been noticed is what you actually want noticed.
Code:
void main()
{
int nEvent = GetUserDefinedEventNumber(); // OnPerception
object oNoticer=GetObjectByTag();
object oNoticed=GetObjectByTag();
if (nEvent == 1002) && (GetObjectByTag(oNoticed) == yournoticedtag)
{
AssignCommand(OBJECT_SELF, ActionPlayAnimation(x,x,x));
}
}
This would work fine for K1, I would think it should work for TSL as well.