src/speech.c File Reference

#include "copyright.h"
#include "config.h"
#include "mudconf.h"
#include "db.h"
#include "interface.h"
#include "match.h"
#include "externs.h"
#include "flags.h"
#include "powers.h"
#include "attrs.h"
#include "alloc.h"

Include dependency graph for speech.c:

Go to the source code of this file.

Functions

char * next_token (char *, char)
int In_IC_Loc (dbref)
int sp_ok (dbref player)
static void say_shout (int target, const char *prefix, int flags, dbref player, char *message)
void do_think (dbref player, dbref cause, int key, char *message)
void do_say (dbref player, dbref cause, int key, char *message)
static void page_return (dbref player, dbref target, const char *tag, int anum, const char *dflt)
static int page_check (dbref player, dbref target)
static char * dbrefs_to_names (dbref player, char *list, char *namelist, int ismessage)
void do_page (dbref player, dbref cause, int key, char *tname, char *message)
void whisper_pose (dbref player, dbref target, char *message)
void do_pemit_list (dbref player, char *list, const char *message)
void do_pemit (dbref player, dbref cause, int key, char *recipient, char *message)

Variables

static const char * announce_msg = "Announcement: "
static const char * broadcast_msg = "Broadcast: "
static const char * admin_msg = "Admin: "


Function Documentation

static char* dbrefs_to_names ( dbref  player,
char *  list,
char *  namelist,
int  ismessage 
) [static]

Definition at line 405 of file speech.c.

References LBUF_SIZE, lookup_player(), Name(), NOTHING, safe_str, StringCopy, strtok(), and tprintf().

Referenced by do_page().

00407 {
00408         char *bp, *p;
00409         char oldlist[LBUF_SIZE];
00410 
00411         StringCopy(oldlist, list);
00412         bp = namelist;
00413         for(p = (char *) strtok(oldlist, " "); p != NULL;
00414                 p = (char *) strtok(NULL, " ")) {
00415                 if(ismessage)
00416                         safe_str(tprintf("%s, ", Name(atoi(p))), namelist, &bp);
00417                 else {
00418                         if(lookup_player(player, p, 1) != NOTHING) {
00419                                 safe_str(tprintf("%s, ", Name(lookup_player(player, p,
00420                                                                                                                         1))), namelist,
00421                                                  &bp);
00422                         }
00423                 }
00424         }
00425         *(bp - 2) = '\0';
00426         return bp;
00427 }

void do_page ( dbref  player,
dbref  cause,
int  key,
char *  tname,
char *  message 
)

Definition at line 429 of file speech.c.

References A_ALIAS, A_IDLE, A_LASTPAGE, alloc_lbuf, atr_add(), atr_get_str(), dbrefs_to_names(), free_lbuf, LBUF_SIZE, lookup_player(), Name(), next_token(), NOTHING, notify, notify_printf(), notify_with_cause, Owner, page_check(), page_return(), safe_str, StringCopy, strtok(), and tprintf().

