/* * For the gocial function, you need to set TO_MUD in mud.h with TO_CHAR, and * TO_VICT. You also have to change a couple of lines in comm.c in the act() * function .... change .... * * for ( ; to; to = (type == TO_CHAR || type == TO_VICT ) * ? NULL : to->next_in_room ) * * change that to this ..... * * for ( ; to; to = (type == TO_MUD) ? to->next : (type == TO_CHAR || type == TO_VICT ) * ? NULL : to->next_in_room ) * * and also in the act() function above ... * if ( type == TO_CHAR && to != ch ) * continue; * add ... * if ( type == TO_MUD && (to == ch || to == vch) ) * continue; * * In act_comm.c change the do_chat function to look like ... * void do_chat( CHAR_DATA *ch, char *argument ) * { * if (NOT_AUTHED(ch)) * { * send_to_char("Huh?\n\r", ch); * return; * } * if (argument[0]=='@') * { * char arg[MAX_INPUT_LENGTH],buf[MAX_INPUT_LENGTH]; * int loop; * * argument = one_argument(argument,arg); * for (loop = 0; loop < strlen(arg); loop++) * { * buf[loop]=arg[loop+1]; * } * do_gocial(ch, buf, argument); * return; * } * else * { * talk_channel( ch, argument, CHANNEL_CHAT, "chat" ); * return; * } * } * * This was based on the goscial snippet, but it has been TOTALLY redone to * make use of a lot of stuff that's actually already in. This is a beta * version written by LrdElder - necro.mfn.org port 9000 * */ #include #include #include #include #include #include "mud.h" void do_gocial (CHAR_DATA * ch, char *command, char *argument) { char arg[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH]; CHAR_DATA *victim; SOCIALTYPE *social; if ((social = find_social (command)) == NULL) { send_to_char ("That is not a social.\n\r", ch); return; } if (!IS_NPC (ch) && xIS_SET (ch->act, PLR_NO_EMOTE)) { send_to_char ("You are anti-social!\n\r", ch); return; } switch (ch->position) { case POS_DEAD: send_to_char ("Lie still; you are DEAD.\n\r", ch); return; case POS_INCAP: case POS_MORTAL: send_to_char ("You are hurt far too bad for that.\n\r", ch); return; case POS_STUNNED: send_to_char ("You are too stunned to do that.\n\r", ch); return; case POS_SLEEPING: /* * I just know this is the path to a 12" 'if' statement. :( * But two players asked for it already! -- Furey */ if (!str_cmp (social->name, "snore")) break; send_to_char ("In your dreams, or what?\n\r", ch); return; } one_argument (argument, arg); victim = NULL; if (arg[0] == '\0') { sprintf (buf, "[GOSCIAL] %s", social->others_no_arg); act (AT_SOCIAL, buf, ch, NULL, victim, TO_MUD); sprintf (buf, "[GOSCIAL] %s", social->char_no_arg); act (AT_SOCIAL, buf, ch, NULL, victim, TO_CHAR); return; } if ((victim = get_char_world (ch, arg)) == NULL) { send_to_char ("You really shouldn't talk about people who aren't logged in.\n\r", ch); return; } if (victim == ch) { sprintf (buf, "[GOSCIAL] %s", social->others_auto); act (AT_SOCIAL, buf, ch, NULL, victim, TO_MUD); sprintf (buf, "[GOSCIAL] %s", social->char_auto); act (AT_SOCIAL, buf, ch, NULL, victim, TO_CHAR); return; } else { sprintf (buf, "[GOSCIAL] %s", social->others_found); act (AT_SOCIAL, buf, ch, NULL, victim, TO_MUD); sprintf (buf, "[GOSCIAL] %s", social->char_found); act (AT_SOCIAL, buf, ch, NULL, victim, TO_CHAR); sprintf (buf, "[GOSCIAL] %s", social->vict_found); act (AT_SOCIAL, buf, ch, NULL, victim, TO_VICT); return; } }