/* Tracker's coding stuff -DONT- touch! */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include "merc.h" #include "angel.h" #include "commands.h" #include "player.h" int col_str_len args( ( char * text ) ); char * goodie_time args( ( int time ) ); extern int dxpcount; char * status_level args( ( char * buf, int status, int class ) ); char * status_level3 args( ( char * buf, int status, int class ) ); void do_login( CHAR_DATA *ch, char *argument ) { send_to_char("This does nothing.\n\r",ch); return; } void do_slicestorm( CHAR_DATA *ch, char *argument ) { send_to_char("This does nothing.\n\r",ch); return; } void do_dtoken( CHAR_DATA *ch, char *argument ) { send_to_char("This does nothing.\n\r",ch); return; } void do_rnumber( CHAR_DATA *ch, char *argument ) { ch_printf( ch, "Random Number: %d", number_range( 1000, 9999)); return; } void do_gpull( CHAR_DATA *ch, char *argument ) { send_to_char("This does nothing.\n\r",ch); return; } void do_immtitle( CHAR_DATA *ch, char *argument ) { send_to_char("This does nothing.\n\r",ch); return; } void do_show( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char rep[MAX_STRING_LENGTH]; int pkRatio; int a_c = char_ac(ch); if( IS_NPC(ch) ) return; if ((ch->pkill + ch->pdeath) != 0) { pkRatio = (int)((float)ch->pkill/(float)(ch->pkill + ch->pdeath)*100); sprintf(rep, "%4d#+", pkRatio); } else { pkRatio = 100; sprintf(rep, "%4d#+", pkRatio); } divide2_to_char(ch); sprintf(buf,"{C({w-{W>{c Score Sheet for {w%s {W<{w-{C){x",ch->name); centre_text(buf,ch); divide2_to_char(ch); sprintf(buf,"{w Hps {D[{R %7ld{D/{r%7ld {D]{w Hitroll {D[{R %5d {D]{w Str {D[{R %3d {D]{w Exp {D[{R %10d {D]{x\n\r", ch->hit, ch->max_hit, char_hitroll(ch), get_curr_str(ch), ch->exp); send_to_char(buf,ch); sprintf(buf,"{w Mana {D[{Y %7ld{D/{y%7ld {D]{w Damroll {D[{R %5d {D]{w Int {D[{R %3d {D]{w Qps {D[{R %10d {D]{x\n\r", ch->mana, ch->max_mana, char_damroll(ch), get_curr_int(ch), IS_NPC(ch) ? 0 : ch->pcdata->quest); send_to_char(buf,ch); sprintf(buf,"{w Move {D[{C %7ld{D/{c%7ld {D]{w Damcap {D[{R %5d {D]{w Wis {D[{R %3d {D]{w Primal {D[{R %10d {D]{x\n\r", ch->move, ch->max_move, ch->damcap[0], get_curr_wis(ch), ch->practice); send_to_char(buf,ch); sprintf(buf,"{w Items {D[{M %5d{D/{m%5d {D]{w AC {D[{R %5d {D]{w Dex {D[{R %3d {D]{w Hours {D[{R %10d {D]{x\n\r", ch->carry_number, can_carry_n(ch), a_c, get_curr_dex(ch), (get_age(ch) - 17) * 2); send_to_char(buf,ch); sprintf(buf,"{wWeight {D[{G%8d{D/{G%-8d{D]{w Align {D[{R %5d {D]{w Con {D[{R %3d {D]{w Wimpy {D[{R %10d {D]{x\n\r", ch->carry_weight, can_carry_w(ch), ch->alignment, get_curr_con(ch), ch->wimpy); send_to_char(buf,ch); sprintf(buf,"{wTot.Qp {D[{R %7d {D]{w Vs. Sp {D[{R %5d {D]{w Q.Compl {D[{R %5d {D]{x\n\r", IS_NPC( ch ) ? 0 : ch->pcdata->score[SCORE_QUEST], ch->saving_throw, IS_NPC( ch ) ? 0 : ch->pcdata->score[SCORE_NUM_QUEST] ); send_to_char(buf,ch); divide2_to_char(ch); centre_text("{C({w-{W>{c PK Stats/Misc. {W<{w-{C){x",ch); divide2_to_char(ch); sprintf(buf,"{w Pkills {D[{R %5d {D]{w Ratio {D[{R%4s {D]{w Autoexit {D[{R %s {D]{w Autohead{D [{R %s {D]{x\n\r", IS_NPC( ch ) ? 0 : ch->pkill, rep, (!IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOEXIT)) ? "yes" : "no ", PLR_FLAGS(ch, PLR_AUTOHEAD) ? "yes" : "no " ); send_to_char(buf,ch); sprintf(buf,"{w Pdeath {D[{R %5d {D]{w Status {D[{R %4d {D]{w Autoloot {D[{R %s {D]{x Mapper{D [{R %s {D]{x\n\r", IS_NPC( ch ) ? 0 : ch->pdeath, ch->race, (!IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOLOOT)) ? "yes" : "no ", (!IS_NPC(ch) && PLR_FLAGS(ch,PLR_AUTOMAPPER) ) ? "yes" : "no " ); send_to_char(buf,ch); sprintf(buf,"{w Mkills {D[{R %5d {D]{w None {D[{R n/a {D]{w Autosac {D[{R %s {D] {wExtraSc {D[{R %s {D]{x\n\r", IS_NPC( ch ) ? 0 : ch->mkill, /* ch->lstatus,*/ (!IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOSAC)) ? "yes" : "no ", (!IS_NPC(ch) && PLR_FLAGS(ch,PLR_AUTOLEVEL)) ? "yes" : "no" ); send_to_char(buf,ch); sprintf(buf,"{w Mdeath {D[{R %5d {D]{w Timer {D[{R %4d {D]{w Autocrack {D[{R %s {D]{x\n\r", IS_NPC( ch ) ? 0 : ch->mdeath, ch->fight_timer, (!IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOCRACK)) ? "yes" : "no " ); send_to_char(buf,ch); divide2_to_char(ch); if( PLR_FLAGS(ch,PLR_AUTOLEVEL ) ) { centre_text("{C({w-{W>{cCombat Stuff{W<{w-{C){x",ch); divide2_to_char(ch); sprintf(buf,"{w Bull {D[{R %3d {D]{w Viper {D[{R %3d {D]{w Crane {D[{R %3d {D]{w Crab {D[{R %3d {D]{w Mongoose {D[{R %3d {D]{x\n\r", ch->stance[STANCE_BULL], ch->stance[STANCE_VIPER], ch->stance[STANCE_CRANE], ch->stance[STANCE_CRAB], ch->stance[STANCE_MONGOOSE] ); send_to_char(buf,ch); sprintf(buf,"{w Tiger {D[{R %3d {D]{w Mantis {D[{R %3d {D]{w Dragon {D[{R %3d {D]{w Swallow {D[{R %3d {D]{w Monkey {D[{R %3d {D]{x\n\r", ch->stance[STANCE_TIGER], ch->stance[STANCE_MANTIS], ch->stance[STANCE_DRAGON], ch->stance[STANCE_SWALLOW], ch->stance[STANCE_MONKEY] ); send_to_char(buf,ch); sprintf(buf,"{M Purple {D[{R %3d {D]{R Red {D[{R %3d {D]{G Green {D[{R %3d {D]{B Blue {D[{R %3d {D]{Y Yellow {D[{R %3d {D]{x\n\r", ch->spl[0], ch->spl[1], ch->spl[3], ch->spl[2], ch->spl[4]); send_to_char(buf,ch); sprintf(buf,"{wUnarmed {D[{R %3d {D]{w Slash {D[{R %3d {D]{w Slice {D[{R %3d {D]{w Stab {D[{R %3d {D]{w Whip {D[{R %3d {D]{x\n\r", ch->wpn[0], ch->wpn[3], ch->wpn[1], ch->wpn[2], ch->wpn[4]); send_to_char(buf,ch); sprintf(buf,"{w Blast {D[{R %3d {D]{w Claw {D[{R %3d {D]{w Pound {D[{R %3d {D]{w Crush {D[{R %3d {D]{w Grep {D[{R %3d {D]{x\n\r", ch->wpn[6], ch->wpn[5], ch->wpn[7], ch->wpn[8], ch->wpn[9]); send_to_char(buf,ch); sprintf(buf,"{w Bite {D[{R %3d {D]{w Suck {D[{R %3d {D]{w Pierce {D[{R %3d {D]{x\n\r", ch->wpn[10], ch->wpn[12], ch->wpn[11]); send_to_char(buf,ch); divide2_to_char(ch); } centre_text("{C({w-{W>{cClass Stuff{W<{w-{C){x",ch); divide2_to_char(ch); if (!IS_NPC(ch)) { sprintf( buf, "{WYou have{w %d {Wclass points.", ch->pcdata->stats[DEMON_CURRENT] ); /* ch->pcdata->stats[DEMON_TOTAL] );*/ centre_text( buf, ch ); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_MAGE)) { sprintf( buf, "{WYou have{M %d {Wpoints of magic resistance.", ch->pcdata->stats[DROW_MAGIC] ); centre_text( buf, ch ); } if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_DROW)) { sprintf( buf, "{WYou have{M %d {Wpoints of magic resistance.", ch->pcdata->stats[DROW_MAGIC] ); centre_text( buf, ch ); } if ( !IS_NPC(ch) && IS_CLASS(ch, CLASS_MONK) ) { sprintf( buf,"{WYour current level of chi{D:{w %d", ch->chi[CURRENT] ); centre_text( buf, ch ); sprintf( buf, "{WYour maximum level of chi{D:{w %d", ch->chi[MAXIMUM] ); centre_text( buf, ch ); sprintf( buf, "{WYour current focus points{D:{w %d", ch->focus[CURRENT] ); centre_text( buf, ch ); sprintf( buf, "{WYour maximum focus points{D:{w %d", ch->focus[MAXIMUM] ); centre_text( buf, ch ); } if ( !IS_NPC(ch) && IS_CLASS(ch,CLASS_VAMPIRE) ) { sprintf( buf, "{WBlood:{r %d{w {WBeast:{y %d{w.", ch->pcdata->condition[COND_THIRST],ch->beast ); centre_text( buf, ch ); } if ( IS_CLASS(ch, CLASS_WEREWOLF) ) { sprintf( buf, "{WYou have {y%d{w/{y%d {WGnosis Points", ch->gnosis[GCURRENT], ch->gnosis[GMAXIMUM] ); centre_text( buf, ch ); } if ( IS_CLASS(ch,CLASS_WEREWOLF) && ch->pcdata->powers[WPOWER_SILVER] > 0) { sprintf(buf,"{WYou have attained{w %d {Wpoints of silver tolerance.",ch->pcdata->powers[WPOWER_SILVER]); centre_text( buf, ch ); } if ( IS_CLASS(ch, CLASS_NINJA) ) { sprintf(buf,"{WYou currently have{m %d{W out of {m500{W Ki store.",ch->pcdata->powers[NINJAKI] ); centre_text(buf,ch); } if ( IS_CLASS(ch,CLASS_VAMPIRE) && ch->pcdata->stats[UNI_RAGE] > 0) { sprintf(buf,"{WThe beast is in control of your actions:" ); centre_text( buf, ch ); sprintf(buf,"{WAffects Hitroll and Damroll by +{y%d{w.",ch->pcdata->stats[UNI_RAGE]); centre_text( buf, ch ); } else if ( IS_SET(ch->special,SPC_WOLFMAN) && ch->pcdata->stats[UNI_RAGE] > 0) { sprintf(buf,"{WYou are raging: Affects Hitroll and Damroll by +{y%d{w.",ch->pcdata->stats[UNI_RAGE]); centre_text( buf, ch ); } else if ( IS_CLASS(ch,CLASS_NINJA) && ch->pcdata->stats[UNI_RAGE] > 0) { sprintf(buf,"{WMichi: Affects Hitroll and Damroll by +{y%d{w.",ch->pcdata->stats[UNI_RAGE]); centre_text( buf, ch ); } if (IS_CLASS(ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_CHIKYU] >= 6 && ch->pcdata->powers[HARA_KIRI] > 0) { sprintf(buf,"{WYou receive the power of HaraKiri for{m %d {Wmore ticks.",ch->pcdata->powers[HARA_KIRI]); centre_text( buf, ch ); } else if ( IS_CLASS( ch, CLASS_DEMON) && ch->pcdata->stats[DEMON_POWER] > 0) { sprintf(buf,"{WYou are wearing demonic armour: Affects Hitroll and Damroll by +{r%d{W.", ((ch->pcdata->stats[DEMON_POWER]) * ch->pcdata->stats[DEMON_POWER])); centre_text( buf, ch ); } else if ( IS_SET(ch->special,SPC_CHAMPION) && ch->pcdata->stats[DEMON_POWER] > 0) { sprintf(buf,"{WYou are wearing demonic armour: Affects Hitroll and Damroll by +{r%d{W.", ((ch->pcdata->stats[DEMON_POWER]) * ch->pcdata->stats[DEMON_POWER])); centre_text( buf, ch ); } else if ( IS_EXTRA(ch, EXTRA_PREGNANT) ) { divide2_to_char(ch); birth_date(ch, FALSE); centre_text( buf, ch ); } divide2_to_char(ch); return; } void do_gemote( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; if ( argument[0] == '\0' ) { return; } for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected == CON_PLAYING && !IS_SET(d->character->deaf, CHANNEL_INFO) ) { send_to_char( "{D[{RGemote{D]{w ", d->character ); sprintf(buf, "{W%s{w %s{x", ch->name, argument); send_to_char( buf, d->character); send_to_char( "{x\n\r", d->character ); } } return; } void do_gsocial(CHAR_DATA *ch, char *argument) { char command[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int cmd; bool found; char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; char buf[MAX_STRING_LENGTH]; int counter; int count; char buf2[MAX_STRING_LENGTH]; argument = one_argument(argument,command); if (command[0] == '\0') { send_to_char("What do you wish to gocial?\n\r",ch); return; } found = FALSE; for (cmd = 0; social_table[cmd].name[0] != '\0'; cmd++) { if (command[0] == social_table[cmd].name[0] && !str_prefix( command,social_table[cmd].name ) ) { found = TRUE; break; } } if (!found) { send_to_char("What kind of social is that?!?!\n\r",ch); return; } if ( !IS_NPC(ch) && IS_SET(ch->deaf, CHANNEL_GSOCIAL)) { send_to_char("But you have the gsocial channel turned off!\n\r",ch); return; } if ( !IS_NPC(ch) && IS_SET(ch->act, PLR_SILENCE)) { send_to_char("The gods have revoked your channel priviliges.\n\r",ch); return; } switch (ch->position) { case POS_DEAD: send_to_char("Lie still; you are DEAD!\n\r",ch); return; case POS_INCAP: case POS_MORTAL: send_to_char("You are hurt far too bad for that.\n\r",ch); return; case POS_STUNNED: send_to_char("You are too stunned for that.\n\r",ch); return; } one_argument(argument,arg); victim = NULL; if (arg[0] == '\0') { sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].char_no_arg ); act3(buf,ch,NULL,NULL,TO_CHAR,POS_DEAD); sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].others_no_arg ); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && !IS_SET(vch->deaf, CHANNEL_GSOCIAL)) { act3(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } else if ((victim = get_char_world(ch,arg)) == NULL) { send_to_char("They aren't here.\n\r",ch); return; } else if (victim == ch) { sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].char_auto); act3(buf,ch,NULL,NULL,TO_CHAR,POS_DEAD); sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].others_auto); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && !IS_SET(vch->deaf, CHANNEL_GSOCIAL)) { act3(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } else { sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].char_found); act3(buf,ch,NULL,victim,TO_CHAR,POS_DEAD); sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].vict_found); act3(buf,ch,NULL,victim,TO_VICT,POS_DEAD); sprintf(buf, "{D[{RSocial{D]{W %s{x", social_table[cmd].others_found); for (counter = 0; buf[counter+1] != '\0'; counter++) { if (buf[counter] == '$' && buf[counter + 1] == 'N') { strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,victim->name); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); } else if (buf[counter] == '$' && buf[counter + 1] == 'E') { switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count ++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } else if (buf[counter] == '$' && buf[counter + 1] == 'M') { buf[counter] = '%'; buf[counter + 1] = 's'; switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"it"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"him"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"her"); for (count = 0; buf[count] != '\0'; count++); { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } else if (buf[counter] == '$' && buf[counter + 1] == 'S') { switch (victim->sex) { default: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"its"); for (count = 0;buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 1: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"his"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; case 2: strcpy(buf2,buf); buf2[counter] = '\0'; strcat(buf2,"hers"); for (count = 0; buf[count] != '\0'; count++) { buf[count] = buf[count+counter+2]; } strcat(buf2,buf); strcpy(buf,buf2); break; } } } for (d=descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch; vch = d->original ? d->original : d->character; if (d->connected == CON_PLAYING && d->character != ch && d->character != victim && !IS_SET(vch->deaf, CHANNEL_GSOCIAL)) { act3(buf,ch,NULL,vch,TO_VICT,POS_DEAD); } } } return; } void do_whotype (CHAR_DATA *ch, char *argument) { char arg1 [MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument ( argument, arg1 ); if ( arg1[0] == '\0' ) { send_to_char("Syntax: whotype <standard/informal/new>\n\r\n\r",ch); if (ch->pcdata->stats[WHOTYPE] == 1) {sprintf(buf,"Your whotype is set to standard.\n\r");} else if (ch->pcdata->stats[WHOTYPE] == 2) {sprintf(buf,"Your whotype is set to informal.\n\r");} else if (ch->pcdata->stats[WHOTYPE] == 3) {sprintf(buf,"Your whotype is set to new.\n\r");} else {sprintf(buf,"Your whotype is set to standard.\n\r");} send_to_char(buf,ch); return; } if (!str_cmp(arg1, "standard")) { ch->pcdata->stats[WHOTYPE] = 1; send_to_char("Your whotype has been changed to standard.\n\r",ch); return; } if (!str_cmp(arg1,"informal")) { ch->pcdata->stats[WHOTYPE] = 2; send_to_char("Your whotype has been changed to informal.\n\r",ch); return; } if (!str_cmp(arg1,"new")) { ch->pcdata->stats[WHOTYPE] = 3; send_to_char("Your whotype has been changed to new.\n\r",ch); return; } return; } void do_immadv( CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; smash_tilde(argument); argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if (IS_NPC(ch)) return; if (!IS_IMMORTAL( ch)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' || arg2[0] == '\0' ) { send_to_char("Syntax: immadv (person) (rank) \n\r",ch); send_to_char("Possible ranks: ldr deldr prince deprince archmage\n\r : mudcop moron\n\r",ch); return; } if ( ( victim = get_char_room( ch, arg1) ) == NULL ) { send_to_char( "They aren't here.\n\r",ch); return; } if ( IS_NPC(victim) ) { send_to_char("Not on NPC's.\n\r",ch); return; } if (!str_cmp(arg2,"deprince")) { if (victim == ch) { send_to_char("Not on yourself!\n\r",ch); return; } if (IS_SET(victim->special,SPC_PRINCE)) { send_to_char("You have lost your princehood!\n\r",victim); send_to_char("You remove their princehood.\n\r",ch); REMOVE_BIT(victim->special, SPC_PRINCE); } save_char_obj(victim); return; } if (!str_cmp(arg2,"prince")) { { send_to_char("You have been made a prince!\n\r",victim); send_to_char("You make them a prince.\n\r",ch); SET_BIT(victim->special, SPC_PRINCE); } save_char_obj(victim); return; } if (!str_cmp(arg2,"mastery")) { REMOVE_BIT(victim->newbits, NEW_MASTERY); return; } if (!str_cmp(arg2,"adrnk")) { victim->pcdata->stats[KINGDOM_RANK] += 1; return; } if (!str_cmp(arg2,"dlrnk")) { victim->pcdata->stats[KINGDOM_RANK] -= 1; return; } if (!str_cmp(arg2,"deldr")) { if (victim == ch) { send_to_char("Not on yourself!\n\r",ch); return; } if (IS_CLASS(victim, CLASS_ANGEL) && (IS_SET(victim->special,SPC_ANGEL_LORD))) { send_to_char("You are no longer a Seraphim!\n\r",victim); send_to_char("They are no longer a Seraphim.\n\r",ch); REMOVE_BIT(victim->special, SPC_ANGEL_LORD); return; } else if (IS_CLASS(ch, CLASS_DEMON) && (IS_SET(victim->special,SPC_DEMON_LORD))) { send_to_char("You are no longer a Demon Lord!\n\r",victim); send_to_char("You remove their demon lord status.\n\r",ch); REMOVE_BIT(victim->special, SPC_DEMON_LORD); return; } save_char_obj(victim); return; } /* if (!str_cmp(arg2,"moron")) { if (!IS_SET(victim->flag2, AFF2_LHIDE)) { send_to_char("Stupid Moron!\n\r",victim); send_to_char("You make them a Moron.\n\r",ch); SET_BIT(victim->flag2, AFF2_LHIDE); return; } else if (IS_SET(victim->flag2, AFF2_LHIDE)) { send_to_char("You're no longer a moron.\n\r",victim); send_to_char("You remove their moron flag.\n\r",ch); REMOVE_BIT(victim->flag2, AFF2_LHIDE); return; } save_char_obj(victim); return; }*/ if (!str_cmp(arg2,"ldr")) { if (IS_CLASS(victim, CLASS_ANGEL) && (!IS_SET(victim->special,SPC_ANGEL_LORD))) { send_to_char("You have been made a Seraphim!\n\r",victim); send_to_char("You make them a Seraphim.\n\r",ch); SET_BIT(victim->special, SPC_ANGEL_LORD); return; } else if (IS_CLASS(victim, CLASS_DEMON) && (!IS_SET(victim->special,SPC_DEMON_LORD))) { send_to_char("You have been made a Demon Lord!\n\r",victim); send_to_char("You make them a Demon Lord.\n\r",ch); SET_BIT(victim->special, SPC_DEMON_LORD); return; } save_char_obj(victim); return; } if (!str_cmp(arg2,"archmage") || !str_cmp( arg2, "rubicant") ) { if (IS_CLASS(victim, CLASS_MAGE) && (!IS_SET(victim->newbits, NEW_ARCHMAGE))) { SET_BIT(victim->newbits, NEW_ARCHMAGE); send_to_char("You are now a RUBICANT!\n\r",victim); send_to_char("Done.\n\r",ch); return; } if (IS_CLASS(victim, CLASS_MAGE) && (IS_SET(victim->newbits, NEW_ARCHMAGE))) { REMOVE_BIT(victim->newbits, NEW_ARCHMAGE); send_to_char("You are no longer a Rubicant!\n\r",victim); send_to_char("Done.\n\r",ch); return; } } if (!str_cmp(arg2,"mudcop")) { if (!IS_NPC(victim) && (!IS_SET(victim->newbits, NEW_MUDCOP))) { SET_BIT(victim->newbits, NEW_MUDCOP); send_to_char("You are now a Mud Cop!\n\r",victim); send_to_char("Done.\n\r",ch); return; } if (!IS_NPC(victim) && (IS_SET(victim->newbits, NEW_MUDCOP))) { REMOVE_BIT(victim->newbits, NEW_MUDCOP); send_to_char("You are no longer an Mud Cop!\n\r",victim); send_to_char("Done.\n\r",ch); return; } } if (!str_cmp(arg2,"helper")) { /* if (victim == ch) { send_to_char("Not on yourself!\n\r",ch); return; } */ if (!IS_NPC(victim) && (IS_SET(victim->flag2,AFF2_HELPER))) { send_to_char("You are no longer a Newbie Helper!\n\r",victim); send_to_char("They are no longer a Newbie Helper!\n\r",ch); REMOVE_BIT(victim->flag2, AFF2_HELPER); return; } else if (!IS_NPC(victim) && (!IS_SET(victim->flag2, AFF2_HELPER))) { send_to_char("You have been made a Newbie Helper!\n\r",victim); send_to_char("You make them a Newbie Helper!\n\r",ch); SET_BIT(victim->flag2, AFF2_HELPER); return; } } send_to_char("Ok.\n\r",ch); save_char_obj(victim); return; } bool free_helps( CHAR_DATA *ch, char *arg ) { char buf[MAX_STRING_LENGTH]; HELP_DATA *h, *h_next; HELP_DATA *prev = NULL; bool found = FALSE; prev = help_first; for ( h = help_first; h; h = h_next ) { h_next = h->next; if ( !str_cmp( h->keyword, arg ) ) { free_string( h->keyword ); free_string( h->text ); if ( h == help_first ) help_first = h->next; else prev->next = h->next; if ( h == help_last ) help_last = prev; free_mem( h, sizeof(*h) ); found = TRUE; } prev = h; } if ( !found ) { sprintf( buf, "Help entry %s not found.\n\r", arg ); send_to_char( buf, ch ); return FALSE; } return TRUE; } bool read_entry( CHAR_DATA *ch, FILE *fp, char *filename, char *arg ) { char buf[MAX_STRING_LENGTH]; HELP_DATA *new; HELP_DATA *debug; char *test_keyword = 0; char *test_text = 0; int test_level = 0; if ( fread_letter( fp ) != '#' ) { sprintf( buf, "read_entry: # not in %s.\n\r", filename ); send_to_char( buf, ch ); return FALSE; } fread_word( fp ); /* read the word HELPS */ new = alloc_mem( sizeof(*new) ); new->next = NULL; for ( ; ; ) { test_level = fread_number( fp ); test_keyword = fread_string( fp ); if ( !str_cmp( test_keyword, "$" )) /* end of file */ { free_string( test_keyword ); free_string( test_text ); free_mem( new, sizeof(*new) ); return FALSE; } test_text = fread_string( fp ); if ( !str_cmp( test_keyword, arg )) /* match */ { new->keyword = test_keyword; new->level = test_level; new->text = test_text; debug = help_last; if ( help_last ) help_last->next = new; help_last = new; sprintf( buf, "entry %s updated.\n\r", new->keyword ); send_to_char( buf, ch ); return TRUE; } else { free_string( test_keyword ); free_string( test_text ); } } return FALSE; } void do_loadhelp( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; FILE *fp; bool found = FALSE; int i; /* in order of 'importance' */ char *helpfile[ ] = { "help.are", "greetings.are", "rules.are", "imm-ref.hlp", NULL }; argument = one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Usage: reload <help-keyword>\n\r", ch ); send_to_char( "Help files: \n\r", ch ); for( i = 0; helpfile[i]; i++ ) ch_printf( ch, " %s\n\r", helpfile[i] ); return; } /* remove help entry from the list */ if ( !free_helps( ch, arg )) return; /* here we go */ fclose( fpReserve ); for ( i = 0; helpfile[i]; i++ ) { if ( ( fp = fopen( helpfile[i], "r" ) ) == NULL ) { sprintf( buf, "do_reload: couldn't open %s.\n\r", helpfile[i] ); send_to_char( buf, ch ); break; } if ( ( found = read_entry( ch, fp, helpfile[i], arg ) ) == TRUE ) { fclose( fp ); break; } } fpReserve = fopen( NULL_FILE, "r" ); return; } void do_idle(CHAR_DATA *ch, char *argument) { CHAR_DATA *vch; char buf[MAX_INPUT_LENGTH]; send_to_char("Players Idle Hours Host\n\r-----------------------------------------------------------------------------------------------------------\n\r",ch); for(vch=char_list; vch != NULL; vch = vch->next) { if ( IS_NPC( vch ) || !can_see( ch, vch ) ) continue; sprintf(buf,"%-12s%4d%7d %-30.30s %s {D[{R%d{D]{x\n\r",vch->name, vch->timer, ( vch->played + (int) (current_time - vch->logon) ) / 3600, vch->desc ? vch->desc->host : "No descriptor.", vch->createtime, vch->pcdata->stats[LOGINS] ); send_to_char(buf,ch); } if (number_percent() == 1 ) send_to_char( "You have become better at idleness!\n\r", ch ); send_to_char( "\n\r", ch ); } void do_omni(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; if (IS_NPC(ch)) return; sprintf(buf, " Name|Level|Trust|Class| Hit| Mana| Move| HR| DR| AC|Quest| Stat\n\r"); send_to_char(buf,ch); sprintf(buf, "------------|-----|-----|-----|-------|------|------|-----|----|------|-----|-----|\n\r"); send_to_char(buf,ch); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *wch; if (d->connected != CON_PLAYING) continue; wch = ( d->original != NULL) ? d->original : d->character; sprintf(buf,"%12s|%5d|%5d|%5d|%7ld|%6ld|%6ld|%5d|%4d|%6d|%5d|%5d|\n\r", wch->name, wch->level, wch->trust, wch->class, wch->max_hit, wch->max_mana, wch->max_move, char_hitroll(wch), char_damroll(wch), char_ac(wch), wch->pcdata->quest, wch->race ); send_to_char(buf,ch); } return; } void sysmes( char *argument ) { DESCRIPTOR_DATA *d; if ( argument[0] == '\0' ) { return; } for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected == CON_PLAYING ) { send_to_char( "{D[{BSYSTEM{w:{W ",d->character ); send_to_char( argument, d->character ); send_to_char( "{D]{x\n\r", d->character ); } } return; } void do_goodiexp( CHAR_DATA *ch, char *argument ) { /* DESCRIPTOR_DATA *d;*/ char buf [MAX_STRING_LENGTH]; char buf2 [256]; char arg [MIL]; extern int dxpcount; int dxptime; int max = 8640; argument = one_argument( argument, arg ); if (arg[0] == '\0') { send_to_char("Syntax: goodiexp <stop/how many seconds 1-86400>\n\r",ch); return; } if (!str_cmp(arg,"stop")) { strcpy(buf,"{WGoodie Exp terminated."); sysmes(buf); dxpcount = 0; REMOVE_BIT( sysdata.world, WORLD_DOUBLEXP ); return; } if (!is_number(arg)) { send_to_char("Syntax: goodiexp <STOP/number of seconds>\n\r",ch); return; } if( argument[0] != '\0' ) { if ( !str_cmp(argument, "minutes" ) ) { max /= 60; strcpy( buf2, "minutes" ); } else if( !str_cmp( argument, "hours" ) ) { max /= 3600; strcpy( buf2, "hours" ); } } else strcpy( buf2, "seconds" ); if ( ( dxptime = atoi(arg) ) < 1 || dxptime > max ) { ch_printf(ch,"Please enter between 1 and %d %s.\n\r",max, buf2 ); return; } if( !str_cmp( buf2, "minutes" ) ) dxptime *= 60; else if( !str_cmp( buf2, "hours" ) ) dxptime *= 3600; dxpcount = ++dxptime * 4; SET_BIT( sysdata.world, WORLD_DOUBLEXP ); if( dxptime >= 8640 ) { sprintf( buf2, "%d day%s", dxptime / 8640, (dxptime % 8640) > 1 ? "s" : "" ); } else if( dxptime >= 3600 ) { sprintf( buf2, "%d hour%s", dxptime / 3600, (dxptime % 3600) > 1 ? "s" : "" ); } else if ( dxptime >= 60 ) { sprintf( buf2, "%d minute%s", dxptime / 60, (dxptime % 60) > 1 ? "s" : "" ); } else sprintf( buf2, "%d second%s", dxptime, (dxptime) > 1 ? "s" : "" ); sprintf( buf,"{WGoodie Exp activated [%s]", buf2); sysmes(buf); return; } void do_call( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; CHAR_DATA *victim = NULL; ROOM_INDEX_DATA *chroom; ROOM_INDEX_DATA *objroom; one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "What object do you wish to call?\n\r", ch ); return; } if (IS_NPC(ch)) {send_to_char("Not while switched.\n\r",ch); return;} if (!IS_HEAD(ch, LOST_HEAD)) { act("Your eyes flicker with yellow energy.",ch,NULL,NULL,TO_CHAR); act("$n's eyes flicker with yellow energy.",ch,NULL,NULL,TO_ROOM); } if (!str_cmp(arg,"all")) { call_all(ch); return; } if ( ( obj = get_obj_world( ch, arg ) ) == NULL ) { send_to_char( "Nothing like that in hell, earth, or heaven.\n\r", ch ); return; } if (obj->questowner == NULL || strlen(obj->questowner) < 2 || str_cmp(obj->questowner,ch->name) || obj->item_type == ITEM_PAGE || obj->item_type == ITEM_CORPSE_PC) { send_to_char( "Nothing happens.\n\r", ch ); return; } if (obj->carried_by != NULL && obj->carried_by != ch) { victim = obj->carried_by; if (!IS_NPC(victim) && victim->desc != NULL && victim->desc->connected != CON_PLAYING) return; act("$p suddenly vanishes from your hands!",victim,obj,NULL,TO_CHAR); act("$p suddenly vanishes from $n's hands!",victim,obj,NULL,TO_ROOM); obj_from_char(obj); } else if (obj->in_room != NULL) { chroom = ch->in_room; objroom = obj->in_room; char_from_room(ch); char_to_room(ch,objroom); act("$p vanishes from the ground!",ch,obj,NULL,TO_ROOM); if (chroom == objroom) act("$p vanishes from the ground!",ch,obj,NULL,TO_CHAR); char_from_room(ch); char_to_room(ch,chroom); obj_from_room(obj); } else if (obj->in_obj != NULL) obj_from_obj(obj); else { if (!IS_HEAD(ch, LOST_HEAD)) send_to_char( "Nothing happens.\n\r", ch ); return; } obj_to_char(obj,ch); if (IS_SET(obj->extra_flags,ITEM_SHADOWPLANE)) REMOVE_BIT(obj->extra_flags,ITEM_SHADOWPLANE); act("$p materializes in your hands.",ch,obj,NULL,TO_CHAR); act("$p materializes in $n's hands.",ch,obj,NULL,TO_ROOM); do_autosave(ch,""); if (victim != NULL) do_autosave(victim,""); return; } void call_all( CHAR_DATA *ch ) { OBJ_DATA *obj; OBJ_DATA *in_obj; CHAR_DATA *victim = NULL; DESCRIPTOR_DATA *d; ROOM_INDEX_DATA *chroom; ROOM_INDEX_DATA *objroom; bool found = FALSE; for ( obj = object_list; obj != NULL; obj = obj->next ) { if ( obj->questowner == NULL || strlen(obj->questowner) < 2 || str_cmp( ch->name, obj->questowner ) || obj->item_type == ITEM_PAGE || obj->item_type == ITEM_CORPSE_PC) continue; found = TRUE; for ( in_obj = obj; in_obj->in_obj != NULL; in_obj = in_obj->in_obj ) ; if (in_obj->carried_by != NULL) { if (in_obj->carried_by == ch) continue; } if (obj->carried_by != NULL) { if (obj->carried_by == ch || obj->carried_by->desc == NULL || obj->carried_by->desc->connected != CON_PLAYING) { if (!IS_NPC(obj->carried_by)) return; } act("$p suddenly vanishes from your hands!",obj->carried_by,obj,NULL,TO_CHAR); act("$p suddenly vanishes from $n's hands!",obj->carried_by,obj,NULL,TO_ROOM); SET_BIT(obj->carried_by->extra, EXTRA_CALL_ALL); obj_from_char(obj); } else if (obj->in_room != NULL) { chroom = ch->in_room; objroom = obj->in_room; char_from_room(ch); char_to_room(ch,objroom); act("$p vanishes from the ground!",ch,obj,NULL,TO_ROOM); if (chroom == objroom) act("$p vanishes from the ground!",ch,obj,NULL,TO_CHAR); char_from_room(ch); char_to_room(ch,chroom); obj_from_room(obj); } else if (obj->in_obj != NULL) obj_from_obj(obj); else continue; obj_to_char(obj,ch); if (IS_SET(obj->extra_flags,ITEM_SHADOWPLANE)) REMOVE_BIT(obj->extra_flags,ITEM_SHADOWPLANE); if (!IS_HEAD(ch, LOST_HEAD)) { act("$p materializes in your hands.",ch,obj,NULL,TO_CHAR); act("$p materializes in $n's hands.",ch,obj,NULL,TO_ROOM); } } if ( !found && !IS_HEAD(ch, LOST_HEAD) ) send_to_char( "Nothing happens.\n\r", ch ); for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( (victim = d->character) == NULL ) continue; if ( IS_NPC(victim) ) continue; if ( ch != victim && !IS_EXTRA(victim,EXTRA_CALL_ALL) ) continue; REMOVE_BIT(victim->extra, EXTRA_CALL_ALL); do_autosave(victim,""); } return; } void do_idlekick( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; CHAR_DATA *victim; /* if (!IS_SET(ch->flag2, AFF2_HELPER)) { send_to_char("You're not a part of the NH Team!\n\r",ch); return; }*/ one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Disconnect whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( victim->desc == NULL ) { act( "$N doesn't have a descriptor.", ch, NULL, victim, TO_CHAR ); return; } if (victim->timer <= 10) { send_to_char("They need to be atleast 11 seconds idle.\n\r",ch); return; } for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d == victim->desc ) { /* close_socket( d );*/ sprintf(buf,"%s has idlekicked %s!\n\r",ch->name,victim->name); do_info(ch,buf); do_quit(victim,""); send_to_char( "Ok.\n\r", ch ); return; } } bug( "Do_disconnect: desc not found.", 0 ); send_to_char( "Descriptor not found!\n\r", ch ); return; } void do_nuke( CHAR_DATA *ch, char *argument) { char strsave[MAX_INPUT_LENGTH]; CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Syntax:nuke <character name> \n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They are not logged on.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char( "This command only works on players.\n\r", ch); return; } if (IS_IMP(victim)) { return; } sprintf( strsave, "%s%s", PLAYER_DIR, capitalize( victim->name ) ); stop_fighting(victim,TRUE); /* sprintf( buf,"%s has been nuked by %s",victim->name,ch->name); do_info( ch,buf);*/ sprintf( buf,"#C%s#c flies down from the heavens.#n",ch->name); do_echo(ch,buf); sprintf( buf,"#C%s#c points a finger at #e%s#c.#n",ch->name,victim->name); do_echo(ch,buf); sprintf( buf,"#C%s#c says, #g'You've made one too many mistakes, #r%s#g!'#n",ch->name,victim->name); do_echo(ch,buf); sprintf( buf,"#cA #wb#el#wi#en#wd#ei#wn#eg #cblast of energy erupts from #C%s's#c fingertip and #rINCINERATES #C%s#n!", ch->name,victim->name); do_echo(ch,buf); sprintf( buf,"#cOnly a small puddle of #ggoo#c remains where #C%s#c was standing.#n",victim->name); do_echo(ch,buf); sprintf( buf,"#C%s #chas been vaped.#n",victim->name); do_echo(ch,buf); do_quit(victim,""); unlink(strsave); return; } void do_fire( CHAR_DATA *ch, char *argument) { char strsave[MAX_INPUT_LENGTH]; CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; one_argument( argument, arg ); if (!str_cmp(ch->name,"Tracker")) { send_to_char("Authorization accepted. Proceeding.\n\r",ch); } else { send_to_char("Only Tracker may use this.\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Syntax: fire <character name> \n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They are not logged on.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char( "This command only works on players.\n\r", ch); return; } /* if (IS_IMP(victim)) { return; }*/ sprintf( strsave, "%s%s", PLAYER_DIR, capitalize( victim->name ) ); stop_fighting(victim,TRUE); sprintf( buf,"%s has been fired by %s",victim->name,ch->name); do_info( ch,buf); do_quit(victim,""); unlink(strsave); return; } void do_chide( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if( ch->fight_timer > 0 ) { stc( "Not with a fight timer.\n\r", ch); return; } if ( IS_SET(ch->act, PLR_WIZINVIS ) ) { REMOVE_BIT( ch->act, PLR_WIZINVIS ); act( "$n appears in a flash of light.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You appear out of nowhere.\n\r", ch ); } else { act( "$n uses $s class skills to vanish.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You use your class skills to vanish.\n\r", ch ); SET_BIT( ch->act, PLR_WIZINVIS ); } return; } void do_whois ( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char sex[MAX_STRING_LENGTH]; char rep[MAX_STRING_LENGTH]; CHAR_DATA *victim; int hours; int pkRatio; argument = one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char("Whois whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char("They aren't here.\n\r", ch ); return; } if (IS_NPC(victim)) return; if ((victim->pkill + victim->pdeath) != 0) { pkRatio = (int)((float)victim->pkill/(float)(victim->pkill + victim->pdeath)*100); sprintf(rep, "%4d", pkRatio); } else { pkRatio = 100; sprintf(rep, "%4d", pkRatio); } if (IS_SET(victim->sex, SEX_MALE)) sprintf(sex,"Male"); else if (IS_SET(victim->sex, SEX_FEMALE)) sprintf(sex,"Female"); else sprintf(sex,"None"); hours = get_hours_played(victim); sprintf( buf, "{m _____________________________________________________{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m / \\{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{w Whois for{B %-15s{m |{x\n\r",victim->name); send_to_char( buf, ch ); sprintf( buf, "{m| |{x\n\r"); send_to_char( buf, ch ); if ( !IS_SET(victim->flag2, AFF2_ANONYMOUS ) ) { sprintf( buf, "{m|{C Stats {m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{r+++++++++++++++++++++++++++++++++++++++++++++++++++++++{m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{G Hitroll{D:{w %-5d {YDamroll{D:{w %-5d {RAC{D:{w %-5d {m|{x\n\r", char_hitroll( victim ), char_damroll( victim ), char_ac( victim ) ); send_to_char( buf, ch ); sprintf( buf, "{m|{C Str{D:{w %-2d {MInt{D:{w %-2d {RWis{D:{w %-2d {WDex{D:{w %-2d {bCon{D:{w %-2d {m|{x\n\r", get_curr_str(victim), get_curr_int(victim), get_curr_wis(victim), get_curr_dex(victim), get_curr_con(victim) ); send_to_char( buf, ch ); sprintf( buf, "{m| |{x\n\r"); } send_to_char( buf, ch ); sprintf( buf, "{m|{R PK Stuff {m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{r+++++++++++++++++++++++++++++++++++++++++++++++++++++++{m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{c Player kills{D:{w %-3d {yPlayer Deaths{D:{w %-3d {m|{x\n\r", IS_NPC( victim ) ? 0 : victim->pkill, IS_NPC( victim ) ? 0 : victim->pdeath); send_to_char( buf, ch ); sprintf( buf, "{m|{b Mob Deaths{D:{w %-3d {rMob Kills{D:{w %-6d{m |{x\n\r", IS_NPC( victim ) ? 0 : victim->mdeath, IS_NPC( victim ) ? 0 : victim->mkill ); send_to_char( buf, ch ); sprintf( buf, "{m|{B Status{D:{w %-3d {YPK Ratio{D:{w %-3s%% {m|{x\n\r", IS_NPC(victim) ? 0 : victim->race, IS_NPC(victim) ? 0 : rep); send_to_char( buf, ch ); sprintf( buf, "{m| |{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{Y Misc Stuff {m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{r+++++++++++++++++++++++++++++++++++++++++++++++++++++++{m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{G Sex{D:{w %-6s {WHours{D:{w %-4d {m|{x\n\r", IS_NPC(victim) ? 0 : sex, IS_NPC(victim) ? 0 : hours); send_to_char( buf, ch ); sprintf( buf, "{m|{R Total Quest Points{D:{w %-10d {m|{x\n\r", IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_QUEST] ); send_to_char( buf, ch ); sprintf( buf, "{m|{B Quests Completed{D:{w %-5d {m|{x\n\r", IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_NUM_QUEST] ); send_to_char( buf, ch ); sprintf( buf, "{m| |{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{R Kingdom Stuff {m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{r+++++++++++++++++++++++++++++++++++++++++++++++++++++++{m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{C Kingdom Rank{D:{w n\\a {m|{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m|{c Kingdom: %-4s {m|{x\n\r", king_table[victim->pcdata->kingdom].who_name); send_to_char( buf, ch ); sprintf( buf, "{m| |{x\n\r"); send_to_char( buf, ch ); sprintf( buf, "{m \\_____________________________________________________/{x\n\r"); send_to_char( buf, ch ); return; } void do_testwho( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char mort[MAX_STRING_LENGTH]; char avat[MAX_STRING_LENGTH]; char rep[MAX_STRING_LENGTH]; char a1[MSL]; char a2[MSL]; char a3[MSL]; char a4[MSL]; char a5[MSL]; char a6[MSL]; char a7[MSL]; char a0[MSL]; char immo[MAX_STRING_LENGTH]; char kav[MAX_STRING_LENGTH]; char bty[MAX_STRING_LENGTH]; char wizi[MAX_STRING_LENGTH]; char pkthing[MAX_STRING_LENGTH]; char namething[MAX_STRING_LENGTH]; /* char openb[5]; char closeb[5];*/ DESCRIPTOR_DATA *d; int iLevelLower; int iLevelUpper; int nNumber; int immMatch, nMatch; int mor, ava, imm; int pkRatio; /* Added by Rowan */ bool fClassRestrict; bool fImmortalOnly; if (IS_NPC(ch)) return; /* * Set default arguments. */ iLevelLower = 0; iLevelUpper = MAX_LEVEL +1; fClassRestrict = FALSE; fImmortalOnly = FALSE; /* * Parse arguments. */ nNumber = 0; for ( ;; ) { char arg[MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if ( arg[0] == '\0' ) break; if ( is_number( arg ) ) { send_to_char("Enter 'Avatar' for level 3's, or 'God' for level 4's and 5's.\n\r",ch); return; } else { /* * Look for classes to turn on. */ arg[3] = '\0'; if ( !str_cmp( arg, "imm" ) || !str_cmp( arg, "immortal" ) || !str_cmp( arg, "ava" ) || !str_cmp( arg, "avatar" ) ) { fClassRestrict = TRUE; } else if ( !str_cmp( arg, "god" ) || !str_cmp( arg, "imp" ) ) { fImmortalOnly = TRUE; } else { send_to_char("Enter 'Avatar' for level 3's, or 'God' for level 4's and 5's.\n\r",ch); return; } } } /* * Now show matching chars. */ immMatch = 0; nMatch = 0; buf[0] = '\0'; mort[0] = '\0'; avat[0] = '\0'; immo[0] = '\0'; a1[0] = '\0'; a2[0] = '\0'; a3[0] = '\0'; a4[0] = '\0'; a5[0] = '\0'; a6[0] = '\0'; a7[0] = '\0'; a0[0] = '\0'; mor = ava = imm = 0; for ( d = descriptor_list; d != NULL; d = d->next ) { CHAR_DATA *wch; char const *class; /* * Check for match against restrictions. * Don't use trust as that exposes trusted mortals. */ if ( d->connected != CON_PLAYING ) continue; nMatch++; if( !can_see( ch, d->character ) && (!IS_SET(ch->act,PLR_WATCHER)) ) continue; wch = ( d->original != NULL ) ? d->original : d->character; if ( wch->level < iLevelLower || wch->level > iLevelUpper || ( fImmortalOnly && wch->level < LEVEL_IMMORTAL ) || ( fClassRestrict && wch->level != LEVEL_HERO ) ) continue; /* * Figure out what to print for class. */ class = " "; switch ( wch->level ) { default: break; case MAX_LEVEL: class = "{R Implementor #n"; break; case MAX_LEVEL - 1: class = "{R HighJudge {x"; break; case MAX_LEVEL - 2: class = "{R Judge {x"; break; case MAX_LEVEL - 3: class = "{R Enforcer {x"; break; case MAX_LEVEL - 4: class = "{R QuestMaster {x"; break; case MAX_LEVEL - 5: class = "{R Helper {x"; break; case MAX_LEVEL - 6: case MAX_LEVEL - 7: case MAX_LEVEL - 8: case MAX_LEVEL - 9: class = status_level( buf, wch->race, wch->class ); break; case MAX_LEVEL - 10: class = "{RMortal {x"; break; case MAX_LEVEL - 11: class = "{RMortal {x"; break; case MAX_LEVEL - 12: class = "{RNewbie {x"; break; } /* * Format it up. */ /* if ( ch->class > 0 || IS_IMMORTAL( ch )) { if ( IS_CLASS(wch, CLASS_VAMPIRE)) sprintf( kav, "{rVampire{x"); else if ( IS_CLASS(wch, CLASS_MAGE) ) { char *mage_col; switch ( wch->pcdata->powers[MPOWER_RUNE0] ) { default: case PURPLE_MAGIC: mage_col = "{M"; break; case RED_MAGIC: mage_col = "{R"; break; case BLUE_MAGIC: mage_col = "{B"; break; case GREEN_MAGIC: mage_col = "{G"; break; case YELLOW_MAGIC: mage_col = "{Y";break; } switch ( PC(wch,stats[UNI_GEN]) ) { default: case WRL_NOVICE: sprintf( kav, "%sWarmage{x",mage_col); break; case WRL_ACOLYTE: sprintf( kav, "%sWarlock{x",mage_col); break; case WRL_MASTER: sprintf( kav, "%sRubicant{x", mage_col); break; } } else if ( IS_CLASS(wch, CLASS_ANGEL)) { sprintf( kav, "{WAngel{x"); } else if ( IS_CLASS(wch, CLASS_PRIEST)) { sprintf( kav, "{bPriest{x"); } else if ( IS_CLASS(wch, CLASS_MONK)) { sprintf( kav, "{cMonk{x"); } else if ( IS_CLASS(wch, CLASS_DEMON)) { sprintf( kav, "{RDemon{x"); } else if ( IS_CLASS(wch, CLASS_DROW)) { sprintf( kav, "{MDrow{x"); } else if ( IS_CLASS(wch, CLASS_WEREWOLF)) { sprintf( kav, "{yWerewolf{x"); } else if ( IS_CLASS(wch, CLASS_HIGHLANDER)) { sprintf( kav, "{CKensai{x"); } else if ( IS_CLASS(wch, CLASS_NINJA)) { sprintf( kav, "{mNinja{x"); } else if ( IS_CLASS(wch, CLASS_BARD)) { sprintf( kav, "{yBard{x"); } else { strcpy( kav, "{cHuman{x" ); } } else */ strcpy( kav, "" ); if (wch->pcdata->bounty > 0) sprintf( bty, "%d", wch->pcdata->bounty); else strcpy( bty, " "); /* * 1 - Newbie? * 2 - Kingdom * 3 - PkRange * 4 - Nosafe */ if ( wch->name == ch->name) sprintf(pkthing,"{Y({Yx{Y){x"); else if ( (( get_age(wch) - 17) * 2 ) < 2 ) sprintf(pkthing, "{c({Cn{c){x"); else if ( wch->pcdata->kingdom == ch->pcdata->kingdom && ch->pcdata->kingdom > 0 ) sprintf(pkthing, "{y({Yx{y){x" ); else if ( wch->race == 0 && ch->race == 0 ) sprintf(pkthing, "{r({Rx{r){x"); else if ( wch->race == 0 && ch->race > 0) sprintf(pkthing, "{c({Cx{c){x" ); else if ( wch->race +4 > ch->race ) sprintf(pkthing, "{r({Rx{r){x"); else sprintf(pkthing,"{b({Bx{b){x" ); if (wch->pcdata->wizinvis> 6) sprintf( wizi, "(%d)", wch->pcdata->wizinvis); else strcpy( wizi, ""); sprintf(namething,"{w%s%s{x",wch->name,wch->pcdata->title); if ((wch->pkill + wch->pdeath) != 0) { pkRatio = (int)((float)wch->pkill/(float)(wch->pkill + wch->pdeath)*100); sprintf(rep, "%4d#+", pkRatio); } else { pkRatio = 100; sprintf(rep, "%4d#+", pkRatio); } if ( wch->level > 6 ) { sprintf( immo + strlen(immo), "{D[{x%s{D]{D#!{w%-5s{D#$ {W%s %s{x\n\r", class, king_table[wch->pcdata->kingdom].who_name, wizi, wch->name); } else if ( wch->level > 2 && wch->level < 7 ) { sprintf( a0 + strlen(a0), "{D[{x%s{D][{m%-3d{D]{w%s{D#!{w%-5s{D#${x %s%-s{x\n\r", class, wch->pcdata->stats[LEVEL], pkthing, king_table[wch->pcdata->kingdom].who_name, IS_SET(wch->newbits, NEW_MUDCOP) ? "{R*{n" : " ", namething); ava++; } else { sprintf( mort + strlen(mort), "{D[%s{D]{D #!{w%-5s{D#${x{c %s{x\n\r", class, king_table[wch->pcdata->kingdom].who_name, wch->name); } } stc("\n\r",ch); send_to_char("{b--------------------------------------------------------------------------------\n\r",ch); sprintf( buf, " {bA{Bs{Wce{wns{Dion {wto {bD{Ba{Wrk{wne{Dss{x %37s\n\r", IS_SET(sysdata.world, WORLD_DOUBLEXP) ? goodie_time(dxpcount) : "" ); send_to_char( buf, ch ); send_to_char("{b--------------------------------------------------------------------------------\n\r", ch); if( immo[0] != '\0' ) { stc(immo,ch); stc(LINE_SEPERATOR, ch ); } if ( a0[0] != '\0' ) { stc(a0,ch); stc(LINE_SEPERATOR, ch ); } if ( mort[0] != '\0') { stc(mort,ch); stc(LINE_SEPERATOR, ch ); } send_to_char("{b--------------------------------------------------------------------------------\n\r", ch); sprintf( buf, "{W[{Y%2d{W] Players connected to Ascension to Darkness{x", nMatch ); centre_text( buf, ch ); if( ch->level > 2 ) centre_text( "{WType AVATAR to show info about the avatars connected.",ch ); send_to_char("{b--------------------------------------------------------------------------------\n\r", ch); return; } void set_entermsg( CHAR_DATA *ch, char *entermsg ) { char buf[MAX_STRING_LENGTH]; if ( IS_NPC(ch) ) { bug( "Set_entermsg: NPC.", 0 ); return; } if ( isalpha(entermsg[0]) || isdigit(entermsg[0]) ) { buf[0] = ' '; strcpy( buf+1, entermsg ); } else { strcpy( buf, entermsg ); } free_string( ch->pcdata->entermsg ); ch->pcdata->entermsg = str_dup( buf ); return; } void do_entermsg( CHAR_DATA *ch, char *argument ) { if ( IS_NPC(ch) ) return; if ( argument[0] == '\0' ) { if( PC(ch,entermsg) && PC(ch,entermsg[0]) != '\0' ) ch_printf( ch, "Your enter message reads:\n\r %s\n\r", PC(ch,entermsg) ); else do_help( ch, "enter" ); return; } if (ch->pcdata->stats[DEMON_CURRENT] < 2000) { send_to_char("This costs 2000 cps to use.\n\r",ch); return; } if ( col_str_len(argument) > 200 ) { argument[200] = ' '; argument[200] = '\0'; } smash_tilde( argument ); set_entermsg(ch, argument); send_to_char( "Ok.\n\rIf you've messed up, there will be -=no=- refunds.\n\r", ch ); ch->pcdata->stats[DEMON_CURRENT] -= 2000; } void set_exitmsg( CHAR_DATA *ch, char *exitmsg ) { char buf[MAX_STRING_LENGTH]; if ( IS_NPC(ch) ) { bug( "Set_exitmsg: NPC.", 0 ); return; } if ( isalpha(exitmsg[0]) || isdigit(exitmsg[0]) ) { buf[0] = ' '; strcpy( buf+1, exitmsg ); } else { strcpy( buf, exitmsg ); } free_string( ch->pcdata->exitmsg ); ch->pcdata->exitmsg = str_dup( buf ); return; } void do_exitmsg( CHAR_DATA *ch, char *argument ) { /* int i;*/ if ( IS_NPC(ch) ) return; if ( argument[0] == '\0' ) { if( PC(ch,exitmsg) && PC(ch,exitmsg[0]) != '\0') ch_printf( ch, "Your exit message reads:\n\r %s\n\r", PC(ch,exitmsg) ); else do_help( ch, "exit" ); return; } if (ch->pcdata->stats[DEMON_CURRENT] < 2000) { send_to_char("This costs 2000 cps to use.\n\r",ch); return; } if ( col_str_len(argument) > 150 ) { argument[150] = ' '; argument[150] = '\0'; } smash_tilde( argument ); set_exitmsg(ch, argument); send_to_char( "Ok.\n\rIf you've messed up, there will be -=no=- refunds.\n\r", ch ); ch->pcdata->stats[DEMON_CURRENT] -= 2000; } void do_donate( CHAR_DATA *ch, char *argument) { OBJ_DATA *pit; OBJ_DATA *obj; ROOM_INDEX_DATA *original, *pitroom; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int ddp; int amount; int fail; argument = one_argument(argument, arg); if (arg[0] == '\0' ) { send_to_char("Donate what?\n\r",ch); return; } if (ch->position == POS_FIGHTING) { send_to_char(" You're {Yfighting!{x\n\r",ch); return; } /* gotta be in your inventory */ /* if ( (obj = get_obj_carry (ch, arg, ch)) == NULL) { send_to_char("You do not have that!\n\r",ch); return; }*/ if ( ( obj = get_obj_carry( ch, arg ) ) == NULL ) { send_to_char( "You do not have that item.\n\r", ch ); return; } if (!can_drop_obj(ch, obj) && ch->level < LEVEL_IMMORTAL) { send_to_char("Its stuck to you.\n\r",ch); return; } /* no donating corpses */ if ((obj->item_type == ITEM_CORPSE_NPC) || (obj->item_type == ITEM_CORPSE_PC)) { send_to_char("You cannot donate that!\n\r",ch); return; } /* anything with ROT_DEATH is not worth the effort */ if (obj->timer > 0) { send_to_char("You cannot donate that.\n\r",ch); return; } /* make sure the room is there */ if ((pitroom = get_room_index(ROOM_VNUM_ALTAR)) == NULL) { send_to_char("No Pit Room, report to immortal.\n\r", ch ); return; } /* kinda dumb to donte in to your pit WHEN your in the same room! */ if (ch->in_room == pitroom) { send_to_char("Just put it in there!\n\r", ch ); return; } if (obj->cost == 0) { send_to_char("You cannot donate that item anymore.\n\r",ch); return; } if ( obj->questowner != NULL && strlen(obj->questowner) > 1 ) { send_to_char("You cannot donate claimed items.\n\r",ch); return; } fail = number_range(0,5); if (fail == 5) { send_to_char("Your donate failed! Object has been removed.\n\r.",ch); obj_from_char(obj); return; } original = ch->in_room; char_from_room(ch); char_to_room(ch,pitroom); if ((pit = get_obj_list(ch, "pit", ch->in_room->contents)) == NULL) { send_to_char("Sorry, the pit isnt available, inform an imm immediately.\n\r", ch ); char_from_room(ch); char_to_room(ch,original); return; } obj_from_char(obj); obj_to_obj(obj, pit); char_from_room(ch); char_to_room(ch,original); act("{w$n donates {Y$p{x.",ch,obj,NULL,TO_ROOM); act("{wYou donate {Y$p{x.",ch,obj,NULL,TO_CHAR); if ((!IS_OBJ_STAT(obj ,ITEM_ANTI_EVIL) && IS_EVIL(ch)) || (!IS_OBJ_STAT(obj ,ITEM_ANTI_GOOD) && IS_GOOD(ch)) || IS_NEUTRAL(ch)) if (obj->cost > 0 && obj->level > 0) { amount = UMAX(1, obj->cost/5); ddp = number_range(0,10); obj->cost = 0; sprintf( buf, "{wYou receive{B %d {Gcps{w for your donation.{x\n\r",ddp); send_to_char(buf,ch); ch->pcdata->stats[DEMON_CURRENT] += ddp; } save_char_obj(ch); return; } /* * Put different max's in here for class's */ bool check_wpn_mastery ( CHAR_DATA *ch ) { if ( IS_CLASS(ch,CLASS_MONK ) ) { if ( ch->wpn[0] < 700 ) return FALSE; if( ch->wpn[1] < 200 || ch->wpn[2] < 200 || ch->wpn[3] < 200 || ch->wpn[4] < 200 || ch->wpn[5] < 200 || ch->wpn[6] < 200 || ch->wpn[7] < 200 || ch->wpn[8] < 200 || ch->wpn[9] < 200 || ch->wpn[10] < 200 || ch->wpn[11] < 200 || ch->wpn[12] < 200) return FALSE; return TRUE; } if ( ch->wpn[0] < 500 || ch->wpn[1] < 500 || ch->wpn[2] < 500 || ch->wpn[3] < 500 || ch->wpn[4] < 500 || ch->wpn[5] < 500 || ch->wpn[6] < 500 || ch->wpn[7] < 500 || ch->wpn[8] < 500 || ch->wpn[9] < 500 || ch->wpn[10] < 500 || ch->wpn[11] < 500 || ch->wpn[12] < 500) return FALSE; return TRUE; } void do_mastery( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum = 0; if (IS_SET(ch->newbits, NEW_MASTERY)) { send_to_char("You've already made a mastery! MORON!\n\r",ch); return; } if (ch->pcdata->stats[DEMON_CURRENT] < 500000) { send_to_char("Mastery's cost 500k cps.\n\r",ch); return; } if( !check_wpn_mastery( ch ) ) { send_to_char("You need to max all your weapons first.\n\r",ch); return; } if ((ch->spl[0] < 200) || (ch->spl[1] < 200) || (ch->spl[2] < 200) || (ch->spl[3] < 200) || (ch->spl[4] < 200)) { send_to_char("You need to max all your spells first.\n\r",ch); return; } if ((ch->stance[1] < 200) || (ch->stance[2] < 200) || (ch->stance[3] < 200) || (ch->stance[4] < 200) || (ch->stance[5] < 200) || (ch->stance[6] < 200) || (ch->stance[7] < 200) || (ch->stance[8] < 200) || (ch->stance[9] < 200)) { send_to_char("You need to max all your stances first.\n\r",ch); return; } if (ch->pcdata->quest < 1000) { send_to_char("You need 1000 quest points.\n\r",ch); return; } if (IS_CLASS(ch, CLASS_DEMON)) { vnum = 4; } else if (IS_CLASS(ch, CLASS_WEREWOLF)) { vnum = 5; } else if (IS_CLASS(ch, CLASS_VAMPIRE)) { vnum = 6; } else if (IS_CLASS(ch, CLASS_DROW)) { vnum = 7; } else if (IS_CLASS(ch, CLASS_NINJA)) { vnum = 8; } else if (IS_CLASS(ch, CLASS_ANGEL)) { vnum = 9; } else if (IS_CLASS(ch, CLASS_MAGE)) { vnum = 17; } else if (IS_CLASS(ch, CLASS_PRIEST)) { vnum = 18; } else if (IS_CLASS(ch, CLASS_MONK)) { vnum = 19; } else { send_to_char("Would help if you were classed.\n\r", ch ); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Tracker.\n\r",ch); return; } obj = create_object(pObjIndex, 50); obj_to_char(obj, ch); act("$p appears in your hands.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM); ch->pcdata->stats[DEMON_CURRENT] -= 500000; ch->pcdata->quest -= 1000; do_save(ch,""); SET_BIT(ch->newbits, NEW_MASTERY); SET_BIT(obj->quest, QUEST_MASTERY); return; } void do_linkdead(CHAR_DATA *ch, char *argument) { CHAR_DATA *gch; char buf[MAX_STRING_LENGTH]; bool found = FALSE; sprintf(buf, "{c+{C={w-{D<{w L i n k - D e a d P e o p l e {D>{w-{C={c+{x\n\r"); send_to_char(buf,ch); for (gch = char_list; gch != NULL; gch = gch->next) { if (IS_NPC(gch) || gch->desc) continue; found = TRUE; sprintf(buf, "Name: %12s. (Room: %5d)\n\r", gch->name, gch->in_room == NULL ? : gch->in_room->vnum); send_to_char(buf,ch); } if(!found) send_to_char("No Linkdead Players found\n\r",ch); return; } void do_flower( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; CHAR_DATA *victim; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum = 0; one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Send a Flower to whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (ch->pcdata->stats[DEMON_CURRENT] < 100) { send_to_char("It costs 100 cps to send a flower to someone.\n\r", ch); return; } if (IS_NPC(ch)) return; if (IS_NPC(victim)) return; send_to_char("{x{x\n\r",victim); send_to_char("{R .{x\n\r",victim); send_to_char("{R ... :````'.':{x\n\r",victim); send_to_char("{R : ```````````'' :''::'{x\n\r",victim); send_to_char("{R ..:.. : .'' :{x\n\r",victim); send_to_char("{R ````' ``: .' :{x\n\r",victim); send_to_char("{R : : : :{x\n\r",victim); send_to_char("{R : : : :{x\n\r",victim); send_to_char("{R : : : :{x\n\r",victim); send_to_char("{R : : :{G..''''````::. {YA Special Gift From{x\n\r",victim); sprintf(buf,"{R : {G...:..' .'' {R %s{x\n\r",ch->name); send_to_char(buf,victim); send_to_char("{G .' .' .::::'{x\n\r",victim); send_to_char("{G :..'''````:::::::{x\n\r",victim); send_to_char("{G ``::::{x\n\r",victim); send_to_char("{G ``::.{x\n\r",victim); send_to_char("{G ``::{x\n\r",victim); send_to_char("{G :::.{x\n\r",victim); send_to_char("{G ..:.:.::'``' ::'``' . : : .{x\n\r",victim); send_to_char("{G ..' ``:.: :: :' .:{x\n\r",victim); send_to_char("{G .: .:````::: : .: ::{x\n\r",victim); send_to_char("{G .: ..'' :::.' :': :{x\n\r",victim); send_to_char("{G : .'' .:: : : '{x\n\r",victim); send_to_char("{G : .'``::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("{G ::{x\n\r",victim); send_to_char("Your flower has been sent.\n\r",ch); ch->pcdata->stats[DEMON_CURRENT] -= 100; vnum = 3055; if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Tracker.\n\r",ch); return; } sprintf(buf3,"%s", ch->name); obj = create_object(pObjIndex, 50); sprintf(buf,"{wA {RR{re{Dd {RR{ro{Rs{re{w sent by{Y %s{x", buf3); sprintf(buf2,"red rose"); free_string( obj->short_descr ); obj->short_descr = str_dup( buf ); free_string( obj->name ); obj->name = str_dup( buf2 ); obj->cost = 0; obj_to_char(obj, victim); act("$p appears in your hands.",victim,obj,NULL,TO_CHAR); act("$p appears in $n's hands.",victim,obj,NULL,TO_ROOM); return; } void do_newwho( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char mort[MAX_STRING_LENGTH]; char avat[MAX_STRING_LENGTH]; char a1[MSL]; char a2[MSL]; char a3[MSL]; char a4[MSL]; char a5[MSL]; char a6[MSL]; char a7[MSL]; char a0[MSL]; char immo[MAX_STRING_LENGTH]; char kav[MAX_STRING_LENGTH]; char bty[MAX_STRING_LENGTH]; char wizi[MAX_STRING_LENGTH]; char namething[MAX_STRING_LENGTH]; char kingthing[MAX_STRING_LENGTH]; char pkthing[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; int iLevelLower; int iLevelUpper; int nNumber; int immMatch, nMatch; int mor, ava, imm; bool fClassRestrict; bool fImmortalOnly; if (IS_NPC(ch)) return; /* * Set default arguments. */ iLevelLower = 0; iLevelUpper = MAX_LEVEL +1; fClassRestrict = FALSE; fImmortalOnly = FALSE; /* * Parse arguments. */ nNumber = 0; for ( ;; ) { char arg[MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if ( arg[0] == '\0' ) break; if ( is_number( arg ) ) { send_to_char("Enter 'Avatar' for level 3's, or 'God' for level 4's and 5's.\n\r",ch); return; } else { /* * Look for classes to turn on. */ arg[3] = '\0'; if ( !str_cmp( arg, "imm" ) || !str_cmp( arg, "immortal" ) || !str_cmp( arg, "ava" ) || !str_cmp( arg, "avatar" ) ) { fClassRestrict = TRUE; } else if ( !str_cmp( arg, "god" ) || !str_cmp( arg, "imp" ) ) { fImmortalOnly = TRUE; } else { send_to_char("Enter 'Avatar' for level 3's, or 'God' for level 4's and 5's.\n\r",ch); return; } } } /* * Now show matching chars. */ immMatch = 0; nMatch = 0; buf[0] = '\0'; mort[0] = '\0'; avat[0] = '\0'; immo[0] = '\0'; a1[0] = '\0'; a2[0] = '\0'; a3[0] = '\0'; a4[0] = '\0'; a5[0] = '\0'; a6[0] = '\0'; a7[0] = '\0'; a0[0] = '\0'; mor = ava = imm = 0; for ( d = descriptor_list; d != NULL; d = d->next ) { CHAR_DATA *wch; char const *class; /* * Check for match against restrictions. * Don't use trust as that exposes trusted mortals. */ if ( d->connected != CON_PLAYING ) continue; nMatch++; if( !can_see( ch, d->character ) && (!IS_SET(ch->act,PLR_WATCHER)) ) continue; wch = ( d->original != NULL ) ? d->original : d->character; if ( wch->level < iLevelLower || wch->level > iLevelUpper || ( fImmortalOnly && wch->level < LEVEL_IMMORTAL ) || ( fClassRestrict && wch->level != LEVEL_HERO ) ) continue; /* * Figure out what to print for class. */ class = " "; switch ( wch->level ) { default: break; case MAX_LEVEL: class = "{mImplementor"; break; case MAX_LEVEL - 1: class = "{mHighJudge"; break; case MAX_LEVEL - 2: class = "{mJudge"; break; case MAX_LEVEL - 3: class = "{mEnforcer"; break; case MAX_LEVEL - 4: class = "{mQuestMaster"; break; case MAX_LEVEL - 5: class = "{mHelper"; break; case MAX_LEVEL - 6: case MAX_LEVEL - 7: case MAX_LEVEL - 8: case MAX_LEVEL - 9: class = status_level3( buf, wch->race, wch->class ); break; case MAX_LEVEL - 10: class = "{mMortal"; break; case MAX_LEVEL - 11: class = "{mMortal"; break; case MAX_LEVEL - 12: class = "{mNewbie"; break; } /* * Format it up. */ strcpy( kav, "" ); if (wch->pcdata->bounty > 0) sprintf( bty, "%d", wch->pcdata->bounty); else strcpy( bty, " "); /* * 1 - Newbie? * 2 - Kingdom * 3 - PkRange * 4 - Nosafe */ if ( wch->name == ch->name) sprintf(pkthing,"{wx{x"); else if ( (( get_age(wch) - 17) * 2 ) < 2 ) sprintf(pkthing, "{wn{x"); else if ( wch->pcdata->kingdom == ch->pcdata->kingdom && ch->pcdata->kingdom > 0 ) sprintf(pkthing, "{yx{x" ); else if ( wch->race == 0 && ch->race == 0 ) sprintf(pkthing, "{rx{x"); else if ( wch->race == 0 && ch->race > 0) sprintf(pkthing, "{cx{x" ); else if ( wch->race +4 > ch->race ) sprintf(pkthing, "{rx{x"); else sprintf(pkthing,"{bx{x" ); if (wch->pcdata->wizinvis> 6) sprintf( wizi, "(%d)", wch->pcdata->wizinvis); else strcpy( wizi, ""); sprintf(namething,"{g%s%s %s{w", IS_SET(wch->newbits, NEW_MUDCOP) ? "{R*{x" : "{D {x",wch->name,wch->prefix); if (wch->pcdata->kingdom == 0) { sprintf(kingthing,"%s",class); } else { sprintf(kingthing,"%-14s {gof {y%-5s{x",class,king_table[wch->pcdata->kingdom].name); } if ( wch->level > 6 ) { sprintf( immo + strlen(immo), "{g %35s {D%s {x%s{x\n\r", namething, pkthing, kingthing ); } else if ( wch->level > 2 && wch->level < 7 ) { sprintf( a0 + strlen(a0), "{g %35s {D%s {x%s{x\n\r", namething, pkthing, kingthing ); ava++; } else { sprintf( mort + strlen(mort), "{g %35s {D%s {w%s\n\r", wch->name, pkthing, kingthing ); } } stc("\n\r",ch); sprintf( buf, " {bA{Bs{Wce{wns{Dion {wto {bD{Ba{Wrk{wne{Dss{x %37s\n\r\n\r", IS_SET(sysdata.world, WORLD_DOUBLEXP) ? goodie_time(dxpcount) : "" ); send_to_char( buf, ch ); if( immo[0] != '\0' ) { stc(immo,ch); } if ( a0[0] != '\0' ) { stc(a0,ch); } if ( mort[0] != '\0') { stc(mort,ch); } sprintf( buf, "\n\r{w There are {Y%2d {wplayers connected to AtD{x\n\r", nMatch ); send_to_char(buf,ch); return; }