00430 {
00431         dbref target, aowner;
00432         char *p, *buf1, *bp, *buf2, *bp2, *mp, *str;
00433         char targetname[LBUF_SIZE];
00434         char alias[LBUF_SIZE];
00435         char aladd[LBUF_SIZE];
00436         int ispose = 0;
00437         int ismessage = 0;
00438         int count = 0;
00439         int n = 0;
00440         int aflags = 0;
00441 
00442         buf1 = alloc_lbuf("page_return_list");
00443         bp = buf1;
00444 
00445         buf2 = alloc_lbuf("page_list");
00446         bp2 = buf2;
00447 
00448         if((tname[0] == ':') || (tname[0] == ';') || (message[0] == ':') ||
00449            (message[0] == ';'))
00450                 ispose = 1;
00451 
00452         mp = message;
00453 
00454         if(!*message) {
00455                 atr_get_str(targetname, player, A_LASTPAGE, &aowner, &aflags);
00456                 if(!*tname) {
00457                         if(!*targetname)
00458                                 notify(player, "You have not paged anyone.");
00459                         else
00460                                 for(p = (char *) strtok(targetname, " "); p != NULL;
00461                                         p = (char *) strtok(NULL, " ")) {
00462                                         target = atoi(p);
00463                                         notify_printf(player, "You last paged %s.", Name(target));
00464                                 }
00465 
00466                         free_lbuf(buf1);
00467                         free_lbuf(buf2);
00468                         return;
00469                 }
00470                 StringCopy(message, tname);
00471                 StringCopy(tname, targetname);
00472                 ismessage = 1;
00473         }
00474 
00475         atr_get_str(alias, player, A_ALIAS, &aowner, &aflags);
00476         if(*alias)
00477                 sprintf(aladd, " (%s)", alias);
00478         else
00479                 aladd[0] = 0;
00480 
00481         /*
00482          * Count the words 
00483          */
00484         for(n = 0, str = tname; str; str = (char *) next_token(str, ' '), n++);
00485 
00486         if(((target = lookup_player(player, tname, 1)) == NOTHING) && n > 1) {
00487                 bp = dbrefs_to_names(player, tname, buf1, ismessage);
00488                 for(p = (char *) strtok(tname, " "); p != NULL;
00489                         p = (char *) strtok(NULL, " ")) {
00490 
00491                         /*
00492                          * If it's a memory page, grab the number from the *
00493                          * * * list 
00494                          */
00495                         if(ismessage) {
00496                                 target = atoi(p);
00497                         } else
00498                                 target = lookup_player(player, p, 1);
00499 
00500                         message = mp;
00501 
00502                         if(target == NOTHING) {
00503                                 notify_printf(player, "I don't recognize \"%s\".", p);
00504                         } else if(!page_check(player, target)) {
00505                                 ;
00506                         } else {
00507                                 switch (*message) {
00508                                 case ':':
00509                                         notify_with_cause(target, player,
00510                                                                           tprintf("From afar, to (%s):%s %s %s",
00511                                                                                           buf1, aladd, Name(player),
00512                                                                                           message + 1));
00513                                         break;
00514                                 case ';':
00515                                         message++;
00516                                         notify_with_cause(target, player,
00517                                                                           tprintf("From afar, to (%s):%s %s%s",
00518                                                                                           buf1, aladd, Name(player),
00519                                                                                           message));
00520                                         break;
00521                                 case '"':
00522                                         message++;
00523                                 default:
00524                                         notify_with_cause(target, player,
00525                                                                           tprintf("To (%s), %s%s pages you: %s",
00526                                                                                           buf1, Name(player), aladd,
00527                                                                                           message));
00528                                 }
00529                                 page_return(player, target, "Idle", A_IDLE, NULL);
00530 
00531                                 safe_str(tprintf("%d ", target), buf2, &bp2);
00532                                 count++;
00533                         }
00534                 }
00535         } else {
00536                 if(ismessage)
00537                         target = atoi(tname);
00538                 if(target == NOTHING) {
00539                         notify_printf(player, "I don't recognize \"%s\".", tname);
00540                 } else if(!page_check(player, target)) {
00541                         ;
00542                 } else {
00543 
00544                         switch (*message) {
00545                         case ':':
00546                                 notify_with_cause(target, player,
00547                                                                   tprintf("From afar,%s %s %s", aladd,
00548                                                                                   Name(player), message + 1));
00549                                 break;
00550                         case ';':
00551                                 message++;
00552                                 notify_with_cause(target, player,
00553                                                                   tprintf("From afar,%s %s%s", aladd,
00554                                                                                   Name(player), message));
00555                                 break;
00556                         case '"':
00557                                 message++;
00558                         default:
00559                                 notify_with_cause(target, player, tprintf("%s%s pages: %s",
00560                                                                                                                   Name(player), aladd,
00561                                                                                                                   message));
00562 
00563                         }
00564                         page_return(player, target, "Idle", A_IDLE, NULL);
00565 
00566                         safe_str(tprintf("%d ", target), buf2, &bp2);
00567                         safe_str(tprintf("%s, ", Name(target)), buf1, &bp);
00568                         count++;
00569                 }
00570                 *(bp - 2) = '\0';
00571         }
00572 
00573         if(count == 0) {
00574                 free_lbuf(buf1);
00575                 free_lbuf(buf2);
00576                 return;
00577         }
00578         *(bp2 - 1) = '\0';
00579         atr_add(player, A_LASTPAGE, buf2, Owner(player), aflags);
00580 
00581         if(count == 1) {
00582                 if(*buf1) {
00583                         if(ispose != 1) {
00584                                 notify_printf(player, "You paged %s with '%s'.", buf1, mp);
00585                         } else {
00586                                 if(mp[0] == ':')
00587                                         notify_printf(player, "Long distance to %s: %s %s",
00588                                                                   buf1, Name(player), mp + 1);
00589                                 else
00590                                         notify_printf(player, "Long distance to %s: %s%s",
00591                                                                   buf1, Name(player), mp + 1);
00592                         }
00593                 }
00594         } else {
00595                 *(bp - 2) = ')';
00596                 *(bp - 1) = '\0';
00597 
00598                 if(*buf1) {
00599                         if(ispose != 1) {
00600                                 notify_printf(player, "You paged (%s with '%s'.", buf1, mp);
00601                         } else {
00602                                 if(mp[0] == ':')
00603                                         notify_printf(player, "Long distance to (%s: %s %s",
00604                                                                   buf1, Name(player), mp + 1);
00605                                 else
00606                                         notify_printf(player, "Long distance to (%s: %s%s",
00607                                                                   buf1, Name(player), mp + 1);
00608                         }
00609                 }
00610         }
00611 
00612         free_lbuf(buf1);
00613         free_lbuf(buf2);
00614 }

