/************************************************************** * Myth Mud improvements ALL by David Spink aka Morglum. * * This mud is NOT to be copied in whole or in part! No one * * has the permission to authorise the use of this code. * * In order to use this code you MUST comply with the terms * * and conditions in 'license.myth' (as shipped). * **************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void npack( CHAR_DATA *ch, char *argument ); DO_COM( do_leave ) { char arg[MIL]; char buf[MSL]; if ( IS_NPC( ch ) ) return; argument = one_argument( argument, arg ); if ( ch->class != CLASS_VAMPIRE && ch->class != CLASS_WEREWOLF && ch->class != CLASS_DEMON ) { send_to_char("Huh?\n\r", ch ); return; } if ( strlen( ch->clan ) < 3 ) { if ( IS_WEREWOLF( ch ) ) send_to_char( "You need to be in a Tribe, before you can leave one.\n\r", ch ); else send_to_char( "You need to be in a Clan, before you can leave one.\n\r", ch ); return; } if ( ch->vampgen <= 2 ) { send_to_char( "No that would be silly!\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Syntax: leave [password]\n\r", ch ); return; } if ( strcmp( crypt( arg, ch->pcdata->pwd ), ch->pcdata->pwd ) ) { send_to_char( "Wrong Password, wait 10 seconds.\n\r", ch ); WAIT_STATE( ch, 40 ); return; } sprintf( buf, "You become a %s!\n\r", IS_WEREWOLF( ch ) ? "Orphan" : "Caitiff" ); send_to_char( buf, ch ); sprintf( buf, "%s has become a %s.", ch->name, IS_WEREWOLF( ch ) ? "Orphan" : "Caitiff" ); class_info( buf, ch ); FILL_STRING( ch->clan, "" ); REMOVE_BIT( ch->extra, EXTRA_SIRE ); REMOVE_BIT( ch->extra, EXTRA_PRINCE ); return; } void class_info( char *argument, CHAR_DATA *ch ) { DESCRIPTOR_DATA *d; CHAR_DATA *vch; if ( IS_NPC( ch ) ) return; if ( argument[0] == '\0' ) return; if ( ch->class < 1 ) return; for ( d = descriptor_list ; d != NULL ; d = d->next ) { if ( d->connected > CON_PLAYING ) continue; if ( d->connected < CON_PLAYING ) continue; if ( ( vch = d->character ) == NULL ) continue; if ( IS_SET( vch->deaf, CHANNEL_INFO ) ) continue; if ( vch->class < 1 ) continue; if ( vch->class != ch->class && !IS_IMMORTAL( vch ) ) continue; send_to_char( "#wCLASS-INFO > #r", vch ); send_to_char( argument, vch ); send_to_char( "\n\r", vch ); } return; } DO_COM( do_anarch ) { char buf[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) return; if ( ch->class != CLASS_VAMPIRE ) { send_to_char("Huh?\n\r", ch ); return; } if ( ch->vampgen <= 2 ) { send_to_char( "No that would be silly!\n\r", ch ); return; } if ( strlen( ch->clan ) > 0 ) { send_to_char( "But you are in a clan.\n\r", ch ); return; } if ( !IS_MORE( ch, MORE_OUTCAST ) ) { SET_BIT( ch->more, MORE_OUTCAST ); send_to_char( "You become an anarch.\n\r", ch ); sprintf( buf, "%s has become an Anarch!", capitalize( ch->name ) ); class_info( buf, ch ); } else { REMOVE_BIT( ch->more, MORE_OUTCAST ); send_to_char( "You are no longer an anarch.\n\r", ch ); sprintf( buf, "%s is no longer an Anarch!", capitalize( ch->name ) ); class_info( buf, ch ); } WAIT_STATE( ch, 20 ); return; } DO_COM( do_ronin ) { char buf[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) return; if ( ch->class != CLASS_WEREWOLF ) { send_to_char("Huh?\n\r", ch ); return; } if ( ch->vampgen <= 2 ) { send_to_char( "No that would be silly!\n\r", ch ); return; } if ( strlen( ch->clan ) > 0 ) { send_to_char( "But you are in a tribe.\n\r", ch ); return; } if ( !IS_MORE( ch, MORE_OUTCAST ) ) { SET_BIT( ch->more, MORE_OUTCAST ); send_to_char( "You become a ronin.\n\r", ch ); sprintf( buf, "%s has become a Ronin!", capitalize( ch->name ) ); class_info( buf, ch ); } else { REMOVE_BIT( ch->more, MORE_OUTCAST ); send_to_char( "You are no longer a ronin.\n\r", ch ); sprintf( buf, "%s is no longer a Ronin!", capitalize( ch->name ) ); class_info( buf, ch ); } WAIT_STATE( ch, 20 ); return; } void do_afk( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; if ( IS_NPC(ch) ) return; if (ch->position == POS_FIGHTING) { send_to_char("No way! You are still fighting!\n\r",ch); return; } if (IS_SET(ch->extra, EXTRA_AFK)) { send_to_char( "You are no longer AFK.\n\r", ch ); sprintf(buf,"#w%s #ris no longer AFK!#n",ch->name); do_info(ch,buf); REMOVE_BIT(ch->extra,EXTRA_AFK); return; } else if (!IS_SET(ch->extra,EXTRA_AFK)) { send_to_char( "You are now AFK.\n\r", ch ); sprintf(buf,"#w%s#r is now AFK!#n",ch->name); do_info(ch,buf); SET_BIT(ch->extra,EXTRA_AFK); WAIT_STATE(ch, 25); return; } else return; } void do_newbiepack( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; if (IS_EXTRA(ch,EXTRA_NEWBIEPACK)) { send_to_char("But you've already made your newbie pack!\n\r",ch); return; } npack(ch, "pack"); npack(ch, "plate"); npack(ch, "helmet"); npack(ch, "sleeves"); npack(ch, "leggings"); npack(ch, "gloves"); npack(ch, "boots"); npack(ch, "bracer"); npack(ch, "bracer"); npack(ch, "sword"); npack(ch, "dagger"); npack(ch, "ring"); npack(ch, "ring"); npack(ch, "collar"); npack(ch, "collar"); npack(ch, "lantern"); npack(ch, "mask"); npack(ch, "girth"); do_wear(ch, "sword"); do_wear(ch, "dagger"); sprintf(buf,"all"); do_wear(ch, buf); sprintf(buf,"all pack"); do_put(ch,buf); SET_BIT(ch->extra,EXTRA_NEWBIEPACK); return; } void npack( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!str_cmp(arg, "pack" )) vnum = 2335; else if (!str_cmp(arg, "plate" )) vnum = 253; else if (!str_cmp(arg, "helmet" )) vnum = 252; else if (!str_cmp( arg,"sleeves" )) vnum = 255; else if (!str_cmp( arg,"leggings" )) vnum = 254; else if (!str_cmp( arg,"gloves" )) vnum = 256; else if (!str_cmp( arg,"boots" )) vnum = 257; else if (!str_cmp( arg,"bracer" )) vnum = 258; else if (!str_cmp( arg,"sword" )) vnum = 250; else if (!str_cmp( arg,"dagger" )) vnum = 251; else if (!str_cmp( arg,"ring" )) vnum = 259; else if (!str_cmp( arg,"collar" )) vnum = 261; else if (!str_cmp( arg,"lantern" )) vnum = 260; else if (!str_cmp( arg,"mask" )) vnum = 2622; else if (!str_cmp( arg,"girth" )) vnum = 2204; if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object Please inform Morglum.\n\r",ch); return; } obj = create_object(pObjIndex, 50); obj_to_char(obj, ch); return; } DO_COM( do_rolldirt ) { CHAR_DATA *vch; bool set_fire = FALSE; if ( !IS_AFFECTED( ch, AFF_FLAMING ) ) { send_to_char("You are not on fire.\n\r", ch ); return; } act("$n rolls about in the dirt.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You roll about in the dirt.\n\r", ch ); if ( IS_AFFECTED( ch, AFF_FLAMING ) && number_percent() > 80 && ch->in_room != NULL ) { set_fire = TRUE; for ( vch = ch->in_room->people ; vch != NULL ; vch = vch->next_in_room ) { if ( number_percent() < 65 ) continue; if ( !IS_HERO( vch ) ) continue; if ( IS_IMMORTAL( vch ) ) continue; if ( IS_AFFECTED( vch, AFF_FLAMING ) ) continue; act( "A spark leaps from $n's body and sets you on fire!",ch,NULL,vch,TO_VICT); act( "A spark leaps from your body and sets $N on fire!",ch,NULL,vch,TO_CHAR); act( "A sprak leaps from $n's body and sets $N on fire!",ch,NULL,vch,TO_NOTVICT); SET_BIT( vch->affected_by, AFF_FLAMING ); if ( IS_MORE( ch, MORE_FLAMES ) ) SET_BIT( vch->more, MORE_FLAMES ); } } if ( set_fire ) return; if ( number_percent() < 25 ) { send_to_char("The flames around your body die out.\n\r", ch ); act("The flames around $n's body die out.",ch,NULL,NULL,TO_ROOM); REMOVE_BIT(ch->affected_by, AFF_FLAMING); REMOVE_BIT(ch->more, MORE_FLAMES); } return; } void do_clearpks(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (ch->in_room->vnum != 3054) { send_to_char("Please step into the Temple Altar to clear your records.\r\n", ch); return; } send_to_char("Done\r\n", ch); ch->pkill = 0; ch->pdeath = 0; ch->race = 0; } void do_bounty(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char buf [MAX_STRING_LENGTH]; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if (arg1[0] =='\0' || arg2[0] == '\0') { send_to_char("Place what bounty on who's head?\n\rSyntax: Bounty <victim> <amount>\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg1 ) ) == NULL) { send_to_char( "They are currently not logged in!", ch ); return; } if (ch == victim) { send_to_char( "You cannot place bounties on yourself!\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char( "You cannot put a bounty on NPCs!\n\r", ch); return; } if (!IS_HERO(victim)) { send_to_char( "You cannot place bounties on mortals!\n\r", ch); return; } if (IS_IMMORTAL(victim)) { send_to_char( "You cannot place bounties on gods!\n\r", ch); return; } if ( is_number( arg2 ) ) { int amount; amount = atoi(arg2); if (amount == 0) amount = 1; if (amount < 50) { send_to_char( "You have to put at least 50 questpoints as the bounty.\n\r", ch); return; } if (ch->pcdata->quest < amount) { send_to_char( "You don't have that many questpoints!\n\r", ch); return; } ch->pcdata->quest -= amount; victim->pcdata->bounty += amount; sprintf( buf, "You have placed a %d qp bounty on %s.\n\r", amount, victim->name); send_to_char(buf,ch); sprintf(buf, "%s is now worth a %d qp bounty.", victim->name,victim->pcdata->bounty ); do_info(ch,buf); return; } send_to_char("The amount has to be a number\n\rSyntax: Bounty <victim> <value>.\n\r", ch); return; } void do_apply ( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) send_to_char("Only Players can be Quest Trusted.\n\r",ch); if ( arg1[0] == '\0' ) { send_to_char( "Usage: APPLY QUEST\n\r", ch ); return; } if (!str_cmp( arg1, "quest" )) { if (IS_EXTRA(ch, EXTRA_TRUSTED)) { send_to_char("You are already Quest Trusted\n\r",ch); return; } send_to_char("Your application for Questing Trust has been recieved\n\r",ch); send_to_char("and is being processed.....\n\r\n\r",ch); if ( ( ch->pcdata->score[SCORE_NUM_QUEST] >= 10) && (ch->pcdata->score[SCORE_QUEST] >= 500)) { send_to_char("You have been blessed with Questing Trust.\n\r",ch); SET_BIT(ch->extra, EXTRA_TRUSTED); return; } else { send_to_char("Your Application has been Denied!\n\r",ch); send_to_char("You need to complete 10 quests,\n\r",ch); send_to_char("Must have 500 qp on hand.\n\r",ch); return; } } } void do_selfrestore( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (ch->in_room == NULL || ch->in_room->vnum != 3054) { send_to_char("You can only get a restore at the Temple Altar of Midgaard.\n\r",ch); return; } if ( ch->exp < 20000) { send_to_char("You need 20,000 xp to restore self.\n\r", ch); return; } ch->exp -= 20000; do_restore(ch,"self"); send_to_char("God answers you, you are restored.\n\r",ch); return; }