ACMD(do_pemote) Another form of emote, common to most RP-heavy muds, pemote is the 'personal emote'. This command allows the player to send an emote to his/her chosen target player, while at the same time masking that emote by sending another to the room. Usage: pemote | > pemote Shameriseth giggles and whispers, 'Ha! Look at Balor! A corset!!'. | whispers something to Shameriseth while giggling and eying Balor. (sent to room) Cheron whispers something to Shameriseth while giggling and eying Balor. (sent to vict and ch) Cheron giggles and whispers, 'Ha! Look at Balor! A corset!!'. Yeah I know, bad example. Inside joke for us, and I never said I was good at RP. I just try to code the stuff :) If you don't have a way to specify between a character being IC and OOC, just get rid of those checks. If you use some macro other than IS_OOC(ch) for checking for OOCness, replace that. Ok, the snippet: ---------------- prototype int parse_pemote(char *argument, char *vict_arg, char *room_arg); Add these two functions to act.social.c (or wherever): ACMD(do_pemote) { struct char_data *vict; // Check for ch in character if (IS_OOC(ch) && GET_LEVEL(ch) < LVL_GOD) { send_to_char("This can only be done In-Character.\r\n", ch); return; } skip_spaces(&argument); if (!*argument) { send_to_char("Usage: pemote | \r\n", ch); return; } half_chop(argument, buf1, argument); if (!(vict = get_char_vis(ch, buf1, NULL, FIND_CHAR_ROOM))) { send_to_char(NOPERSON, ch); return; } // Check for victim in character if (GET_LEVEL(ch) < LVL_GOD) { if (IS_OOC(vict) && GET_LEVEL(vict) < LVL_GOD) { send_to_char("That person is out of character.\r\n", ch); sprintf(buf, "%s tried to include you in the roleplay, but you are OOC.\r\n", GET_NAME(ch)); send_to_char(buf, vict); return; } } if (!(parse_pemote(argument, buf1, buf2))) { send_to_char("Usage: pemote | \r\n", ch); return; } else { sprintf(buf, "$n %s", buf1); act(buf, FALSE, ch, 0, vict, TO_VICT); // Send out the to_vict message act(buf, FALSE, ch, 0, vict, TO_CHAR); // Send the to_vict also to char sprintf(buf, "$n %s", buf2); act(buf, FALSE, ch, 0, vict, TO_NOTVICT); // Send out the to_room message } } /* from one_argument, pipe (|) delimited text */ int parse_pemote(char *argument, char *vict_arg, char *room_arg) { char *begin_vict = vict_arg; char *begin_room = room_arg; char *tester = argument; int found = 0; // Check to make sure this is really pipe delimited text for ( ; *tester; tester++) { if (*tester == '|') found = 1; } if (!found) return 0; // get the to_vict argument do { skip_spaces(&argument); if (!*argument) return 0; vict_arg = begin_vict; while (*argument && *argument != '|') { *(vict_arg++) = *argument; argument++; } argument++; *vict_arg = '\0'; } while (fill_word(begin_vict)); /* skip that pipe */ if (*argument == '|') argument++; //which it *should* at this point /* get the to_room argument */ do { skip_spaces(&argument); if (!*argument) return 0; room_arg = begin_room; while (*argument) { *(room_arg++) = *argument; argument++; } argument++; *room_arg = '\0'; } while (fill_word(begin_room)); return 1; } then in interpreter.c, add the ACMD(do_pemote) prototype, and a line in the command list for pemote. ---------------------- That's it, that's all. Backup your act.social.c before applying this. It shouldn't cause any damage, but, as per the standard disclaimer, if it does, it's not my fault. It works for me. Any questions/comments, feel free to contact me at cheron@arcanerealms.org. Enjoy! -Cathy Gore aka Cheron, Arcane Realms