void do_pemit ( dbref  player,
dbref  cause,
int  key,
char *  recipient,
char *  message 
)

Definition at line 683 of file speech.c.

References alloc_lbuf, AMBIGUOUS, Controls, do_pemit_list(), free_lbuf, Has_contents, init_match(), loc, Location, Long_Fingers, match_controlled(), match_everything(), match_result(), mudconf, Name(), nearby(), NOTHING, notify, notify_all_from_inside, notify_except, notify_except2(), notify_printf(), notify_with_cause, page_check(), confdata::pemit_any, PEMIT_CONTENTS, PEMIT_FEMIT, PEMIT_FPOSE, PEMIT_FPOSE_NS, PEMIT_FSAY, PEMIT_HERE, PEMIT_LIST, PEMIT_OEMIT, PEMIT_PEMIT, confdata::pemit_players, PEMIT_ROOM, PEMIT_WHISPER, confdata::quiet_whisper, safe_str, tprintf(), TYPE_PLAYER, TYPE_ROOM, Typeof, where_is(), whisper_pose(), and Wizard.

00685 {
00686         dbref target, loc;
00687         char *buf2, *bp;
00688         int do_contents, ok_to_do, depth, pemit_flags;
00689 
00690         if(key & PEMIT_LIST) {
00691                 do_pemit_list(player, recipient, message);
00692                 return;
00693         }
00694         if(key & PEMIT_CONTENTS) {
00695                 do_contents = 1;
00696                 key &= ~PEMIT_CONTENTS;
00697         } else {
00698                 do_contents = 0;
00699         }
00700         pemit_flags = key & (PEMIT_HERE | PEMIT_ROOM );
00701         key &= ~(PEMIT_HERE | PEMIT_ROOM );
00702         ok_to_do = 0;
00703 
00704         switch (key) {
00705         case PEMIT_FSAY:
00706         case PEMIT_FPOSE:
00707         case PEMIT_FPOSE_NS:
00708         case PEMIT_FEMIT:
00709                 target = match_controlled(player, recipient);
00710                 if(target == NOTHING)
00711                         return;
00712                 ok_to_do = 1;
00713                 break;
00714         default:
00715                 init_match(player, recipient, TYPE_PLAYER);
00716                 match_everything(0);
00717                 target = match_result();
00718         }
00719 
00720         switch (target) {
00721         case NOTHING:
00722                 switch (key) {
00723                 case PEMIT_WHISPER:
00724                         notify(player, "Whisper to whom?");
00725                         break;
00726                 case PEMIT_PEMIT:
00727                         notify(player, "Emit to whom?");
00728                         break;
00729                 case PEMIT_OEMIT:
00730                         notify(player, "Emit except to whom?");
00731                         break;
00732                 default:
00733                         notify(player, "Sorry.");
00734                 }
00735                 break;
00736         case AMBIGUOUS:
00737                 notify(player, "I don't know who you mean!");
00738                 break;
00739         default:
00740                 /*
00741                  * Enforce locality constraints 
00742                  */
00743 
00744                 if(!ok_to_do && (nearby(player, target) || Long_Fingers(player)
00745                                                  || Controls(player, target))) {
00746                         ok_to_do = 1;
00747                 }
00748                 if(!ok_to_do && (key == PEMIT_PEMIT) &&
00749                    (Typeof(target) == TYPE_PLAYER) && mudconf.pemit_players) {
00750                         if(!page_check(player, target))
00751                                 return;
00752                         ok_to_do = 1;
00753                 }
00754                 if(!ok_to_do && (!mudconf.pemit_any || (key != PEMIT_PEMIT))) {
00755                         notify(player, "You are too far away to do that.");
00756                         return;
00757                 }
00758                 if(do_contents && !Controls(player, target) && !mudconf.pemit_any) {
00759                         notify(player, "Permission denied.");
00760                         return;
00761                 }
00762                 loc = where_is(target);
00763 
00764                 switch (key) {
00765                 case PEMIT_PEMIT:
00766                         if(do_contents) {
00767                                 if(Has_contents(target)) {
00768                                         notify_all_from_inside(target, player, message);
00769                                 }
00770                         } else {
00771                                 notify_with_cause(target, player, message);
00772 
00773                         }
00774                         break;
00775                 case PEMIT_OEMIT:
00776                         notify_except(Location(target), player, target, message);
00777                         break;
00778                 case PEMIT_WHISPER:
00779                         switch (*message) {
00780                         case ':':
00781                                 message[0] = ' ';
00782                                 whisper_pose(player, target, message);
00783                                 break;
00784                         case ';':
00785                                 message++;
00786                                 whisper_pose(player, target, message);
00787                                 break;
00788                         case '"':
00789                                 message++;
00790                         default:
00791                                 notify_printf(player, "You whisper \"%s\" to %s.",
00792                                                           message, Name(target));
00793                                 notify_with_cause(target, player,
00794                                                                   tprintf("%s whispers \"%s\"", Name(player),
00795                                                                                   message));
00796                         }
00797                         if((!mudconf.quiet_whisper) && !Wizard(player)) {
00798                                 loc = where_is(player);
00799                                 if(loc != NOTHING) {
00800                                         buf2 = alloc_lbuf("do_pemit.whisper.buzz");
00801                                         bp = buf2;
00802                                         safe_str(Name(player), buf2, &bp);
00803                                         safe_str((char *) " whispers something to ", buf2, &bp);
00804                                         safe_str(Name(target), buf2, &bp);
00805                                         *bp = '\0';
00806                                         notify_except2(loc, player, player, target, buf2);
00807                                         free_lbuf(buf2);
00808                                 }
00809                         }
00810                         break;
00811                 case PEMIT_FSAY:
00812                         notify_printf(target, "You say \"%s\"", message);
00813                         if(loc != NOTHING) {
00814                                 notify_except(loc, player, target,
00815                                                           tprintf("%s says \"%s\"", Name(target),
00816                                                                           message));
00817                         }
00818                         break;
00819                 case PEMIT_FPOSE:
00820                         notify_all_from_inside(loc, player, tprintf("%s %s",
00821                                                                                                                 Name(target),
00822                                                                                                                 message));
00823                         break;
00824                 case PEMIT_FPOSE_NS:
00825                         notify_all_from_inside(loc, player, tprintf("%s%s",
00826                                                                                                                 Name(target),
00827                                                                                                                 message));
00828                         break;
00829                 case PEMIT_FEMIT:
00830                         if((pemit_flags & PEMIT_HERE) || !pemit_flags)
00831                                 notify_all_from_inside(loc, player, message);
00832                         if(pemit_flags & PEMIT_ROOM) {
00833                                 if((Typeof(loc) == TYPE_ROOM) && (pemit_flags & PEMIT_HERE)) {
00834                                         return;
00835                                 }
00836                                 depth = 0;
00837                                 while ((Typeof(loc) != TYPE_ROOM) && (depth++ < 20)) {
00838                                         loc = Location(loc);
00839                                         if((loc == NOTHING) || (loc == Location(loc)))
00840                                                 return;
00841                                 }
00842                                 if(Typeof(loc) == TYPE_ROOM) {
00843                                         notify_all_from_inside(loc, player, message);
00844                                 }
00845                         }
00846                         break;
00847 
00848                 }
00849         }
00850 }

