Yes, the collar messages have been in the OP already. Since the ZHAO is opensouce I played a lil with both.
The script probably leaves room for improvement optimisation but so far it seems to work fine for me:
----------------------------------------------------------
string uid;
integer sitOverride = FALSE;
integer animOverrideOn = TRUE;
integer override = FALSE;
integer listener = -1;
default
{
state_entry() {
override = FALSE;
uid = (string)llGetOwner();
llListenRemove(listener);
listener = llListen(-8888, "", NULL_KEY, ""

;
}
attach(key id) {
override = FALSE;
if (id != NULL_KEY) {
uid = (string)id;
llListenRemove(listener);
listener = llListen(-8888, "", NULL_KEY, ""

;
}
}
listen(integer channel, string name, key id, string msg) {
if (channel == -888

{
if (msg == uid + "booton"

{
override = TRUE;
if (animOverrideOn) llMessageLinked(LINK_THIS, 0, "AO_ON", NULL_KEY);
if (sitOverride) llMessageLinked(LINK_THIS, 0, "SIT_ON", NULL_KEY);
llSetTimerEvent(1);
} else if (msg == uid + "bootoff"

{
override = TRUE;
if (animOverrideOn) llMessageLinked(LINK_THIS, 0, "AO_OFF", NULL_KEY);
if (sitOverride) llMessageLinked(LINK_THIS, 0, "SIT_OFF", NULL_KEY);
llSetTimerEvent(1);
}
}
}
link_message(integer sender, integer channel, string msg, key id) {
if (!override) {
if (msg == "AO_ON" ) animOverrideOn = TRUE;
else if (msg == "AO_OFF"

animOverrideOn = FALSE;
else if (msg == "SIT_ON"

sitOverride = TRUE;
else if (msg == "SIT_OFF"

sitOverride = FALSE;
}
}
timer() {
llSetTimerEvent(0);
override = FALSE;
}
}