/*
* a generic emote simul_efun
*/
varargs int emote (object sender, string msg_self, string msg_others,
mixed target, string msg_target, string extra)
{
string act_name, target_name;
string act_objective, target_objective, act_poss, target_poss;
int has_extra;
if (!sender || !(act_name = (string)sender->query_cap_name()))
return 0;
act_objective = (string)sender->query_objective();
act_poss = (string)sender->query_possessive();
msg_others = replace_string(msg_others, "{N}", act_name);
msg_others = replace_string(msg_others, "{O}", act_objective);
msg_others = replace_string(msg_others, "{P}", act_poss);
msg_others = replace_string(msg_others, "{M}", extra);
if (!target || !msg_target)
{
message(msg_others,"emote",environment(sender),sender);
message(msg_self,"emote",sender);
return 1;
}
if (!present(target,environment(sender)))
{
return 0;
}
if (!objectp(target))
{
if (stringp(target))
{
target = find_living(target);
}
else return 0;
}
if (!(target_name = (string)target->query_cap_name()))
return 0;
target_objective = (string)target->query_objective();
target_poss = (string)target->query_possessive();
msg_others = replace_string(msg_others,"{n}", target_name);
msg_others = replace_string(msg_others, "{o}", target_objective);
msg_others = replace_string(msg_others, "{p}", target_poss);
msg_self = replace_string(msg_self,"{n}",target_name);
msg_self = replace_string(msg_self,"{o}",target_objective);
msg_self = replace_string(msg_self,"{p}",target_poss);
msg_self = replace_string(msg_self,"{M}",extra);
msg_target = replace_string(msg_target,"{N}",act_name);
msg_target = replace_string(msg_target,"{O}",act_objective);
msg_target = replace_string(msg_target,"{P}",act_poss);
msg_target = replace_string(msg_target,"{M}",extra);
message (msg_others,"emote",environment(sender),({sender,target}));
message (msg_self,"emote",sender);
message (msg_target,"emote",target);
return 1;
}