void do_pemit_list ( dbref  player,
char *  list,
const char *  message 
)

Definition at line 631 of file speech.c.

References AMBIGUOUS, Controls, Good_obj, init_match(), isPlayer, Long_Fingers, match_everything(), match_result(), mudconf, nearby(), NOTHING, notify, notify_with_cause, page_check(), confdata::pemit_players, strtok(), and TYPE_PLAYER.

Referenced by do_pemit(), and fun_pemit().

00632 {
00633         /*
00634          * Send a message to a list of dbrefs. To avoid repeated generation * 
00635          * of the NOSPOOF string, we set it up the first time we
00636          * encounter something Nospoof, and then check for it
00637          * thereafter. The list is destructively modified. 
00638          */
00639 
00640         char *p;
00641         dbref who;
00642         int ok_to_do;
00643 
00644         if(!message || !*message || !list || !*list)
00645                 return;
00646 
00647         for(p = (char *) strtok(list, " "); p != NULL;
00648                 p = (char *) strtok(NULL, " ")) {
00649 
00650                 ok_to_do = 0;
00651                 init_match(player, p, TYPE_PLAYER);
00652                 match_everything(0);
00653                 who = match_result();
00654 
00655                 if(!ok_to_do && (Long_Fingers(player) || nearby(player, who) ||
00656                                                  Controls(player, who))) {
00657                         ok_to_do = 1;
00658                 }
00659                 if(!ok_to_do && (isPlayer(who))
00660                    && mudconf.pemit_players) {
00661                         if(!page_check(player, who))
00662                                 return;
00663                         ok_to_do = 1;
00664                 }
00665                 switch (who) {
00666                 case NOTHING:
00667                         notify(player, "Emit to whom?");
00668                         break;
00669                 case AMBIGUOUS:
00670                         notify(player, "I don't know who you mean!");
00671                         break;
00672                 default:
00673                         if(!ok_to_do) {
00674                                 notify(player, "You cannot do that.");
00675                                 break;
00676                         }
00677                         if(Good_obj(who))
00678                                 notify_with_cause(who, player, message);
00679                 }
00680         }
00681 }

