/******************************************************************** * This is the code for gocials, or socials over the gossip channel. * * It is fairly long and complicated and took me a whole hour and a * * half to write up. I finally did get it working though, but I am * * sure there are neater ways to code it...the code towards the * * end where it tries to do the replacing done normally by acts * * so that it can get the victim's name/etc in and then send it to * * another victim with the act command. Feel free to edit it if you * * can do a quick re-write using much neater code. This should work * * for all possible socials that normally work in the mud. * ********************************************************************/ /******************************************************************** * I ask for no credit on the mud for this, nor do i ask for any- * * thing in exchange. I believe in the philosophy of giving what you * * can to the mud community and then taking what others offer. Use * * this, copy this, give it to friends...whatever you like. * * -Bangle * ********************************************************************/ void do_gocial(CHAR_DATA *ch, char *argument) { char command[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int cmd; bool found; char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; char buf[MAX_STRING_LENGTH]; int counter; int count; char buf2[MAX_STRING_LENGTH]; argument = one_argument(argument,command); if (command[0] == '\0') { send_to_char("What do you wish to gocial?\n\r",ch); return; } found = FALSE; for (cmd = 0; social_table[cmd].name[0] != '\0'; cmd++) { if (command[0] == social_table[cmd].name[0] && !str_prefix( command,social_table[cmd].name ) ) { found = TRUE; break; } } if (!found) { send_to_char("What kind of social is that?!?!\n\r",ch); return; } if (!IS_NPC(ch) && IS_SET(ch->comm, COMM_QUIET)) { send_to_char("You must turn off quiet mode first.\n\r",ch); return; } if ( !IS_NPC(ch) && IS_SET(ch->comm, COMM_NOGOSSIP)) { send_to_char("But you have the gossip channel turned off!\n\r",ch); return; } if ( !IS_NPC(ch) && IS_SET(ch->comm, COMM_NOCHANNELS)) { send_to_char("The gods have revoked your channel priviliges.\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 for that.\n\r",ch); return; } one_argument(argument,arg); victim = NULL; if (arg[0] == '\0') { sprintf(buf, "Gocial: %s", social_table[cmd].char_no_arg ); act_new(buf,ch,NULL,NULL,TO_CHAR,POS_DEAD); sprintf(buf, "Gocial: %s", social_table[cmd].others_no_arg ); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && !IS_SET(vch->comm,COMM_NOGOSSIP) && !IS_SET(vch->comm,COMM_QUIET)) { act_new(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } else if ((victim = get_char_world(ch,arg)) == NULL) { send_to_char("They aren't here.\n\r",ch); return; } else if (victim == ch) { sprintf(buf,"Gocial: %s", social_table[cmd].char_auto); act_new(buf,ch,NULL,NULL,TO_CHAR,POS_DEAD); sprintf(buf,"Gocial: %s", social_table[cmd].others_auto); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && !IS_SET(vch->comm,COMM_NOGOSSIP) && !IS_SET(vch->comm,COMM_QUIET)) { act_new(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } else { sprintf(buf,"Gocial: %s", social_table[cmd].char_found); act_new(buf,ch,NULL,victim,TO_CHAR,POS_DEAD); sprintf(buf,"Gocial: %s", social_table[cmd].vict_found); act_new(buf,ch,NULL,victim,TO_VICT,POS_DEAD); sprintf(buf,"Gocial: %s", social_table[cmd].others_found); for (counter = 0; buf[counter+1] != '\0'; counter++) { if (buf[counter] == '$' && buf[counter + 1] == 'N') { strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,victim->name); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); } else if (buf[counter] == '$' && buf[counter + 1] == 'E') { switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count ++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } else if (buf[counter] == '$' && buf[counter + 1] == 'M') { buf[counter] = '%'; buf[counter + 1] = 's'; switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"him"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"her"); for (count = 0; buf[count] != '\0'; count++); { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } else if (buf[counter] == '$' && buf[counter + 1] == 'S') { switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"its"); for (count = 0;buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"his"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"hers"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } } for (d=descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && d->character != victim && !IS_SET(vch->comm, COMM_NOGOSSIP) && !IS_SET(vch->comm,COMM_QUIET)) { act_new(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } return; } /* ============================================================================= / ______ _______ ____ _____ ___ __ _ ______ ____ ____ _____ / \ | ____|__ __| _ \ / ____\ / _ \| \ / | ____| / __ \| _ \ / ____\ \ / | |__ | | | |_| | | | |_| | |\/| | |___ | | | | |_| | | / / | ___| | | | ___/| | __| _ | | | | ____| | | | | __/| | ___ \ \ | | | | | | | |___| | | | | | | | |____ | |__| | |\ \| |___| | / / |_| |_| |_| o \_____/|_| |_|_| |_|______|o \____/|_| \_|\_____/ \ \ / ============================================================================ ------------------------------------------------------------------------------ ftp://ftp.game.org/pub/mud FTP.GAME.ORG http://www.game.org/ftpsite/ ------------------------------------------------------------------------------ This file came from FTP.GAME.ORG, the ultimate source for MUD resources. ------------------------------------------------------------------------------ */