/* (self) (3rd) (plural) (plur 3rd) pronoun: you he/she/it names they possesive: your his/her/its foo's & bar's their objective: you him/her/it names them pron: name you he/she/it they poss: name's your his/her/its their obj: name you him/her/them them \b1PRON hit$ \b2PRON on \b2poss the head with \b1poss sign */ string fix_msg(string s,mixed *persons,object active) { string *t,*t2,tmp; int e,d,p; t=explode(s,"\b"); for(e=1;e<sizeof(t);e++) { if(sscanf(t[e],"%dPRON%s",p,tmp)==2 || (sscanf(t[e],"%dpron%s",p,tmp)==2) && -1!=member_array(active,persons[p])) { p--; t[e]=implode_nicely(map_array(persons[p],lambda(object who,object active) { if(who==active) return "you"; return who->query_name(); } ,active))+tmp; }else if(sscanf(t[e],"%dPOSS%s",p,tmp)==2 || (sscanf(t[e],"%dposs%s",p,tmp)==2) && -1!=member_array(active,persons[p])){ p--; t[e]=implode_nicely(map_array(persons[p],lambda(object who,object active) { string foo; if(who==active) return "your"; foo=who->query_name(); if(foo[-1]=='s') return foo+"'"; return foo+"'s"; } ,active))+tmp; }else if(sscanf(t[e],"%dOBJ%s",p,tmp)==2 || (sscanf(t[e],"%dobj%s",p,tmp)==2) && -1!=member_array(active,persons[p])){ p--; t[e]=implode_nicely(map_array(persons,lambda(object who,object active) { if(who==active) return "you"; return who->query_name(); } ,active))+tmp; }else if(sscanf(t[e],"%dpron%s",p,tmp)==2){ if(sizeof(persons[p])==1) { t[e]=persons[p]->query_pronoun()+tmp; }else{ t[e]="they"+tmp; } }else if(sscanf(t[e],"%dposs%s",p,tmp)==2){ if(sizeof(persons[p])==1) { t[e]=persons[p]->query_possessive()+tmp; }else{ t[e]="their"+tmp; } }else if(sscanf(t[e],"%dobj%s",p,tmp)==2){ if(sizeof(persons[p])==1) { t[e]=persons[p]->query_objective()+tmp; }else{ t[e]="them"+tmp; } }else{ t[e]="\n"+t[e]; } } return implode(t,""); } varargs string msg(string message,mixed first,mixed second) { string st_msg,nd_msg,rd_msg; mixed *tmp; object o; if(sscanf(message,"%s|%s",st_msg,nd_msg)) { if(sscanf(nd_msg,"%s|%s",nd_msg,rd_msg)) { nd_msg=replace(nd_msg,"$","s"); rd_msg=replace(rd_msg,"$","s"); }else{ rd_msg=nd_msg=replace(nd_msg,"$","s"); } }else{ nd_msg=rd_msg=replace(st_msg=message,"$","s"); } st_msg=replace(st_msg,"$",""); if(!first) first=({this_object()}); if(!second) second=({}); if(!pointerp(second)) second=({second}); if(!pointerp(first)) first=({first}); tmp=({first,second}); foreach(first,o) o->catch_tell(capitalize(fix_msg(st_msg,tmp,o))); foreach(second,o) o->catch_tell(capitalize(fix_msg(nd_msg,tmp,o))); tell_room(environment(first[0]),capitalize(fix_msg(rd_msg,tmp,0)), first+second); }