void do_say ( dbref  player,
dbref  cause,
int  key,
char *  message 
)

Definition at line 71 of file speech.c.

References admin_msg, alloc_lbuf, announce_msg, broadcast_msg, ENDLOG, free_lbuf, loc, Location, log_name(), LOG_SHOUTS, log_text(), Name(), NOTHING, notify_all_from_inside, notify_except, notify_printf(), raw_broadcast(), ROYALTY, safe_chr, safe_str, SAY_ADMINSHOUT, SAY_EMIT, SAY_HERE, SAY_NOTAG, SAY_POSE, SAY_POSE_NOSPC, SAY_PREFIX, SAY_ROOM, SAY_SAY, say_shout(), SAY_SHOUT, SAY_WALLEMIT, SAY_WALLPOSE, SAY_WIZEMIT, SAY_WIZPOSE, SAY_WIZSHOUT, sp_ok(), STARTLOG, tprintf(), TYPE_ROOM, Typeof, where_is(), and WIZARD.

00072 {
00073         dbref loc;
00074         char *buf2, *bp;
00075         int say_flags, depth;
00076 
00077         /*
00078          * Convert prefix-coded messages into the normal type 
00079          */
00080 
00081         say_flags = key & (SAY_NOTAG | SAY_HERE | SAY_ROOM );
00082         key &= ~(SAY_NOTAG | SAY_HERE | SAY_ROOM );
00083 
00084         if(key == SAY_PREFIX) {
00085                 switch (*message++) {
00086                 case '"':
00087                         key = SAY_SAY;
00088                         break;
00089                 case ':':
00090                         if(*message == ' ') {
00091                                 message++;
00092                                 key = SAY_POSE_NOSPC;
00093                         } else {
00094                                 key = SAY_POSE;
00095                         }
00096                         break;
00097                 case ';':
00098                         key = SAY_POSE_NOSPC;
00099                         break;
00100                 case '\\':
00101                         key = SAY_EMIT;
00102                         break;
00103                 default:
00104                         return;
00105                 }
00106         }
00107         /*
00108          * Make sure speaker is somewhere if speaking in a place 
00109          */
00110 
00111         loc = where_is(player);
00112         switch (key) {
00113         case SAY_SAY:
00114         case SAY_POSE:
00115         case SAY_POSE_NOSPC:
00116         case SAY_EMIT:
00117                 if(loc == NOTHING)
00118                         return;
00119                 if(!sp_ok(player))
00120                         return;
00121         }
00122 
00123         /*
00124          * Send the message on its way  
00125          */
00126 
00127         switch (key) {
00128         case SAY_SAY:
00129                 notify_printf(player, "You say \"%s\"", message);
00130                 notify_except(loc, player, player, tprintf("%s says \"%s\"",
00131                                                                                                    Name(player), message));
00132                 break;
00133         case SAY_POSE:
00134                 notify_all_from_inside(loc, player, tprintf("%s %s", Name(player),
00135                                                                                                         message));
00136                 break;
00137         case SAY_POSE_NOSPC:
00138                 notify_all_from_inside(loc, player, tprintf("%s%s", Name(player),
00139                                                                                                         message));
00140                 break;
00141         case SAY_EMIT:
00142                 if((say_flags & SAY_HERE) || !say_flags) {
00143                         notify_all_from_inside(loc, player, message);
00144                 }
00145                 if(say_flags & SAY_ROOM) {
00146                         if((Typeof(loc) == TYPE_ROOM) && (say_flags & SAY_HERE)) {
00147                                 return;
00148                         }
00149                         depth = 0;
00150                         while ((Typeof(loc) != TYPE_ROOM) && (depth++ < 20)) {
00151                                 loc = Location(loc);
00152                                 if((loc == NOTHING) || (loc == Location(loc)))
00153                                         return;
00154                         }
00155                         if(Typeof(loc) == TYPE_ROOM) {
00156                                 notify_all_from_inside(loc, player, message);
00157                         }
00158                 }
00159                 break;
00160         case SAY_SHOUT:
00161                 switch (*message) {
00162                 case ':':
00163                         message[0] = ' ';
00164                         say_shout(0, announce_msg, say_flags, player, message);
00165                         break;
00166                 case ';':
00167                         message++;
00168                         say_shout(0, announce_msg, say_flags, player, message);
00169                         break;
00170                 case '"':
00171                         message++;
00172                 default:
00173                         buf2 = alloc_lbuf("do_say.shout");
00174                         bp = buf2;
00175                         safe_str((char *) " shouts \"", buf2, &bp);
00176                         safe_str(message, buf2, &bp);
00177                         safe_chr('"', buf2, &bp);
00178                         *bp = '\0';
00179                         say_shout(0, announce_msg, say_flags, player, buf2);
00180                         free_lbuf(buf2);
00181                 }
00182                 STARTLOG(LOG_SHOUTS, "WIZ", "SHOUT") {
00183                         log_name(player);
00184                         buf2 = alloc_lbuf("do_say.LOG.shout");
00185                         sprintf(buf2, " shouts: '%s'", message);
00186                         log_text(buf2);
00187                         free_lbuf(buf2);
00188                         ENDLOG;
00189                 } break;
00190 
00191         case SAY_WIZSHOUT:
00192                 switch (*message) {
00193                 case ':':
00194                         message[0] = ' ';
00195                         say_shout(WIZARD, broadcast_msg, say_flags, player, message);
00196                         break;
00197                 case ';':
00198                         message++;
00199                         say_shout(WIZARD, broadcast_msg, say_flags, player, message);
00200                         break;
00201                 case '"':
00202                         message++;
00203                 default:
00204                         buf2 = alloc_lbuf("do_say.wizshout");
00205                         bp = buf2;
00206                         safe_str((char *) " says \"", buf2, &bp);
00207                         safe_str(message, buf2, &bp);
00208                         safe_chr('"', buf2, &bp);
00209                         *bp = '\0';
00210                         say_shout(WIZARD, broadcast_msg, say_flags, player, buf2);
00211                         free_lbuf(buf2);
00212                 }
00213                 STARTLOG(LOG_SHOUTS, "WIZ", "BCAST") {
00214                         log_name(player);
00215                         buf2 = alloc_lbuf("do_say.LOG.wizshout");
00216                         sprintf(buf2, " broadcasts: '%s'", message);
00217                         log_text(buf2);
00218                         free_lbuf(buf2);
00219                         ENDLOG;
00220                 } break;
00221 
00222         case SAY_ADMINSHOUT:
00223                 switch (*message) {
00224                 case ':':
00225                         message[0] = ' ';
00226                         say_shout(WIZARD, admin_msg, say_flags, player, message);
00227                         say_shout(ROYALTY, admin_msg, say_flags, player, message);
00228                         break;
00229                 case ';':
00230                         message++;
00231                         say_shout(WIZARD, admin_msg, say_flags, player, message);
00232                         say_shout(ROYALTY, admin_msg, say_flags, player, message);
00233                         break;
00234                 case '"':
00235                         message++;
00236                 default:
00237                         buf2 = alloc_lbuf("do_say.adminshout");
00238                         bp = buf2;
00239                         safe_str((char *) " says \"", buf2, &bp);
00240                         safe_str(message, buf2, &bp);
00241                         safe_chr('"', buf2, &bp);
00242                         *bp = '\0';
00243                         say_shout(WIZARD, admin_msg, say_flags, player, buf2);
00244                         say_shout(ROYALTY, admin_msg, say_flags, player, buf2);
00245                         free_lbuf(buf2);
00246                 }
00247                 STARTLOG(LOG_SHOUTS, "WIZ", "ASHOUT") {
00248                         log_name(player);
00249                         buf2 = alloc_lbuf("do_say.LOG.adminshout");
00250                         sprintf(buf2, " yells: '%s'", message);
00251                         log_text(buf2);
00252                         free_lbuf(buf2);
00253                         ENDLOG;
00254                 } break;
00255 
00256         case SAY_WALLPOSE:
00257                 if(say_flags & SAY_NOTAG)
00258                         raw_broadcast(0, "%s %s", Name(player), message);
00259                 else
00260                         raw_broadcast(0, "Announcement: %s %s", Name(player), message);
00261                 STARTLOG(LOG_SHOUTS, "WIZ", "SHOUT") {
00262                         log_name(player);
00263                         buf2 = alloc_lbuf("do_say.LOG.wallpose");
00264                         sprintf(buf2, " WALLposes: '%s'", message);
00265                         log_text(buf2);
00266                         free_lbuf(buf2);
00267                         ENDLOG;
00268                 }
00269                 break;
00270 
00271         case SAY_WIZPOSE:
00272                 if(say_flags & SAY_NOTAG)
00273                         raw_broadcast(WIZARD, "%s %s", Name(player), message);
00274                 else
00275                         raw_broadcast(WIZARD, "Broadcast: %s %s", Name(player), message);
00276                 STARTLOG(LOG_SHOUTS, "WIZ", "BCAST") {
00277                         log_name(player);
00278                         buf2 = alloc_lbuf("do_say.LOG.wizpose");
00279                         sprintf(buf2, " WIZposes: '%s'", message);
00280                         log_text(buf2);
00281                         free_lbuf(buf2);
00282                         ENDLOG;
00283                 }
00284                 break;
00285 
00286         case SAY_WALLEMIT:
00287                 if(say_flags & SAY_NOTAG)
00288                         raw_broadcast(0, "%s", message);
00289                 else
00290                         raw_broadcast(0, "Announcement: %s", message);
00291                 STARTLOG(LOG_SHOUTS, "WIZ", "SHOUT") {
00292                         log_name(player);
00293                         buf2 = alloc_lbuf("do_say.LOG.wallemit");
00294                         sprintf(buf2, " WALLemits: '%s'", message);
00295                         log_text(buf2);
00296                         free_lbuf(buf2);
00297                         ENDLOG;
00298                 }
00299                 break;
00300 
00301         case SAY_WIZEMIT:
00302                 if(say_flags & SAY_NOTAG)
00303                         raw_broadcast(WIZARD, "%s", message);
00304                 else
00305                         raw_broadcast(WIZARD, "Broadcast: %s", message);
00306                 STARTLOG(LOG_SHOUTS, "WIZ", "BCAST") {
00307                         log_name(player);
00308                         buf2 = alloc_lbuf("do_say.LOG.wizemit");
00309                         sprintf(buf2, " WIZemit: '%s'", message);
00310                         log_text(buf2);
00311                         free_lbuf(buf2);
00312                         ENDLOG;
00313                 }
00314                 break;
00315         }
00316 }

