/* * talking.c */ #include <stdio.h> #include <ctype.h> #include <time.h> #include <errno.h> #include <string.h> #include <stdlib.h> #include <memory.h> #include "config.h" #include "player.h" #include "fix.h" /* externs */ extern void destroy_player(), save_player(), password_mode_on(), password_mode_off(), sub_command(), extract_pipe_global(), tell_room(), extract_pipe_local(), pstack_mid(), suwall(); extern player *find_player_global(), *find_player_absolute_quiet(), *find_player_global_quiet(); extern char *end_string(), *tag_string(), *next_space(), *do_pipe(), *full_name(), *caps(), *sys_time(); extern int global_tag(); extern saved_player *find_saved_player(); extern char *idlingstring(); extern struct command check_list[]; extern void channelsay(), channelemote(), channelsing(), channelthink(); extern list_ent *fle_from_save(); extern room *colony; #ifdef TRACK extern int addfunction(char *); #endif /* fuckin interns too */ void emote_shout(), echo_shout(), sing_shout(), newsetpw1(), emote(), remote_cmd(); /* if you like don't like em, just disable em :P */ #include "social.h" /* this fxn determines if there should be a space between p->name and str -- default characters to be like this are ' (39) and , -- adding others that you deem appropriate should be very simple. */ int emote_no_break(char x) { if (x == 39 || x == ',') return 1; return 0; } void do_format(player *p, player *s, char *str, char *mid, char *pipe, int type) { char tname[MAX_PRETITLE + MAX_NAME + 3]; if (s->custom_flags & (NOPREFIX | NOEPREFIX)) strcpy(tname, p->name); else strcpy(tname, full_name(p)); switch (type) { case 0: /* say */ if (s->custom_flags & NOPREFIX) sprintf(stack, "%s %s '%s^N'\n", p->name, mid, pipe); else sprintf(stack, "%s %s '%s^N'\n", full_name(p), mid, pipe); break; case 1: /* emote, pemote, socials */ if (emote_no_break(*str)) sprintf(stack, "%s%s^N\n", tname, pipe); else sprintf(stack, "%s %s^N\n", tname, pipe); break; case 2: /* echo */ sprintf(stack, "%s^N\n", pipe); break; case 3: /* think */ if (s->custom_flags & NOPREFIX) sprintf(stack, "%s think%s . o O ( %s ^N)\n", p->name, single_s(p), pipe); else sprintf(stack, "%s think%s . o O ( %s ^N)\n", full_name(p), single_s(p), pipe); break; case 4: /* sing */ if (s->custom_flags & NOPREFIX) sprintf(stack, "%s sing%s o/~ %s ^No/~\n", p->name, single_s(p), pipe); else sprintf(stack, "%s sing%s o/~ %s ^No/~\n", full_name(p), single_s(p), pipe); break; default: break; } stack = end_string(stack); } int send_to_room(player * p, char *str, char *mid, int type) { char *prepipe, *pipe, *text; player *s; for (s = p->location->players_top; s; s = s->room_next) { if (s != current_player) { prepipe = stack; pipe = do_pipe(s, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); sys_color_atm = SYSsc; return 0; } text = stack; do_format(p, s, str, mid, pipe, type); tell_player(s, text); stack = prepipe; } } return 1; } int send_to_everyone (player *p, char *str, char *mid, int type) { player *s; char *pipe, *prepipe, *text; for (s = flatlist_start; s; s = s->flat_next) { if (s != current_player) { prepipe = stack; pipe = do_pipe(s, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); sys_color_atm = SYSsc; return 0; } text = stack; do_format(p, s, str, mid, pipe, type); tell_player(s, text); stack = prepipe; } } return 1; } void process_review(player *p, char *message, int length) { int i, j; for (i=0;i<MAX_HISTORY_LINES;i++) /* count from 0 to 5 */ { if (strlen(p->rev[i].review) < 1) /* if the element is empty */ { strncpy(p->rev[i].review,message, length); /* store the data */ return; } } for (j=0; j < MAX_REVIEW; j++) p->rev[0].review[j] = 0; for (i=0;i<(MAX_HISTORY_LINES - 1);i++) { strncpy(p->rev[i].review, p->rev[i+1].review, strlen(p->rev[i+1].review)); for (j=0; j < MAX_REVIEW; j++) p->rev[i+1].review[j] = 0; } strncpy(p->rev[i].review, message, length); /* strcpy(p->rev[0].review,p->rev[1].review); strcpy(p->rev[1].review,p->rev[2].review); strcpy(p->rev[2].review,p->rev[3].review); strcpy(p->rev[3].review,p->rev[4].review); strcpy(p->rev[4].review,message); */ } void view_review(player *p) { int i, sanity=0; char *oldstack; tell_player(p,"\n"); oldstack = stack; for (i=0;i<MAX_HISTORY_LINES;i++) { if (strlen(p->rev[i].review) > 0) { sanity++; command_type |= HIGHLIGHT; sprintf(stack, " -)%s",p->rev[i].review); stack = end_string(stack); tell_player(p, oldstack); stack = oldstack; command_type &= ~HIGHLIGHT; } } if (sanity==0) tell_player(p," There is nothing in your review buffer.\n"); } void reportto(player *p, char *str) { char *oldstack; player *p2; int i, sanity=0; #ifdef TRACK sprintf(functionin, "reportto (%s , SOMETHING)", p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format : reportto <superuser>\n"); return; } p2 = find_player_global(str); if (!p2) return; if (p2 == p) { tell_player(p, " Sorry, you cant report to yourself silly!\n"); return; } if (!(p2->residency & SU)) { tell_player(p, " Sorry, you can only report to superusers..\n"); return; } for (i=0;i<MAX_HISTORY_LINES;i++) { if (strlen(p->rev[i].review) > 0) { sanity++; } } if (sanity==0) { tell_player(p," There is nothing in your review buffer to report!\n"); return; } else { oldstack = stack; sprintf(stack, " -=*> %s is reporting to %s\n",p->name,p2->name); stack = end_string(stack); su_wall(oldstack); command_type = PERSONAL|NO_HISTORY; stack = oldstack; sprintf(stack, "%s reported to %s",p->name,p2->name); stack = end_string(stack); log("reportto", oldstack); stack = oldstack; sprintf(stack,"\n -=> %s is reporting the following to you:\n",p->name); stack = end_string(stack); tell_player(p2, oldstack); stack=oldstack; } for (i=0;i<MAX_HISTORY_LINES;i++) { if (strlen(p->rev[i].review) > 0) { sanity++; sprintf(stack, " -)%s",p->rev[i].review); stack = strchr(stack, 0); } } stack = end_string(stack); tell_player(p2, oldstack); stack = oldstack; command_type = 0; sprintf(stack, " You have reported to %s. Contact them for info.\n", p2->name); stack = end_string(stack); tell_player(p, oldstack); stack = oldstack; } /* emergency command */ void emergency(player * p, char *str) { char *oldstack; oldstack = stack; #ifdef TRACK sprintf(functionin,"emergency (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (p->script) { if (!strcasecmp(str, "off") || !strcasecmp(str, "stop")) { sprintf(stack, " Time is now %s.\n" " Scripting stopped at your request.\n", convert_time(time(0))); stack = end_string(stack); tell_player(p, oldstack); p->script = 0; stack = oldstack; return; } tell_player(p, " You are already scripting ... use 'emergency stop' to " "stop.\n"); return; } if (!*str) { tell_player(p, " You must give a reason for starting emergency scripting" " as an argument.\n" " (And the reason better be good ...)\n"); return; } else if (!strcasecmp(str, "stop")) { tell_player(p, " OK, stop being silly, you hadn't yet STARTED emergency" " scripting. Read 'help emergency' to learn how to use" " 'emergency' properly.\n"); return; } command_type = EMERGENCY; #ifdef PC sprintf(stack, "logs\\emergency\\%s_emergency.log", p->lower_name); #else sprintf(stack, "logs/emergency/%s.emergency", p->lower_name); #endif unlink(stack); stack = oldstack; p->script = 60; sprintf(stack, " Emergency scripting started for 60 seconds.\n" " Remember, any previous scripts will be deleted\n" " Reason given : %s\n" " Time is now %s.\n", str, convert_time(time(0))); stack = end_string(stack); tell_player(p, oldstack); sprintf(oldstack, " -=> %s has started emergency scripting with reason " "\'%s\'.\n", p->name, str); stack = end_string(oldstack); su_wall(oldstack); stack = oldstack; } /* converse mode on and off */ void converse_mode_on(player * p, char *str) { #ifdef TRACK sprintf(functionin,"converse_mode_on (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (p->custom_flags & CONVERSE) { tell_player(p, " But you are already in converse mode!\n"); return; } p->custom_flags |= CONVERSE; tell_player(p, " Entering 'converse' mode. Everything you type will get" " said.\n" " Start the line with '/' to use normal commands, and /end" " to\n" " leave this mode.\n"); p->mode |= CONV; return; } void converse_mode_off(player * p, char *str) { #ifdef TRACK sprintf(functionin,"converse_mode_off (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!(p->custom_flags & CONVERSE)) { tell_player(p, " But you are not in converse mode !\n"); return; } p->custom_flags &= ~CONVERSE; p->mode &= ~CONV; tell_player(p, " Ending converse mode.\n"); return; } /* say command */ void say(player * p, char *str) { char *oldstack, *mid, *scan, *temp, *pipe, *text; char msg[]="I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"say (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; command_type = ROOM; temp = str; if (!*str) { tell_player(p, " Format: say <msg>\n"); return; } if ((p->flags & FROGGED) && (p->location != prison)) str = (char *)&msg; extract_pipe_local(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; str = temp; return; } for (scan = str; *scan; scan++); if (p->gender!=PLURAL) { switch (*(--scan)) { case '?': mid = "asks"; break; case '!': mid = "exclaims"; break; default: mid = "says"; break; } } else { switch (*(--scan)) { case '?': mid = "ask"; break; case '!': mid = "exclaim"; break; default: mid = "say"; break; } } sys_color_atm = ROMsc; if (!send_to_room(p, str, mid, 0)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } switch (*scan) { case '?': mid = "ask"; break; case '!': mid = "exclaim"; break; default: mid = "say"; break; } text = stack; sprintf(stack, " You %s '%s^N'\n", mid, pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } int check_sing_ability(player *p, char *str) { if (p->no_sing || p->system_flags & SAVE_NO_SING) { if (p->no_sing > 0) TELLPLAYER(p, " You have been prevented from singing for the next %s.\n", word_time(p->no_sing)); else TELLPLAYER(p, " You have been prevented from singing for the long haul, friend...\n"); return 0; } if (p->location->flags & ANTISING) { tell_player(p, " But this is a chambered room !!\n"); return 0; } if (p->tag_flags & SINGBLOCK) { tell_player(p, " You can't sing when you're ignoring other singers.\n"); return 0; } if (p->shout_index > 60 || strstr(str, "SFSU") || strstr(str, "S F S U")) { tell_player(p, " You seem to have gotten a sore throat by singing too" " much!\n"); return 0; } return 1; } /* Count !!s and caps in a str */ int check_shout_ability(player *p, char *str) { if (p->tag_flags & BLOCK_SHOUT) { tell_player(p, " You can't shout whilst ignoring shouts yourself.\n"); return 0; } if (p->location->flags & SOUNDPROOF) { tell_player(p, " But this is a soundproof room !!\n"); return 0; } if (p->location == colony) { tell_player(p, " You cannot shout whilst in the bathroom..\n"); return 0; } if (p->no_shout || p->system_flags & SAVENOSHOUT) { if (p->no_shout > 0) TELLPLAYER(p, " You have been prevented from shouting for the next %s.\n", word_time(p->no_shout)); else if (p->no_shout == -1 || p->system_flags & SAVENOSHOUT) TELLPLAYER(p, " You have been prevented from shouting for the forseeable future.\n"); return 0; } if (p->shout_index > 60 || strstr(str, "SFSU") || strstr(str, "S F S U")) { tell_player(p, " You seem to have gotten a sore throat by shouting too" " much!\n"); return 0; } return 1; } int count_caps(char *str) { int count = -2; char *mark; #ifdef TRACK sprintf(functionin,"count_caps (SOMETHING)"); addfunction(functionin); #endif for (mark = str; *mark; mark++) if (isupper(*mark) || *mark == '!') count++; return (count > 0 ? count : 0); } /* shout command */ void shout(player * p, char *str) { char *oldstack, *text, *mid, *scan, *pipe, *prepipe; player *s; char *temp, msg[] = "I want my rattle fixed!!!"; #ifdef TRACK sprintf(functionin,"shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = EVERYONE; if (!*str) { tell_player(p, " Format: shout <msg>\n"); return; } if ( p->flags & FROGGED ) { str = (char *) &msg; } if (!check_shout_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (count_caps(str) * 2) + 20; } extract_pipe_global(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; stack = oldstack; str = temp; return; } for (scan = str; *scan; scan++); switch (*(--scan)) { case '?': mid = "shouts, asking"; break; case '!': mid = "yells"; break; default: mid = "shouts"; break; } sys_color_atm = SHOsc; if (!send_to_everyone(p, str, mid, 0)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } switch (*scan) { case '?': mid = "shout, asking"; break; case '!': mid = "yell"; break; default: mid = "shout"; break; } text = stack; sprintf(stack, " You %s '%s^N'\n", mid, pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } /* emote command */ void emote(player * p, char *str) { char *oldstack, *text, *mid, *pipe; char tname[MAX_PRETITLE + MAX_NAME + 3]; char *temp, msg[]="shakes a broken rattle"; #ifdef TRACK sprintf(functionin,"emote (%s , SOMETHING)",p->name); addfunction(functionin); #endif temp = str; oldstack = stack; command_type = ROOM; if (!*str) { tell_player(p, " Format: emote <msg>\n"); return; } if ((p->flags & FROGGED) && (p->location != prison)) str = (char *)&msg; extract_pipe_local(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; str = temp; return; } sys_color_atm = ROMsc; if (!send_to_room(p, str, 0, 1)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; if (p->custom_flags & (NOPREFIX | NOEPREFIX)) strcpy(tname, p->name); else strcpy(tname, full_name(p)); if (emote_no_break(*str)) sprintf(stack, " You emote : %s%s\n", tname, pipe); else sprintf(stack, " You emote : %s %s\n", tname, pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } /* echo command */ void echo(player * p, char *str) { char *oldstack, *text, *mid, *pipe; char *temp, msg[] = "I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"echo (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = ROOM | ECHO_COM; if (!*str) { tell_player(p, " Format: echo <msg>\n"); return; } extract_pipe_local(str); if (p->flags & FROGGED) str = (char *) &msg; if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; return; } sys_color_atm = ROMsc; if (!send_to_room(p, str, 0, 2)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; return; } text = stack; sprintf(stack, " You echo : %s\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; } /* the tell command */ void tell(player * p, char *str) { char *msg, *pstring, *final, *mid, *scan; char *oldstack; player **list, **step; int i, n; char mesg[] = "I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"tell (%s , SOMETHING)",p->name); addfunction(functionin); #endif command_type = PERSONAL | SEE_ERROR; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't tell other people when you yourself " "are blocking tells.\n"); return; } if (p->location->flags & ISOLATED_ROOM) { tell_player(p, " But this is an isolated room !!\n"); return; } oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format : tell <player(s)> <msg>\n"); return; } /* for channels -- ICK! */ if(isdigit(*str)) { /* lets redirect it to the correct channel command */ command_type = 0; channelsay(p, str); stack = oldstack; return; } if (p->flags & FROGGED) { *msg = 0; msg = (char *) &mesg; } else { *msg++ = 0; } if (!(strcasecmp(str,"everyone"))) { command_type = 0; shout(p, msg); return; } if (!strcasecmp(str, "friends") && p->tag_flags & BLOCK_FRIENDS) { tell_player(p, " You dork. You can not friendspam when you're blocking friends \n"); return; } if (strstr(str, "friends")) sys_color_atm = FRTsc; else if (strcasecmp(str, "room")) sys_color_atm = TELsc; else sys_color_atm = ROMsc; /* for the repeat command ... */ p->last_remote_command = 1; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); for (scan = msg; *scan; scan++); if (p->gender!=PLURAL) { switch (*(--scan)) { case '?': mid = "asks of"; break; case '!': mid = "exclaims to"; break; default: mid = "tells"; break; } } else { switch (*(--scan)) { case '?': mid = "ask of"; break; case '!': mid = "exclaim to"; break; default: mid = "tell"; break; } } command_type |= SORE; n = global_tag(p, str); if (!n) { stack = oldstack; sys_color_atm = SYSsc; return; } /* for reply */ if (strcasecmp(str, "everyone") && strcasecmp(str, "room") && strcasecmp(str, "friends")) { make_reply_list(p, list, n); } else { p->shout_index += count_caps(str) + 17; } for (step = list, i = 0; i < n; i++, step++) { if (*step != p) { pstring = tag_string(*step, list, n); final = stack; if ((*step)->custom_flags & NOPREFIX) sprintf(stack, "%s %s %s '%s^N'\n", p->name, mid, pstring, msg); else sprintf(stack, "%s %s %s '%s^N'\n", full_name(p), mid, pstring, msg); stack = end_string(stack); tell_player(*step, final); /* process_review(*step, final); */ stack = pstring; } } sys_color_atm = SYSsc; if (sys_flags & EVERYONE_TAG || sys_flags & (FRIEND_TAG|OFRIEND_TAG) || sys_flags & ROOM_TAG || !(sys_flags & FAILED_COMMAND)) { switch (*scan) { case '?': mid = "ask of"; break; case '!': mid = "exclaim to"; break; default: mid = "tell"; break; } pstring = tag_string(p, list, n); final = stack; sprintf(stack, " You %s %s '%s^N'\n", mid, pstring, msg); stack = strchr(stack, 0); if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, final); } cleanup_tag(list, n); stack = oldstack; } /* the wake command */ void wake(player * p, char *str) { char *oldstack; player *p2; #ifdef TRACK sprintf(functionin,"wake (%s , SOMETHING)",p->name); addfunction(functionin); #endif command_type = PERSONAL | SEE_ERROR; oldstack = stack; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't wake other people when you yourself are " "blocking tells.\n"); return; } if (!*str) { tell_player(p, " Format : wake <player>\n"); return; } p2 = find_player_global(str); if (!p2) return; if (p2->tag_flags & NOBEEPS) { if (p2->custom_flags & NOPREFIX) sprintf(stack, "!!!!!!!!!! OI !!!!!!!!!!! WAKE UP, %s wants to speak " "to you.\n", p->name); else sprintf(stack, "!!!!!!!!!! OI !!!!!!!!!!! WAKE UP, %s wants to speak " "to you.\n", full_name(p)); } else { if (p2->custom_flags & NOPREFIX) sprintf(stack, "!!!!!!!!!! OI !!!!!!!!!!! WAKE UP, %s wants to speak " "to you.\007\n", p->name); else sprintf(stack, "!!!!!!!!!! OI !!!!!!!!!!! WAKE UP, %s wants to speak " "to you.\007\n", full_name(p)); } stack = end_string(stack); sys_color_atm = TELsc; tell_player(p2, oldstack); sys_color_atm = SYSsc; if (sys_flags & FAILED_COMMAND) { stack = oldstack; return; } stack = oldstack; sprintf(stack, " You scream loudly at %s in an attempt to wake %s up.\n", full_name(p2), get_gender_string(p2)); stack = strchr(stack, 0); if (p2->idle_msg[0] != 0) sprintf(stack, " Idling> %s %s\n", p2->name, p2->idle_msg); stack = end_string(stack); tell_player(p, oldstack); stack = oldstack; } void nopropose (player *p, char *str) { if (p->system_flags & MARRIED) { tell_player (p, " You're married, dont worry so much! :) \n"); return; } else if (p->tag_flags & NO_PROPOSE) { tell_player (p, " You are seeing proposals again. \n"); p->tag_flags &= ~NO_PROPOSE; return; } else { tell_player (p, " You are now blocking proposals. \n"); p->tag_flags |= NO_PROPOSE; return; } } /* remote command */ void remote_cmd(player * p, char *str, int manual) { char *msg, *pstring, *final; char *oldstack; player **list, **step; int i, n; char tname[MAX_NAME + MAX_PRETITLE + 3]; char mesg[] = "shakes a broken rattle."; #ifdef TRACK sprintf(functionin,"remote (%s , SOMETHING)",p->name); addfunction(functionin); #endif command_type = PERSONAL | SEE_ERROR; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't remote to other people when you yourself are" " blocking tells.\n"); return; } if (p->location->flags & ISOLATED_ROOM) { tell_player(p, " But this is an isolated room !!\n"); return; } oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format : remote <player(s)> <msg>\n"); stack = oldstack; return; } if(isdigit(*str)) { /* lets redirect it to the correct channel command */ command_type = 0; channelemote(p, str); stack = oldstack; return; } if ( p->flags & FROGGED ) { *msg = 0; msg = (char *)&mesg; } else { *msg++ = 0; } if (!(strcasecmp(str, "everyone"))) { command_type = 0; emote_shout(p, msg); return; } command_type |= SORE; if (!strcasecmp(str, "friends") && p->tag_flags & BLOCK_FRIENDS) { tell_player(p, " You dork. You can not friendspam when you're blocking friends \n"); return; } if (strstr(str, "friends")) sys_color_atm = FRTsc; else if (strcasecmp(str, "room")) sys_color_atm = TELsc; else sys_color_atm = ROMsc; /* for the repeat command ... */ p->last_remote_command = 2; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); n = global_tag(p, str); if (!n) { stack = oldstack; sys_color_atm = SYSsc; return; } for (step = list, i = 0; i < n; i++, step++) { if ((*step)->custom_flags & (NOPREFIX | NOEPREFIX)) strcpy(tname, p->name); else strcpy(tname, full_name(p)); if (*step != p) { final = stack; if (emote_no_break(*msg)) sprintf(stack, "%s%s^N\n", tname, msg); else sprintf(stack, "%s %s^N\n", tname, msg); stack = end_string(stack); tell_player(*step, final); /* process_review(*step, final); */ stack = final; } } sys_color_atm = SYSsc; if (manual) { if (sys_flags & EVERYONE_TAG || sys_flags & (FRIEND_TAG|OFRIEND_TAG) || sys_flags & ROOM_TAG || !(sys_flags & FAILED_COMMAND)) { pstring = tag_string(p, list, n); final = stack; if (p->custom_flags & (NOPREFIX | NOEPREFIX)) strcpy(tname, p->name); else strcpy(tname, full_name(p)); if (emote_no_break(*msg)) sprintf(stack, " You emote '%s%s^N' to %s.\n", tname, msg, pstring); else sprintf(stack, " You emote '%s %s^N' to %s.\n", tname, msg, pstring); stack = strchr(stack, 0); if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, final); } } cleanup_tag(list, n); stack = oldstack; } /* manual use of remote (socials go through with p, str, 0) */ void remote(player *p, char *str) { remote_cmd(p, str, 1); } /* recho command */ void recho(player * p, char *str) { char *msg, *pstring, *final; char *oldstack; player **list, **step; int i, n; char mesg[] = "I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"recho (%s , SOMETHING)",p->name); addfunction(functionin); #endif command_type = PERSONAL | ECHO_COM | SEE_ERROR; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't recho to other people when you yourself are " "blocking tells.\n"); return; } if (p->location->flags & ISOLATED_ROOM) { tell_player(p, " But this is an isolated room !!\n"); return; } oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format : recho <player(s)> <msg>\n"); stack = oldstack; return; } if ( p->flags & FROGGED ) { *msg = 0; msg = (char *) &mesg; } else *msg++ = 0; command_type |= SORE; if (!(strcasecmp(str, "everyone"))) { command_type = 0; echo_shout(p, msg); return; } if (!strcasecmp(str, "friends") && p->tag_flags & BLOCK_FRIENDS) { tell_player(p, " You dork. You can not friendspam when you're blocking friends \n"); return; } if (strstr(str, "friends")) sys_color_atm = FRTsc; else if (strcasecmp(str, "room")) sys_color_atm = TELsc; else sys_color_atm = ROMsc; /* for the repeat command ... */ p->last_remote_command = 3; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); n = global_tag(p, str); if (!n) { stack = oldstack; sys_color_atm = SYSsc; return; } for (step = list, i = 0; i < n; i++, step++) { if (*step != p) { final = stack; sprintf(stack, "%s^N\n", msg); stack = end_string(stack); tell_player(*step, final); /* process_review(*step, final); */ stack = final; } } sys_color_atm = SYSsc; if (sys_flags & EVERYONE_TAG || !(sys_flags & FAILED_COMMAND)) { pstring = tag_string(p, list, n); final = stack; sprintf(stack, " You echo '%s^N' to %s\n", msg, pstring); while (*stack) stack++; if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, final); } cleanup_tag(list, n); stack = oldstack; } /* whisper command */ void whisper(player * p, char *str) { char *oldstack, *msg, *everyone, *text, *pstring, *mid, *s; player **list, *scan; int n; char mesg[] = "I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"whisper (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't whisper to other people when you yourself " "are blocking tells.\n"); return; } command_type = ROOM | SEE_ERROR; oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format whisper <person(s)> <msg>\n"); stack = oldstack; return; } if ( p->flags & FROGGED ) { *msg = 0; msg = (char *) &mesg; } else *msg++ = 0; for (s = msg; *s; s++); /* for the repeat command ... */ p->last_remote_command = 4; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); if (p->gender==PLURAL) { switch (*(--s)) { case '?': mid = "ask in a whisper"; break; case '!': mid = "exclaim in a whisper"; break; default: mid = "whisper"; break; } } else { switch (*(--s)) { case '?': mid = "asks in a whisper"; break; case '!': mid = "exclaims in a whisper"; break; default: mid = "whispers"; break; } } n = local_tag(p, str); if (!n) { sys_color_atm = SYSsc; return; } everyone = tag_string(0, list, n); for (scan = p->location->players_top; scan; scan = scan->room_next) if (p != scan) if (scan->flags & TAGGED) { pstring = tag_string(scan, list, n); text = stack; if (scan->custom_flags & NOPREFIX) sprintf(stack, "%s %s '%s^N' to %s.\n", p->name, mid, msg, pstring); else sprintf(stack, "%s %s '%s^N' to %s.\n", full_name(p), mid, msg, pstring); stack = end_string(stack); sys_color_atm = TELsc; tell_player(scan, text); sys_color_atm = SYSsc; /* process_review(scan, text); */ stack = pstring; } if (!(sys_flags & FAILED_COMMAND)) { switch (*s) { case '?': mid = "ask in a whisper"; break; case '!': mid = "exclaim in a whisper"; break; default: mid = "whisper"; break; } pstring = tag_string(p, list, n); text = stack; sprintf(stack, " You %s '%s^N' to %s.\n", mid, msg, pstring); stack = strchr(stack, 0); if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, text); } cleanup_tag(list, n); stack = oldstack; } /* exclude command */ void exclude(player * p, char *str) { char *oldstack, *msg, *everyone, *text, *pstring, *mid, *s; player **list, *scan; int n; char mesg[] = "I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"exclude (%s , SOMETHING)",p->name); addfunction(functionin); #endif command_type = ROOM | SEE_ERROR | EXCLUDE; oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format exclude <person(s)> <msg>\n"); stack = oldstack; return; } if ( p->flags & FROGGED ) { *msg = 0; msg = (char *) &mesg; } else *msg++ = 0; for (s = msg; *s; s++); switch (*(--s)) { case '?': mid = "asks"; break; case '!': mid = "exclaims to"; break; default: mid = "tells"; break; } n = local_tag(p, str); if (!n) return; everyone = tag_string(0, list, n); sys_color_atm = ROMsc; for (scan = p->location->players_top; scan; scan = scan->room_next) { if (p != scan) { if ((scan->flags & TAGGED) && !(scan->residency & (SU | ADMIN ))) { pstring = tag_string(scan, list, n); text = stack; sprintf(stack, "%s tells everyone something about %s\n", full_name(p), pstring); stack = end_string(stack); tell_player(scan, text); stack = pstring; } else { text = stack; sprintf(stack, "%s %s everyone but %s '%s^N'\n", full_name(p), mid, everyone, msg); stack = end_string(stack); tell_player(scan, text); stack = text; } } } sys_color_atm = SYSsc; if (!(sys_flags & FAILED_COMMAND)) { switch (*s) { case '?': mid = "ask"; break; case '!': mid = "exclaim to"; break; default: mid = "tell"; break; } pstring = tag_string(p, list, n); text = stack; sprintf(stack, " You %s everyone but %s '%s^N'\n", mid, pstring, msg); stack = end_string(stack); tell_player(p, text); } cleanup_tag(list, n); stack = oldstack; } /* pemote command */ void pemote(player * p, char *str) { char *oldstack, *scan; oldstack = stack; #ifdef TRACK sprintf(functionin,"pemote (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: pemote <msg>\n"); return; } if ( !(p->flags & FROGGED) ) { for (scan = p->lower_name; *scan; scan++); if (*(scan - 1) == 's') *stack++ = 39; else { *stack++ = 39; *stack++ = 's'; } *stack++ = ' '; while (*str) *stack++ = *str++; *stack++ = 0; emote(p, oldstack); stack = oldstack; } else emote(p, str); } /* premote command */ void premote(player * p, char *str) { char *oldstack, *scan; oldstack = stack; #ifdef TRACK sprintf(functionin,"premote (%s , SOMETHING)",p->name); addfunction(functionin); #endif scan = next_space(str); if (!*scan) { tell_player(p, " Format: pemote <person> <msg>\n"); return; } if ( !(p->flags & FROGGED) ) { while (*str && *str != ' ') *stack++ = *str++; *stack++ = ' '; if (*str) str++; for (scan = p->lower_name; *scan; scan++); if (*(scan - 1) == 's') *stack++ = 39; else { *stack++ = 39; *stack++ = 's'; } *stack++ = ' '; while (*str) *stack++ = *str++; *stack++ = 0; remote(p, oldstack); stack = oldstack; } else remote(p, str); } /* the 'check' command */ void check(player * p, char *str) { #ifdef TRACK sprintf(functionin,"check (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: check <sub command>\n"); return; } sub_command(p, str, check_list); } /* view check commands */ void view_check_commands(player * p, char *str) { #ifdef TRACK sprintf(functionin,"view_check_commands (%s , SOMETHING)",p->name); addfunction(functionin); #endif view_sub_commands(p, check_list); } /* new think, tryig to fix the NOPREFIX thang by copying from say */ void newthink(player * p, char *str) { char *oldstack, *text, *mid, *scan, *pipe; char *temp, msg[]="I want my rattle fixed."; #ifdef TRACK sprintf(functionin,"newthink (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; command_type = ROOM; temp = str; if (!*str) { tell_player(p, " Format: think <msg>\n"); return; } if ( p->flags & FROGGED ) str = (char *)&msg; extract_pipe_local(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; str = temp; return; } sys_color_atm = ROMsc; if (!send_to_room(p, str, 0, 3)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; sprintf(stack, " You think . o O ( %s ^N)\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } /* tell to your friends, the short way */ void tell_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: tf <message>\n"); return; } oldstack = stack; sprintf(stack, "friends %s", str); stack = end_string(stack); tell(p, oldstack); stack = oldstack; } /* remote to your friends, the short way */ void remote_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"remote_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: rf <remote>\n"); return; } oldstack = stack; sprintf(stack, "friends %s", str); stack = end_string(stack); remote(p, oldstack); stack = oldstack; } /* remote think */ void remote_think(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"remote_think (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; msg = strchr(str, ' '); if (!msg) { tell_player(p, " Format: rt <player(s)> <think>\n"); return; } if(isdigit(*str)) { /* lets redirect it to the correct channel command */ command_type = 0; channelthink(p, str); stack = oldstack; return; } *msg++ = '\0'; sprintf(stack, "%s think%s . o O ( %s ^N)", str, single_s(p), msg); stack = end_string(stack); remote(p, oldstack); stack = oldstack; } /* the shoutted emote, pemote, think, and echo... */ void emote_shout(player * p, char *str) { char *oldstack, *text, *pipe, *prepipe; player *s; char *temp, msg[] = "shakes a broken rattle"; #ifdef TRACK sprintf(functionin,"emote_shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = EVERYONE; if (!*str) { tell_player(p, " Format: yemote <msg>\n"); return; } if ( p->flags & FROGGED ) { str = (char *) &msg; } if (!check_shout_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (count_caps(str) * 2) + 20; } extract_pipe_global(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; stack = oldstack; str = temp; return; } sys_color_atm = SHOsc; if (!send_to_everyone(p, str, 0, 1)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; if (p->custom_flags & (NOPREFIX | NOEPREFIX)) { if (emote_no_break(*str)) sprintf(stack, " You yemote: %s%s\n", p->name, pipe); else sprintf(stack, " You yemote: %s %s\n", p->name, pipe); } else { if (emote_no_break(*str)) sprintf(stack, " You yemote: %s%s\n", full_name(p), pipe); else sprintf(stack, " You yemote: %s %s\n", full_name(p), pipe); } stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } void pemote_shout(player * p, char *str) { char *oldstack, *scan; oldstack = stack; #ifdef TRACK sprintf(functionin,"pemote_shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: pyemote <msg>\n"); return; } if ( !(p->flags & FROGGED) ) { for (scan = p->lower_name; *scan; scan++); if (*(scan - 1) == 's') *stack++ = 39; else { *stack++ = 39; *stack++ = 's'; } *stack++ = ' '; while (*str) *stack++ = *str++; *stack++ = 0; emote_shout(p, oldstack); stack = oldstack; } else emote_shout(p, str); } void think_shout(player * p, char *str) { char *oldstack, *text, *pipe, *prepipe; player *s; char *temp, msg[] = "I want my rattle fixed"; #ifdef TRACK sprintf(functionin,"think_shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = EVERYONE; if (!*str) { tell_player(p, " Format: ythink <msg>\n"); return; } if ( p->flags & FROGGED ) { str = (char *) &msg; } if (!check_shout_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (count_caps(str) * 2) + 20; } extract_pipe_global(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; stack = oldstack; str = temp; return; } sys_color_atm = SHOsc; if (!send_to_everyone(p, str, 0, 3)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; sprintf(stack, " You ythink . o O ( %s ^N)\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } void echo_shout(player * p, char *str) { char *oldstack, *text, *pipe, *prepipe; player *s; char *temp, msg[] = "I want my rattle fixed"; #ifdef TRACK sprintf(functionin,"echo_shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = EVERYONE | ECHO_COM; if (!*str) { tell_player(p, " Format: yecho <msg>\n"); return; } if ( p->flags & FROGGED ) { str = (char *) &msg; } if (!check_shout_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (count_caps(str) * 2) + 20; } extract_pipe_global(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; stack = oldstack; str = temp; return; } sys_color_atm = SHOsc; if (!send_to_everyone(p, str, 0, 2)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; sprintf(stack, " You yecho: %s\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } /* think to your friends, the short way */ void rthink_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"think_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: rtf <message>\n"); return; } oldstack = stack; sprintf(stack, "friends think%s . o O ( %s ^N)", single_s(p), str); stack = end_string(stack); remote(p, oldstack); stack = oldstack; } /* possessive emote to your friends, the short way */ void premote_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"pemote_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: pf <message>\n"); return; } oldstack = stack; sprintf(stack, "friends %s ", str); stack = end_string(stack); premote(p, oldstack); stack = oldstack; } /* echo to your friends, the short way */ void recho_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"think_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: ef <echo>\n"); return; } oldstack = stack; sprintf(stack, "friends %s", str); stack = end_string(stack); recho(p, oldstack); stack = oldstack; } void sing(player * p, char *str) { char *oldstack, *text, *mid, *scan, *pipe, *prepipe; player *s; char *temp, msg[]="I got the broken rattle blueeeeeeeeeees"; oldstack = stack; command_type = ROOM | BAD_MUSIC; temp = str; if (!*str) { tell_player(p, " Format: sing <song>\n"); return; } if (!check_sing_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (count_caps(str) * 2) + 20; } if ( p->flags & FROGGED ) str = (char *)&msg; extract_pipe_local(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; str = temp; return; } sys_color_atm = ROMsc; if (!send_to_room(p, str, 0, 4)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; sprintf(stack, " You sing o/~ %s ^No/~\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } void rsing(player * p, char *str) { char *msg, *pstring, *final, *mid, *scan; char *oldstack; player **list, **step; int i, n; char mesg[] = "I got the broken rattle blueeeeeeeeeees"; command_type = PERSONAL | SEE_ERROR | BAD_MUSIC; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't sing to other people when you yourself " "are blocking tells.\n"); return; } if (!check_sing_ability(p, str)) { return; } if (p->location->flags & ISOLATED_ROOM) { tell_player(p, " But this is an isolated room !!\n"); return; } oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format : rsing <player(s)> <song>\n"); return; } if(isdigit(*str)) { /* lets redirect it to the correct channel command */ command_type = 0; channelsing(p, str); stack = oldstack; return; } if (p->flags & FROGGED) { *msg = 0; msg = (char *) &mesg; } else *msg++ = 0; if (!(strcasecmp(str,"everyone"))) { command_type = 0; sing_shout(p, msg); return; } if (!(strcasecmp(str,"room"))) { command_type = 0; sing(p, msg); return; } if (!strcasecmp(str, "friends") && p->tag_flags & BLOCK_FRIENDS) { tell_player(p, " You dork. You can not friendspam when you're blocking friends \n"); return; } if (strstr(str, "friends")) sys_color_atm = FRTsc; else if (strcasecmp(str, "room")) sys_color_atm = TELsc; else sys_color_atm = ROMsc; /* for the repeat command ... */ p->last_remote_command = 5; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); for (scan = msg; *scan; scan++); if (p->gender!=PLURAL) mid = "sings"; else mid = "sing"; command_type |= SORE; n = global_tag(p, str); if (!n) { stack = oldstack; sys_color_atm = SYSsc; return; } /* for reply */ if (strcasecmp(str, "everyone") && strcasecmp(str, "room") && strcasecmp(str, "friends")) make_reply_list(p, list, n); else p->shout_index += count_caps(str) + 17; for (step = list, i = 0; i < n; i++, step++) { if (*step != p) { pstring = tag_string(*step, list, n); final = stack; if ((*step)->custom_flags & NOPREFIX) sprintf(stack, "%s %s o/~ %s ^No/~ to %s.\n", p->name, mid, msg, pstring); else sprintf(stack, "%s %s o/~ %s ^No/~ to %s.\n", full_name(p), mid, msg, pstring); stack = end_string(stack); tell_player(*step, final); /* process_review(*step, final); */ stack = pstring; } } sys_color_atm = SYSsc; if (sys_flags & EVERYONE_TAG || sys_flags & (FRIEND_TAG|OFRIEND_TAG) || sys_flags & ROOM_TAG || !(sys_flags & FAILED_COMMAND)) { mid = "sing"; pstring = tag_string(p, list, n); final = stack; sprintf(stack, " You %s o/~ %s ^No/~ to %s.\n", mid, msg, pstring); stack = strchr(stack, 0); if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, final); } cleanup_tag(list, n); stack = oldstack; } /* sing to your friends - the easy way {B-> */ void sing_friends (player * p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin, "sing_friends(%s, SOMETHING)", p->name); addfunction(functionin); #endif if(!*str) { tell_player(p, " Format: sf <song> \n"); return; } oldstack = stack; sprintf(stack, "friends %s", str); stack = end_string(stack); rsing(p, oldstack); stack = oldstack; } void sing_shout(player * p, char *str) { char *oldstack, *text, *pipe, *prepipe; player *s; char *temp, msg[] = "I got the broken rattle blueeeeeeeeeees"; #ifdef TRACK sprintf(functionin,"sing_shout (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; temp = str; command_type = EVERYONE | BAD_MUSIC; if (!*str) { tell_player(p, " Format: ysing <song>\n"); return; } if (!check_sing_ability(p, str)) { str = temp; return; } if (!check_shout_ability(p, str)) { str = temp; return; } if (!(p->residency & PSU)) { p->shout_index += (2*((count_caps(str) * 2) + 20)); } if ( p->flags & FROGGED ) { str = (char *) &msg; } extract_pipe_global(str); if (sys_flags & FAILED_COMMAND) { sys_flags &= ~FAILED_COMMAND; stack = oldstack; str = temp; return; } sys_color_atm = SHOsc; if (!send_to_everyone(p, str, 0, 4)) { temp = str; return; } sys_color_atm = SYSsc; pipe = do_pipe(p, str); if (!pipe) { cleanup_tag(pipe_list, pipe_matches); stack = oldstack; str = temp; return; } text = stack; sprintf(stack, " You ysing o/~ %s ^No/~\n", pipe); stack = end_string(stack); tell_player(p, text); cleanup_tag(pipe_list, pipe_matches); stack = oldstack; sys_flags &= ~PIPE; str = temp; } /* a kind of really LOUD tell... */ void beep_tell(player * p, char *str) { char *msg, *pstring, *final, *mid, *scan; char *oldstack; player **list, **step; int i, n; char mesg[] = "Gimme a new rattle already !!"; command_type = PERSONAL | SEE_ERROR; if (p->tag_flags & BLOCK_TELLS) { tell_player(p, " You can't yell at other people when you yourself " "are blocking tells.\n"); return; } if (p->location->flags & ISOLATED_ROOM) { tell_player(p, " But this is an isolated room !!\n"); return; } oldstack = stack; align(stack); list = (player **) stack; msg = next_space(str); if (!*msg) { tell_player(p, " Format : yell <player(s)> <msg>\n"); return; } if (p->flags & FROGGED) { *msg = 0; msg = (char *) &mesg; } else { *msg++ = 0; } if (!(strcasecmp(str,"everyone"))) { tell_player(p, " You can't yell at _everyone_!! \n"); stack=oldstack; return; } if (!(strcasecmp(str,"room"))) { tell_player(p, " You can't yell at everyone in the room! \n"); stack=oldstack; return; } if (!strcasecmp(str, "friends") && p->tag_flags & BLOCK_FRIENDS) { tell_player(p, " You dork. You can not friendspam when you're blocking friends \n"); return; } if (strstr(str, "friends")) sys_color_atm = FRTsc; else if (strcasecmp(str, "room")) sys_color_atm = TELsc; else sys_color_atm = ROMsc; /* for the repeat command ... */ p->last_remote_command = 6; strncpy(p->last_remote_msg, msg, MAX_REPLY - 3); for (scan = msg; *scan; scan++); if (p->gender!=PLURAL) { switch (*(--scan)) { case '?': mid = "boggles at"; break; case '!': mid = "hollers at"; break; default: mid = "yells at"; break; } } else { switch (*(--scan)) { case '?': mid = "boggle at"; break; case '!': mid = "holler at"; break; default: mid = "yell at"; break; } } command_type |= SORE; n = global_tag(p, str); if (!n) { stack = oldstack; sys_color_atm = SYSsc; return; } /* for reply */ if (strcasecmp(str, "friends")) { make_reply_list(p, list, n); } else { p->shout_index += count_caps(str) + 17; } for (step = list, i = 0; i < n; i++, step++) { if (*step != p) { pstring = tag_string(*step, list, n); final = stack; if ((*step)->tag_flags & NOBEEPS) { if ((*step)->custom_flags & NOPREFIX) sprintf(stack, "%s %s %s -> %s ^N<-\n", p->name, mid, pstring, msg); else sprintf(stack, "%s %s %s -> %s ^N<-\n", full_name(p), mid, pstring, msg); } else { if ((*step)->custom_flags & NOPREFIX) sprintf(stack, "%s %s %s -> %s ^N<-\007\n", p->name, mid, pstring, msg); else sprintf(stack, "%s %s %s -> %s ^N<-\007\n", full_name(p), mid, pstring, msg); } stack = end_string(stack); tell_player(*step, final); /* process_review(*step, final); */ stack = pstring; } } sys_color_atm = SYSsc; if (sys_flags & EVERYONE_TAG || sys_flags & (FRIEND_TAG|OFRIEND_TAG) || sys_flags & ROOM_TAG || !(sys_flags & FAILED_COMMAND)) { switch (*scan) { case '?': mid = "boggle at"; break; case '!': mid = "holler at"; break; default: mid = "yell at"; break; } pstring = tag_string(p, list, n); final = stack; sprintf(stack, " You %s %s -> %s ^N<-\n", mid, pstring, msg); stack = strchr(stack, 0); if (idlingstring(p, list, n)) strcpy(stack, idlingstring(p, list, n)); stack = end_string(stack); tell_player(p, final); } cleanup_tag(list, n); stack = oldstack; } void repeat_mistell (player * p, char *str) { char *oldstack; oldstack = stack; if (!*str) { tell_player(p, " Format: repeat <name>\n"); stack = oldstack; return; } sprintf(stack, "%s %s", str, p->last_remote_msg); stack = end_string(stack); /* hope dis works ... */ switch (p->last_remote_command) { case 1: /* tell */ tell(p, oldstack); break; case 2: /* remote, rthink, premote */ remote(p, oldstack); break; case 3: /* recho */ recho(p, oldstack); break; case 4: /* whisper */ whisper(p, oldstack); break; case 5: /* rsing */ rsing(p, oldstack); break; case 6: /* beep_at */ beep_tell(p, oldstack); break; default: /* error */ tell_player(p, " Error - no previous remote command used.\n"); break; } stack = oldstack; } void tell_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: to <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: to <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); tell(p, oldstack); stack = oldstack; } void remote_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: ro <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: ro <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); remote(p, oldstack); stack = oldstack; } void rt_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: rto <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: rto <player> <message>\n"); return; } oldstack = stack; if (p->gender == PLURAL) sprintf(stack, "%s.friends think . o O ( %s )", str, msg); else sprintf(stack, "%s.friends thinks . o O ( %s )", str, msg); stack = end_string(stack); remote(p, oldstack); stack = oldstack; } void premote_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: po <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: po <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); premote(p, oldstack); stack = oldstack; } void recho_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: eo <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: eo <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); recho(p, oldstack); stack = oldstack; } void rsing_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: so <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: so <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); rsing(p, oldstack); stack = oldstack; } void beepat_friends(player *p, char *str) { char *oldstack; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: yf <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "friends %s", str); stack = end_string(stack); beep_tell(p, oldstack); stack = oldstack; } void beepat_others_friends(player *p, char *str) { char *oldstack, *msg; #ifdef TRACK sprintf(functionin,"tell_friends (%s , SOMETHING)",p->name); addfunction(functionin); #endif if (!*str) { tell_player(p, " Format: yo <player> <message>\n"); return; } msg = next_space(str); *msg++ = 0; if (!*msg) { tell_player(p, " Format: yo <player> <message>\n"); return; } oldstack = stack; sprintf(stack, "%s.friends %s", str, msg); stack = end_string(stack); beep_tell(p, oldstack); stack = oldstack; } /* Go to the nudist colony, where you can be as offensive as you like */ /* Well, nearly */ void go_colony(player *p, char *str) { player *p2; char *oldstack; #ifdef TRACK sprintf(functionin,"go_colony (%s , SOMETHING)",p->name); addfunction(functionin); #endif oldstack = stack; if ((p->residency & SU) && (*str)) /* Move someone else to the colony */ { /* find them */ p2 = find_player_global(str); if (!p2) return; else { /* no colonising your superiors... */ if (p2->residency >= p->residency) { tell_player(p, " You try and try, but you're just to weak to" " budge them!\n"); return; } /* and they might already be there */ if (!strcmp(p2->location->owner->lower_name, "main") && !strcmp(p2->location->id, "potty")) { tell_player(p, " They're already in the potty!!\n"); return; } /* tell the SU channel */ command_type |= ADMIN_BARGE; sprintf(stack, " -=> %s puts %s in the potty.\n", p->name, p2->name); stack = end_string(stack); su_wall(oldstack); stack = oldstack; /* tell the player */ tell_player(p2, " -=> You suddenly find yourself picked up out of" " the room, and you fly through the air, landing in...\n"); /* move them */ move_to(p2, "main.potty", 0); /* stick them in place for 60 secs */ p2->no_move=60; return; } return; } /* no argument specified or player is not an SU */ /* check if they're in the can already */ if (!strcmp(p->location->owner->lower_name, "main") && !strcmp(p->location->id, "potty")) { tell_player(p, " You're already in the potty!\n"); return; } /* or if they're stuck */ if (p->no_move) { tell_player(p, " You seem to be stuck to the ground.\n"); return; } /* otherwise move them */ move_to(p, "main.potty", 0); }