#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: " |
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 }
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 }
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 }
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 }
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 }
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 }
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 }
const char* admin_msg = "Admin: " [static] |
const char* announce_msg = "Announcement: " [static] |
const char* broadcast_msg = "Broadcast: " [static] |