void do_think ( dbref  player,
dbref  cause,
int  key,
char *  message 
)

Definition at line 57 of file speech.c.

References EV_EVAL, EV_FCHECK, EV_TOP, exec(), LBUF_SIZE, notify, and strnlen().

00058 {
00059         char *str, buf[LBUF_SIZE], *bp;
00060         int output_length;
00061 
00062         bp = buf;
00063         str = message;
00064         exec(buf, &bp, 0, player, cause, EV_FCHECK | EV_EVAL | EV_TOP, &str,
00065                  (char **) NULL, 0);
00066         output_length = strnlen(buf, LBUF_SIZE-1);
00067         buf[output_length] = '\0';
00068         notify(player, buf);
00069 }

int In_IC_Loc ( dbref   ) 

Definition at line 780 of file command.c.

References confdata::btech_ooc_comsys, Gagged, In_Character, isPlayer, Location, and mudconf.

Referenced by check_access(), do_comprintf(), do_comsend(), do_comwho(), do_processcom(), page_check(), and page_return().

00781 {
00782         dbref d = Location(player);
00783         int z = 0;
00784 
00785         while (isPlayer(d)) {
00786                 int od = d;
00787 
00788                 if((d = Location(d)) == od)
00789                         break;
00790                 if(z++ >= 100)
00791                         break;
00792         }
00793         if(mudconf.btech_ooc_comsys && !Gagged(player))
00794                 return 0;
00795         else if(In_Character(d) || Gagged(player))
00796                 return 1;
00797         return 0;
00798 }                                                               /* end In_IC_Loc() */

