/**************************************************************************/ // intro_ex.cpp - Introduction system Extra Functions - Kal May 2000 /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with the dawn license * * in licenses.txt... In particular, you may not remove this copyright * * notice. * **************************************************************************/ #include "include.h" #include "intro.h" /**************************************************************************/ /**************************************************************************/ void do_introduce(char_data *ch, char * argument) { char_data *victim; if(IS_NPC(ch)){ ch->println("players only"); return; } if(IS_NULLSTR(argument)){ ch->println("introduce <player>"); ch->println("introduce all"); return; } if(!str_cmp(argument, "all")){ for(victim=ch->in_room->people; victim; victim=victim->next_in_room){ if(IS_NPC(victim) || victim==ch || !can_see(ch, victim) || !IS_AWAKE(victim)){ continue; } ch->printlnf("You introduce yourself to %s", PERS(victim, ch)); act("$N introduces $Mself to you as $t",victim, ch->name, ch, TO_CHAR); victim->know->introduced_to(ch); } return; } victim= get_char_room(ch, argument); if(!victim){ ch->printlnf("Couldn't find any '%s' in the room to introduce yourself to", argument); return; } if(IS_NPC(victim)){ ch->println("Introduce to players only"); return; } if(victim==ch){ ch->println("Cant introduce yourself to yourself."); return; } if ( !IS_AWAKE(victim)) { ch->println( "Wait till they wake up before you make your introductions." ); return; } if(!can_see(victim, ch)){ ch->printlnf("You attempt to introduce yourself to %s, but it doesn't appear that they can see you.", PERS(victim, ch)); return; } ch->printlnf("You introduce yourself to %s", PERS(victim, ch)); act("$N introduces $Mself to you as $t",victim, ch->name, ch, TO_CHAR); victim->know->introduced_to(ch); }; /**************************************************************************/ void do_askname(char_data *ch, char * argument) { char_data *victim; if(IS_NPC(ch)){ ch->println("players only"); return; } if(IS_NULLSTR(argument)){ ch->println(" `BSyntax:`x askname <player>"); ch->println(""); ch->wrapln("Use askname to request a player to introduce themself to you... they will " "automatically introduce themself to you if they haven't turned off autoanswer."); return; } victim= get_char_room(ch, argument); if(!victim){ ch->printlnf("Couldn't find any '%s' in the room to ask their name of.", argument); return; } if(IS_NPC(victim)){ ch->printlnf("%s doesn't look very interested in you.", PERS(victim,ch)); return; } if(victim==ch){ ch->println("You already know your own name."); return; } if(ch->know && ch->know->knows(victim)){ ch->printlnf("You already know %s.", victim->name); return; } ch->printlnf("You ask %s what their name is.", victim->short_descr); victim->printlnf("`Y%s asks you what your name is.`x", PERS(ch, victim)); if(!HAS_CONFIG(victim, CONFIG_NOAUTOANSWER)){ do_introduce(victim, ch->name); } }; /**************************************************************************/ // not finished yet void do_forget(char_data *ch, char * argument) { if(IS_NPC(ch)){ ch->println("players only"); return; } if(IS_NULLSTR(argument)){ ch->println("forget <player>"); ch->println("- removes their name beside their short after they have introduced themself"); return; } char_data *victim= get_char_room(ch, argument); if(!victim){ ch->printlnf("Couldn't find any '%s' in the room to forget.", argument); return; } if(ch->know && ch->know->knows(victim)){ // make them forget the name ch->know->forgetting(victim); ch->printlnf("You choose to not recall the name of %s.", PERS(victim, ch)); }else{ ch->printlnf("You don't know the name of %s.", PERS(victim, ch)); } }; /**************************************************************************/ // Short description function - by Kalahn - Multibuffered :) // supports looker being NULL (for operating system stuff). char * PERS( char_data *ch, char_data *looker) { static int i; static char buf[5][MSL]; char buf2[MSL]; if (!ch){ return ""; } char short_descr[MSL]; strcpy(short_descr, mxp_create_tag(looker, mxp_tag_for_mob(looker, ch), ch->short_descr)); char cname[MSL]; strcpy(cname, mxp_create_tag(looker, mxp_tag_for_mob(looker, ch), capitalize(TRUE_CH(ch)->name))); char name[MSL]; strcpy(name, mxp_create_tag(looker, mxp_tag_for_mob(looker, ch), TRUE_CH(ch)->name)); // rotate buffers ++i%=5; char *result=buf[i]; if ( !looker || can_see(looker, ch) || IS_SET(looker->act, PLR_HOLYNAME)) { // MOBS if ( IS_NPC(ch)){ if ( !looker || IS_SET(looker->act, PLR_HOLYNAME) || IS_CONTROLLED (looker) || IS_SWITCHED (looker) ) { if (IS_CONTROLLED(ch)){ sprintf( result, "%s `#`Y[%s]`&", short_descr, name); }else{ sprintf( result, "%s", short_descr); } }else{ strcpy(result,short_descr); } // PLAYERS }else{ if(GAMESETTING(GAMESET_NOSHORT_DESCRIPTS)){ strcpy( result, name); }else{ if ( !looker || ( IS_SET(TRUE_CH(looker)->act, PLR_HOLYNAME) || GAMESETTING(GAMESET_HOLYNAME_FOR_ALL) || IS_CONTROLLED(looker) || IS_SWITCHED(looker) ) && str_cmp(ch->short_descr, ch->name) ) { if(looker && HAS_CONFIG2(looker,CONFIG2_NAME_ONLY_FOR_KNOWN)){ strcpy( result, cname); }else{ if(looker && HAS_CONFIG(looker, CONFIG_NAMES_BEFORE_SHORT)){ sprintf( result, "(%s) %s", capitalize(ch->name), short_descr); }else{ sprintf( result, "%s (%s)", short_descr, capitalize(ch->name) ); } } }else{ // nonimmortal player if (IS_OOC(ch) && IS_OOC(looker)){ strcpy( result, name); }else{ // check for intro system if(!HAS_CONFIG(looker, CONFIG_NONAMES) && looker->know && looker->know->knows(ch)) { if(looker && HAS_CONFIG2(looker,CONFIG2_NAME_ONLY_FOR_KNOWN)){ strcpy( result, cname); }else{ if(HAS_CONFIG(looker, CONFIG_NAMES_BEFORE_SHORT)){ sprintf( result, "(%s) %s", capitalize(ch->name), short_descr); }else{ sprintf( result, "%s (%s)", short_descr, capitalize(ch->name)); } } }else{ strcpy( result, short_descr); } } } } } }else{ strcpy(result,"someone"); } if(!looker){ return result; } // extra things to append to what someone sees if (!IS_UNSWITCHED_MOB(looker) && HAS_DESC(looker) && IS_SET(TRUE_CH(looker)->act, PLR_HOLYVNUM)) { if (IS_NPC(ch)) { if (ch->pIndexData) { if (ch->pIndexData->mprogs) { sprintf(buf2," `#`=H*%d,%d*`&", ch->pIndexData->vnum, ch->level); } else { sprintf(buf2," `#`=h[%d,%d]`&", ch->pIndexData->vnum, ch->level); } strcat(result,buf2); } } else { // <level> for players sprintf(buf2," `#`=L<%d>`&", ch->level); strcat(result,buf2); } } // IMMS AND MOBS USING THE SLIENTLY COMMAND if (IS_SILENT(ch) && IS_SET(TRUE_CH(looker)->act, PLR_HOLYLIGHT)) { sprintf(buf2," `#`Y[SILENTLY]`&"); strcat(result,buf2); } if ((IS_SET(TRUE_CH((ch))->dyn, DYN_USING_AT)) && IS_SET(TRUE_CH(looker)->act, PLR_HOLYLIGHT)) { sprintf(buf2," `#`Y[AT]`&"); strcat(result,buf2); } return (result); } /**************************************************************************/ /**************************************************************************/