I noticed the old exclamation snippet didn't work with circleMUD 3.1 so I just made a quick and dirty fix.

ACMD(do_say)
{
	skip_spaces(&argument);
	char buf[MAX_INPUT_LENGTH + 12];

	if (!*argument) {
		send_to_char(ch, "Yes, but WHAT do you want to say?\r\n");
	} else {

	if (argument[strlen(argument) - 1] == '?') {
		snprintf(buf, sizeof(buf), "&M$n asks, '%s'&n", argument);
		act(buf, FALSE, ch, 0, 0, TO_ROOM);
		if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT)) {
			send_to_char(ch, "%s", CONFIG_OK); }
		else {
			delete_doubledollar(argument);
			send_to_char(ch, "&MYou ask, '%s'&n\r\n", argument); } }

	else if (argument[strlen(argument) - 1] == '!') {
		snprintf(buf, sizeof(buf), "&M$n exclaims, '%s'&n", argument);
		act(buf, FALSE, ch, 0, 0, TO_ROOM);
		if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT)) {
			send_to_char(ch, "%s", CONFIG_OK); }
		else {
			delete_doubledollar(argument);
			send_to_char(ch, "&MYou exclaim, '%s'&n\r\n", argument); } }

	 else {
		snprintf(buf, sizeof(buf), "&M$n says, '%s'&n", argument);
		act(buf, FALSE, ch, 0, 0, TO_ROOM);
		if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT)) {
			send_to_char(ch, "%s", CONFIG_OK); }
		else {
			delete_doubledollar(argument);
			send_to_char(ch, "&MYou say, '%s'&n\r\n", argument); } }


}
    /* trigger check */
	speech_mtrigger(ch, argument);
	speech_wtrigger(ch, argument);

}


Feel free to make this properly and give me an e-mail so I can implement it.

Bejhan Jetha
bejhan of Chrono Apocolypse -- Thats right we're back in action!
chrono.sytes.net:4000 - builders needed!
bejhanj@shaw.ca