char* next_token ( char *  ,
char   
)

Definition at line 246 of file functions.c.

00247 {
00248         while (*str && (*str != sep))
00249                 str++;
00250         if(!*str)
00251                 return NULL;
00252         str++;
00253         if(sep == ' ') {
00254                 while (*str == sep)
00255                         str++;
00256         }
00257         return str;
00258 }

static int page_check ( dbref  player,
dbref  target 
) [static]

Definition at line 360 of file speech.c.

References A_AWAY, A_LPAGE, A_REJECT, Connected, could_doit(), Dark, Guest, In_IC_Loc(), confdata::many_coins, mudconf, Name(), notify, notify_printf(), page_return(), confdata::pagecost, payfor(), tprintf(), and Wizard.

Referenced by do_page(), do_pemit(), and do_pemit_list().

00361 {
00362         if(!payfor(player, Guest(player) ? 0 : mudconf.pagecost)) {
00363                 notify_printf(player, "You don't have enough %s.",
00364                                           mudconf.many_coins);
00365                 return 0;
00366         }
00367         if(In_IC_Loc(player) && !Wizard(target) && !Wizard(player)) {
00368                 notify(player, "Permission denied.");
00369                 return 0;
00370         }
00371         if(!Connected(target)) {
00372                 page_return(player, target, "Away", A_AWAY,
00373                                         tprintf("Sorry, %s is not connected.", Name(target)));
00374                 return 0;
00375         }
00376         if(!could_doit(player, target, A_LPAGE) || (!Wizard(player) &&
00377                                                                                                 In_IC_Loc(target)
00378                                                                                                 && !Wizard(target))) {
00379                 if(Wizard(target) && Dark(target))
00380                         page_return(player, target, "Away", A_AWAY,
00381                                                 tprintf("Sorry, %s is not connected.", Name(target)));
00382                 else
00383                         page_return(player, target, "Reject", A_REJECT,
00384                                                 tprintf("Sorry, %s is not accepting pages.",
00385                                                                 Name(target)));
00386                 return 0;
00387         }
00388         if(!could_doit(target, player, A_LPAGE)) {
00389                 if(Wizard(player)) {
00390                         notify_printf(player, "Warning: %s can't return your page.",
00391                                                   Name(target));
00392                         return 1;
00393                 } else {
00394                         notify_printf(player, "Sorry, %s can't return your page.",
00395                                                   Name(target));
00396                         return 0;
00397                 }
00398         }
00399         return 1;
00400 }

static void page_return ( dbref  player,
dbref  target,
const char *  tag,
int  anum,
const char *  dflt 
) [static]

Definition at line 324 of file speech.c.

References alloc_lbuf, atr_pget(), EV_EVAL, EV_FCHECK, EV_NO_LOCATION, EV_TOP, exec(), free_lbuf, In_IC_Loc(), Name(), notify_with_cause, time(), tprintf(), and Wizard.

Referenced by do_page(), and page_check().

00326 {
00327         dbref aowner;
00328         int aflags;
00329         char *str, *str2, *buf, *bp;
00330         struct tm *tp;
00331         time_t t;
00332 
00333         str = atr_pget(target, anum, &aowner, &aflags);
00334         if(*str) {
00335                 str2 = bp = alloc_lbuf("page_return");
00336                 buf = str;
00337                 exec(str2, &bp, 0, target, player,
00338                          EV_FCHECK | EV_EVAL | EV_TOP | EV_NO_LOCATION, &buf,
00339                          (char **) NULL, 0);
00340                 *bp = '\0';
00341                 if(*str2) {
00342                         t = time(NULL);
00343                         tp = localtime(&t);
00344                         if(Wizard(target) || !In_IC_Loc(target))
00345                                 notify_with_cause(player, target,
00346                                                                   tprintf("%s message from %s: %s", tag,
00347                                                                                   Name(target), str2));
00348                         notify_with_cause(target, player,
00349                                                           tprintf("[%d:%02d] %s message sent to %s.",
00350                                                                           tp->tm_hour, tp->tm_min, tag,
00351                                                                           Name(player)));
00352                 }
00353                 free_lbuf(str2);
00354         } else if(dflt && *dflt) {
00355                 notify_with_cause(player, target, dflt);
00356         }
00357         free_lbuf(str);
00358 }

static void say_shout ( int  target,
const char *  prefix,
int  flags,
dbref  player,
char *  message 
) [static]

Definition at line 44 of file speech.c.

References Name(), raw_broadcast(), and SAY_NOTAG.

Referenced by do_say().

00046 {
00047         if(flags & SAY_NOTAG)
00048                 raw_broadcast(target, "%s%s", Name(player), message);
00049         else
00050                 raw_broadcast(target, "%s%s%s", prefix, Name(player), message);
00051 }

int sp_ok ( dbref  player  ) 

Definition at line 22 of file speech.c.

References A_LSPEECH, Auditorium, controls, could_doit(), Gagged, Location, mudconf, notify, Robot, confdata::robot_speak, and Wizard.

Referenced by do_say().

00023 {
00024         if(Gagged(player) && (!(Wizard(player)))) {
00025                 notify(player, "Sorry. Gagged players cannot speak.");
00026                 return 0;
00027         }
00028 
00029         if(!mudconf.robot_speak) {
00030                 if(Robot(player) && !controls(player, Location(player))) {
00031                         notify(player, "Sorry robots may not speak in public.");
00032                         return 0;
00033                 }
00034         }
00035         if(Auditorium(Location(player))) {
00036                 if(!could_doit(player, Location(player), A_LSPEECH)) {
00037                         notify(player, "Sorry, you may not speak in this place.");
00038                         return 0;
00039                 }
00040         }
00041         return 1;
00042 }

void whisper_pose ( dbref  player,
dbref  target,
char *  message 
)

Messages to specific players, or to all but specific players.

Definition at line 619 of file speech.c.

References alloc_lbuf, free_lbuf, Name(), notify_printf(), notify_with_cause, StringCopy, and tprintf().

Referenced by do_pemit().

00620 {
00621         char *buff;
00622 
00623         buff = alloc_lbuf("do_pemit.whisper.pose");
00624         StringCopy(buff, Name(player));
00625         notify_printf(player, "%s senses \"%s%s\"", Name(target), buff, message);
00626         notify_with_cause(target, player, tprintf("You sense %s%s", buff,
00627                                                                                           message));
00628         free_lbuf(buff);
00629 }


Variable Documentation

const char* admin_msg = "Admin: " [static]

Definition at line 55 of file speech.c.

Referenced by do_say().

const char* announce_msg = "Announcement: " [static]

Definition at line 53 of file speech.c.

Referenced by do_say().

const char* broadcast_msg = "Broadcast: " [static]

Definition at line 54 of file speech.c.

Referenced by do_say().


Generated on Mon May 28 04:25:47 2007 for BattletechMUX by  doxygen 1.4.7